1#pragma TextEncoding = "UTF-8"
4#pragma IgorVersion = 6.36
5#pragma ModuleName = PearlMatrixImport
39static strconstant
package_path =
"root:packages:pearl_matrix_import:"
48 dfref savedf = getdatafolderdfr()
51 newdatafolder /o/s packages
52 newdatafolder /o/s $package_name
54 variable /g loglevel = 3
55 string /g dataFilePath = ""
56 string /g resultFilePath = ""
57 variable /g runCycle = 0
58 variable /g scanCycle = 0
59 string /g channelName = ""
60 variable /g brickletID = 0
61 variable /g V_MatrixFileReaderOverwrite = 1
62 variable /g V_MatrixFileReaderFolder = 0
63 variable /g V_MatrixFileReaderDouble = 0
75 if (DataFolderRefStatus(df_pack))
76 svar /sdfr=df_pack /z resultFilePath
77 if (!svar_exists(resultFilePath))
88 String file,pathName,type,creator
89 if( (kind >= 1) && (kind <= 2))
105 String fileName,path,type,creator
107 Variable handledOpen = 0
110 newdatafolder /o /s matrix
126 variable nkeys = dimsize(metadata, 0)
129 message_keys = "resultFileName;sampleName;channelName;"
130 message_keys += "XYScanner.Points.value;XYScanner.Raster_Time.value;XYScanner.Raster_Time.unit;XYScanner.Width.value;XYScanner.Width.unit;XYScanner.Height.value;XYScanner.Height.unit;"
131 message_keys += "GapVoltageControl.Voltage.value;GapVoltageControl.Voltage.unit;"
132 message_keys += "Regulator.Loop_Gain_1_I.value;Regulator.Loop_Gain_1_I.unit;Regulator.Setpoint_1.value;Regulator.Setpoint_1.unit;"
133 message_keys += "Spectroscopy.Device_1_Start.value;Spectroscopy.Device_1_Start.unit;Spectroscopy.Spectroscopy_Mode.value;"
137 for (ikey = 0; ikey < nkeys; ikey += 1)
138 key = metadata[ikey][0]
139 value = metadata[ikey][1]
140 if (WhichListItem(key, message_keys) >= 0)
141 message += key + " = " + value + "\r"
152 ModifyImage data ctab= {*,*,Mud,0}
153 ModifyGraph margin(left)=30,margin(bottom)=30,margin(top)=5,margin(right)=5,height={Plan,1,left,bottom}
156 ModifyGraph axThick=0.5
174 dfref saveDF = GetDataFolderDFR()
175 setdatafolder $package_path
177 svar s_preview_source
179 s_preview_file = filename
180 s_preview_source = ""
181 wave /z preview_image
184 if (! svar_exists(s_file_info))
185 string /g s_file_info
187 if (strlen(s_preview_file) > 0)
201 int32 ALREADY_FILE_OPEN
202 int32 EMPTY_RESULTFILE
203 int32 FILE_NOT_READABLE
204 int32 NO_NEW_BRICKLETS
205 int32 WRONG_PARAMETER
206 int32 INTERNAL_ERROR_CONVERTING_DATA
223 errorCode.INTERNAL_ERROR_CONVERTING_DATA=10064
237#if exists("MFR_OpenResultFile")
240 MFR_GetXOPErrorMessage
246 MFR_GetXOPErrorMessage
250 MFR_GetBrickletMetaData
252 MFR_GetXOPErrorMessage
302 variable fileType = 0
311 string extension =
""
313 if (StringMatch(fileName,
"*.mtrx"))
314 regexp =
"(.+)_([[:digit:]]+)\.(.+)"
315 SplitString /E=regexp fileName, resultFile, index1, extension
318 regexp =
"(.+)--([[:digit:]]+)_([[:digit:]]+)\.((.+)_mtrx)"
319 SplitString /E=regexp fileName, resultFile, index1, index2, extension, channel
321 runCycle = str2num(index1)
322 scanCycle = str2num(index2)
340 regexp =
"([[:alpha:][:digit:]]+)[-_]([[:alpha:][:digit:]]+)[-_]([[:alpha:][:digit:]]+)[-_].+"
341 SplitString /E=regexp fileName, prefix, datepart, timepart
365 if (ParamIsDefault(df_base))
366 df_base = GetDataFolderDFR()
375 folderName = "mtrx_" + datepart + "_" + timepart
376 folderName = CleanupName(folderName, 0)
378 dfref df_save = GetDataFolderDFR()
380 newdatafolder /o /s $foldername
381 dfref df = GetDataFolderDFR()
383 setdatafolder df_save
411 dfref df_save = GetDataFolderDFR()
413 if (ParamIsDefault(df_base))
414 df_base = GetDataFolderDFR()
416 if (ParamIsDefault(runCycle))
417 nvar /sdfr=df_pack defRunCycle = runCycle
418 runCycle = defRunCycle
420 if (ParamIsDefault(scanCycle))
421 nvar /sdfr=df_pack defScanCycle = scanCycle
422 scanCycle = defScanCycle
426 if ((runCycle >= 1) && (scanCycle >= 1))
427 sprintf dfname, "r%us%u", runCycle, scanCycle
428 setdatafolder df_base
430 if (DataFolderRefStatus(df) == 0)
431 newdatafolder $dfname
438 setdatafolder df_save
468 dfref df_overview = NewFreeDataFolder()
473 string resultFileName
474#if exists("MFR_OpenResultFile")
478 sprintf resultFileName,
"%s_%04u.mtrx", resultFile, link
479 MFR_OpenResultFile /K resultFileName
483 MFR_CreateOverviewTable /DEST=df_overview
485 wave /t /sdfr=df_overview overviewTable
486 make /n=(dimsize(overviewTable, 0)) /i /u /free runcycles, scancycles, ids, match
487 make /n=(dimsize(overviewTable, 0)) /t /free channels
488 ids = str2num(overviewtable[p][%brickletID])
490 runcycles = str2num(overviewtable[p][%runCycleCount])
495 scancycles = str2num(overviewtable[p][%scanCycleCount])
497 scancycles = scancycle
499 if (strlen(channel) > 0)
500 channels = overviewTable[p][%channelName]
504 Extract /FREE ids, match_ids, (scancycles == scanCycle) && (runcycles == runCycle) && (cmpstr(channels, channel) == 0)
505 if (numpnts(match_ids) > 0)
548 string fileNameOrPath
551 dfref df_save = GetDataFolderDFR()
553 svar /sdfr=df_pack dataFilePath
554 svar /sdfr=df_pack resultFilePath
555 nvar /sdfr=df_pack runCycle
556 nvar /sdfr=df_pack scanCycle
557 svar /sdfr=df_pack channelName
558 nvar /sdfr=df_pack brickletID
560 string loc_resultFileName
561 string loc_resultFilePath
562 variable loc_runCycle
563 variable loc_scanCycle
564 string loc_channelName
567 GetFileFolderInfo /P=$pathName /Q /Z=2 fileNameOrPath
569 if ((v_flag == 0) && (v_isFile))
580 fileName = ParseFilePath(0, filePath, ":", 1, 0)
581 fileDir = ParseFilePath(1, filePath, ":", 1, 0)
582 fileType =
mtrx_parse_filename(fileName, baseFileName, loc_runCycle, loc_scanCycle, loc_channelName)
587 variable using_cache = 0
592 sprintf loc_resultFileName, "%s_%04u.mtrx", baseFileName, link
593 loc_resultFilePath = fileDir + loc_resultFileName
594#if exists("MFR_OpenResultFile")
595 if ((strlen(resultFilePath) == 0) || (cmpstr(loc_resultFilePath, resultFilePath) != 0))
596 MFR_OpenResultFile /K loc_resultFilePath
598 MFR_GetXOPErrorMessage
602 resultFilePath = loc_resultFilePath
604 dataFilePath = filePath
612 MFR_CreateOverviewTable /DEST=df_pack
614 MFR_GetXOPErrorMessage
623 print
"matrixfilereader.xop not installed"
628 wave /t /sdfr=df_pack overviewTable
629 make /n=(dimsize(overviewTable, 0)) /i /u /o df_pack:runCycles, df_pack:scanCycles, df_pack:ids
630 make /n=(dimsize(overviewTable, 0)) /t /o df_pack:channels
631 wave /sdfr=df_pack ids, runCycles, scanCycles
632 wave /t /sdfr=df_pack channels
633 ids = str2num(overviewtable[p][%brickletID])
634 runCycles = str2num(overviewtable[p][%runCycleCount])
635 scanCycles = str2num(overviewtable[p][%scanCycleCount])
636 channels = overviewTable[p][%channelName]
640 if ((loc_runCycle > 0) && (loc_scanCycle > 0))
641 Extract /FREE ids, match_ids, (runCycles == loc_runCycle) && (scanCycles == loc_scanCycle) && (cmpstr(channels, loc_channelName) == 0)
642 if (numpnts(match_ids) > 0)
644 runCycle = loc_runCycle
645 scanCycle = loc_scanCycle
646 channelName = loc_channelName
689 if (ParamIsDefault(traces))
690 traces =
"*Up;*Down;*ReUp;*ReDown;"
693 dfref df_save = GetDataFolderDFR()
695 string datanames =
""
696 string datapaths =
""
703 svar /sdfr=df_pack dataFilePath
704 svar /sdfr=df_pack resultFilePath
705 nvar /sdfr=df_pack runCycle
706 nvar /sdfr=df_pack scanCycle
707 svar /sdfr=df_pack channelName
708 nvar /sdfr=df_pack brickletID
710#if exists(
"MFR_OpenResultFile")
711 dfref df_data = df_save
712 variable /g df_data:V_MatrixFileReaderOverwrite = 1
713 variable /g df_data:V_MatrixFileReaderFolder = 0
714 variable /g df_data:V_MatrixFileReaderDouble = 0
717 MFR_GetBrickletData /N=destName /R=(brickletID) /S=2 /DEST=df_data
719 datanames = S_waveNames
721 variable n = ItemsInList(datanames)
723 s = StringFromList(0, datanames)
726 if (WaveDims(data) == 2)
729 datapaths = AddListItem(GetWavesDataFolder(data, 4), datapaths,
";", inf)
730 for (i = 1; i < n; i += 1)
731 s = StringFromList(i, datanames)
735 MFR_GetXOPErrorMessage
739 print
"matrixfilereader.xop not installed"
742 setdatafolder df_save
773 if (ParamIsDefault(traces))
774 traces =
"*Up;*Down;*ReUp;*ReDown;"
777 dfref df_save = GetDataFolderDFR()
779 string datanames = ""
780 string datapaths = ""
787 svar /sdfr=df_pack dataFilePath
788 svar /sdfr=df_pack resultFilePath
789 nvar /sdfr=df_pack runCycle
790 nvar /sdfr=df_pack scanCycle
791 svar /sdfr=df_pack channelName
792 nvar /sdfr=df_pack brickletID
794#if exists("MFR_OpenResultFile")
795 string resultFileName = ParseFilePath(0, resultFilePath,
":", 1, 0)
798 variable /g df_data:V_MatrixFileReaderOverwrite = 1
799 variable /g df_data:V_MatrixFileReaderFolder = 0
800 variable /g df_data:V_MatrixFileReaderDouble = 0
805 name = CleanupName(channelName, 0)
806 MFR_GetBrickletData /N=name /R=(brickletID) /DEST=df_data
808 datanames = S_waveNames
810 variable n = ItemsInList(datanames)
812 for (i = 0; i < n; i += 1)
813 s = StringFromList(i, datanames)
814 wave /sdfr=df_data data = $s
816 datapaths = AddListItem(GetWavesDataFolder(data, 4), datapaths, ";", inf)
819 MFR_GetXOPErrorMessage
823 print
"matrixfilereader.xop not installed"
826 setdatafolder df_save
834 nvar /sdfr=df_pack runCycle
835 nvar /sdfr=df_pack scanCycle
836 svar /sdfr=df_pack channelName
837 nvar /sdfr=df_pack brickletID
839 string scanDir = StringFromList(2, NameOfWave(data),
"_")
840 if (WaveDims(data) == 2)
841 Note data, "AxisLabelX=X"
842 Note data, "AxisLabelY=Y"
844 Note data, "AxisLabelD=" + channelName
846 sprintf title, "%u-%u %s %s", runCycle, scanCycle, channelName, scanDir
847 Note data, "Dataset=" + title
868 dfref saveDF = GetDataFolderDFR()
869 dfref fileDF = NewFreeDataFolder()
890 variable nx = dimsize(img, 0)
891 variable ny = dimsize(img, 1)
893 make /n=(nx) /free line, fit
894 for (iy = 0; iy < ny; iy += 1)
896 if (numtype(sum(line)) == 0)
897 CurveFit /N /Q /NTHR=0 line line /D=fit
898 img[][iy] = line[p] - fit[p]
string mtrx_split_filename(string fileName, string *prefix, string *datepart, string *timepart)
split a matrix filename and return the first three parts
dfr mtrx_get_cycle_folder(dfref df_base=defaultValue, variable runCycle=defaultValue, variable scanCycle=defaultValue)
create a data folder for bricklet data.
string mtrx_load_info(string APathName, string AFileName)
load descriptive info from a Matrix data file.
static variable AfterFileOpenHook(variable refNum, string file, string pathName, string type, string creator, variable kind)
initialize the package and reload preferences after an experiment is loaded.
static variable init_package()
initialize the package data folder.
variable mtrx_parse_filename(string fileName, string *resultFile, variable *runCycle, variable *scanCycle, string *channel)
parse matrix file names
variable mtrx_open_file(string pathName, string fileNameOrPath)
open a matrix result or data file
variable mtrx_load_all()
load all data from a Matrix data file.
string mtrx_load_file(string pathName, string fileName, string traces=defaultValue)
load all data from a Matrix data file.
static const string package_path
string matrix_format_elog_message(wave metadata)
generate elog message from bricklet metadata
variable matrix_preview_2d(wave data, wave metadata)
dfr mtrx_create_folder(string fileName, dfref df_base=defaultValue)
create or look up a data folder based on a matrix file name.
static wave preview_matrix_file(string filename)
load the preview of a Matrix data file
variable subtract_line_bg(wave img)
remove linear background line-by-line
string mtrx_load_preview(string destName, string pathName, string fileName, string traces=defaultValue)
load a preview image from a Matrix data file.
static variable check_package_folder()
check that the package data folder exists
static const string package_name
static const string ks_filematch_mtrx
variable mtrx_file_brickletID(string resultFile, variable runCycle, variable scanCycle, string channel)
find out bricklet ID of a file
variable mtrx_scale_dataset(wave data)
static variable BeforeFileOpenHook(variable refNum, string fileName, string path, string type, string creator, variable kind)
open a matrix file that was dropped into Igor.
static variable initStruct(errorCode *errorCode)
from matrixfilereader help
from matrixfilereader help