1 #pragma TextEncoding = "UTF-8"
2 #pragma rtGlobals=3 // Use modern global access method and strict wave access.
4 #pragma IgorVersion = 6.2
5 #pragma ModuleName = PearlAnglescanPanel
6 #include "pearl-anglescan-process"
7 #include "pearl-pmsco-import"
8 #include "pearl-scienta-preprocess"
9 #include "pearl-area-display"
50 static strconstant
package_path =
"root:packages:pearl_anglescan_panel:"
55 dfref savedf = GetDataFolderDFR()
60 if (nvar_exists(init_done))
71 variable /g init_done = 1
79 dfref savedf = getdatafolderdfr()
81 newdatafolder /o/s packages
82 newdatafolder /o/s $package_name
85 string /g graphname = "graph_anglescan_panel"
87 prefs_objects += "norm_alpha_enable;norm_alpha_mode;norm_alpha_smoothing;norm_phi_enable;norm_phi_mode;norm_phi_thetarange;"
88 prefs_objects += "norm_theta_enable;norm_theta_mode;norm_theta_domain;norm_theta_smoothing;norm_thetaphi_enable;norm_thetaphi_mode;norm_thetaphi_smoothing;"
89 prefs_objects += "output_folding;output_horizon;graph_mode;graph_projection;graph_colortable;graph_contrast;"
92 variable /g theta_offset = 0
93 variable /g tilt_offset = 0
94 variable /g phi_offset = 0
95 variable /g alpha_offset = 0
96 variable /g crop_enable = 0
97 variable /g crop_alpha = 25
98 variable /g crop_theta = 88
99 string /g crop_rows = ""
100 variable /g norm_alpha_enable = 0
101 variable /g norm_alpha_mode = 4
102 variable /g norm_alpha_smoothing = 0.25
103 variable /g norm_theta_enable = 0
104 variable /g norm_theta_mode = 4
105 variable /g norm_theta_domain = 0
106 variable /g norm_theta_smoothing = 0.25
107 variable /g norm_thetaphi_enable = 0
108 variable /g norm_thetaphi_mode = 4
109 variable /g norm_thetaphi_smoothing = 0.25
110 variable /g norm_phi_enable = 0
111 variable /g norm_phi_mode = 4
112 variable /g norm_phi_thetarange = 20
113 string /g output_name = "holo1"
114 variable /g output_folding = 1
115 variable /g output_horizon = 88
116 variable /g graph_mode = 1
118 string /g graph_colortable = "grays"
119 variable /g graph_contrast = 2
122 string /g source_path = ""
123 string /g export_folderpath = "root:"
124 variable /g export_format = 1
127 string /g panel_name = ""
128 string /g preview_graphname = ""
129 string /g dist_x_graphname = ""
130 string /g dist_y_graphname = ""
131 string /g output_graphname = ""
134 make /n=(10,10) /o raw_data, process_data
135 make /o dist_x, dist_x_smoo
136 make /o dist_y, dist_y_smoo
146 dfref saveDF = GetDataFolderDFR()
150 string fullPath = SpecialDirPath("Packages", 0, 0, 0)
152 NewPath/O/C/Q tempPackagePrefsPath, fullPath
153 fullPath += ":preferences.pxp"
155 SetDataFolder root:packages
156 SetDataFolder $package_name
159 KillPath/Z tempPackagePrefsPath
172 dfref saveDF = GetDataFolderDFR()
176 NewDataFolder /O/S packages
177 NewDataFolder /O/S $package_name
178 string fullPath = SpecialDirPath("Packages", 0, 0, 0)
181 GetFileFolderInfo /Q /Z fullPath
183 fullPath += ":preferences.pxp"
184 GetFileFolderInfo /Q /Z fullPath
186 LoadData /O /R /Q fullPath
210 dfref saveDF = GetDataFolderDFR()
211 dfref datadf = GetWavesDataFolderDFR(raw_data)
212 dfref attrdf = datadf:attr
213 if (!DataFolderRefStatus(attrdf))
216 dfref parentdf = GetDataFolderDFR()
217 dfref attrdf = parentdf:attr
224 source_path = GetWavesDataFolder(raw_data, 2)
226 duplicate /o raw_data, raw, process_data
228 wave /sdfr=attrdf /z ManipulatorTheta
229 wave /sdfr=attrdf /z ManipulatorTilt
230 wave /sdfr=attrdf /z ManipulatorPhi
231 if (WaveExists(ManipulatorTheta) && WaveExists(ManipulatorTilt) && WaveExists(ManipulatorPhi))
232 duplicate /o attrdf:ManipulatorTheta, raw_theta, process_theta
233 duplicate /o attrdf:ManipulatorTilt, raw_tilt, process_tilt
234 duplicate /o attrdf:ManipulatorPhi, raw_phi, process_phi
236 DoAlert 0, "Can't find manipulator angle waves.\rCheck that the attr folder exists, or provide values in the following table."
237 make /n=(dimsize(raw_data, 1)) /o raw_theta, raw_tilt, raw_phi
238 make /n=(dimsize(raw_data, 1)) /o process_theta, process_tilt, process_phi
239 edit /k=1 raw_theta, raw_tilt, raw_phi
242 make /o /n=(dimsize(raw_data, 0)) dist_x, dist_x_smoo
243 make /o /n=(dimsize(raw_data, 1)) dist_y, dist_y_smoo
254 wave /sdfr=df process_data
255 svar /sdfr=df preview_graphname
257 if (strlen(preview_graphname) && (wintype(preview_graphname) == 1))
259 DoWindow /F $preview_graphname
264 nvar /sdfr=df graph_contrast
265 svar /sdfr=df graph_colortable
266 set_contrast(graph_contrast, graph_contrast, graphname=preview_graphname, colortable=graph_colortable)
277 variable xdist, ydist
282 wave /sdfr=df dist_x_smoo
283 wave /sdfr=df dist_y_smoo
284 svar /sdfr=df dist_x_graphname
285 svar /sdfr=df dist_y_graphname
288 if (strlen(dist_x_graphname) && (wintype(dist_x_graphname) == 1))
289 DoWindow /F $dist_x_graphname
291 display /k=1 /n=graph_asp_dist_x dist_x, dist_x_smoo
292 dist_x_graphname = s_name
293 ModifyGraph /w=$dist_x_graphname mode(dist_x)=2
294 ModifyGraph /w=$dist_x_graphname lsize(dist_x)=2
295 ModifyGraph /w=$dist_x_graphname rgb(dist_x)=(0,0,0)
300 if (strlen(dist_y_graphname) && (wintype(dist_y_graphname) == 1))
301 DoWindow /F $dist_y_graphname
303 display /k=1 /n=graph_asp_dist_y dist_y, dist_y_smoo
304 dist_y_graphname = s_name
305 ModifyGraph /w=$dist_y_graphname mode(dist_y)=2
306 ModifyGraph /w=$dist_y_graphname lsize(dist_y)=2
307 ModifyGraph /w=$dist_y_graphname rgb(dist_y)=(0,0,0)
326 wave /sdfr=df raw_theta
327 wave /sdfr=df raw_tilt
328 wave /sdfr=df raw_phi
329 nvar /sdfr=df theta_offset
330 nvar /sdfr=df tilt_offset
331 nvar /sdfr=df phi_offset
332 nvar /sdfr=df alpha_offset
334 duplicate /o raw, df:process_data
335 duplicate /o raw_theta, df:process_theta
336 duplicate /o raw_tilt, df:process_tilt
337 duplicate /o raw_phi, df:process_phi
339 wave /sdfr=df process_data
340 wave /sdfr=df process_theta
341 wave /sdfr=df process_tilt
342 wave /sdfr=df process_phi
344 process_theta = raw_theta - theta_offset
345 process_tilt = raw_tilt - tilt_offset
346 process_phi = raw_phi - phi_offset
347 setscale /p x dimoffset(raw, 0) - alpha_offset, dimdelta(raw, 0), waveunits(raw, 0), process_data
365 if (ParamIsDefault(force))
370 wave /sdfr=df process_data
371 wave /sdfr=df process_theta
372 wave /sdfr=df process_tilt
373 wave /sdfr=df process_phi
374 nvar /sdfr=df crop_enable
375 nvar /sdfr=df crop_alpha
376 nvar /sdfr=df crop_theta
377 svar /sdfr=df crop_rows
379 if (force || crop_enable)
381 if (crop_alpha > abs(dimdelta(process_data, 0)))
382 crop_strip(process_data, -crop_alpha, +crop_alpha)
385 if ((crop_theta >= 10) && (crop_theta < 90))
386 crop_strip_theta(process_data, -0.1, crop_theta + 0.1, process_theta, process_tilt, process_phi)
389 if (strlen(crop_rows) > 0)
390 delete_rows(crop_rows, process_data, process_theta, process_tilt, process_phi)
416 make /n=(numpnts(theta)) /i /free idx
418 variable nrows = ItemsInList(rows, ",")
422 for (irow = 0; irow < nrows; irow += 1)
423 srow = StringFromList(irow, rows, ",")
424 q1 = str2num(StringFromList(0, srow, "-"))
425 q2 = str2num(StringFromList(1, srow, "-"))
433 extract /free idx, idx, idx >= 0
434 variable nx = dimsize(data, 0)
435 variable ny = numpnts(idx)
436 theta[0,ny-1] = theta[idx]
437 tilt[0,ny-1] = tilt[idx]
438 phi[0,ny-1] = phi[idx]
439 redimension /n=(ny) theta, tilt, phi
440 duplicate /free data, data_copy
441 redimension /n=(nx,ny) data
442 data = data_copy[p][idx[q]]
460 if (ParamIsDefault(force))
464 dfref saveDF = GetDataFolderDFR()
466 wave /sdfr=df process_data
467 nvar /sdfr=df norm_alpha_enable
468 nvar /sdfr=df norm_alpha_mode
469 nvar /sdfr=df norm_alpha_smoothing
471 if (force || norm_alpha_enable)
472 dfref temp_df = newfreedatafolder()
473 setdatafolder temp_df
474 normalize_strip_x(process_data, smooth_method=norm_alpha_mode, smooth_factor=norm_alpha_smoothing, check=check)
478 duplicate /o check_dist, df:dist_x
479 duplicate /o check_smoo, df:dist_x_smoo
501 if (ParamIsDefault(force))
505 dfref saveDF = GetDataFolderDFR()
507 wave /sdfr=df process_data
508 wave /sdfr=df process_theta
509 wave /sdfr=df process_phi
510 nvar /sdfr=df norm_phi_enable
511 nvar /sdfr=df norm_phi_mode
512 nvar /sdfr=df norm_phi_thetarange
514 if (force || norm_phi_enable)
515 dfref temp_df = newfreedatafolder()
516 setdatafolder temp_df
517 normalize_strip_phi(process_data, process_theta, process_phi, theta_range=norm_phi_thetarange, check=check)
521 duplicate /o check_dist, df:dist_y
522 duplicate /o check_smoo, df:dist_y_smoo
544 if (ParamIsDefault(force))
548 dfref saveDF = GetDataFolderDFR()
550 wave /sdfr=df process_data
551 wave /sdfr=df process_theta
552 nvar /sdfr=df norm_theta_enable
553 nvar /sdfr=df norm_theta_mode
554 nvar /sdfr=df norm_theta_domain
555 nvar /sdfr=df norm_theta_smoothing
557 if (force || norm_theta_enable)
558 dfref temp_df = newfreedatafolder()
559 setdatafolder temp_df
560 if (norm_theta_domain==1)
561 normalize_strip_theta_scans(process_data, process_theta, smooth_method=norm_theta_mode, smooth_factor=norm_theta_smoothing, check=check)
563 normalize_strip_theta(process_data, process_theta, smooth_method=norm_theta_mode, smooth_factor=norm_theta_smoothing, check=check)
568 duplicate /o check_dist, df:dist_y
569 duplicate /o check_smoo, df:dist_y_smoo
591 if (ParamIsDefault(force))
595 dfref saveDF = GetDataFolderDFR()
597 wave /sdfr=df process_data
598 wave /sdfr=df process_theta
599 wave /sdfr=df process_phi
600 nvar /sdfr=df norm_thetaphi_enable
601 nvar /sdfr=df norm_thetaphi_mode
602 nvar /sdfr=df norm_thetaphi_smoothing
604 if (force || norm_thetaphi_enable)
605 dfref temp_df = newfreedatafolder()
606 setdatafolder temp_df
607 normalize_strip_thetaphi(process_data, process_theta, process_phi, smooth_method=norm_thetaphi_mode, smooth_factor=norm_thetaphi_smoothing, check=check)
611 duplicate /o check_dist, df:dist_y
612 duplicate /o check_smoo, df:dist_y_smoo
624 dfref saveDF = GetDataFolderDFR()
634 nvar folding=output_folding
635 nvar horizon=output_horizon
644 pizza_service_2(process_data, output_name, process_theta, process_tilt, process_phi, folding=folding, nograph=1)
646 setdatafolder $output_name
650 values = pol <= horizon ? values : nan
674 svar /sdfr=pkg_df output_name
675 svar /sdfr=pkg_df output_graphname
676 nvar /sdfr=pkg_df graph_projection
677 nvar /sdfr=pkg_df graph_mode
678 svar /sdfr=pkg_df graph_colortable
679 nvar /sdfr=pkg_df graph_contrast
681 if (ParamIsDefault(data_df))
682 dfref data_df = pkg_df
684 if (ParamIsDefault(data_name))
685 data_name = output_name
688 dfref saveDF = GetDataFolderDFR()
689 setdatafolder data_df
695 string graphname = data_name
696 graphname =
display_hemi_scan(data_name, projection=graph_projection, graphtype=graph_mode, graphname=graphname)
697 if (ParamIsDefault(data_df))
698 output_graphname = graphname
702 if (strlen(graphname) && (wintype(graphname) == 1))
703 set_contrast(graph_contrast, graph_contrast, graphname=graphname, colortable=graph_colortable)
716 svar /sdfr=df preview_graphname
717 svar /sdfr=df output_graphname
718 svar /sdfr=df graph_colortable
719 nvar /sdfr=df graph_contrast
721 if (strlen(preview_graphname) && (wintype(preview_graphname) == 1))
722 set_contrast(graph_contrast, graph_contrast, graphname=preview_graphname, colortable=graph_colortable)
724 if (strlen(output_graphname) && (wintype(output_graphname) == 1))
725 set_contrast(graph_contrast, graph_contrast, graphname=output_graphname, colortable=graph_colortable)
734 svar /sdfr=df preview_graphname
735 svar /sdfr=df output_graphname
736 svar /sdfr=df dist_x_graphname
737 svar /sdfr=df dist_y_graphname
739 if (strlen(preview_graphname) && (wintype(preview_graphname) == 1))
740 killwindow $preview_graphname
742 if (strlen(output_graphname) && (wintype(output_graphname) == 1))
743 killwindow $output_graphname
745 if (strlen(dist_x_graphname) && (wintype(dist_x_graphname) == 1))
746 killwindow $dist_x_graphname
748 if (strlen(dist_y_graphname) && (wintype(dist_y_graphname) == 1))
749 killwindow $dist_y_graphname
752 preview_graphname = ""
753 output_graphname = ""
754 dist_x_graphname = ""
755 dist_y_graphname = ""
775 if (ParamIsDefault(do_graph))
780 svar /sdfr=df source_path
781 svar /sdfr=df output_name
782 svar /sdfr=df output_graphname
783 wave raw_data = $source_path
785 dfref saveDF = GetDataFolderDFR()
786 dfref raw_df = GetWavesDataFolderDFR(raw_data)
788 newdatafolder /o /s $dest_name
789 dfref dest_df = GetDataFolderDFR()
793 string graphname = ""
806 svar /sdfr=df output_name
808 dfref saveDF = GetDataFolderDFR()
823 svar /sdfr=df output_name
824 wave /sdfr=df process_data
826 dfref saveDF = GetDataFolderDFR()
829 string s_int = "values"
831 string s_polar = s_prefix + "pol"
832 string s_azim = s_prefix + "az"
834 pmsco_save_scan("", "", num2str(ekin), s_polar, s_azim, "", s_int, "", sdfr=data_df)
905 svar /sdfr=df panel_name
907 if (strlen(panel_name) && (wintype(panel_name) == 7))
908 DoWindow /F $panel_name
912 NewPanel /K=1 /N=anglescan_panel /W=(200,50,480,874) as "angle scan processing"
915 GroupBox gb_source, title="data source"
917 Button b_source_select, help={
"select the source wave, e.g. ReducedData1. it must be in the scan or region data folder. the attr folder with the manipulator waves must be in the same folder or one level up."}
919 Button b_source_update, help={
"reload the process data from the previous source (link displayed below)"}
920 TitleBox tb_source_path, size={240,21}
921 TitleBox tb_source_path,variable= root:packages:pearl_anglescan_panel:source_path
923 GroupBox gb_offsets, title=
"offsets"
924 SetVariable sv_theta_offset, size={88,16},bodyWidth=60,title=
"theta"
925 SetVariable sv_theta_offset,value= root:packages:pearl_anglescan_panel:theta_offset
926 SetVariable sv_theta_offset, help={
"manipulator theta value that corresponds to normal emission."}
927 SetVariable sv_tilt_offset, size={74,16},bodyWidth=60,title=
"tilt"
928 SetVariable sv_tilt_offset,value= root:packages:pearl_anglescan_panel:tilt_offset
929 SetVariable sv_tilt_offset, help={
"manipulator tilt value that corresponds to normal emission."}
930 SetVariable sv_phi_offset, size={78,16},bodyWidth=60,title=
"phi"
931 SetVariable sv_phi_offset,value= root:packages:pearl_anglescan_panel:phi_offset
932 SetVariable sv_phi_offset, help={
"manipulator phi value that should map to the 3 o'clock angle."}
933 SetVariable sv_alpha_offset, size={90,16},bodyWidth=60,title=
"alpha"
934 SetVariable sv_alpha_offset,value= root:packages:pearl_anglescan_panel:alpha_offset
935 SetVariable sv_alpha_offset, help={
"alpha value that corresponds to normal emission (if the sample normal is properly aligned)."}
937 Button b_save_prefs, help={
"save settings as preferences."}
939 Button b_load_prefs, help={
"load settings from preferences."}
941 GroupBox gb_crop, title=
"crop and delete"
942 CheckBox cb_crop_enable, size={50,14}, title=
"enable"
943 CheckBox cb_crop_enable, help={
"crop at +/-alpha and +theta, delete arbitrary rows"}
944 CheckBox cb_crop_enable, variable= root:packages:pearl_anglescan_panel:crop_enable
945 SetVariable sv_crop_alpha, size={90,16},bodyWidth=60,title=
"alpha"
946 SetVariable sv_crop_alpha, limits={0,30,1},value= root:packages:pearl_anglescan_panel:crop_alpha
947 SetVariable sv_crop_alpha, help={
"alpha (detection angle) cropping angle (positive boundary), relative to normal emission"}
948 SetVariable sv_crop_theta, size={90,16},bodyWidth=60,title=
"theta"
949 SetVariable sv_crop_theta, limits={10,90,1},value= root:packages:pearl_anglescan_panel:crop_theta
950 SetVariable sv_crop_theta, help={
"theta (polar angle) upper limit, relative to normal emission"}
951 SetVariable sv_crop_rows, size={200,16},bodyWidth=160,title=
"rows"
952 SetVariable sv_crop_rows, limits={10,90,1},value= root:packages:pearl_anglescan_panel:crop_rows
953 SetVariable sv_crop_rows, help={
"rows to delete from the raw data. comma-separated point indices, hyphen for range."}
955 Button b_crop_preview, help={
"show a preview of the cropped dataset."}
957 GroupBox gb_norm_alpha, title=
"normalize alpha"
958 CheckBox cb_norm_alpha_enable, size={50,14}, title=
"enable"
959 CheckBox cb_norm_alpha_enable,variable= root:packages:pearl_anglescan_panel:norm_alpha_enable
960 CheckBox cb_norm_alpha_enable, help={
"enable normalization of the alpha distribution"}
962 PopupMenu pm_norm_alpha_mode, mode=5, popvalue=
"loess", value= #
"\"none;binomial;boxcar;scienta;loess;\""
963 PopupMenu pm_norm_alpha_mode, help={
"alpha normalization method. recommended: loess"}
964 SetVariable sv_norm_alpha_smoothing, size={112,16}, bodyWidth=60, title=
"smoothing"
965 SetVariable sv_norm_alpha_smoothing, limits={0,1,0.05}, value= root:packages:pearl_anglescan_panel:norm_alpha_smoothing
966 SetVariable sv_norm_alpha_smoothing, help={
"smoothing parameter (depends on the normalization method)."}
968 Button b_norm_alpha_check, help={
"show a graph of the normalization function"}
970 Button b_norm_alpha_preview, help={
"show a preview of the normalized dataset (without other normalizations)."}
972 GroupBox gb_norm_phi, title=
"normalize phi"
973 CheckBox cb_norm_phi_enable, size={50,14}, title=
"enable"
974 CheckBox cb_norm_phi_enable,variable= root:packages:pearl_anglescan_panel:norm_phi_enable
975 CheckBox cb_norm_phi_enable, help={
"enable normalization of the phi distribution to reduce the effect of wobble"}
976 SetVariable sv_norm_phi_range, size={118,16}, bodyWidth=60, title=
"theta range"
977 SetVariable sv_norm_phi_range, limits={0,90,1}, value= root:packages:pearl_anglescan_panel:norm_phi_thetarange
978 SetVariable sv_norm_phi_range, help={
"theta range (from normal) to factor into the normalization function"}
980 Button b_norm_phi_check, help={
"show a graph of the normalization function"}
982 Button b_norm_phi_preview, help={
"show a preview of the normalized dataset (without other normalizations)."}
984 GroupBox gb_norm_theta, title=
"normalize theta"
985 CheckBox cb_norm_theta_enable, size={50,14},title=
"enable"
986 CheckBox cb_norm_theta_enable, variable= root:packages:pearl_anglescan_panel:norm_theta_enable
987 CheckBox cb_norm_theta_enable, help={
"enable normalization of the theta distribution (integrated over phi)"}
989 PopupMenu pm_norm_theta_domain, mode=5, popvalue=
"loess", value= #
"\"global;scans;\""
990 PopupMenu pm_norm_theta_domain, help={
"smoothing domain: global or individual scans. use global unless there is a stronga or irregular phi variation."}
992 PopupMenu pm_norm_theta_mode,mode=5,popvalue=
"loess",value= #
"\"none;binomial;boxcar;polynomial;loess;\""
993 PopupMenu pm_norm_theta_mode, help={
"theta normalization method. recommended: loess"}
994 SetVariable sv_norm_theta_smoothing, size={112,16}, bodyWidth=60, title=
"smoothing"
995 SetVariable sv_norm_theta_smoothing, limits={0,1,0.05}, value= root:packages:pearl_anglescan_panel:norm_theta_smoothing
996 SetVariable sv_norm_theta_smoothing, help={
"smoothing parameter (depends on the normalization method)."}
998 Button b_norm_theta_check, help={
"show a graph of the normalization function"}
1000 Button b_norm_theta_preview, help={
"show a preview of the normalized dataset (without other normalizations)."}
1002 GroupBox gb_norm_thetaphi, size={272,97},title=
"normalize (theta,phi)"
1003 CheckBox cb_norm_thetaphi_enable, size={50,14},title=
"enable"
1004 CheckBox cb_norm_thetaphi_enable, variable= root:packages:pearl_anglescan_panel:norm_thetaphi_enable
1005 CheckBox cb_norm_thetaphi_enable, help={
"enable normalization of the (theta, phi) distribution."}
1007 PopupMenu pm_norm_thetaphi_mode, mode=5, popvalue=
"loess", value= #
"\"none;none;none;none;loess;\""
1008 PopupMenu pm_norm_thetaphi_mode, help={
"theta normalization method. recommended: loess"}
1009 SetVariable sv_norm_thetaphi_smoothing, size={112,16}, bodyWidth=60, title=
"smoothing"
1010 SetVariable sv_norm_thetaphi_smoothing, limits={0,1,0.05}, value= root:packages:pearl_anglescan_panel:norm_thetaphi_smoothing
1011 SetVariable sv_norm_thetaphi_smoothing, help={
"smoothing parameter (depends on the normalization method)."}
1013 Button b_norm_thetaphi_check, help={
"show a graph of the normalization function"}
1015 Button b_norm_thetaphi_preview, help={
"show a preview of the normalized dataset (without other normalizations)."}
1017 GroupBox gb_output, title=
"output"
1018 SetVariable sv_output_folding, size={95,16}, bodyWidth=60, title=
"folding"
1019 SetVariable sv_output_folding, limits={1,20,1}, value= root:packages:pearl_anglescan_panel:output_folding
1020 SetVariable sv_output_folding, help={
"n-fold rotational average. 1=no averaging."}
1021 SetVariable sv_output_horizon, size={98,16}, bodyWidth=60, title=
"horizon"
1022 SetVariable sv_output_horizon, limits={1,90,1}, value= root:packages:pearl_anglescan_panel:output_horizon
1023 SetVariable sv_output_horizon, help={
"highest theta to display"}
1025 PopupMenu pm_graph_projection, mode=2, popvalue=
"stereographic", value= #
"\"equidistant;stereographic;equal area;gnomonic;orthographic;\""
1026 PopupMenu pm_graph_projection, help={
"projection (theta mapping) mode"}
1028 PopupMenu pm_graph_mode, mode=2, popvalue=
"dots", value= #
"\"none;dots;none;image;\""
1029 PopupMenu pm_graph_mode, help={
"graph type: dots = coloured dots on circles; image = interpolated matrix"}
1031 Button b_output_calc, help={
"execute data processing with the enabled filters and display the diffractogram."}
1033 Button b_output_duplicate, help={
"copy the result to an arbitrary data folder."}
1035 Button b_output_itx, help={
"save the result to an igor text file (itx)."}
1037 Button b_output_etpi, help={
"save the result to a pmsco angle scan file (etpi)."}
1039 GroupBox gb_graph, title=
"graph"
1041 PopupMenu pm_graph_colortable, mode=0, value= #
"\"*COLORTABLEPOPNONAMES*\""
1042 PopupMenu pm_graph_colortable, help={
"color table to use in pseudocolor graphs."}
1043 SetVariable sv_graph_contrast, size={119,16}, bodyWidth=60, title=
"contrast (%)"
1044 SetVariable sv_graph_contrast, limits={0,25,1}, value= root:packages:pearl_anglescan_panel:graph_contrast
1045 SetVariable sv_graph_contrast, help={
"contrast value (percentile)."}
1047 Button b_graph_update, help={
"update the existing graph."}
1049 Button b_graph_png, help={
"save the graph in png format."}
1057 svar /sdfr=df panel_name
1059 variable gb_space = 2
1060 variable gb_internal_top = 16
1061 variable gb_internal_bot = 4
1062 variable line_space = 22
1080 GroupBox gb_source,pos={4,gb_top}
1081 gb_ht = gb_internal_top
1082 Button b_source_select,pos={17, gb_top + gb_ht + b_adj},size={50,20}
1083 Button b_source_update, pos={67, gb_top + gb_ht + b_adj},size={50,20}
1085 TitleBox tb_source_path,pos={18, gb_top + gb_ht + tb_adj},size={240,21}
1087 gb_ht += gb_internal_bot
1088 GroupBox gb_source, size={272,gb_ht}
1090 gb_top += gb_ht + gb_space
1091 GroupBox gb_offsets,pos={4,gb_top}
1092 gb_ht = gb_internal_top
1093 SetVariable sv_theta_offset,pos={46, gb_top + gb_ht + sv_adj},size={88,16}
1094 Button b_save_prefs,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1096 SetVariable sv_tilt_offset,pos={60, gb_top + gb_ht + sv_adj},size={74,16}
1097 Button b_load_prefs,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1099 SetVariable sv_phi_offset,pos={56, gb_top + gb_ht + sv_adj},size={78,16}
1101 SetVariable sv_alpha_offset,pos={44, gb_top + gb_ht + sv_adj},size={90,16}
1103 gb_ht += gb_internal_bot
1104 GroupBox gb_offsets, size={272,gb_ht}
1106 gb_top += gb_ht + gb_space
1107 GroupBox gb_crop,pos={4,gb_top}
1108 gb_ht = gb_internal_top
1109 CheckBox cb_crop_enable,pos={73, gb_top + gb_ht + cb_adj},size={50,14}
1111 SetVariable sv_crop_alpha, pos={44, gb_top + gb_ht + sv_adj}, size={90,16}
1112 Button b_crop_preview,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1114 SetVariable sv_crop_theta, pos={44, gb_top + gb_ht + sv_adj}, size={90,16}
1116 SetVariable sv_crop_rows, pos={44, gb_top + gb_ht + sv_adj}, size={190,16}
1118 gb_ht += gb_internal_bot
1119 GroupBox gb_crop, size={272,gb_ht}
1121 gb_top += gb_ht + gb_space
1122 GroupBox gb_norm_alpha,pos={4,gb_top}
1123 gb_ht = gb_internal_top
1124 CheckBox cb_norm_alpha_enable,pos={73, gb_top + gb_ht + cb_adj},size={50,14}
1126 PopupMenu pm_norm_alpha_mode,pos={36, gb_top + gb_ht + pm_adj},size={138,21}
1127 Button b_norm_alpha_check,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1129 SetVariable sv_norm_alpha_smoothing,pos={22, gb_top + gb_ht + sv_adj},size={112,16}
1130 Button b_norm_alpha_preview,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1132 gb_ht += gb_internal_bot
1133 GroupBox gb_norm_alpha, size={272,gb_ht}
1135 gb_top += gb_ht + gb_space
1136 GroupBox gb_norm_phi,pos={4,gb_top}
1137 gb_ht = gb_internal_top
1138 CheckBox cb_norm_phi_enable,pos={73, gb_top + gb_ht + cb_adj},size={50,14}
1139 Button b_norm_phi_check,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1141 SetVariable sv_norm_phi_range,pos={15, gb_top + gb_ht + sv_adj},size={118,16}
1142 Button b_norm_phi_preview,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1144 gb_ht += gb_internal_bot
1145 GroupBox gb_norm_phi, size={272,gb_ht}
1147 gb_top += gb_ht + gb_space
1148 GroupBox gb_norm_theta,pos={4,gb_top}
1149 gb_ht = gb_internal_top
1150 CheckBox cb_norm_theta_enable,pos={73, gb_top + gb_ht + cb_adj},size={50,14}
1152 PopupMenu pm_norm_theta_domain, pos={35, gb_top + gb_ht + pm_adj}, size={138,21}
1153 Button b_norm_theta_check,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1155 PopupMenu pm_norm_theta_mode,pos={35, gb_top + gb_ht + pm_adj},size={138,21}
1156 Button b_norm_theta_preview,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1158 SetVariable sv_norm_theta_smoothing,pos={21, gb_top + gb_ht + sv_adj},size={112,16}
1160 gb_ht += gb_internal_bot
1161 GroupBox gb_norm_theta, size={272,gb_ht}
1163 gb_top += gb_ht + gb_space
1164 GroupBox gb_norm_thetaphi,pos={4,gb_top}
1165 gb_ht = gb_internal_top
1166 CheckBox cb_norm_thetaphi_enable,pos={73, gb_top + gb_ht + cb_adj},size={50,14}
1168 PopupMenu pm_norm_thetaphi_mode,pos={35, gb_top + gb_ht + pm_adj},size={138,21}
1169 Button b_norm_thetaphi_check,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1171 SetVariable sv_norm_thetaphi_smoothing,pos={21, gb_top + gb_ht + sv_adj},size={112,16}
1172 Button b_norm_thetaphi_preview,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1174 gb_ht += gb_internal_bot
1175 GroupBox gb_norm_thetaphi, size={272,gb_ht}
1177 gb_top += gb_ht + gb_space
1178 GroupBox gb_output,pos={4,gb_top}
1179 gb_ht = gb_internal_top
1180 SetVariable sv_output_folding,pos={38, gb_top + gb_ht + sv_adj},size={95,16}
1181 Button b_output_calc,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1183 SetVariable sv_output_horizon,pos={35, gb_top + gb_ht + sv_adj},size={98,16}
1184 Button b_output_duplicate,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1186 PopupMenu pm_graph_projection,pos={24, gb_top + gb_ht + pm_adj},size={149,21}
1187 Button b_output_itx,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1189 PopupMenu pm_graph_mode,pos={44, gb_top + gb_ht + pm_adj},size={129,21}
1190 Button b_output_etpi,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1192 gb_ht += gb_internal_bot
1193 GroupBox gb_output, size={272,gb_ht}
1195 gb_top += gb_ht + gb_space
1196 GroupBox gb_graph,pos={4,gb_top}
1197 gb_ht = gb_internal_top
1198 PopupMenu pm_graph_colortable,pos={21, gb_top + gb_ht + pm_adj},size={152,21}
1199 Button b_graph_update,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1201 SetVariable sv_graph_contrast,pos={14, gb_top + gb_ht + sv_adj},size={119,16}
1202 Button b_graph_png,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1204 gb_ht += gb_internal_bot
1205 GroupBox gb_graph, size={272,gb_ht}
1207 gb_top += gb_ht + gb_space
1215 svar /sdfr=df panel_name
1216 if (wintype(panel_name) == 7)
1218 nvar /sdfr=df norm_alpha_mode
1219 m = norm_alpha_mode + 1
1220 PopupMenu pm_norm_alpha_mode win=$panel_name, mode=m
1221 nvar /sdfr=df norm_theta_domain
1222 m = norm_theta_domain + 1
1223 PopupMenu pm_norm_theta_domain win=$panel_name, mode=m
1224 nvar /sdfr=df norm_theta_mode
1225 m = norm_theta_mode + 1
1226 PopupMenu pm_norm_theta_mode win=$panel_name, mode=m
1227 nvar /sdfr=df norm_thetaphi_mode
1228 m = norm_thetaphi_mode + 1
1229 PopupMenu pm_norm_thetaphi_mode win=$panel_name, mode=m
1230 nvar /sdfr=df graph_mode
1232 PopupMenu pm_graph_mode win=$panel_name, mode=m
1233 nvar /sdfr=df graph_projection
1234 m = graph_projection + 1
1235 PopupMenu pm_graph_projection win=$panel_name, mode=m
1236 svar /sdfr=df graph_colortable
1237 m = 1 + WhichListItem(graph_colortable, CTabList())
1238 PopupMenu pm_graph_colortable win=$panel_name, mode=m
1243 STRUCT WMButtonAction &ba
1245 switch( ba.eventCode )
1257 STRUCT WMButtonAction &ba
1259 switch( ba.eventCode )
1271 STRUCT WMButtonAction &ba
1273 switch( ba.eventCode )
1275 dfref dfBefore = GetDataFolderDFR()
1276 Execute /q/z "CreateBrowser prompt=\"Select 2D holo scan wave\", showWaves=1, showVars=0, showStrs=0"
1277 dfref dfAfter = GetDataFolderDFR()
1278 SetDataFolder dfBefore
1280 SVAR list = S_BrowserList
1282 if ((flag != 0) && (ItemsInList(list) >= 1))
1283 string wname = StringFromList(0, list)
1297 STRUCT WMButtonAction &ba
1299 switch( ba.eventCode )
1301 dfref packdf = $package_path
1302 svar /sdfr=packdf source_path
1303 wave /z w = $source_path
1307 DoAlert 0, "can't find source data."
1318 STRUCT WMButtonAction &ba
1320 switch( ba.eventCode )
1332 STRUCT WMButtonAction &ba
1334 switch( ba.eventCode )
1346 STRUCT WMButtonAction &ba
1348 switch( ba.eventCode )
1360 STRUCT WMButtonAction &ba
1362 switch( ba.eventCode )
1374 STRUCT WMButtonAction &ba
1376 switch( ba.eventCode )
1388 STRUCT WMButtonAction &ba
1390 switch( ba.eventCode )
1402 STRUCT WMButtonAction &ba
1404 switch( ba.eventCode )
1416 STRUCT WMButtonAction &ba
1418 switch( ba.eventCode )
1430 STRUCT WMButtonAction &ba
1432 switch( ba.eventCode )
1444 STRUCT WMButtonAction &ba
1446 switch( ba.eventCode )
1459 STRUCT WMButtonAction &ba
1461 switch( ba.eventCode )
1464 variable do_graph = 1
1465 prompt dest_folder, "destination folder name (relative to data source)"
1466 prompt do_graph, "duplicate graph (yes = 1, no = 0)"
1467 doprompt "duplicate", dest_folder, do_graph
1480 STRUCT WMButtonAction &ba
1482 switch( ba.eventCode )
1485 wave /sdfr=df process_data
1487 ekin = NumberByKey("KineticEnergy", note(process_data), "=", "\r")
1488 prompt ekin, "kinetic energy"
1489 doprompt "save etpi", ekin
1502 STRUCT WMButtonAction &ba
1504 switch( ba.eventCode )
1516 STRUCT WMButtonAction &ba
1518 switch( ba.eventCode )
1530 STRUCT WMButtonAction &ba
1532 switch( ba.eventCode )
1535 svar /sdfr=df source_path
1536 svar /sdfr=df output_graphname
1537 if (WinType(output_graphname) == 1)
1538 SavePICT /WIN=$output_graphname /E=-5 /B=144 /TRAN=0
1549 STRUCT WMPopupAction &pa
1551 switch( pa.eventCode )
1554 nvar /sdfr=df norm_alpha_mode
1555 norm_alpha_mode = pa.popNum - 1
1565 STRUCT WMPopupAction &pa
1567 switch( pa.eventCode )
1570 nvar /sdfr=df norm_theta_domain
1571 norm_theta_domain = pa.popNum - 1
1581 STRUCT WMPopupAction &pa
1583 switch( pa.eventCode )
1586 nvar /sdfr=df norm_theta_mode
1587 norm_theta_mode = pa.popNum - 1
1597 STRUCT WMPopupAction &pa
1599 switch( pa.eventCode )
1602 nvar /sdfr=df norm_thetaphi_mode
1603 norm_thetaphi_mode = pa.popNum - 1
1613 STRUCT WMPopupAction &pa
1615 switch( pa.eventCode )
1618 nvar /sdfr=df graph_mode
1619 graph_mode = pa.popNum - 1
1629 STRUCT WMPopupAction &pa
1631 switch( pa.eventCode )
1634 nvar /sdfr=df graph_projection
1635 graph_projection = pa.popNum - 1
1645 STRUCT WMPopupAction &pa
1647 switch( pa.eventCode )
1650 svar /sdfr=df graph_colortable
1651 graph_colortable = StringFromList(pa.popNum - 1, CTabList())