1 #pragma TextEncoding = "UTF-8"
4 #pragma IgorVersion = 6.36
5 #pragma ModuleName = PearlMatrixImport
39 static 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
480 if(V_flag != errorCode.SUCCESS)
483 MFR_CreateOverviewTable /DEST=df_overview
484 // dimension labels are: brickletID, scanCycleCount, runCycleCount, sequenceID, dimension, channelName
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)
546 function mtrx_open_file(pathName, fileNameOrPath)
548 string fileNameOrPath
550 check_package_folder()
551 dfref df_save = GetDataFolderDFR()
552 dfref df_pack = $(package_path)
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
566 // make sure we have a valid and complete file path
567 GetFileFolderInfo /P=$pathName /Q /Z=2 fileNameOrPath
569 if ((v_flag == 0) && (v_isFile))
575 // get base file name
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
589 struct errorCode errorCode
590 initStruct(errorCode)
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
597 if(V_flag != errorCode.SUCCESS)
598 MFR_GetXOPErrorMessage
602 resultFilePath = loc_resultFilePath
604 dataFilePath = filePath
612 MFR_CreateOverviewTable /DEST=df_pack
613 if(V_flag != errorCode.SUCCESS)
614 MFR_GetXOPErrorMessage
623 print "matrixfilereader.xop not installed
"
627 // dimension labels are: brickletID, scanCycleCount, runCycleCount, sequenceID, dimension, channelName
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]
639 // if a data file is opened, make sure we found the right result file
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
683 function /s mtrx_load_preview(destName, pathName, fileName, [traces])
689 if (ParamIsDefault(traces))
690 traces = "*Up;*Down;*ReUp;*ReDown;
"
693 dfref df_save = GetDataFolderDFR()
695 string datanames = ""
696 string datapaths = ""
697 variable filestatus = mtrx_open_file(pathName, fileName)
702 dfref df_pack = $(package_path)
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
715 struct errorCode errorCode
716 initStruct(errorCode)
717 MFR_GetBrickletData /N=destName /R=(brickletID) /S=2 /DEST=df_data
718 if(V_flag == errorCode.SUCCESS)
719 datanames = S_waveNames
721 variable n = ItemsInList(datanames)
723 s = StringFromList(0, datanames)
725 mtrx_scale_dataset(data)
726 if (WaveDims(data) == 2)
727 subtract_line_bg(data)
729 datapaths = AddListItem(GetWavesDataFolder(data, 4), datapaths, ";
", inf)
730 for (i = 1; i < n; i += 1)
731 s = StringFromList(i, datanames)
735 MFR_GetXOPErrorMessage
737 //MFR_GetBrickletMetaData /N=ANickName /R=(brickletID) // /DEST=dfref
739 print "matrixfilereader.xop not installed
"
742 setdatafolder df_save
768 function /s mtrx_load_file(pathName, fileName, [traces])
773 if (ParamIsDefault(traces))
774 traces = "*Up;*Down;*ReUp;*ReDown;
"
777 dfref df_save = GetDataFolderDFR()
779 string datanames = ""
780 string datapaths = ""
781 variable filestatus = mtrx_open_file(pathName, fileName)
786 dfref df_pack = $(package_path)
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)
796 dfref df_result = mtrx_create_folder(resultFileName, df_base=df_save)
797 dfref df_data = mtrx_get_cycle_folder(df_base = df_result)
798 variable /g df_data:V_MatrixFileReaderOverwrite = 1
799 variable /g df_data:V_MatrixFileReaderFolder = 0
800 variable /g df_data:V_MatrixFileReaderDouble = 0
802 struct errorCode errorCode
803 initStruct(errorCode)
805 name = CleanupName(channelName, 0)
806 MFR_GetBrickletData /N=name /R=(brickletID) /DEST=df_data
807 if(V_flag == errorCode.SUCCESS)
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
815 mtrx_scale_dataset(data)
816 datapaths = AddListItem(GetWavesDataFolder(data, 4), datapaths, ";
", inf)
819 MFR_GetXOPErrorMessage
821 //MFR_GetBrickletMetaData /N=ANickName /R=(brickletID) // /DEST=dfref
823 print "matrixfilereader.xop not installed
"
826 setdatafolder df_save
830 function mtrx_scale_dataset(data)
833 dfref df_pack = $(package_path)
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
864 function /s mtrx_load_info(APathName, AFileName)
868 dfref saveDF = GetDataFolderDFR()
869 dfref fileDF = NewFreeDataFolder()
887 function subtract_line_bg(img)
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]