1 #pragma rtGlobals=3 // Use modern global access method and strict wave access. 3 #pragma IgorVersion = 6.2 4 #pragma ModuleName = PearlAnglescanPanel 5 #include "pearl-anglescan-process" 6 #include "pearl-pmsco-import" 47 static strconstant
package_path =
"root:packages:pearl_anglescan_panel:" 49 static strconstant
prefs_objects =
"theta_offset;tilt_offset;phi_offset;alpha_offset;crop_alpha_enable;crop_alpha_value;norm_alpha_enable;norm_alpha_mode;norm_alpha_smoothing;norm_phi_enable;norm_phi_mode;norm_phi_thetarange;norm_theta_enable;norm_theta_mode;norm_theta_smoothing;norm_thetaphi_enable;norm_thetaphi_mode;norm_theta_smoothing;output_folding;output_horizon;graph_mode;graph_projection;graph_colortable;graph_contrast;" 54 dfref savedf = GetDataFolderDFR()
59 if (nvar_exists(init_done))
70 variable /g init_done = 1
78 dfref savedf = getdatafolderdfr()
80 newdatafolder /o/s packages
81 newdatafolder /o/s $package_name
84 string /g graphname = "graph_anglescan_panel"
87 variable /g theta_offset = 0
88 variable /g tilt_offset = 0
89 variable /g phi_offset = 0
90 variable /g alpha_offset = 0
91 variable /g crop_alpha_enable = 0
92 variable /g crop_alpha_value = 25
93 variable /g norm_alpha_enable = 0
94 variable /g norm_alpha_mode = 4
95 variable /g norm_alpha_smoothing = 0.25
96 variable /g norm_theta_enable = 0
97 variable /g norm_theta_mode = 4
98 variable /g norm_theta_smoothing = 0.25
99 variable /g norm_thetaphi_enable = 0
100 variable /g norm_thetaphi_mode = 4
101 variable /g norm_thetaphi_smoothing = 0.25
102 variable /g norm_phi_enable = 0
103 variable /g norm_phi_mode = 4
104 variable /g norm_phi_thetarange = 20
105 string /g output_name = "holo1"
106 variable /g output_folding = 1
107 variable /g output_horizon = 88
108 variable /g graph_mode = 1
110 string /g graph_colortable = "grays"
111 variable /g graph_contrast = 2
114 string /g source_path = ""
115 string /g export_folderpath = "root:"
116 variable /g export_format = 1
119 string /g panel_name = ""
120 string /g preview_graphname = ""
121 string /g dist_x_graphname = ""
122 string /g dist_y_graphname = ""
123 string /g output_graphname = ""
126 make /n=(10,10) /o raw_data, process_data
127 make /o dist_x, dist_x_smoo
128 make /o dist_y, dist_y_smoo
138 dfref saveDF = GetDataFolderDFR()
140 string fullPath = SpecialDirPath("Packages", 0, 0, 0)
142 NewPath/O/C/Q tempPackagePrefsPath, fullPath
143 fullPath += ":preferences.pxp"
145 SetDataFolder root:packages
146 SetDataFolder $package_name
149 KillPath/Z tempPackagePrefsPath
162 dfref saveDF = GetDataFolderDFR()
166 NewDataFolder /O/S packages
167 NewDataFolder /O/S $package_name
168 string fullPath = SpecialDirPath("Packages", 0, 0, 0)
171 GetFileFolderInfo /Q /Z fullPath
173 fullPath += ":preferences.pxp"
174 GetFileFolderInfo /Q /Z fullPath
176 LoadData /O /R /Q fullPath
200 dfref saveDF = GetDataFolderDFR()
201 dfref datadf = GetWavesDataFolderDFR(raw_data)
202 dfref attrdf = datadf:attr
203 if (!DataFolderRefStatus(attrdf))
206 dfref parentdf = GetDataFolderDFR()
207 dfref attrdf = parentdf:attr
214 source_path = GetWavesDataFolder(raw_data, 2)
216 duplicate /o raw_data, raw, process_data
218 wave /sdfr=attrdf /z ManipulatorTheta
219 wave /sdfr=attrdf /z ManipulatorTilt
220 wave /sdfr=attrdf /z ManipulatorPhi
221 if (WaveExists(ManipulatorTheta) && WaveExists(ManipulatorTilt) && WaveExists(ManipulatorPhi))
222 duplicate /o attrdf:ManipulatorTheta, raw_theta, process_theta
223 duplicate /o attrdf:ManipulatorTilt, raw_tilt, process_tilt
224 duplicate /o attrdf:ManipulatorPhi, raw_phi, process_phi
226 DoAlert 0, "Can't find manipulator angle waves.\rCheck that the attr folder exists, or provide values in the following table."
227 make /n=(dimsize(raw_data, 1)) /o raw_theta, raw_tilt, raw_phi
228 make /n=(dimsize(raw_data, 1)) /o process_theta, process_tilt, process_phi
229 edit /k=1 raw_theta, raw_tilt, raw_phi
232 make /o /n=(dimsize(raw_data, 0)) dist_x, dist_x_smoo
233 make /o /n=(dimsize(raw_data, 1)) dist_y, dist_y_smoo
244 wave /sdfr=df process_data
245 svar /sdfr=df preview_graphname
247 if (strlen(preview_graphname) && (wintype(preview_graphname) == 1))
249 DoWindow /F $preview_graphname
254 nvar /sdfr=df graph_contrast
255 svar /sdfr=df graph_colortable
256 set_contrast(graph_contrast, graph_contrast, graphname=preview_graphname, colortable=graph_colortable)
267 variable xdist, ydist
272 wave /sdfr=df dist_x_smoo
273 wave /sdfr=df dist_y_smoo
274 svar /sdfr=df dist_x_graphname
275 svar /sdfr=df dist_y_graphname
278 if (strlen(dist_x_graphname) && (wintype(dist_x_graphname) == 1))
279 DoWindow /F $dist_x_graphname
281 display /k=1 /n=graph_asp_dist_x dist_x, dist_x_smoo
282 dist_x_graphname = s_name
283 ModifyGraph /w=$dist_x_graphname mode(dist_x)=2
284 ModifyGraph /w=$dist_x_graphname lsize(dist_x)=2
285 ModifyGraph /w=$dist_x_graphname rgb(dist_x)=(0,0,0)
290 if (strlen(dist_y_graphname) && (wintype(dist_y_graphname) == 1))
291 DoWindow /F $dist_y_graphname
293 display /k=1 /n=graph_asp_dist_y dist_y, dist_y_smoo
294 dist_y_graphname = s_name
295 ModifyGraph /w=$dist_y_graphname mode(dist_y)=2
296 ModifyGraph /w=$dist_y_graphname lsize(dist_y)=2
297 ModifyGraph /w=$dist_y_graphname rgb(dist_y)=(0,0,0)
316 wave /sdfr=df raw_theta
317 wave /sdfr=df raw_tilt
318 wave /sdfr=df raw_phi
319 nvar /sdfr=df theta_offset
320 nvar /sdfr=df tilt_offset
321 nvar /sdfr=df phi_offset
322 nvar /sdfr=df alpha_offset
324 duplicate /o raw, df:process_data
325 duplicate /o raw_theta, df:process_theta
326 duplicate /o raw_tilt, df:process_tilt
327 duplicate /o raw_phi, df:process_phi
329 wave /sdfr=df process_data
330 wave /sdfr=df process_theta
331 wave /sdfr=df process_tilt
332 wave /sdfr=df process_phi
334 process_theta = raw_theta - theta_offset
335 process_tilt = raw_tilt - tilt_offset
336 process_phi = raw_phi - phi_offset
337 setscale /p x dimoffset(raw, 0) - alpha_offset, dimdelta(raw, 0), waveunits(raw, 0), process_data
355 if (ParamIsDefault(force))
360 wave /sdfr=df process_data
361 nvar /sdfr=df crop_alpha_enable
362 nvar /sdfr=df crop_alpha_value
364 if ((force || crop_alpha_enable) && (crop_alpha_value > abs(dimdelta(process_data, 0))))
365 crop_strip(process_data, -crop_alpha_value, +crop_alpha_value)
384 if (ParamIsDefault(force))
388 dfref saveDF = GetDataFolderDFR()
390 wave /sdfr=df process_data
391 nvar /sdfr=df norm_alpha_enable
392 nvar /sdfr=df norm_alpha_mode
393 nvar /sdfr=df norm_alpha_smoothing
395 if (force || norm_alpha_enable)
396 dfref temp_df = newfreedatafolder()
397 setdatafolder temp_df
398 normalize_strip_x(process_data, smooth_method=norm_alpha_mode, smooth_factor=norm_alpha_smoothing, check=check)
402 duplicate /o check_dist, df:dist_x
403 duplicate /o check_smoo, df:dist_x_smoo
425 if (ParamIsDefault(force))
429 dfref saveDF = GetDataFolderDFR()
431 wave /sdfr=df process_data
432 wave /sdfr=df process_theta
433 wave /sdfr=df process_phi
434 nvar /sdfr=df norm_phi_enable
435 nvar /sdfr=df norm_phi_mode
436 nvar /sdfr=df norm_phi_thetarange
438 if (force || norm_phi_enable)
439 dfref temp_df = newfreedatafolder()
440 setdatafolder temp_df
441 normalize_strip_phi(process_data, process_theta, process_phi, theta_range=norm_phi_thetarange, check=check)
445 duplicate /o check_dist, df:dist_y
446 duplicate /o check_smoo, df:dist_y_smoo
468 if (ParamIsDefault(force))
472 dfref saveDF = GetDataFolderDFR()
474 wave /sdfr=df process_data
475 wave /sdfr=df process_theta
476 nvar /sdfr=df norm_theta_enable
477 nvar /sdfr=df norm_theta_mode
478 nvar /sdfr=df norm_theta_smoothing
480 if (force || norm_theta_enable)
481 dfref temp_df = newfreedatafolder()
482 setdatafolder temp_df
483 normalize_strip_theta(process_data, process_theta, smooth_method=norm_theta_mode, smooth_factor=norm_theta_smoothing, check=check)
487 duplicate /o check_dist, df:dist_y
488 duplicate /o check_smoo, df:dist_y_smoo
510 if (ParamIsDefault(force))
514 dfref saveDF = GetDataFolderDFR()
516 wave /sdfr=df process_data
517 wave /sdfr=df process_theta
518 wave /sdfr=df process_phi
519 nvar /sdfr=df norm_thetaphi_enable
520 nvar /sdfr=df norm_thetaphi_mode
521 nvar /sdfr=df norm_thetaphi_smoothing
523 if (force || norm_thetaphi_enable)
524 dfref temp_df = newfreedatafolder()
525 setdatafolder temp_df
526 normalize_strip_thetaphi(process_data, process_theta, process_phi, smooth_method=norm_thetaphi_mode, smooth_factor=norm_thetaphi_smoothing, check=check)
530 duplicate /o check_dist, df:dist_y
531 duplicate /o check_smoo, df:dist_y_smoo
543 dfref saveDF = GetDataFolderDFR()
553 nvar folding=output_folding
554 nvar horizon=output_horizon
563 pizza_service_2(process_data, output_name, process_theta, process_tilt, process_phi, folding=folding, nograph=1)
565 setdatafolder $output_name
569 values = pol <= horizon ? values : nan
593 svar /sdfr=pkg_df output_name
594 svar /sdfr=pkg_df output_graphname
595 nvar /sdfr=pkg_df graph_projection
596 nvar /sdfr=pkg_df graph_mode
597 svar /sdfr=pkg_df graph_colortable
598 nvar /sdfr=pkg_df graph_contrast
600 if (ParamIsDefault(data_df))
601 dfref data_df = pkg_df
603 if (ParamIsDefault(data_name))
604 data_name = output_name
607 dfref saveDF = GetDataFolderDFR()
608 setdatafolder data_df
614 string graphname = data_name
615 graphname =
display_hemi_scan(data_name, projection=graph_projection, graphtype=graph_mode, graphname=graphname)
616 if (ParamIsDefault(data_df))
617 output_graphname = graphname
621 if (strlen(graphname) && (wintype(graphname) == 1))
622 set_contrast(graph_contrast, graph_contrast, graphname=graphname, colortable=graph_colortable)
635 svar /sdfr=df preview_graphname
636 svar /sdfr=df output_graphname
637 svar /sdfr=df graph_colortable
638 nvar /sdfr=df graph_contrast
640 if (strlen(preview_graphname) && (wintype(preview_graphname) == 1))
641 set_contrast(graph_contrast, graph_contrast, graphname=preview_graphname, colortable=graph_colortable)
643 if (strlen(output_graphname) && (wintype(output_graphname) == 1))
644 set_contrast(graph_contrast, graph_contrast, graphname=output_graphname, colortable=graph_colortable)
653 svar /sdfr=df preview_graphname
654 svar /sdfr=df output_graphname
655 svar /sdfr=df dist_x_graphname
656 svar /sdfr=df dist_y_graphname
658 if (strlen(preview_graphname) && (wintype(preview_graphname) == 1))
659 killwindow $preview_graphname
661 if (strlen(output_graphname) && (wintype(output_graphname) == 1))
662 killwindow $output_graphname
664 if (strlen(dist_x_graphname) && (wintype(dist_x_graphname) == 1))
665 killwindow $dist_x_graphname
667 if (strlen(dist_y_graphname) && (wintype(dist_y_graphname) == 1))
668 killwindow $dist_y_graphname
671 preview_graphname = ""
672 output_graphname = ""
673 dist_x_graphname = ""
674 dist_y_graphname = ""
694 if (ParamIsDefault(do_graph))
699 svar /sdfr=df source_path
700 svar /sdfr=df output_name
701 svar /sdfr=df output_graphname
702 wave raw_data = $source_path
704 dfref saveDF = GetDataFolderDFR()
705 dfref raw_df = GetWavesDataFolderDFR(raw_data)
707 newdatafolder /o /s $dest_name
708 dfref dest_df = GetDataFolderDFR()
712 string graphname = ""
725 svar /sdfr=df output_name
727 dfref saveDF = GetDataFolderDFR()
742 svar /sdfr=df output_name
743 wave /sdfr=df process_data
745 dfref saveDF = GetDataFolderDFR()
748 string s_int = "values"
750 string s_polar = s_prefix + "pol"
751 string s_azim = s_prefix + "az"
753 pmsco_save_scan("", "", num2str(ekin), s_polar, s_azim, "", s_int, "", sdfr=data_df)
769 asp_display_dist_check(0, 1)
776 asp_display_dist_check(0, 1)
783 asp_display_dist_check(0, 1)
795 do_norm_alpha(1, force=1)
802 do_norm_phi(1, force=1)
809 do_norm_theta(1, force=1)
816 do_norm_thetaphi(1, force=1)
824 svar /sdfr=df panel_name
826 if (strlen(panel_name) && (wintype(panel_name) == 7))
827 DoWindow /F $panel_name
831 NewPanel /K=1 /N=anglescan_panel /W=(200,100,479,854) as "angle scan processing"
834 GroupBox gb_source, title="data source"
836 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."}
838 Button b_source_update, help={
"reload the process data from the previous source (link displayed below)"}
839 TitleBox tb_source_path, size={240,21}
840 TitleBox tb_source_path,variable= root:packages:pearl_anglescan_panel:source_path
842 GroupBox gb_offsets, title=
"offsets" 843 SetVariable sv_theta_offset, size={88,16},bodyWidth=60,title=
"theta" 844 SetVariable sv_theta_offset,value= root:packages:pearl_anglescan_panel:theta_offset
845 SetVariable sv_theta_offset, help={
"manipulator theta value that corresponds to normal emission."}
846 SetVariable sv_tilt_offset, size={74,16},bodyWidth=60,title=
"tilt" 847 SetVariable sv_tilt_offset,value= root:packages:pearl_anglescan_panel:tilt_offset
848 SetVariable sv_tilt_offset, help={
"manipulator tilt value that corresponds to normal emission."}
849 SetVariable sv_phi_offset, size={78,16},bodyWidth=60,title=
"phi" 850 SetVariable sv_phi_offset,value= root:packages:pearl_anglescan_panel:phi_offset
851 SetVariable sv_phi_offset, help={
"manipulator phi value that should map to the 3 o'clock angle."}
852 SetVariable sv_alpha_offset, size={90,16},bodyWidth=60,title=
"alpha" 853 SetVariable sv_alpha_offset,value= root:packages:pearl_anglescan_panel:alpha_offset
854 SetVariable sv_alpha_offset, help={
"alpha value that corresponds to normal emission (if the sample normal is properly aligned)."}
856 Button b_save_prefs, help={
"save settings as preferences."}
858 Button b_load_prefs, help={
"load settings from preferences."}
860 GroupBox gb_crop_alpha, title=
"crop alpha" 861 CheckBox cb_crop_alpha_enable, size={50,14}, title=
"enable" 862 CheckBox cb_crop_alpha_enable, help={
"enable cropping at +/- alpha"}
863 CheckBox cb_crop_alpha_enable,variable= root:packages:pearl_anglescan_panel:crop_alpha_enable
864 SetVariable sv_crop_alpha_value, size={90,16},bodyWidth=60,title=
"angle" 865 SetVariable sv_crop_alpha_value,limits={0,30,1},value= root:packages:pearl_anglescan_panel:crop_alpha_value
866 SetVariable sv_crop_alpha_value, help={
"alpha (detection angle) cropping angle"}
868 Button b_crop_alpha_preview, help={
"show a preview of the cropped dataset."}
870 GroupBox gb_norm_alpha, title=
"normalize alpha" 871 CheckBox cb_norm_alpha_enable, size={50,14}, title=
"enable" 872 CheckBox cb_norm_alpha_enable,variable= root:packages:pearl_anglescan_panel:norm_alpha_enable
873 CheckBox cb_norm_alpha_enable, help={
"enable normalization of the alpha distribution"}
875 PopupMenu pm_norm_alpha_mode, mode=5, popvalue=
"loess", value= #
"\"none;binomial;boxcar;scienta;loess;\"" 876 PopupMenu pm_norm_alpha_mode, help={
"alpha normalization method. recommended: loess"}
877 SetVariable sv_norm_alpha_smoothing, size={112,16}, bodyWidth=60, title=
"smoothing" 878 SetVariable sv_norm_alpha_smoothing, limits={0,1,0.05}, value= root:packages:pearl_anglescan_panel:norm_alpha_smoothing
879 SetVariable sv_norm_alpha_smoothing, help={
"smoothing parameter (depends on the normalization method)."}
881 Button b_norm_alpha_check, help={
"show a graph of the normalization function"}
883 Button b_norm_alpha_preview, help={
"show a preview of the normalized dataset (without other normalizations)."}
885 GroupBox gb_norm_phi, title=
"normalize phi" 886 CheckBox cb_norm_phi_enable, size={50,14}, title=
"enable" 887 CheckBox cb_norm_phi_enable,variable= root:packages:pearl_anglescan_panel:norm_phi_enable
888 CheckBox cb_norm_phi_enable, help={
"enable normalization of the phi distribution to reduce the effect of wobble"}
889 SetVariable sv_norm_phi_range, size={118,16}, bodyWidth=60, title=
"theta range" 890 SetVariable sv_norm_phi_range, limits={0,90,1}, value= root:packages:pearl_anglescan_panel:norm_phi_thetarange
891 SetVariable sv_norm_phi_range, help={
"theta range (from normal) to factor into the normalization function"}
893 Button b_norm_phi_check, help={
"show a graph of the normalization function"}
895 Button b_norm_phi_preview, help={
"show a preview of the normalized dataset (without other normalizations)."}
897 GroupBox gb_norm_theta, title=
"normalize theta" 898 CheckBox cb_norm_theta_enable, size={50,14},title=
"enable" 899 CheckBox cb_norm_theta_enable, variable= root:packages:pearl_anglescan_panel:norm_theta_enable
900 CheckBox cb_norm_theta_enable, help={
"enable normalization of the theta distribution (integrated over phi)"}
902 PopupMenu pm_norm_theta_mode,mode=5,popvalue=
"loess",value= #
"\"none;binomial;boxcar;polynomial;loess;\"" 903 PopupMenu pm_norm_theta_mode, help={
"theta normalization method. recommended: loess"}
904 SetVariable sv_norm_theta_smoothing, size={112,16}, bodyWidth=60, title=
"smoothing" 905 SetVariable sv_norm_theta_smoothing, limits={0,1,0.05}, value= root:packages:pearl_anglescan_panel:norm_theta_smoothing
906 SetVariable sv_norm_theta_smoothing, help={
"smoothing parameter (depends on the normalization method)."}
908 Button b_norm_theta_check, help={
"show a graph of the normalization function"}
910 Button b_norm_theta_preview, help={
"show a preview of the normalized dataset (without other normalizations)."}
912 GroupBox gb_norm_thetaphi, size={272,97},title=
"normalize (theta,phi)" 913 CheckBox cb_norm_thetaphi_enable, size={50,14},title=
"enable" 914 CheckBox cb_norm_thetaphi_enable, variable= root:packages:pearl_anglescan_panel:norm_thetaphi_enable
915 CheckBox cb_norm_thetaphi_enable, help={
"enable normalization of the (theta, phi) distribution."}
917 PopupMenu pm_norm_thetaphi_mode, mode=5, popvalue=
"loess", value= #
"\"none;none;none;none;loess;\"" 918 PopupMenu pm_norm_thetaphi_mode, help={
"theta normalization method. recommended: loess"}
919 SetVariable sv_norm_thetaphi_smoothing, size={112,16}, bodyWidth=60, title=
"smoothing" 920 SetVariable sv_norm_thetaphi_smoothing, limits={0,1,0.05}, value= root:packages:pearl_anglescan_panel:norm_thetaphi_smoothing
921 SetVariable sv_norm_thetaphi_smoothing, help={
"smoothing parameter (depends on the normalization method)."}
923 Button b_norm_thetaphi_check, help={
"show a graph of the normalization function"}
925 Button b_norm_thetaphi_preview, help={
"show a preview of the normalized dataset (without other normalizations)."}
927 GroupBox gb_output, title=
"output" 928 SetVariable sv_output_folding, size={95,16}, bodyWidth=60, title=
"folding" 929 SetVariable sv_output_folding, limits={1,20,1}, value= root:packages:pearl_anglescan_panel:output_folding
930 SetVariable sv_output_folding, help={
"n-fold rotational average. 1=no averaging."}
931 SetVariable sv_output_horizon, size={98,16}, bodyWidth=60, title=
"horizon" 932 SetVariable sv_output_horizon, limits={1,90,1}, value= root:packages:pearl_anglescan_panel:output_horizon
933 SetVariable sv_output_horizon, help={
"highest theta to display"}
935 PopupMenu pm_graph_projection, mode=2, popvalue=
"stereographic", value= #
"\"equidistant;stereographic;equal area;gnomonic;orthographic;\"" 936 PopupMenu pm_graph_projection, help={
"projection (theta mapping) mode"}
938 PopupMenu pm_graph_mode, mode=2, popvalue=
"dots", value= #
"\"none;dots;none;image;\"" 939 PopupMenu pm_graph_mode, help={
"graph type: dots = coloured dots on circles; image = interpolated matrix"}
941 Button b_output_calc, help={
"execute data processing with the enabled filters and display the diffractogram."}
943 Button b_output_duplicate, help={
"copy the result to an arbitrary data folder."}
945 Button b_output_itx, help={
"save the result to an igor text file (itx)."}
947 Button b_output_etpi, help={
"save the result to a pmsco angle scan file (etpi)."}
949 GroupBox gb_graph, title=
"graph" 951 PopupMenu pm_graph_colortable, mode=0, value= #
"\"*COLORTABLEPOPNONAMES*\"" 952 PopupMenu pm_graph_colortable, help={
"color table to use in pseudocolor graphs."}
953 SetVariable sv_graph_contrast, size={119,16}, bodyWidth=60, title=
"contrast (%)" 954 SetVariable sv_graph_contrast, limits={0,25,1}, value= root:packages:pearl_anglescan_panel:graph_contrast
955 SetVariable sv_graph_contrast, help={
"contrast value (percentile)."}
957 Button b_graph_update, help={
"update the existing graph."}
959 Button b_graph_png, help={
"save the graph in png format."}
967 svar /sdfr=df panel_name
969 variable gb_space = 2
970 variable gb_internal_top = 16
971 variable gb_internal_bot = 4
972 variable line_space = 22
990 GroupBox gb_source,pos={4,gb_top}
991 gb_ht = gb_internal_top
992 Button b_source_select,pos={17, gb_top + gb_ht + b_adj},size={50,20}
993 Button b_source_update, pos={67, gb_top + gb_ht + b_adj},size={50,20}
995 TitleBox tb_source_path,pos={18, gb_top + gb_ht + tb_adj},size={240,21}
997 gb_ht += gb_internal_bot
998 GroupBox gb_source, size={272,gb_ht}
1000 gb_top += gb_ht + gb_space
1001 GroupBox gb_offsets,pos={4,gb_top}
1002 gb_ht = gb_internal_top
1003 SetVariable sv_theta_offset,pos={46, gb_top + gb_ht + sv_adj},size={88,16}
1004 Button b_save_prefs,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1006 SetVariable sv_tilt_offset,pos={60, gb_top + gb_ht + sv_adj},size={74,16}
1007 Button b_load_prefs,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1009 SetVariable sv_phi_offset,pos={56, gb_top + gb_ht + sv_adj},size={78,16}
1011 SetVariable sv_alpha_offset,pos={44, gb_top + gb_ht + sv_adj},size={90,16}
1013 gb_ht += gb_internal_bot
1014 GroupBox gb_offsets, size={272,gb_ht}
1016 gb_top += gb_ht + gb_space
1017 GroupBox gb_crop_alpha,pos={4,gb_top}
1018 gb_ht = gb_internal_top
1019 CheckBox cb_crop_alpha_enable,pos={73, gb_top + gb_ht + cb_adj},size={50,14}
1021 SetVariable sv_crop_alpha_value,pos={44, gb_top + gb_ht + sv_adj},size={90,16}
1022 Button b_crop_alpha_preview,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1024 gb_ht += gb_internal_bot
1025 GroupBox gb_crop_alpha, size={272,gb_ht}
1027 gb_top += gb_ht + gb_space
1028 GroupBox gb_norm_alpha,pos={4,gb_top}
1029 gb_ht = gb_internal_top
1030 CheckBox cb_norm_alpha_enable,pos={73, gb_top + gb_ht + cb_adj},size={50,14}
1032 PopupMenu pm_norm_alpha_mode,pos={36, gb_top + gb_ht + pm_adj},size={138,21}
1033 Button b_norm_alpha_check,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1035 SetVariable sv_norm_alpha_smoothing,pos={22, gb_top + gb_ht + sv_adj},size={112,16}
1036 Button b_norm_alpha_preview,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1038 gb_ht += gb_internal_bot
1039 GroupBox gb_norm_alpha, size={272,gb_ht}
1041 gb_top += gb_ht + gb_space
1042 GroupBox gb_norm_phi,pos={4,gb_top}
1043 gb_ht = gb_internal_top
1044 CheckBox cb_norm_phi_enable,pos={73, gb_top + gb_ht + cb_adj},size={50,14}
1045 Button b_norm_phi_check,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1047 SetVariable sv_norm_phi_range,pos={15, gb_top + gb_ht + sv_adj},size={118,16}
1048 Button b_norm_phi_preview,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1050 gb_ht += gb_internal_bot
1051 GroupBox gb_norm_phi, size={272,gb_ht}
1053 gb_top += gb_ht + gb_space
1054 GroupBox gb_norm_theta,pos={4,gb_top}
1055 gb_ht = gb_internal_top
1056 CheckBox cb_norm_theta_enable,pos={73, gb_top + gb_ht + cb_adj},size={50,14}
1058 PopupMenu pm_norm_theta_mode,pos={35, gb_top + gb_ht + pm_adj},size={138,21}
1059 Button b_norm_theta_check,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1061 SetVariable sv_norm_theta_smoothing,pos={21, gb_top + gb_ht + sv_adj},size={112,16}
1062 Button b_norm_theta_preview,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1064 gb_ht += gb_internal_bot
1065 GroupBox gb_norm_theta, size={272,gb_ht}
1067 gb_top += gb_ht + gb_space
1068 GroupBox gb_norm_thetaphi,pos={4,gb_top}
1069 gb_ht = gb_internal_top
1070 CheckBox cb_norm_thetaphi_enable,pos={73, gb_top + gb_ht + cb_adj},size={50,14}
1072 PopupMenu pm_norm_thetaphi_mode,pos={35, gb_top + gb_ht + pm_adj},size={138,21}
1073 Button b_norm_thetaphi_check,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1075 SetVariable sv_norm_thetaphi_smoothing,pos={21, gb_top + gb_ht + sv_adj},size={112,16}
1076 Button b_norm_thetaphi_preview,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1078 gb_ht += gb_internal_bot
1079 GroupBox gb_norm_thetaphi, size={272,gb_ht}
1081 gb_top += gb_ht + gb_space
1082 GroupBox gb_output,pos={4,gb_top}
1083 gb_ht = gb_internal_top
1084 SetVariable sv_output_folding,pos={38, gb_top + gb_ht + sv_adj},size={95,16}
1085 Button b_output_calc,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1087 SetVariable sv_output_horizon,pos={35, gb_top + gb_ht + sv_adj},size={98,16}
1088 Button b_output_duplicate,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1090 PopupMenu pm_graph_projection,pos={24, gb_top + gb_ht + pm_adj},size={149,21}
1091 Button b_output_itx,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1093 PopupMenu pm_graph_mode,pos={44, gb_top + gb_ht + pm_adj},size={129,21}
1094 Button b_output_etpi,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1096 gb_ht += gb_internal_bot
1097 GroupBox gb_output, size={272,gb_ht}
1099 gb_top += gb_ht + gb_space
1100 GroupBox gb_graph,pos={4,gb_top}
1101 gb_ht = gb_internal_top
1102 PopupMenu pm_graph_colortable,pos={21, gb_top + gb_ht + pm_adj},size={152,21}
1103 Button b_graph_update,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1105 SetVariable sv_graph_contrast,pos={14, gb_top + gb_ht + sv_adj},size={119,16}
1106 Button b_graph_png,pos={186, gb_top + gb_ht + b_adj},size={80,20}
1108 gb_ht += gb_internal_bot
1109 GroupBox gb_graph, size={272,gb_ht}
1111 gb_top += gb_ht + gb_space
1119 svar /sdfr=df panel_name
1120 if (wintype(panel_name) == 7)
1122 nvar /sdfr=df norm_alpha_mode
1123 m = norm_alpha_mode + 1
1124 PopupMenu pm_norm_alpha_mode win=$panel_name, mode=m
1125 nvar /sdfr=df norm_theta_mode
1126 m = norm_theta_mode + 1
1127 PopupMenu pm_norm_theta_mode win=$panel_name, mode=m
1128 nvar /sdfr=df norm_thetaphi_mode
1129 m = norm_thetaphi_mode + 1
1130 PopupMenu pm_norm_thetaphi_mode win=$panel_name, mode=m
1131 nvar /sdfr=df graph_mode
1133 PopupMenu pm_graph_mode win=$panel_name, mode=m
1134 nvar /sdfr=df graph_projection
1135 m = graph_projection + 1
1136 PopupMenu pm_graph_projection win=$panel_name, mode=m
1137 svar /sdfr=df graph_colortable
1138 m = 1 + WhichListItem(graph_colortable, CTabList())
1139 PopupMenu pm_graph_colortable win=$panel_name, mode=m
1144 STRUCT WMButtonAction &ba
1146 switch( ba.eventCode )
1158 STRUCT WMButtonAction &ba
1160 switch( ba.eventCode )
1172 STRUCT WMButtonAction &ba
1174 switch( ba.eventCode )
1176 dfref dfBefore = GetDataFolderDFR()
1177 Execute /q/z "CreateBrowser prompt=\"Select 2D holo scan wave\", showWaves=1, showVars=0, showStrs=0"
1178 dfref dfAfter = GetDataFolderDFR()
1179 SetDataFolder dfBefore
1181 SVAR list = S_BrowserList
1183 if ((flag != 0) && (ItemsInList(list) >= 1))
1184 string wname = StringFromList(0, list)
1198 STRUCT WMButtonAction &ba
1200 switch( ba.eventCode )
1202 dfref packdf = $package_path
1203 svar /sdfr=packdf source_path
1204 wave /z w = $source_path
1208 DoAlert 0, "can't find source data."
1219 STRUCT WMButtonAction &ba
1221 switch( ba.eventCode )
1233 STRUCT WMButtonAction &ba
1235 switch( ba.eventCode )
1247 STRUCT WMButtonAction &ba
1249 switch( ba.eventCode )
1261 STRUCT WMButtonAction &ba
1263 switch( ba.eventCode )
1275 STRUCT WMButtonAction &ba
1277 switch( ba.eventCode )
1289 STRUCT WMButtonAction &ba
1291 switch( ba.eventCode )
1303 STRUCT WMButtonAction &ba
1305 switch( ba.eventCode )
1317 STRUCT WMButtonAction &ba
1319 switch( ba.eventCode )
1331 STRUCT WMButtonAction &ba
1333 switch( ba.eventCode )
1345 STRUCT WMButtonAction &ba
1347 switch( ba.eventCode )
1360 STRUCT WMButtonAction &ba
1362 switch( ba.eventCode )
1365 variable do_graph = 1
1366 prompt dest_folder, "destination folder name (relative to data source)"
1367 prompt do_graph, "duplicate graph (yes = 1, no = 0)"
1368 doprompt "duplicate", dest_folder, do_graph
1381 STRUCT WMButtonAction &ba
1383 switch( ba.eventCode )
1386 wave /sdfr=df process_data
1388 ekin = NumberByKey("KineticEnergy", note(process_data), "=", "\r")
1389 prompt ekin, "kinetic energy"
1390 doprompt "save etpi", ekin
1403 STRUCT WMButtonAction &ba
1405 switch( ba.eventCode )
1417 STRUCT WMButtonAction &ba
1419 switch( ba.eventCode )
1431 STRUCT WMButtonAction &ba
1433 switch( ba.eventCode )
1436 svar /sdfr=df source_path
1437 svar /sdfr=df output_graphname
1438 if (WinType(output_graphname) == 1)
1439 SavePICT /WIN=$output_graphname /E=-5 /B=144 /TRAN=0
1450 STRUCT WMPopupAction &pa
1452 switch( pa.eventCode )
1455 nvar /sdfr=df norm_alpha_mode
1456 norm_alpha_mode = pa.popNum - 1
1466 STRUCT WMPopupAction &pa
1468 switch( pa.eventCode )
1471 nvar /sdfr=df norm_theta_mode
1472 norm_theta_mode = pa.popNum - 1
1482 STRUCT WMPopupAction &pa
1484 switch( pa.eventCode )
1487 nvar /sdfr=df norm_thetaphi_mode
1488 norm_thetaphi_mode = pa.popNum - 1
1498 STRUCT WMPopupAction &pa
1500 switch( pa.eventCode )
1503 nvar /sdfr=df graph_mode
1504 graph_mode = pa.popNum - 1
1514 STRUCT WMPopupAction &pa
1516 switch( pa.eventCode )
1519 nvar /sdfr=df graph_projection
1520 graph_projection = pa.popNum - 1
1530 STRUCT WMPopupAction &pa
1532 switch( pa.eventCode )
1535 svar /sdfr=df graph_colortable
1536 graph_colortable = StringFromList(pa.popNum - 1, CTabList())
static variable bp_norm_phi_preview(WMButtonAction *ba)
variable pizza_service_2(wave data, string nickname, wave m_theta, wave m_tilt, wave m_phi, variable npolar=defaultValue, variable nograph=defaultValue, variable folding=defaultValue, variable xpdplot=defaultValue)
create a pizza plot from a measured (energy-integrated) data strip
variable normalize_strip_theta(wave strip, wave theta, variable theta_offset=defaultValue, variable smooth_method=defaultValue, variable smooth_factor=defaultValue, variable check=defaultValue)
divide the strip by the average polar distribution.
static variable do_init_process(variable check)
initialize the process data with a copy of the raw data.
static variable preview_norm_alpha()
variable asp_calculate_output()
calculate the output using all enabled processing filters.
static variable check_norm_alpha()
variable asp_import_raw(wave raw_data)
import raw data
variable crop_strip(wave strip, variable xlo, variable xhi)
crop a strip at the sides.
variable ad_update_profiles(wave image)
update a profiles graph with new data.
static variable bp_save_prefs(WMButtonAction *ba)
variable asp_save_output_itx()
save the output diffractogram to an igor text file
string display_hemi_scan(string nickname, variable projection=defaultValue, variable graphtype=defaultValue, variable do_ticks=defaultValue, variable do_grids=defaultValue, string graphname=defaultValue)
display a plot of a hemispherical angle scan.
static variable pmp_graph_colortable(WMPopupAction *pa)
static variable save_prefs()
save persistent package data to the preferences file.
static variable bp_graph_update(WMButtonAction *ba)
dfr find_hemi_data(string nickname, string *prefix, string *intwave)
finds the folder, prefix and name of holo waves given their nick name
static variable bp_norm_alpha_preview(WMButtonAction *ba)
static variable preview_crop_alpha()
static variable pmp_norm_alpha_mode(WMPopupAction *pa)
static variable init_package()
static variable preview_norm_theta()
static variable bp_source_update(WMButtonAction *ba)
static variable bp_norm_thetaphi_check(WMButtonAction *ba)
static variable bp_norm_theta_preview(WMButtonAction *ba)
static variable do_crop_alpha(variable check, variable force=defaultValue)
alpha-crop the process data.
static const string package_path
data folder path
static variable bp_crop_alpha_preview(WMButtonAction *ba)
static variable do_norm_thetaphi(variable check, variable force=defaultValue)
theta,phi-normalize the process data.
static variable bp_load_prefs(WMButtonAction *ba)
static variable bp_output_etpi(WMButtonAction *ba)
variable asp_display_dist_check(variable xdist, variable ydist)
display a graph window of the distribution checks.
static variable bp_graph_png(WMButtonAction *ba)
static variable pmp_graph_mode(WMPopupAction *pa)
static variable preview_norm_phi()
string pmsco_save_scan(string pathname, string filename, string energy, string theta, string phi, string alpha, string intensity, string sigma, dfref sdfr=defaultValue)
save waves in a PMSCO scan data file.
static variable pmp_norm_theta_mode(WMPopupAction *pa)
variable interpolate_hemi_scan(string nickname, variable projection=defaultValue)
interpolate a hemispherical scan onto a rectangular grid
static variable do_norm_phi(variable check, variable force=defaultValue)
phi-normalize the process data.
static variable bp_norm_thetaphi_preview(WMButtonAction *ba)
static variable do_norm_theta(variable check, variable force=defaultValue)
theta-normalize the process data.
static variable check_norm_phi()
static const string prefs_objects
semicolon-separated list of persistent variable, string, and wave names
variable asp_show_panel()
create the angle scan processing panel
static variable bp_output_calc(WMButtonAction *ba)
static variable arrange_controls()
static variable bp_norm_theta_check(WMButtonAction *ba)
variable save_hemi_scan(string nickname, string pathname, string filename)
save a hemispherical scan to an Igor text file
string asp_duplicate_output(string dest_name, variable do_graph=defaultValue)
copy the output data to a new folder
variable normalize_strip_phi(wave strip, wave theta, wave phi, variable theta_offset=defaultValue, variable theta_range=defaultValue, variable check=defaultValue)
divide the strip by a sine function in phi (wobble correction).
variable normalize_strip_thetaphi(wave strip, wave theta, wave phi, variable theta_offset=defaultValue, variable smooth_method=defaultValue, variable smooth_factor=defaultValue, variable check=defaultValue)
divide the strip by a smooth polar-azimuthal distribution.
const variable kProjStereo
static variable update_menus()
update the popup menus to reflect the values of the global variables
static variable bp_output_itx(WMButtonAction *ba)
variable asp_close_graphs()
close all graphs created by the angle scan panel
static variable do_norm_alpha(variable check, variable force=defaultValue)
alpha-normalize the process data.
string ad_display_profiles(wave image, string filter=defaultValue)
open a new profiles graph window.
static variable load_prefs()
load persistent package data from the preferences file.
static variable check_norm_theta()
variable set_contrast(variable pcmin, variable pcmax, string graphname=defaultValue, string colortable=defaultValue)
set the pseudocolor contrast by percentile.
variable asp_display_previews()
display a graph window of the processed data.
variable asp_save_output_etpi(variable ekin)
save the output diffractogram to a PMSCO ETPI file
static variable bp_output_duplicate(WMButtonAction *ba)
static variable bp_norm_alpha_check(WMButtonAction *ba)
static variable check_norm_thetaphi()
static variable bp_norm_phi_check(WMButtonAction *ba)
static variable bp_source_select(WMButtonAction *ba)
static variable AfterCompiledHook()
initialize package data once when the procedure is first loaded
variable duplicate_hemi_scan(string source_nickname, dfref dest_folder, string dest_nickname, variable xpdplot=defaultValue)
duplicate a hemispherical scan dataset.
static variable pmp_norm_thetaphi_mode(WMPopupAction *pa)
static variable preview_norm_thetaphi()
string asp_display_output(dfref data_df=defaultValue, string data_name=defaultValue)
display the output diffractogram
static const string package_name
package name is used as data folder name
variable asp_update_graph()
update graphs with new color table or contrast
interactive processing of angle scanned XPD data.
static variable pmp_graph_projection(WMPopupAction *pa)
variable normalize_strip_x(wave strip, variable smooth_method=defaultValue, variable smooth_factor=defaultValue, variable check=defaultValue)
divide the strip by the average X distribution.