1 #pragma TextEncoding = "UTF-8"
2 #pragma rtGlobals=3 // Use modern global access method and strict wave access.
3 #pragma IgorVersion = 6.36
4 #pragma ModuleName = PearlDataExplorer
6 #include <HierarchicalListWidget>,
version >= 1.14
7 #include
"pearl-area-import"
8 #include "pearl-area-profiles"
9 #include "pearl-area-display"
10 #include "pearl-compat"
11 #include "pearl-pshell-import"
54 WMHL_AddColumns(
"PearlDataExplorer",
"lb_contents", 1)
62 dfref save_df = GetDataFolderDFR()
64 newdatafolder /o/s packages
65 newdatafolder /o/s $package_name
66 if (exists("v_InitPanelDone") == 2)
72 make /o/n=0/i wSelectedFiles,wSelectedDatasets
73 make /o/n=0/t wtDatasets
74 make /o/n=0/t wtPositioners,wtDetectors
75 make /o/n=0/i wSelectedPositioners,wSelectedDetectors
77 make /o/n=(1,1) preview_image
78 make /o/n=0 preview_trace
79 make /o/n=0/t attr_names, attr_values, attr_filter, attr_filter_summary
82 string /g s_filepath = ""
83 string /g s_hdf_options = ""
84 string /g s_reduction_params = ""
85 string /g s_preview_pvs = ""
87 s_preview_pvs = "*OP:CURRENT*;*Stats*Total*;*KEITHLEY*READOUT;*CADC*"
89 redimension /n=26 attr_filter_summary
90 attr_filter_summary[0] = "MonoEnergy"
91 attr_filter_summary[1] = "MonoGrating"
92 attr_filter_summary[2] = "ExitSlit"
93 attr_filter_summary[3] = "FrontendHSize"
94 attr_filter_summary[4] = "FrontendVSize"
95 attr_filter_summary[5] = "ManipulatorPhi"
96 attr_filter_summary[6] = "ManipulatorTheta"
97 attr_filter_summary[7] = "ManipulatorTilt"
98 attr_filter_summary[8] = "ManipulatorX"
99 attr_filter_summary[9] = "ManipulatorY"
100 attr_filter_summary[10] = "ManipulatorZ"
101 attr_filter_summary[11] = "PassEnergy"
102 attr_filter_summary[12] = "LensMode"
103 attr_filter_summary[13] = "ScientaDwellTime"
104 attr_filter_summary[14] = "ScientaCenterEnergy"
105 attr_filter_summary[15] = "ScientaChannelBegin"
106 attr_filter_summary[16] = "ScientaChannelEnd"
107 attr_filter_summary[17] = "ScientaSliceBegin"
108 attr_filter_summary[18] = "ScientaSliceEnd"
109 attr_filter_summary[19] = "ScientaNumChannels"
110 attr_filter_summary[20] = "StepSize"
111 attr_filter_summary[21] = "ScientaNumSlices"
112 attr_filter_summary[22] = "ManipulatorTempA"
113 attr_filter_summary[23] = "ManipulatorTempB"
114 attr_filter_summary[24] = "RefCurrent"
115 attr_filter_summary[25] = "SampleCurrent"
118 string /g s_short_filepath = ""
119 string /g s_selected_file = ""
120 string /g s_selected_dataset = ""
121 string /g s_preview_file = ""
122 string /g s_preview_source = ""
123 string /g s_profiles_graph = ""
124 string /g s_preview_trace_graph = ""
125 string /g s_preview_graph = ""
126 string /g s_file_info = ""
127 string /g s_result = ""
129 variable/g v_InitPanelDone = 1
131 SetDataFolder save_df
140 dfref save_df = GetDataFolderDFR()
141 dfref df = $package_path
142 if (DataFolderRefStatus(df) == 1)
143 string fullPath = SpecialDirPath("Packages", 0, 0, 0)
145 NewPath/O/C/Q tempPackagePrefsPath, fullPath
146 fullPath += ":preferences.pxp"
148 string objects = "attr_filter;attr_filter_summary;s_filepath;s_hdf_options;s_reduction_params;s_preview_pvs"
149 SaveData /O /Q /J=objects fullPath
150 KillPath/Z tempPackagePrefsPath
152 SetDataFolder save_df
158 dfref save_df = GetDataFolderDFR()
162 NewDataFolder /O/S packages
163 NewDataFolder /O/S $package_name
164 dfref package_df = GetDataFolderDFR()
165 string fullPath = SpecialDirPath("Packages", 0, 0, 0)
168 GetFileFolderInfo /Q /Z fullPath
170 fullPath += ":preferences.pxp"
171 GetFileFolderInfo /Q /Z fullPath
173 LoadData /O /R /Q fullPath
179 svar /sdfr=package_df filepath = s_filepath
180 NewPath /O/Z pearl_explorer_filepath, filepath
185 SetDataFolder save_df
219 PathInfo /S pearl_explorer_filepath
232 dfref save_df = GetDataFolderDFR()
236 wave wSelectedFiles = $(
package_path + "wSelectedFiles")
239 PathInfo pearl_explorer_filepath
241 all_files = IndexedFile(pearl_explorer_filepath, -1, "????")
242 nn = ItemsInList(all_files)
248 make /n=(nn) /t /free wtAllFiles
249 wtAllFiles = StringFromList(p, all_files)
251 Sort /A /R wtFiles, wtFiles
253 redimension /n=(numpnts(wtFiles)) wSelectedFiles
256 setdatafolder save_df
276 dfref save_df = GetDataFolderDFR()
277 dfref package_df = $package_path
287 result = result >= 3 ? 0 : -2
291 dfref file_df = package_df:file_info
292 KillDataFolder /z file_df
296 setdatafolder save_df
304 dfref save_df = GetDataFolderDFR()
305 dfref temp_df = NewFreeDataFolder()
307 load_file(filename, options="mode:load_diags", dest_df=temp_df, quiet=1)
308 svar /sdfr=temp_df /z s_loaded_datasets
311 if (SVAR_Exists(s_loaded_datasets) && (strlen(s_loaded_datasets) >= 4))
319 if (DataFolderRefStatus(attr_df))
321 wave /t /sdfr=temp_df /z attr_names
322 wave /t /sdfr=temp_df /z attr_values
323 if (WaveExists(attr_names) && WaveExists(attr_values))
328 setdatafolder save_df
347 static function
extract_attributes(attr_df, [dest_df, attr_filter, include_datawaves, include_infowaves])
351 variable include_datawaves
352 variable include_infowaves
354 dfref save_df = GetDataFolderDFR()
355 dfref package_df = $package_path
357 if (ParamIsDefault(dest_df))
358 dest_df = GetDataFolderDFR()
360 if (ParamIsDefault(attr_filter) || !WaveExists(attr_filter))
361 wave /t /sdfr=package_df /z attr_filter
363 if (ParamIsDefault(include_datawaves))
364 include_datawaves = 1
366 if (ParamIsDefault(include_infowaves))
367 include_infowaves = 1
370 setdatafolder dest_df
371 wave /t /z attr_names, attr_values
372 if (!WaveExists(attr_names) || !WaveExists(attr_values))
373 make /n=(1) /o /t attr_names, attr_values
378 setdatafolder attr_df
394 if (WaveExists(IN) && include_infowaves)
399 if (include_datawaves)
400 string waves = WaveList("*", ";", "")
401 string exceptions = "ID;IN;IU;IV"
402 waves = RemoveFromList(exceptions, waves)
403 nw = ItemsInList(waves, ";")
408 if (WaveExists(attr_filter) && (numpnts(attr_filter) >= 1))
409 nattr = numpnts(attr_filter)
410 redimension /n=(nattr) attr_names
411 attr_names = attr_filter
414 redimension /n=(ninfo) attr_names
415 attr_names = SelectString(strlen(ID[p]) >= 0, IN[p], ID[p])
420 redimension /n=(nattr) attr_names
421 for (iw = 0; iw < nw; iw +=1 )
422 sw = StringFromList(iw, waves, ";")
423 ss = StringByKey("PV", note($sw), "=", "\r")
424 FindValue /text=sw attr_names
425 if ((v_value < 0) && (strlen(ss) >= 0))
426 attr_names[iattr] = sw
432 redimension /n=(nattr) attr_names, attr_values
433 sort attr_names, attr_names
436 for (iattr = 0; iattr < nattr; iattr += 1)
437 sw = attr_names[iattr]
440 FindValue /text=sw ID
442 attr_values[iattr] = IV[v_value]
444 FindValue /text=sw IN
446 attr_values[iattr] = IV[v_value]
452 switch (WaveType($sw, 1))
455 if (WaveExists(w) && (numpnts(w) >= 1))
456 sprintf ss, "%g", w[0]
457 attr_values[iattr] = ss
462 if (WaveExists(wt) && (numpnts(wt) >= 1))
463 attr_values[iattr] = wt[0]
470 setdatafolder save_df
474 dfref df = GetDataFolderDFR()
475 wave /t /sdfr=df attr_names
476 wave /t /sdfr=df attr_values
485 dfref save_df = GetDataFolderDFR()
486 setdatafolder $package_path
487 wave /t/z attr_filter, attr_filter_summary
490 if (WinType(name) == 5)
491 Notebook $name selection={startOfFile, endOfFile}
492 Notebook $name text=
""
494 NewNotebook /F=1 /K=1 /N=$name as title
495 GetWindow $name wsize
496 v_right = v_left + 260
497 v_bottom = v_top + 360
498 MoveWindow /W=$name v_left, v_top, v_right, v_bottom
499 Notebook $name tabs={2*72}
503 if (WaveExists(attr_filter_summary) && (numpnts(attr_filter_summary) >= 1))
504 notebook $name fStyle=1, text=
"Summary\r\r"
505 notebook $name fStyle=0
507 notebook $name text=
"\r"
511 notebook $name fStyle=1, text=
"All Attributes\r\r"
512 notebook $name fStyle=0
514 notebook $name selection={startOfFile,startOfFile}, findText={
"",1}
516 setdatafolder save_df
521 wave /t /z attr_filter
525 variable nw = numpnts(attr_names)
530 variable do_filter = WaveExists(attr_filter)
532 for (iw = 0; iw < nw; iw += 1)
535 FindValue /text=sw attr_filter
540 sprintf ss,
"%s\t%s\r", attr_names[iw], attr_values[iw]
541 notebook $notebook_name text=ss
573 if (ParamIsDefault(filename))
574 svar /sdfr=file_df /z loaded_file=s_filepath
575 if (svar_Exists(loaded_file))
576 filename = loaded_file
582 if (ParamIsDefault(graphname))
588 if (exists(
"PearlElog#set_panel_attributes") == 6)
589 sprintf cmd,
"PearlElog#set_panel_attributes(\"\", \"File=%s\")", ParseFilePath(0, filename,
":", 1, 0)
591 if ((strlen(graphname) > 0) && (WinType(graphname) == 1))
592 sprintf cmd, "
PearlElog#set_panel_graphs(\"\", \"%s\")", graphname
595 svar /sdfr=file_df /z authors
596 if (svar_Exists(authors))
597 if (strlen(authors)>=1)
598 sprintf cmd,
"PearlElog#set_panel_attributes(\"\", \"author=%s\")", authors
602 svar /sdfr=file_df /z pgroup
603 if (svar_Exists(pgroup))
604 if (strlen(pgroup)>=1)
605 sprintf cmd,
"PearlElog#set_panel_attributes(\"\", \"p-group=%s\")", pgroup
609 svar /sdfr=file_df /z proposal
610 if (svar_Exists(proposal))
611 if (strlen(proposal)>=1)
612 sprintf cmd,
"PearlElog#set_panel_attributes(\"\", \"project=%s\")", proposal
616 svar /sdfr=file_df /z proposer
617 svar /sdfr=file_df /z sample
618 if (svar_Exists(sample))
619 if (strlen(sample)>=1)
620 sprintf cmd,
"PearlElog#set_panel_attributes(\"\", \"sample=%s\")", sample
632 dfref save_df = GetDataFolderDFR()
633 dfref preview_df = $package_path
635 killStrings /z authors, pgroup, proposal, proposer, sample
652 if (WaveExists(image))
656 setdatafolder save_df
674 dfref save_df = GetDataFolderDFR()
676 setdatafolder $package_path
677 dfref preview_df = GetDataFolderDFR()
679 svar s_preview_source
681 if (! svar_exists(s_file_info))
682 string /g s_file_info
685 dfref temp_df = NewFreeDataFolder()
686 dfref file_df =
psh5_preview("pearl_explorer_filepath", filename, dest_df=temp_df)
687 svar /z /sdfr=temp_df dataname=s_preview_wave
689 s_preview_file = filename
690 s_preview_source = ""
692 wave /z /sdfr=temp_df data = $dataname
693 if (waveexists(data))
694 duplicate /o data, preview_df:preview_image
696 print "no data found in file " + filename
701 setdatafolder save_df
702 wave /z /sdfr=preview_df preview_image
720 dfref save_df = GetDataFolderDFR()
721 setdatafolder $package_path
723 svar s_preview_source
725 s_preview_file = filename
726 s_preview_source = ""
727 wave /z preview_image
730 if (! svar_exists(s_file_info))
731 string /g s_file_info
733 if (strlen(s_preview_file) > 0)
739 setdatafolder save_df
765 dfref save_df = GetDataFolderDFR()
766 setdatafolder $package_path
768 svar s_preview_source
771 dfref data_df = newfreedatafolder()
772 setdatafolder data_df
773 LoadWave /t/p=pearl_explorer_filepath/q filename
774 s_preview_file = s_filename
775 s_preview_source = ""
779 setdatafolder save_df
791 switch (WaveDims(data))
793 redimension /n=(numpnts(data)) preview
797 redimension /n=(dimsize(data, 0), dimsize(data, 1)) preview
801 redimension /n=(dimsize(data, 0), dimsize(data, 1)) preview
802 z1 = floor(DimSize(data, 2) / 2)
804 wave slab =
ad_extract_slab(data, nan, nan, nan, nan, z1, z2, "", pscale=1)
811 switch (WaveDims(data))
815 setscale /p y dimoffset(data, 1), dimdelta(data, 1), waveunits(data, 1), preview
817 setscale /p x dimoffset(data, 0), dimdelta(data, 0), waveunits(data, 0), preview
818 setscale d 0, 0, waveunits(data, -1), preview
827 dfref save_df = GetDataFolderDFR()
829 setdatafolder $package_path
831 svar s_preview_source
835 setdatafolder save_df
840 string d_names = WaveList("*", ";", "DP:1")
841 variable nw = ItemsInList(d_names, ";")
842 variable npv = ItemsInList(s_preview_pvs, ";")
844 string wname, wnote, pv_name, pv_match
845 for (iw = 0; iw < nw; iw += 1)
846 wname = StringFromList(iw, d_names, ";")
848 pv_name = StringByKey("PV", wnote, "=", "\r")
850 for (ipv = 0; ipv < npv; ipv += 1)
851 pv_match = StringFromList(ipv, s_preview_pvs)
852 if (StringMatch(pv_name, pv_match))
854 s_preview_source = pv_name
863 setdatafolder save_df
876 if ((DimOffset(preview, 0) == 0) && (DimDelta(preview, 0) == 1))
877 string xname = StringByKey("Axis1", note(data), "=", "\r")
878 wave /z xwave = $xname
879 if (WaveExists(xwave))
881 variable monotonic = 0
882 duplicate /free xwave, xdiff
883 differentiate /p xwave /D=xdiff
884 duplicate /free xdiff, xflag
886 monotonic = sum(xflag) > numpnts(xwave) * 0.9
888 monotonic = monotonic || (sum(xflag) > numpnts(xwave) * 0.9)
890 setscale /i x xwave[0], xwave[numpnts(xwave)-1], waveunits(xwave, -1), preview
901 dfref save_df = GetDataFolderDFR()
904 SetDataFolder data_df
905 string data_name = StringFromList(ItemsInList(dataset, "/") - 1, dataset, "/")
906 wave /z data=$data_name
908 if (WaveExists(data))
909 switch(WaveDims(data))
921 setdatafolder save_df
930 dfref save_df = GetDataFolderDFR()
931 setdatafolder $package_path
933 svar s_profiles_graph
935 svar s_preview_source
936 svar s_preview_trace_graph
939 if ((strlen(s_profiles_graph) > 0) && (WinType(s_profiles_graph) == 1))
940 KillWindow $s_profiles_graph
942 if ((strlen(s_preview_trace_graph) > 0) && (WinType(s_preview_trace_graph) == 1))
943 KillWindow $s_preview_trace_graph
947 if (wavedims(data) == 2)
949 ModifyGraph /w=$s_profiles_graph /z wbRGB=(48640,56832,60160)
950 graphname = s_profiles_graph
951 elseif (wavedims(data) == 1)
952 duplicate /o data, preview_trace
953 if (!ParamIsDefault(xdata))
954 duplicate /o xdata, preview_trace_x
956 duplicate /o data, preview_trace_x
958 setscale d 0, 0, WaveUnits(data, 0), preview_trace_x
961 ModifyGraph /w=$s_preview_trace_graph wbRGB=(48640,56832,60160)
962 graphname = s_preview_trace_graph
967 string title = "Preview " + s_preview_file
968 if (strlen(s_preview_source) > 0)
969 title = title + " (" + s_preview_source[0,31] + ")"
971 dowindow /f/t $graphname, title
972 s_preview_graph = graphname
974 setdatafolder save_df
982 if (WaveExists(xtrace))
983 display /n=pearl_explorer_1d /k=1 ytrace vs xtrace as "Preview"
985 display /n=pearl_explorer_1d /k=1 ytrace as "Preview"
988 string graphname = s_name
989 ModifyGraph /w=$graphname rgb[0]=(0,0,0)
990 ModifyGraph /w=$graphname grid=2
991 ModifyGraph /w=$graphname mirror=1
992 ModifyGraph /w=$graphname minor=1
993 ModifyGraph /w=$graphname axThick=0.5
994 ModifyGraph /w=$graphname gridRGB=(52224,52224,52224)
995 ModifyGraph /w=$graphname gridHair=0
996 ModifyGraph /w=$graphname tick=0
997 ModifyGraph /w=$graphname btLen=4
1000 string labels = note(ytrace)
1002 lab = StringByKey("AxisLabelX", labels, "=", "\r")
1006 Label /w=$graphname bottom lab + " (\\U)"
1007 lab = StringByKey("Dataset", labels, "=", "\r")
1011 Label /w=$graphname left lab + " (\\U)"
1028 dfref save_df = GetDataFolderDFR()
1029 setdatafolder $package_path
1033 variable nn = numpnts(wSelectedFiles)
1035 for (ii = 0; ii < nn; ii += 1)
1036 if (wSelectedFiles[ii])
1037 setdatafolder save_df
1038 if (ParamIsDefault(options))
1064 static function
load_file(filename, [options, dest_df, quiet])
1070 if (ParamIsDefault(options))
1080 load_hdf_file(filename, options=options, dest_df=dest_df, quiet=quiet)
1093 string mode = StringByKey("mode", options, ":", ";")
1094 string reduction_func = StringByKey("reduction_func", options, ":", ";")
1096 string modes = "load_scan;load_region;load_dataset;load_diags;load_complete;"
1100 if (strlen(mode) == 0)
1101 mode = StringFromList(0, modes, ";")
1103 if (strlen(reduction_func) == 0)
1104 reduction_func = StringFromList(0, reduction_funcs, ";")
1107 prompt mode, "Mode", popup, modes
1108 prompt reduction_func, "Reduction Function", popup, reduction_funcs
1109 doprompt "HDF5 Loading Options", mode, reduction_func
1112 options = ReplaceStringByKey("mode", options, mode, ":", ";")
1113 options = ReplaceStringByKey("reduction_func", options, reduction_func, ":", ";")
1140 string prompt_name = "prompt_" + func_name
1141 if (exists(prompt_name) == 6)
1143 return prompt_func(func_param)
1194 dfref save_df = GetDataFolderDFR()
1197 svar pref_params = $(
package_path + "s_reduction_params")
1198 string path = "pearl_explorer_filepath"
1200 if (ParamIsDefault(options))
1201 options = pref_options
1204 if (strlen(options) == 0)
1206 pref_options = options
1212 string reduction_func = StringByKey("reduction_func", options, ":", ";")
1213 string reduction_params = pref_params
1214 variable max_rank = 2
1216 if (exists(reduction_func) == 6)
1219 pref_params = reduction_params
1225 string mode = StringByKey("mode", options, ":", ";")
1226 string selected_datasets = WMHL_SelectedObjectsList("
PearlDataExplorer", "lb_contents")
1232 print mode, filename
1233 if (strlen(reduction_func))
1234 print reduction_func, reduction_params
1239 case "load_complete":
1241 dfref file_df =
psh5_load(path, filename, "", "", "*", classes=dsc, reduction_func=reduction_func, reduction_params=reduction_params, dest_df=dest_df)
1244 if (ItemsInList(selected_scans, ";") == 0)
1246 print "no scan selected - defaulting to scan 1."
1248 selected_scans = "/scan1;"
1251 dfref file_df =
psh5_load(path, filename, selected_scans, "", "", classes=dsc, dest_df=dest_df)
1254 if (ItemsInList(selected_scans, ";") == 0)
1256 print "no scan selected - defaulting to scan 1."
1258 selected_scans = "/scan1;"
1261 dfref file_df =
psh5_load(path, filename, selected_scans, "", "", classes=dsc, max_rank=max_rank, reduction_func=reduction_func, reduction_params=reduction_params, dest_df=dest_df)
1264 if (ItemsInList(selected_regions, ";") == 0)
1266 print "no region selected - defaulting to scan 1/region 1."
1268 selected_regions = "/scan1/region1;"
1271 dfref file_df =
psh5_load(path, filename, "", selected_regions, "", classes=dsc, max_rank=max_rank, reduction_func=reduction_func, reduction_params=reduction_params, dest_df=dest_df)
1273 case "load_dataset":
1274 if (ItemsInList(selected_datasets, ";") > 0)
1276 dfref file_df =
psh5_load(path, filename, "", "", selected_datasets, classes=dsc, reduction_func=reduction_func, reduction_params=reduction_params, dest_df=dest_df)
1279 DoAlert /T="PShell Import" 0, "Please select the datasets to load."
1285 if (DataFolderRefStatus(file_df))
1286 setdatafolder file_df
1289 print "data loaded to", GetDataFolder(1)
1292 setdatafolder save_df
1304 dfref save_df = GetDataFolderDFR()
1306 string loaded_filename = ""
1308 if (ParamIsDefault(dest_df) || !DataFolderRefStatus(dest_df))
1311 DoAlert /T="
load_hdf_file" 0, "optional argument dest_df not supported."
1315 if (ParamIsDefault(options))
1318 if (strlen(options) == 0)
1320 options = pref_options
1323 pref_options = options
1330 string mode = StringByKey("mode", options, ":", ";")
1333 case "load_reduced":
1334 string reduction_func = StringByKey("reduction_func", options, ":", ";")
1335 svar pref_params = $(
package_path + "s_reduction_params")
1336 string reduction_params = pref_params
1338 pref_params = reduction_params
1339 print reduction_func, reduction_params
1340 loaded_filename =
adh5_load_reduced(nickname, "pearl_explorer_filepath", filename, $reduction_func, reduction_params)
1347 if (strlen(loaded_filename) > 0)
1348 setdatafolder $("root:" + nickname)
1349 data_df = GetDataFolderDFR()
1352 setdatafolder save_df
1364 dfref save_df = GetDataFolderDFR()
1367 if (ParamIsDefault(options))
1371 variable own_data_df = 0
1372 if (ParamIsDefault(dest_df) || !DataFolderRefStatus(dest_df))
1374 newdatafolder /s/o $("root:" + nickname)
1377 setdatafolder dest_df
1379 dfref data_df = GetDataFolderDFR()
1386 LoadWave /t/p=pearl_explorer_filepath/q filename
1387 svar waves = s_wavenames
1388 dfref act_df = GetDataFolderDFR()
1393 if (!DataFolderRefsEqual(act_df, data_df) && own_data_df)
1396 setdatafolder data_df
1397 if (ItemsInList(WaveList("*", ";", ""), ";") == 0)
1398 killdatafolder /z data_df
1402 setdatafolder save_df
1433 if (ParamIsDefault(ignoredate))
1436 if (ParamIsDefault(unique))
1440 string basename = ParseFilePath(3, filename, ":", 0, 0)
1441 string extension = ParseFilePath(4, filename, ":", 0, 0)
1445 if (strsearch(basename, "X03DA_PC", 0, 2) >= 0)
1446 autosource = "sscan"
1447 basename = ReplaceString("_", basename, "-")
1449 elseif (strsearch(basename, "otf", 0, 2) >= 0)
1452 if (ParamIsDefault(sourcename))
1453 sourcename = autosource
1456 variable nparts = ItemsInList(basename, "-")
1458 string datepart = StringFromList(nparts - 2, basename, "-")
1459 string indexpart = StringFromList(nparts - 1, basename, "-")
1461 sprintf nickname, "%s_%s", sourcename, indexpart
1463 sprintf nickname, "%s_%s_%s", sourcename, datepart, indexpart
1469 if (unique && CheckName(nickname, 11))
1470 nickname = UniqueName(nickname + "_", 11, 0)
1479 PauseUpdate; Silent 1
1480 NewPanel /K=1 /W=(510,45,1190,539) as "PEARL Data Explorer"
1481 ModifyPanel cbRGB=(48640,56832,60160)
1482 GroupBox g_data_reduction,pos={355.00,370.00},size={306.00,49.00},title=
"data reduction"
1483 GroupBox g_data_reduction,help={
"data reduction of 3D ScientaImage"}
1484 GroupBox gb_filepath,pos={8.00,4.00},size={328.00,48.00},title=
"file system folder"
1485 TitleBox tb_filepath,pos={20.00,28.00},size={279.00,21.00},frame=0
1486 TitleBox tb_filepath,variable= root:packages:pearl_explorer:s_short_filepath,fixedSize=1
1488 Button b_browse_filepath,fColor=(65280,48896,32768)
1489 GroupBox gb_prefs,pos={8.00,351.00},size={65.00,131.00},title=
"prefs"
1490 GroupBox gb_prefs,help={
"explorer package preferences"}
1492 Button b_save_prefs,help={
"save preferences of the data explorer package (data file path, attributes filter)"}
1493 Button b_save_prefs,fColor=(65280,48896,32768)
1495 Button b_load_prefs,help={
"load preferences of the data explorer package"}
1496 Button b_load_prefs,fColor=(65280,48896,32768)
1497 GroupBox gb_filelist,pos={8.00,55.00},size={328.00,293.00},title=
"data files"
1499 ListBox lb_files,listWave=root:packages:pearl_explorer:wtFiles
1500 ListBox lb_files,selWave=root:packages:pearl_explorer:wSelectedFiles,mode= 4
1502 Button b_update_filelist,fColor=(65280,48896,32768)
1503 CheckBox cb_file_preview,pos={78.00,318.00},size={59.00,14.00},title=
"preview"
1504 CheckBox cb_file_preview,help={
"enable/disable automatic preview window when selecting a data file"}
1505 CheckBox cb_file_preview,value= 0
1507 Button b_file_prev,help={
"previous file"},fColor=(65280,48896,32768)
1509 Button b_file_next,help={
"next file"},fColor=(65280,48896,32768)
1511 Button b_goto_dataset,help={
"change the current data folder ot where the selected dataset could be located"}
1512 Button b_goto_dataset,fColor=(65280,48896,32768)
1514 Button b_display_dataset,help={
"display the selected dataset in its own window"}
1515 Button b_display_dataset,fColor=(65280,48896,32768)
1517 Button b_load_complete,help={
"load all datasets of the selected file."}
1518 Button b_load_complete,userdata=
"mode:load_complete;"
1519 Button b_load_complete,fColor=(65280,48896,32768)
1520 TitleBox tb_selected_file,pos={360.00,28.00},size={309.00,22.00},frame=0
1521 TitleBox tb_selected_file,variable= root:packages:pearl_explorer:s_selected_file,fixedSize=1
1522 GroupBox gb_contents,pos={346.00,55.00},size={327.00,294.00},title=
"datasets"
1524 Button b_attr_notebook,help={
"show a summary of attributes in a notebook window"}
1525 Button b_attr_notebook,fColor=(65280,48896,32768)
1526 ListBox lb_contents,pos={355.00,84.00},size={305.00,222.00}
1527 ListBox lb_contents,keySelectCol= 1
1528 GroupBox gb_selected_file,pos={346.00,4.00},size={328.00,48.00},title=
"selected file"
1530 Button b_load_region,help={
"load the selected region"}
1531 Button b_load_region,userdata=
"mode:load_region;",fColor=(65280,48896,32768)
1533 PopupMenu popup_reduction,help={
"data reduction of 3d ScientaImage. note: the list may contain unsuitable functions. check the code or documentation!"}
1534 PopupMenu popup_reduction,mode=1,popvalue=
"None",value= #
"PearlDataExplorer#pm_reduction_values()"
1535 GroupBox group_import,pos={346.00,351.00},size={326.00,131.00},title=
"import"
1537 Button b_load_scan,help={
"load the selected scan"},userdata=
"mode:load_scan;"
1538 Button b_load_scan,fColor=(65280,48896,32768)
1540 Button b_load_diags,help={
"load diagnostics of selected scans"},userdata=
"mode:load_diags;"
1541 Button b_load_diags,fColor=(65280,48896,32768)
1543 Button b_load_dataset,help={
"load the selected datasets"}
1544 Button b_load_dataset,userdata=
"mode:load_dataset;",fColor=(65280,48896,32768)
1546 Button b_reduction_params,help={
"set data reduction parameters"}
1547 Button b_reduction_params,fColor=(65280,48896,32768)
1548 GroupBox g_fileinfo,pos={85.00,351.00},size={251.00,131.00},title=
"file info"
1550 Button b_elog,help={
"send file metadata to ELOG panel (does not submit to ELOG)"}
1551 Button b_elog,fColor=(65280,48896,32768)
1552 ToolsGrid grid=(0,28.35,5)
1558 dfref package_df = $package_path
1559 svar /z /sdfr=package_df hl_contents_datasets
1560 wave /z /sdfr=package_df wSelectedFiles
1562 variable file_selected = 0
1563 if (WaveExists(wSelectedFiles))
1564 file_selected = sum(wSelectedFiles)
1567 string selected_datasets = WMHL_SelectedObjectsList("
PearlDataExplorer", "lb_contents")
1568 variable scan_selected = strsearch(selected_datasets, "scan", 0, 2) == 0
1569 variable region_selected = strsearch(selected_datasets, "region", 0, 2) >= 0
1571 variable dataset_selected = 0
1572 variable nds = ItemsInList(selected_datasets, ";")
1575 if (svar_exists(hl_contents_datasets))
1576 for (ids = 0; ids < nds; ids += 1)
1577 ds = "/" + StringFromList(ids, selected_datasets, ";")
1578 if (NumType(NumberByKey(ds, hl_contents_datasets, ":", ";")) == 0)
1579 dataset_selected = 1
1588 dis = file_selected ? 0 : 2
1591 dis = file_selected && scan_selected ? 0 : 2
1594 dis = file_selected && (strlen(WinList("*ElogPanel*", ";", "WIN:64")) > 1) ? 0 : 2
1596 dis = scan_selected ? 0 : 2
1598 dis = region_selected ? 0 : 2
1600 dis = dataset_selected ? 0 : 2
1603 dis = file_selected && (nds > 0) ? 0 : 2
1607 if ((cmpstr(S_Value, "None") != 0) && (exists(S_Value) == 6))
1619 STRUCT WMButtonAction &ba
1621 switch( ba.eventCode )
1634 STRUCT WMButtonAction &ba
1636 switch( ba.eventCode )
1655 string path = long_path
1656 variable ellipsis = 0
1658 if (strlen(path) > max_len)
1659 path = RemoveListItem(1, path, ":")
1667 path = AddListItem("
", path, ":", 1)
1674 STRUCT WMButtonAction &ba
1676 dfref save_df = GetDataFolderDFR()
1678 switch( ba.eventCode )
1680 PathInfo /S pearl_explorer_filepath
1681 NewPath /M="select data file folder" /O/Z pearl_explorer_filepath
1692 setdatafolder save_df
1697 STRUCT WMButtonAction &ba
1699 switch( ba.eventCode )
1715 reduction_funcs = AddListItem("None", reduction_funcs, ";", 0)
1716 return reduction_funcs
1720 STRUCT WMPopupAction &pa
1722 switch( pa.eventCode )
1724 Variable popNum = pa.popNum
1725 String popStr = pa.popStr
1736 STRUCT WMButtonAction &ba
1738 switch( ba.eventCode )
1741 if ((cmpstr(S_Value, "None") != 0) && (exists(S_Value) == 6))
1742 svar pref_params = $(
package_path + "s_reduction_params")
1743 string reduction_func = S_Value
1744 string reduction_params = pref_params
1746 pref_params = reduction_params
1758 STRUCT WMButtonAction &ba
1760 switch( ba.eventCode )
1764 string options=ba.userData
1768 if ((cmpstr(S_Value, "None") != 0) && (exists(S_Value) == 6))
1769 options = ReplaceStringByKey("reduction_func", options, S_Value, ":", ";")
1795 dfref save_df = GetDataFolderDFR()
1796 setdatafolder $package_path
1797 svar s_selected_file
1798 s_selected_file = file
1805 setdatafolder save_df
1810 STRUCT WMButtonAction &ba
1812 dfref save_df = GetDataFolderDFR()
1814 switch( ba.eventCode )
1816 setdatafolder $package_path
1819 FindValue /i=1 wSelectedFiles
1821 if (v_value >= numpnts(wtFiles))
1822 v_value = min(numpnts(wtFiles) - 1, 0)
1824 wSelectedFiles = p == v_value
1826 variable ifile = v_value
1836 setdatafolder save_df
1841 STRUCT WMButtonAction &ba
1843 dfref save_df = GetDataFolderDFR()
1845 switch( ba.eventCode )
1847 setdatafolder $package_path
1850 FindValue /i=1 wSelectedFiles
1853 v_value = numpnts(wtFiles) - 1
1855 wSelectedFiles = p == v_value
1857 variable ifile = v_value
1867 setdatafolder save_df
1872 STRUCT WMListboxAction &lba
1874 dfref save_df = GetDataFolderDFR()
1876 Variable row = lba.row
1877 Variable col = lba.col
1878 WAVE/T/Z listWave = lba.listWave
1879 WAVE/Z selWave = lba.selWave
1881 switch( lba.eventCode )
1885 setdatafolder $package_path
1888 if (sum(wSelectedFiles) == 1)
1910 setdatafolder save_df
1915 STRUCT WMButtonAction &ba
1917 dfref save_df = GetDataFolderDFR()
1919 switch( ba.eventCode )
1921 setdatafolder $package_path
1924 variable nn = numpnts(wSelectedFiles)
1926 for (ii = 0; ii < nn; ii += 1)
1927 if (wSelectedFiles[ii])
1937 setdatafolder save_df
1943 dfref save_df = GetDataFolderDFR()
1944 setdatafolder $package_path
1948 setdatafolder save_df
1954 if (cmpstr(WMHL_GetItemForRowNumber("
PearlDataExplorer", "lb_contents", 0), "<uninitialized>") != 0)
1969 dfref save_df = GetDataFolderDFR()
1970 setdatafolder $package_path
1977 string /g hl_contents_datasets = ""
1979 if (DataFolderRefStatus(file_df))
1980 svar /sdfr=file_df datasets = s_datasets
1981 svar /sdfr=file_df datatypes = s_datasets_datatypes
1982 svar /sdfr=file_df ranks = s_datasets_ranks
1983 svar /sdfr=file_df dimensions = s_datasets_dimensions
1985 nds = ItemsInList(datasets, ";")
1986 for (ids = 0; ids < nds; ids += 1)
1987 ds = StringFromList(ids, datasets, ";")
1988 extra = StringFromList(ids, dimensions, ";")
1989 hl_contents_datasets = ReplaceStringByKey(ds, hl_contents_datasets, extra, ":", ";")
1996 setdatafolder save_df
2006 dfref save_df = GetDataFolderDFR()
2008 if (!ParamIsDefault(dest_df))
2009 setdatafolder dest_df
2011 setdatafolder $package_path
2012 NewDataFolder /o /s file_info
2015 dfref file_df =
psh5_open_file(path_name, file_name, dest_df=GetDataFolderDFR())
2016 if (DataFolderRefStatus(file_df))
2021 setdatafolder save_df
2033 if (cmpstr(parent_path[0], "/") != 0)
2034 parent_path = "/" + parent_path
2037 variable nobj = ItemsInList(objects, ";")
2043 string child_path = ""
2044 string child_name = ""
2045 string child_names = ""
2046 string extra_data = ""
2049 for (iobj = 0; iobj < nobj; iobj += 1)
2050 obj = StringFromList(iobj, objects, ";")
2052 if (cmpstr(obj[0, strlen(parent_path)-1], parent_path) == 0)
2053 child_path = StringFromList(0, obj, ":")
2054 child_path = child_path[strlen(parent_path), strlen(child_path)-1]
2055 if (cmpstr(child_path[0], "/") == 0)
2056 child_path = child_path[1, strlen(child_path)-1]
2058 child_name = StringFromList(0, child_path, "/")
2059 nel = ItemsInList(child_path, "/")
2060 child_names = ReplaceNumberByKey(child_name, child_names, nel)
2062 extra = RemoveListItem(0, obj, ":")
2063 extra_data = ReplaceStringByKey(child_name, extra_data, extra)
2071 nobj = ItemsInList(child_names)
2072 for (iobj = 0; iobj < nobj; iobj += 1)
2073 obj = StringFromList(iobj, child_names)
2074 child_name = StringFromList(0, obj, ":")
2075 nel = NumberByKey(child_name, child_names)
2076 WMHL_AddObject("
PearlDataExplorer", "lb_contents", parent_path[1, strlen(parent_path)], child_name, nel > 1)
2078 extra = StringByKey(child_name, extra_data)
2079 row = WMHL_GetRowNumberForItem("
PearlDataExplorer", "lb_contents", parent_path[1, strlen(parent_path)] + "/" + child_name)
2081 WMHL_ExtraColumnData("
PearlDataExplorer", "lb_contents", 0, row, StringFromList(0, extra, "|"), 0)
2090 dfref save_df = GetDataFolderDFR()
2091 setdatafolder $package_path
2093 svar hl_contents_datasets
2094 variable nds = ItemsInList(hl_contents_datasets, ";")
2099 for (ids = 0; ids < nds; ids += 1)
2100 sds = StringFromList(ids, hl_contents_datasets, ";")
2101 if (cmpstr(sds[0,4], "/scan", 0) == 0)
2102 scan = StringFromList(1, sds, "/")
2103 scans = ReplaceNumberByKey(scan, scans, 1)
2107 variable nscans = ItemsInList(scans)
2109 for (iscan = 0; iscan < nscans; iscan += 1)
2110 scan = StringFromList(iscan, scans)
2111 scan = StringFromList(0, scan, ":")
2115 setdatafolder save_df
2130 String HostWindow, ListControlName, ContainerPath
2132 dfref save_df = GetDataFolderDFR()
2133 setdatafolder $package_path
2134 svar hl_contents_datasets
2136 setdatafolder save_df
2140 String HostWindow, ListControlName
2144 dfref save_df = GetDataFolderDFR()
2145 setdatafolder $package_path
2157 setdatafolder save_df
2179 dfref save_df = GetDataFolderDFR()
2180 setdatafolder $package_path
2183 string parent_folder
2191 path = "root:" + parent_folder
2192 if (DataFolderExists(path))
2198 variable nparts = ItemsInList(datapath, "/")
2200 for (ipart = 0; ipart < nparts; ipart += 1)
2201 folder = StringFromList(ipart, datapath, "/")
2203 if (DataFolderExists(path))
2211 if (DataFolderExists(parent_folder))
2212 setdatafolder $parent_folder
2232 STRUCT WMButtonAction &ba
2234 switch( ba.eventCode )
2236 dfref save_df = GetDataFolderDFR()
2237 setdatafolder $package_path
2238 svar s_selected_file
2239 svar hl_contents_datasets
2240 string datapath = StringFromList(0, WMHL_SelectedObjectsList("
PearlDataExplorer", "lb_contents"))
2241 if (strsearch(hl_contents_datasets, datapath, 0) != 0)
2242 datapath = datapath + "/"
2246 setdatafolder save_df
2248 msg = "Can't find data folder. Has the file been loaded?"
2249 DoAlert /T="Goto DF" 0, msg
2264 STRUCT WMButtonAction &ba
2266 switch( ba.eventCode )
2268 dfref save_df = GetDataFolderDFR()
2269 setdatafolder $package_path
2270 svar s_selected_file
2271 svar hl_contents_datasets
2272 string datapath = StringFromList(0, WMHL_SelectedObjectsList("
PearlDataExplorer", "lb_contents"))
2273 if (strsearch(hl_contents_datasets, datapath, 0) < 0)
2279 setdatafolder save_df
2296 dfref save_df = GetDataFolderDFR()
2298 dfref preview_df = $package_path
2299 svar /z /sdfr=preview_df s_selected_file
2300 svar /z /sdfr=preview_df s_preview_file
2301 svar /z /sdfr=preview_df s_preview_graph
2303 if (!SVAR_Exists(s_selected_file) || (strlen(s_selected_file) < 1))
2308 variable result = -1
2311 dfref data_df = GetDataFolderDFR()
2312 svar /sdfr=data_df /z authors
2313 if (!svar_Exists(authors))
2319 dfref infoDF = preview_df:file_info
2320 if ((result != 0) && (DataFolderRefStatus(infoDF)))
2321 svar /z /sdfr=infoDF s_filepath
2322 if (SVAR_Exists(s_filepath) && (strsearch(s_filepath, s_selected_file, inf, 1) >= 0))
2323 dfref data_df = infoDF
2329 if ((result != 0) && (SVAR_Exists(s_preview_file) && (cmpstr(s_preview_file, s_selected_file) == 0)))
2330 dfref data_df = preview_df
2335 if (SVAR_Exists(s_preview_graph) && (WinType(s_preview_graph) == 1))
2336 graphname = s_preview_graph
2344 windowname = StringFromList(0, WinList("*ElogPanel*", ";", "WIN:64"), ";")
2345 DoWindow /F $windowname
2348 setdatafolder save_df
2352 STRUCT WMButtonAction &ba
2354 switch( ba.eventCode )