Question concerning the Igor Text Wave loader
Toms
Dear users,
I am a physicist and I have some problems with the import of Igor Text Wave. In the past I used a program that exported my data in .pxt. In these files I had useful information in the note section. Now my new software exports my data in .itx files but I have no more information after loading. In the header of the .itx files this information is present but it is commented (see attachment). Is it possible to read this information and reposition it in note?
thank you in advance
Th.
IGOR
X //Created Date (UTC): 2021-Mar-05 13:31:06.073336
X //IGOR Text File Exporter Version: 0.3
X //Acquisition Parameters:
X //Scan Mode = Fixed Analyzer Transmission
X //User Comment = Toms
X //Created Date (UTC): 2021-Mar-05 13:31:06.073336
X //IGOR Text File Exporter Version: 0.3
X //Acquisition Parameters:
X //Scan Mode = Fixed Analyzer Transmission
X //User Comment = Toms
In order for this information to be added to a wave note, the comments would need to be changed to Note commands, for example:
X Note/K wave0, "Created Date (UTC): 2021-Mar-05 13:31:06.073336"
X Note wave0, "IGOR Text File Exporter Version: 0.3"
So whatever software is writing the .itx file would need to be changed.
If the note is not associated with a particular wave, it might be stored in a global string variable, like this:
X String/G gFileNote = "Created Date (UTC): 2021-Mar-05 13:31:06.073336"
X gFileNote += "\rIGOR Text File Exporter Version: 0.3"
February 1, 2022 at 09:05 am - Permalink
Damn my fears are confirmed. I don't have access to the software that exports my data... The developers are not necessarily the users -^-^-
Anyway, thanks for the reactivity
February 1, 2022 at 09:31 am - Permalink
Hmm... I don't know how this looks in the file, but if the information is there it should be possible to load it in some way, e.g., by FReadLine or FBinRead. Could you post an example file and a description what you want to do with the info (e.g., assign it to a wave etc.)?
February 1, 2022 at 11:47 am - Permalink
The information is just a note to remember the parameters of the experiment. So I want to store them in the note section of the 3D wave generated by the software. I attach the complete structure of my .itx files.
X //Created Date (UTC): 2020-Sep-11 10:33:42.962290
X //IGOR Text File Exporter Version: 0.3
X //Created by: SpecsLab Prodigy, Version 4.53.2-r80814
X //Acquisition Parameters:
X //Scan Mode = Fixed Analyzer Transmission
X //User Comment = Toms
X //Analysis Mode = UPS
X //Lens Mode = WideAngleMode
X //Lens Voltage = 400V
X //Analyzer Slits = 2:0.8x30c\B:open
X //Number of Scans = 1
X //Number of Samples = 351
X //Scan Step = 0.01
X //DwellTime = 0.1
X //Excitation Energy = 21.2182
X //Kinetic Energy = 17.9
X //Binding Energy = 3.3182
X //Pass Energy = 15
X //Retarding Ratio = 0.897453
X //Bias Voltage = 0
X //Detector Voltage = 1500
X //WorkFunction = 4.4382
WAVES/O/S/N=(1040,351,11) '1_Spectrum'
BEGIN
2533.42 2519.3 2490.56 2527.84 2489.68 2408.12 2410.97 2410.63 ..........
END
X SetScale/I x, -14, 14, "Non-Energy Channel [deg]", '1_Spectrum'
X SetScale/I y, 17.9, 21.4, "Kinetic Energy [eV]", '1_Spectrum'
X SetScale/I z, -4, 6, "polar [deg]", '1_Spectrum'
X SetScale/I d, -4, 6, "cps (Intensity)", '1_Spectrum'
February 1, 2022 at 08:34 pm - Permalink
Here is a small script which should load this information. The header is saved into all loaded wave notes. Invoke LoadITXwithHeader() directly to load the file manually. There is an additional BeforeFileOpenHook() function in there which covers loading via drag-and-drop and double-clicking the file (I find it more convenient this way). Let me know if you encounter any problems.
if (StringMatch(fileNameStr,"*.itx"))
PathInfo $pathNameStr
LoadITXwithHeader(S_path+fileNameStr)
return 1
endif
return 0
End
// -------------------
Function LoadITXwithHeader(String filePath) // loads itx with header info
int i, refNum = 0
Open /R refNum as filePath // Open the file for reading
if (refNum == 0)
return -1 // Error opening file
endif
String currLine = "", comment = ""
FReadLine refNum, currLine // "IGOR" line
do
FReadLine refNum, currLine // keep reading lines
if (!StringMatch(currLine,"X //*"))
break
endif
comment += ReplaceString("X //",currLine,"")
while(1)
Close refNum
LoadWave/O/T/Q filePath // load the actual waves
String wList = S_waveNames
for (i=0; i<ItemsInList(wList); i++) // assign notes to all loaded waves
Wave w = $StringFromList(i, wList)
Note w, comment
endfor
return 0
End
February 1, 2022 at 11:29 pm - Permalink
Nice.
I think you're missing a close statement, should be just before LoadWave. Or maybe LoadWave forces a close? Even so it would nice to close the file.
February 2, 2022 at 12:21 am - Permalink
Tony, good catch. I have added the Close statement into above post. I don't know if the file is forcibly closed by the LoadWave command or if the open file stack gets just full at some point, but we'd better not test our luck here. :)
February 2, 2022 at 12:31 am - Permalink
If you want to add a menu item:
"Load Special ITX Files...", /Q, SpecialITXloader()
end
function SpecialITXloader()
int i
open /D/R/MULT=1/F="ITX Files (*.itx):.itx;"/M="Looking for Special ITX files..." refnum
wave /T w_selection = ListToTextWave(S_fileName, "\r")
for (i=0;i<numpnts(w_selection);i+=1)
// use chozo's file loader
LoadITXwithHeader(w_selection[i])
endfor
return 1
end
February 2, 2022 at 12:37 am - Permalink
Thanks, I am trying to incorporate this code into my procedure.
February 2, 2022 at 10:01 am - Permalink