-
Notifications
You must be signed in to change notification settings - Fork 2
/
SLPA_ce20180409b.ipf
22165 lines (17719 loc) · 739 KB
/
SLPA_ce20180409b.ipf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#pragma rtGlobals=3 // Use modern global access method and strict wave access.
/////////////////////////////////////
//////////CHANGE LOG/////////////////
////////////////////////////////////
//SLPA ver. ce20180409b.ipf
// - [UTIL] - Add OBJ vs STV panel in Utility Belt (find parameter for IXPS scans)
// - [UTIL] - Modify colour scale adjust panel in Utility Belt (can now change color table 'ctab' and set/apply default setting.
// - [UTIL] - Adjust z value for image wave (to offset and equalize BG for e.g. parameter map comparisons)
//SLPA ver. ce20180405a.ipf
// - [DXPS] - Bugfixes - Select and enable all parameter input after loading new data.
// - [DXPS] - Automatically generate result after 'Copy Dispersion from'
// - [UTIL] - Bugfixes - prevent error when a non-graph window is active.
//SLPA ver. ce20180404b.ipf
// - [IXPS] - Isochromaticity [SLP_IXPS_GenIsochrome]: Change from using 2D paraboloid to 'Rosenbrock's Banana Function' to better represent the isochromaticity of the PEEM's optics.
//SLPA ver. ce20180402b.ipf
// - [UTIL] - Add Color scale adjust panel
//SLPA ver. ce20180402a.ipf
// - [UTIL] - Add Launcher panel (under Util section)
//SLPA ver. ce20180319a.ipf
// - [MGFit] - Add multi-GLA peak fitting program (MGFit modules)
//Function
// - Slider
// - BG subtraction
// - Peak select
// - Copy Guess values
// - Default constraint
// - use default constraint and edit
// - Peak library and import peak library from a .txt file
// - Colour changes /w hold or guess out of range
// - Save/Load guesses
// - Fit and show fit results
// - Display last fit result
// - BG adjust and record
// - Export fit results
// - Check for duplicated new data W name
// - Allow user to change data W name
// - Peak area report
// - Fine steps for guess coef. adjustment
// - Display 'Kn' for each parameter
// - Arbitrary constraints
// - Default constraint for all peaks
//TODOs
// - Font too big for Window Igor - Need to increase the panel size
//SLPA ver. ce20180222a.ipf
// - [UTIL] Bug fix: SLP_Util_ShirleyGen to be able to create Shirley BG for both positive and negative dE.
//SLPA ver. ce20180221a.ipf
// - [DXPS] SLP_DXPS_Convert4PCA() - convert Map Volume Wave into a table to be used for PCA analysis software
//SLPA ver. ce20180219a.ipf
// - [UTIL] SLP_Util_Split2D() to split 2D wave (e.g. TRXPS scan) into multiple 1D waves
// - [UTIL] SLP_Util_NormalizeMultiWaves()
//SLPA ver. ce20180212a.ipf
// - [UTIL] add SLP_Util_ShirleyGen to generate Shirley BG and subtract the BG (for XPS)
//SLPA ver. ce20180201a.ipf
// - [DXPS] Ask users for photon energy (hv) when loading the scan.
//SLPA ver. ce20180131b.ipf
// - [DXPS] Bug fixes on the BE/STV swap for Merged spectrum after changing Disp. Factor or (x0,y0)
// - [DXPS] Change default values
//SLPA ver. ce20180131a.ipf
// - [DXPS] Bug fixes on the overwriting exported waves.
//SLPA ver. ce20180130b.ipf
// - [DXPS] Initialize the selected dispersive line (vertical line in the middle)
//SLPA ver. ce20180130a.ipf
// - [DXPS] Ask whether user wants to overwrite the wave when exporting the plot
//SLPA ver. ce20180116a.ipf
// - [DXPS] Check whether the selected scan name is duplicated or not.
//SLPA ver. ce20171227a.ipf
// - [DXPS] Bug fix - Newly loaded scan is selected after the load finish.
//SLPA ver. ce20171030a.ipf
// - [DXPS] Bug fix - add the auto detection of STV start, STV step from .txt file in the DXPS scan.
//SLPA ver. ce20170920a.ipf
// - [IXPS] Bug fix - Extract LEEM Cutoff - previously MapVol size is only 1 layer and only collect the first parameter. Corrected now.
//SLPA ver. ce20170906d.ipf
// - [LL] Note field is now editable. Can make note for individual image
//SLPA ver. ce20170906c.ipf
// - [Util] Ask user to find SLP_Auger_W.ibw or SLP_BE_W.ibw if they have not been loaded to the current Igor folder.
//SLPA ver. ce20170906b.ipf
// - [DXPS] Add Auger data to peak assignment
// - [IXPS] Add Auger data to peak assignment
//SLPA ver. ce20170906a.ipf
// - [LL] Bug fix - Display preview image once the 'Preview' checkbox is clicked [ListBoxProx_LL_FileList]
//SLPA ver. ce20170904a.ipf
// - [DXPS] Bug fix - Peak assignment hook function.
//SLPA ver. ce20170816b.ipf
// - [IXPS] Draw ROI manually instead of using auto- screen mask creation
//SLPA ver. ce20170816a.ipf
// - [DXPS] SLP_DXPS_RestoreRawData - If the raw data has been moved, ask user to browse for it.
//SLPA ver. ce20170815b.ipf
// - [DXPS] Peak assignment function.
//SLPA ver. ce20170815a.ipf
// - [DXPS] BE/KE display for the combined spectrum. Export to BE or KE. Prompt for analyzer's WF if no input.
//SLPA ver. ce20170728a.ipf
// - [IXPS] Fix small bugs on peak assignment/BE display function (initialize new scans)
// - [IXPS] Warn when users try to use existing volume names (incl. names used by other SLP functions) during Load Scan..
//SLPA ver. ce20170713a.ipf
// - [IXPS] Peak assignment (using BE table)
//SLPA ver. ce20170707c.ipf
// - [IXPS] Export and plot z-profile (both KE and BE)
//SLPA ver. ce20170707a.ipf
// - [IXPS] Save z-profile cursor positions for each scan
// - [IXPS] Able to switch KE<->BE scale
//SLPA ver. ce20170707a.ipf
// - [IXPS] Bug fix - Delete all scans = ok (previously didn't actually delete raw data..)
//SLPA ver. ce20170706c.ipf
// - [IXPS] Automatically detect STV start, STV step when loading IXPS,DXPS,LEEDIV,LEEMIV
//SLPA ver. ce20170706b.ipf
// - [DLA] Bug fix - Don't display anything if there is no image loaded yet
// - [UTIL] LoadMultImg2Vol can now load either .tif and .TIFF for
// - [IXPS] Bug fix - Error when 'See z-profile' is checked when loading new volume.
//SLPA ver. ce20170706a.ipf
// - [DLA] Include Diffusion Limit Aggregation analysis (SLP_DLA_ce20170504d.ipf)
//SLPA ver. ce20170629a.ipf
// - [IXPS] Can use cursor to see different z-profile in different area. First use of 'hook' function in Igor.
//SLPA ver. ce20170627a.ipf
// - [IXPS] Add 'LEEM cut-off' mapping (for rel. WF measurement with LEEM).
//SLPA ver. ce20170607a.ipf
// - [IXPS] Can now adjust Isochromaticity mathematical function (displayed in SetVar controls)
//SLPA ver. ce20170606d.ipf
// - [IXPS] Use Inversed GLA instead (for KE scale)
//SLPA ver. ce20170606c.ipf
// - [IXPS] Add 4GLAs fit function
// - [IXPS] Small bug fix on display selected param. map (applied auto-intensity)
//SLPA ver. ce20170606b.ipf
// - [IXPS] Add 3GLAs fit function
//SLPA ver. ce20170606a.ipf
// - [IXPS] adjust LLim and ULim after loading
// - [IXPS] Bug fixes for the Display/selected image vs. histogram and auto intensity adjust
//SLPA ver. ce20170430b.ipf
// - [IXPS] Change to green color
//SLPA ver. ce20170430a.ipf
// - [IXPS] Copy fit coef. from another scan
//SLPA ver. ce20170429b.ipf
// - [IXPS] Update fit mask LLim and ULim variable with scan selection
// - [IXPS] Copy screen mask from another scan (with the same bin)
//SLPA ver. ce20170429a.ipf
// - [IXPS] 1GLA fit mode added
// - [IXPS] Hold functionality for keeping fit coef. constant
//SLPA ver. ce20170424a.ipf
// - [IXPS] Improve the auto range funtionality - use median then average MatrixFilter (avg works quite well with NaN)
//SLPA ver. ce20170424a.ipf
// - [IXPS]
// - Correc the Image selection function - should work properly now
// - Do a 'low pass filter' with MatrixFilter in the 'median' mode to remove speckles. The histogram looks much better this way.
// - Automatically set the Color min/max using the LPF'ed Map
// - Update the color min/max slider and color min/max update the ParamDisplayW
// - Clean up the DisplaySel function (call the SelectImage function instead of doing it by itself)
//SLPA ver. ce20170420a.ipf
// - [NEX] Load scans.. button is now load only one scan at a time. It also checks and corrects the scan name automatically.
// - [IXPS] Auto create correction (using 2d parabolic correction function)
//SLPA
// - Load_LEEMDAT_ce20170226a.ipf
// - SLP_NEXAFS_ce20170104a.ipf
// - DispXPS_Panel_ce20170302f.ipf
// - ImgXPS_Panel_ce20170321e.ipf
// - SLP_Util_ce20170226a.ipf
//ver. ce20170104a
// - Add SLP_Load_oldLEEM_Img() - Load old .DAT file from Elmitec LEEM (before 2014)
//ver. ce20161216a
// - Add image creation date/time in the param list
//ver. ce20161215c
// - Add Image notes
// - Some cosmetic changes
// - Bug fix on deleting many DataSet
//ver. ce20161215b
// - Delete dataset is available. It warns when some images are in used. Dataset won't be deleted in that case.
//ver. ce20161214a
// - Cross-hair in the Find screen dialog (only if the x-y scale is not set). Values of new x_center and y_center can be manually changed.
// - Change Plot single image button to Plot fullsize image (required that the data file is accessible). Plot single image still works with double clicking the image name in the list
//ver. ce20161210a
// - Stitch - ROI can be modified. Mask creation window also shows selected image behind the mask.
//ver. ce20161209a
// - Add functions to scale images, find screen position, and image stitching
// - Plot the displayed image w/ description legend
// - Export selected images to TIFF files in selected folder w/ a .csv file containing image details
//[from Stitch .ipf Ver. ce20161128a.ipf
// - Work with LoadLEEM .ipf
// - Set scale for selected images in the dataset. Scale can be pixel, relative or absolute (offset with Mitutoyo X,Y reading).
//Ver. ce20161207a.ipf
// - Stitching almost works. Need algorithm for some FOV adjustment (e.g. 75um FOV is not really
//ver. ce20161119a
// - Load images (.DAT) in batch. Read and store important LEEM/PEEM parameters from the header of the image file
//ver.ce20161123a
// - User interface
// - Load sets of image and automatically save the image set.
//ver.ce20161124a
// - Bug fixed - solve the problem when the some image number is missing. Change the search algorithm in the SLP_LL_setup function (now ver.2)
// - Record no. of images in the 4th column of DatasetListW
// - Cosmetic change to the image plot display
//ver. ce20161126a
// - New dataset selection and display automatically after loading
// - Default resize option is 0.25 and is kept afterward
// - Bug fixed - parameter display update
// - Dataset name suggestion using folder name
//ver. ce20161127a
// - Warn when users use duplicated dataset name
//ver. ce20161127b
// - Remove the 128 dataset limit. ImgSetListW size is increased with added datasets
// - use 'row=" in the ListBox selection so that the selection is always visible when switching between datasets
// - Prevent users from clicking outside the range in Image and DataSet listboxes
//ver. ce20161127c
// - Image/dataset selection with SelWave
// - Select all/select none buttons for image list
//ver. ce20161127d
// - Image ctab (colour/first colour/last colour)is retained for the next image selection. It is saved for the next time the program is run
//ver. ce20170226a
// - Add new image load panel. The multiple image loading is easier and more efficient.
// - Bug fix on the deleting datasets (the previous version doesn't use /TXOP=6 in the FindValue so the deletion had been wrong
/////////////////////////////////////
/////////////TODOs/////////////////
/////////////////////////////////////
// [LEED-IV]
// - Extract IV curves from LEEM's LEED
// [UTIL]
// - Project creation
// - Auto detect/index new data
// - Auto update??
// - Report creation assist - Report panel
// [LoadLEEM]
// + Functionality
// - ***Make notes for individual images [to be used for Report Making feature]
// - **Report making
// - Record time when images have been captured
// + Bug fixes
// - Editable note column for images and dataset
// - Load TIFF&other file types as well
// - Should be able to distinguish the LEED/Disp. mode and prevent program from interrupting the processes
// - Error when all datasets are deleted
// - FOV name table <-> FOV variable
// [NEXAFS]
// - Option to load existing wave instead of from .txt file (e.g. z-profile waves extracted from [ImgXPS]
// - Fit and Global fit
// - Report creation - export to LaTeX
// - Rescale selected graph button
// - Clear all graph selections button
// - Memorise recipe parameter values
// [ImgXPS]
// - Volume data pre-processing - [z-wave] Normalize, subtraction, and [xy wave] Isochromaticity correction, brightness correction before extraction
// + Additional features *
// - Th. adj. for screen mask creation
// - Error report when scrn. msk. creation is not successful
// - Coef. real-time display for curve fitting
// - Est. time for extraction
// - Quick ext. mode (no fit display)
// - Error marking for bad fit.
// [DispXPS]
// - Export
// - Show the notes in the label instead of wavename
// - Export to GLAFit
// - Use 'absolute' scale (in ref. to the MCP screen size).
// Bug fixes
// - Axis label disappears for both indv. and cmbn. plots
// - Disp. and P. lines display is not correct sometimes.
// [DLA]
// - Bug fixes - duplicate Voronoi cell
// - Manually movable/editable/addable island centers
/////////////////////////////////////
/////////////ARCHIVE/////////////////
/////////////////////////////////////
//CODE: DispXPSPanel
//Ver. ce20170301a
// - First working version
// - Data loaded and saved in separated folders (Raw data in one folder)
// - Adjust threshold and minimum disp. size (in pixels) to find a dispersive line automatically
// - Extract XPS spectra from different position in the disp. line (several param. can be selected in the panel)
// - Disp. factor and energy position can be calibrated in the panel
//Ver. ce20170301b
// - Can now choose Disp. line and subsequent P. lines gen. param. from another scan (helps when measuring low S/N scans, or Ef)
// - Can correct the first frame which sometimes has unusually high intensity (by copying the second frame onto it - losing 1 data point).
//Ver. ce20170301c
// - Can remove the raw data to reduce the project file size.
// - Small code clean-up
//Ver. ce20170301d
// - Can restore raw data for re-processing
//Ver. ce20170302a
// - Small bug fixes (control toggling when scan has/has no raw data
// - Select all/select none buttons
//Ver. ce20170302b
// - Export and plot results (combined spectrum only)
//Ver. ce20170302c
// - Add Scan Note (all the parameters used in the data extraction) to the exported wave
//Ver. ce20170302d
// - Bug fixed: Error when trying to adjust Disp. Factor/x0/y0 w/o raw data (removed a wave refrence to the raw data)
// - Bug fixed: Copy dispersive line from.. button -> Error conditioning with V_Flag (Continue -> V_Flag=0)
// - Bug fixed: NLines is not stored in the ScanListW! -> Fixed
// - Check ScanName and make suggestions for users to conform to Standard Wave Name. [CODE: SLP_Util_WNameCheck], [CODE: SLP_Util_WNameSuggest]
//Ver. ce20170302e
// - Manual edit of the disp. line
//Ver. ce20170302f
// - Cosmetic change - panel colour = blue
//[POS]IXPS Begin
//CODE: ImgXPSPanel
//
// Ver.ce20170310c
// - Almost working - Ver. 0.7
// - Can Load and display image volume w/ slider
// - Automatic screen mask creation
// - Loop data fitting for (binned) each pixel
// - Extraction progress (in %)
// - Load correction waves from DataBrowser window
// - Correction fine-adjustment (x,y,magnitude)
// Ver.ce20170311a
// - ListBoxProc for DisplayListW
// - ListBoxProc for XPS param ListW
// Ver.ce20170311b
// - Auto color scale/int. for the image volume/maps
// - Some fix on using the ScanList ListBox
// - properly show ImgVol or IntgImg depending on whether there is raw data stored in the project
// Ver.ce20170311d
// - Can now use slider to adjust color scale
// - Radio button to select which Image to adjust the color scale
// - Use STRUCT of the checkbox control.
// Ver.ce20170312a
// - Export/display maps
// - Still with some bugs
// - Can still extract only the cutoff (w/ ERF fit) for WF measurements
// Ver. ce20170312b
// - First working version - Ver. 1.0
// - Many bug fixes..
// Ver. ce20170317a
// - Small bug fix (automatically select newly loaded Scans, display fitted curve)
// Ver. ce20170321b
// - Can now select which fitting mode to use (2 modes - Secondary Yield Cut-off for WF measurements, and 2GLAs for isochromaticity map)
// - 'Fast Extraction' mode (much faster with /N=1 in FuncFit)
// Ver. ce20170321c
// - Adjust Threshold for finding screen
// Ver. ce20170321d
// - Clean up the windows. Move graph and control positions.
// Ver. ce20170321e
// - Init check. Bug fixes (not 100% yet)
//Igor procedure to assist BL3.2Ub operation and data analyses
//ver. ce20161031a
// - Can load, draw line, change line profile width, and plot profile and intensity vs. time plot
// - Still very buggy
//ver. ce20161107b
// - Initialize program (creating Package waves, global variables, etc.)
// - Plotting the result
// - Label and formatting graph
// - Stored and display previous image series
// - Updating line profiles with line profile width
// - Remove old line profile (bottom graph)
//ver. ce20161111a
// - Keep raw images and line profiles in separated folders
//ver. ce20170226a
// - Change name to SLP_XPS
// - Merge SLP_WF_ce20170208a.ipf (WF mapping)
// - Merge SLP_CreateDispLines_ce20170214a.ipf (Automatic dispersion line finding and multiple-point data collection for XPS)
//Current ver. ce20161114a
// Todos
// - New DataSet system (from SLP_LoadLEEM)
// - Filter for file loading (e.g. *.TIF)
// - Option to load .DAT and extract data
// - Auto calculation of dispersion (eV/pixel)
// - Show line profile width
// - Delete raw data (to save disk space)
// - Clean up the code
//MENU BAR
Menu "SLPA"
"Launcher..",SLP_Util_CreateLauncher_small()
"Load LEEM images..",SLP_LL_CreatePanel01()
"Load NEXAFS scans..",SLP_NEX_CreatePanel()
"Imaging XPS..",SLP_IXPS_CreatePanel1()
"Dispersive XPS..",SLP_DXPS_CreatePanel1()
"DLA analysis..",SLP_DLA_CreatePanel01()
"Multi-GLAs Fit..",SLP_MGFit_CreatePanel()
End
///////////////
//UTILITY BELT
///////////////
Function SLP_Util_PanelColorScale()
DoWindow /K SLP_ColorScalePanel
NewPanel /W=(130,90,610,215) /N=SLP_ColorScalePanel
NVAR SetValue_Min=root:Package_SLP:Util:CScale:SetValue_Min
NVAR SetValue_Max=root:Package_SLP:Util:CScale:SetValue_Max
NVAR MinValue=root:Package_SLP:Util:CScale:MinValue
NVAR MaxValue=root:Package_SLP:Util:CScale:MaxValue
NVAR Rev_Flg=root:Package_SLP:Util:CScale:Rev_Flg
SVAR ColorTable=root:Package_SLP:Util:CScale:ColorTable
String ImageName=Stringfromlist(0,ImageNameList("",";"))
Wave ImgW=ImageNameToWaveRef("",ImageName)
ImageStats /Q ImgW
MinValue=V_Min
MaxValue=V_Max
String ImgInfo=ImageInfo("",ImageName,0)
String ImgCtab=StringByKey("RECREATION",ImgInfo)
String ImgColor=ImgCtab[7,strlen(ImgCtab)-2]
SetValue_Min=str2num(StringFromList(0,ImgColor,","))
SetValue_Max=str2num(StringFromList(1,ImgColor,","))
Variable Button_X=300
Variable Button_XSize=75
Variable Button_Y=35
Button Button_AutoScale,pos={Button_X,Button_Y},size={Button_XSize,20}, Fsize=10,title="Auto Scale",proc=ButtonProc_Util_ColorScalePanel
Button Button_AutoRange,pos={Button_X,Button_Y+20},size={Button_XSize,20}, Fsize=10,title="Auto Range",proc=ButtonProc_Util_ColorScalePanel
Button Button_Range,pos={Button_X,Button_Y+40},size={Button_XSize,20}, Fsize=10,title="Range..",proc=ButtonProc_Util_ColorScalePanel
Button Button_Done,pos={Button_X,Button_Y+60},size={Button_XSize,20}, Fsize=10,title="Done",proc=ButtonProc_Util_ColorScalePanel
DrawText 5,20,"\Z12Adjust colour scale"
DrawText 5,40,"Min:"
DrawText 5,90,"Max:"
Slider Slider_MinValue,pos={35,25},size={240,30}, title="Min value",vert=0,limits={MinValue,MaxValue,0.01},proc=SliderProc_Util_ColorScale,ticks=20,variable=SetValue_Min
Slider Slider_MaxValue,pos={35,75},size={240,30}, title="Max value",vert=0,limits={MinValue,MaxValue,0.01},proc=SliderProc_Util_ColorScale,ticks=20,variable=SetValue_Max
PopupMenu popup_CtabList,pos={119,4},size={200,20},proc=PopMenuProc_Util_ColorScale
PopupMenu popup_CtabList,mode=4,value= #"\"*COLORTABLEPOP*\""
CheckBox check_Reverse,pos={325,7},size={52,15},proc=CheckProc_Util_RevFlg,title="Reverse"
CheckBox check_Reverse,value= 0
Button Button_DefaultScale,pos={Button_X+85,Button_Y+20},size={75,20},proc=ButtonProc_Util_ColorScalePanel,title="Set to default"
Button Button_DefaultScale,fSize=10
Button Button_SetAsDefault,pos={Button_X+85,Button_Y+40},size={75,20},proc=ButtonProc_Util_ColorScalePanel,title="Set as default"
Button Button_SetAsDefault,fSize=10
Button Button_SetDefault,pos={Button_X+85,Button_Y+60},size={75,20},proc=ButtonProc_Util_ColorScalePanel,title="Set default.."
Button Button_SetDefault,fSize=10
DrawText 381,50,"Default"
SetDrawEnv fillpat= 0
DrawRect 380,51,463,117
//ModifyImage /W=Cutoff $ImageName ctab= {SetValue_Min,SetValue_Max,Rainbow,0}
End
Function PopMenuProc_Util_ColorScale(pa) : PopupMenuControl
STRUCT WMPopupAction &pa
switch( pa.eventCode )
case 2: // mouse up
Variable popNum = pa.popNum
String popStr = pa.popStr
String ImageName=Stringfromlist(0,ImageNameList("",";"))
ControlInfo /W=SLP_ColorScalePanel check_Reverse
Variable Rev_Flg=V_Value
ModifyImage $ImageName ctab= {,,$popStr,Rev_Flg}
SVAR ColorTable=root:Package_SLP:Util:CScale:ColorTable
ColorTable=popStr
break
case -1: // control being killed
break
endswitch
return 0
End
Function CheckProc_Util_RevFlg(cba) : CheckBoxControl
STRUCT WMCheckboxAction &cba
switch( cba.eventCode )
case 2: // mouse up
Variable checked = cba.checked
NVAR Rev_Flg=root:Package_SLP:Util:CScale:Rev_Flg
Rev_Flg=checked
String ImageName=Stringfromlist(0,ImageNameList("",";"))
ModifyImage $ImageName ctab= {,,,Rev_Flg}
break
case -1: // control being killed
break
endswitch
return 0
End
Function ButtonProc_Util_ColorScalePanel(ba) : ButtonControl
STRUCT WMButtonAction &ba
String ImageName
String ImgW_FName
Variable ImgMedian,ImgQ25,ImgQ75
NVAR MinValue=root:Package_SLP:Util:CScale:MinValue
NVAR MaxValue=root:Package_SLP:Util:CScale:MaxValue
NVAR SetValue_Min=root:Package_SLP:Util:CScale:SetValue_Min
NVAR SetValue_Max=root:Package_SLP:Util:CScale:SetValue_Max
NVAR SetValueMin_Default=root:Package_SLP:Util:CScale:SetValueMin_Default
NVAR SetValueMax_Default=root:Package_SLP:Util:CScale:SetValueMax_Default
NVAR Rev_Flg_Default=root:Package_SLP:Util:CScale:Rev_Flg_Default
SVAR ColorTable=root:Package_SLP:Util:CScale:ColorTable
NVAR Rev_Flg=root:Package_SLP:Util:CScale:Rev_Flg
switch( ba.eventCode )
case 2: // mouse up
// click code here
StrSwitch (ba.CtrlName)
case "button_Done":
DoWindow/K SLP_ColorScalePanel
break
case "Button_Range":
ImageName=Stringfromlist(0,ImageNameList("",";"))
Wave ImgW=ImageNameToWaveRef("",ImageName)
ImgW_FName=GetWavesDataFolder(ImgW,1)+NameofWave(ImgW)
ControlInfo Slider_MinValue
Variable MinValue_prompt=MinValue
Variable MaxValue_prompt=MaxValue
Prompt MinValue_prompt,"Minimum intensity"
Prompt MaxValue_prompt,"Maximum intensity"
DoPrompt "Enter parameters",MinValue_prompt,MaxValue_prompt
If (V_Flag==0)
MinValue=MinValue_Prompt
MaxValue=MaxValue_Prompt
Slider Slider_MinValue,limits={MinValue,MaxValue,(MaxValue-MinValue)/200}
Slider Slider_MaxValue,limits={MinValue,MaxValue,(MaxValue-MinValue)/200}
EndIF
break
case "Button_AutoRange":
ImageName=Stringfromlist(0,ImageNameList("",";"))
Wave ImgW=ImageNameToWaveRef("",ImageName)
ImgW_FName=GetWavesDataFolder(ImgW,1)+NameofWave(ImgW)
ImgMedian=SLP_Util_FindImgMedian(ImgW_FName,0)
ImgQ25=SLP_Util_FindImgMedian(ImgW_FName,1)
ImgQ75=SLP_Util_FindImgMedian(ImgW_FName,2)
MaxValue=ImgMedian+(ImgQ75-ImgMedian)*2
MinValue=ImgMedian-(ImgMedian-ImgQ25)*2
Slider Slider_MinValue,limits={MinValue,MaxValue,(MaxValue-MinValue)/200}
Slider Slider_MaxValue,limits={MinValue,MaxValue,(MaxValue-MinValue)/200}
break
case "Button_AutoScale":
ImageName=Stringfromlist(0,ImageNameList("",";"))
Wave ImgW=ImageNameToWaveRef("",ImageName)
ImgW_FName=GetWavesDataFolder(ImgW,1)+NameofWave(ImgW)
ImgQ25=SLP_Util_FindImgMedian(ImgW_FName,1)
ImgQ75=SLP_Util_FindImgMedian(ImgW_FName,2)
ModifyImage $ImageName ctab= {ImgQ25,ImgQ75,$ColorTable,Rev_Flg}
SetValue_Min=ImgQ25
SetValue_Max=ImgQ75
break
case "Button_DefaultScale": //Use default setting
ImageName=Stringfromlist(0,ImageNameList("",";"))
SetValue_Min=SetValueMin_Default
SetValue_Max=SetValueMax_Default
Rev_flg=Rev_Flg_Default
ModifyImage $ImageName ctab= {SetValue_Min,SetValue_Max,$ColorTable,Rev_flg}
CheckBox check_Reverse win=SLP_ColorScalePanel,value=Rev_flg
break
case "Button_SetAsDefault": //Set current values as default
ImageName=Stringfromlist(0,ImageNameList("",";"))
SetValueMin_Default=SetValue_Min
SetValueMax_Default=SetValue_Max
Rev_Flg_Default=Rev_Flg
break
case "Button_SetDefault": //Enter default values (prompt)
Variable Min_DefaultPrompt=SetValueMin_Default
Variable Max_DefaultPrompt=SetValueMax_Default
String Rev_Flg_txt
If (Rev_Flg_Default==0)
Rev_Flg_txt="no"
Else
Rev_Flg_txt="yes"
EndIf
Prompt Min_DefaultPrompt "Default minimum"
Prompt Max_DefaultPrompt "Default maximum"
Prompt Rev_Flg_Txt,"Reverse color",popup,"yes;no"
DoPrompt "Enter parameters", Min_DefaultPrompt,Max_DefaultPrompt,Rev_Flg_Txt
If (V_Flag==0) //User clicks 'Continue'
SetValueMin_Default=Min_DefaultPrompt
SetValueMax_Default=Max_DefaultPrompt
Rev_Flg_Default=stringmatch(Rev_Flg_Txt,"yes") //Flag for reverse color
EndIF
break
EndSwitch
break
case -1: // control being killed
break
endswitch
return 0
End
Function SliderProc_Util_ColorScale(sa) : SliderControl
STRUCT WMSliderAction &sa
NVAR SetValue_Min=root:Package_SLP:Util:CScale:SetValue_Min
NVAR SetValue_Max=root:Package_SLP:Util:CScale:SetValue_Max
switch( sa.eventCode )
case -1: // control being killed
break
default:
if( sa.eventCode & 1 ) // value set
Variable curval = sa.curval
If (stringmatch(sa.CtrlName,"Slider_MinValue"))
SetValue_Min=curval
ElseIf (stringmatch(sa.CtrlName,"Slider_MaxValue"))
SetValue_Max=curval
EndIf
String ImageName=Stringfromlist(0,ImageNameList("",";"))
ControlInfo /W=SLP_ColorScalePanel check_Reverse
Variable Rev_Flg=V_Value
ModifyImage $ImageName ctab= {SetValue_Min,SetValue_Max,,Rev_Flg}
endif
break
endswitch
return 0
End
Function SLP_Util_FindImgMedian(ImgW_FName,OptFlg)
//Find median without NaN
String ImgW_FName
Variable OptFlg //0=median,1=Q25,2=Q75
Wave ImgW=$ImgW_FName
variable i=1
variable centerP=floor(dimsize(ImgW,0)/2)
variable centerQ=floor(dimsize(ImgW,0)/2)
variable ImgMedianInt_tmp=0
variable ImgMedianInt=0
//Start from small area in the middle. Expand until NaN is found
Do
ImgMedianInt=ImgMedianInt_tmp
Duplicate /O/R=[centerP-i,centerP+i][centerQ-i,centerQ+i] ImgW,SmImgW
ImgMedianInt_tmp=statsmedian(SmImgW)
i+=1
While (i<dimsize(ImgW,0)/2&&numtype(ImgMedianInt_tmp)==0)
StatsQuantiles /Q SmImgW
Killwaves SmImgW
Variable Result=0
switch(OptFlg) // numeric switch
case 0: // execute if case matches expression
Result=ImgMedianInt
break // exit from switch
case 1: // execute if case matches expression
Result=V_Q25
break
case 2: // execute if case matches expression
Result=V_Q75
break
endswitch
Return Result
End
Function ButtonProc_Util_FindCutOff(ba) : ButtonControl
STRUCT WMButtonAction &ba
switch( ba.eventCode )
case 2: // mouse up
// click code here
string TraceList=TracenameList("",";",1)
String TraceName=""
prompt TraceName,"Trace to find ERF cutoff",popup,TraceList
DoPrompt "Select trace",TraceName
If (V_Flag==0) //User clicks 'Continue'
Wave DataW=TraceNameToWaveRef("",Tracename)
//display DataW
String DataW_Name= NameofWave(DataW)
String DataW_FName= GetWavesDataFolder(DataW,1)+DataW_Name
SLP_Util_FindCutoff(DataW_FName,1)
EndIF
break
case -1: // control being killed
break
endswitch
return 0
End
Function ButtonProc_Util_Launch(ba) : ButtonControl
STRUCT WMButtonAction &ba
switch( ba.eventCode )
case 2: // mouse up
// click code here
strswitch (ba.ctrlName) //Name of the image (note the use of WMCheckBoxAction STRUCT)
case "button_LEEMImage":
SLP_LL_CreatePanel01()
break
case "button_ImgXPS":
SLP_IXPS_CreatePanel1()
break
case "button_DispXPS":
SLP_DXPS_CreatePanel1()
break
case "button_NEX":
SLP_NEX_CreatePanel()
break
case "button_DLA":
SLP_DLA_CreatePanel01()
break
case "button_MGFit":
SLP_MGFit_CreatePanel()
break
case "button_Util":
NVAR Launcher_expand=root:Package_SLP:Util:Launcher_expand
If (Launcher_expand)
SLP_Util_CreateLauncher_small()
Else
SLP_Util_CreateLauncher()
EndIf
break
case "button_Done":
DoWindow/K SLP_Launcher
break
EndSwitch
break
case -1: // control being killed
break
endswitch
return 0
End
Function SLP_Util_CreateLauncher() : Panel
Dowindow /K SLP_Launcher
PauseUpdate; Silent 1 // building window...
NewPanel /W=(100,49,852,417) /N=SLP_Launcher
ModifyPanel fixedSize=1
SetDrawLayer UserBack
SetDrawEnv fsize= 18
DrawText 14,30,"SLRI LEEM PEEM Analysis"
SetDrawEnv fsize= 14
DrawText 12,52,"Launcher"
SetDrawEnv fsize= 30
DrawText 659,361,"SLPA"
SetDrawEnv fillpat= 0
DrawRect 230,32,739,359
Button button_LEEMImage,pos={12,57},size={102,64},proc=ButtonProc_Util_Launch,title="LEEM image"
Button button_Done,pos={11,339},size={50,20},title="done",proc=ButtonProc_Util_Launch
Button button_ImgXPS,pos={120,57},size={102,64},proc=ButtonProc_Util_Launch,title="Imaging XPS",fColor=(26205,52428,1)
Button button_DispXPS,pos={12,125},size={102,64},proc=ButtonProc_Util_Launch,title="Dispersive XPS",fColor=(0,43690,65535)
Button button_NEX,pos={120,126},size={102,64},proc=ButtonProc_Util_Launch,title="NEXAFS"
Button button_DLA,pos={13,192},size={102,64},proc=ButtonProc_Util_Launch,title="DLA analysis"
Button button_MGFit,pos={121,192},size={102,64},proc=ButtonProc_Util_Launch,title="Multi GLAs fit"
Button button_Util,pos={121,262},size={102,64},title="Utility",proc=ButtonProc_Util_Launch
TabControl tab1,pos={238,4},size={430,21},tabLabel(0)="Graph"
TabControl tab1,tabLabel(1)="Color scale",tabLabel(2)="Report",tabLabel(3)="Log"
TabControl tab1,tabLabel(4)="XPS tools",value= 0,disable=2
Button button_FindCutoff,pos={248,44},size={100,20},proc=ButtonProc_Util_FindCutOff,title="Find ERF cutoff",fSize=10
Button button_MakeRainbow,pos={247,68},size={100,20},proc=ButtonProc_Util_TraceColors,title="Make rainbow",fSize=10
Button button_MakeRedgradient,pos={247,94},size={100,20},proc=ButtonProc_Util_TraceColors,title="Make red gradient",fSize=10
Button button_ColorScale,pos={247,124},size={100,20},proc=ButtonProc_Util_TraceColors,title="Change color scale",fSize=10
Button button_ObjStv,pos={247,164},size={100,20},proc=ButtonProc_Util_TraceColors,title="Find OBJ vs STV",fSize=10
Button button_OffsetZ,pos={247,197},size={100,20},proc=ButtonProc_Util_TraceColors,title="Offset intensity",fSize=10
SetDrawEnv fsize=10;DrawText 351,61,"Find location of photoemission cut-off when doing workfunction measurement"
SetDrawEnv fsize=10;DrawText 351,90,"Change trace colors in multi-trace graph to rainbow"
SetDrawEnv fsize=10;DrawText 351,120,"Change trace colors in multi-trace graph to red with different shades"
SetDrawEnv fsize=10;DrawText 351,150,"For 2D image plot. Can change the scale automatically based on median value"
SetDrawEnv fsize=10;DrawText 355,180,"Find relationship between Objective lens and Start Voltage"
SetDrawEnv fsize=10;DrawText 355,212,"Offset intensity level of background to equalize and compare 2D maps"
NVAR Launcher_expand=root:Package_SLP:Util:Launcher_expand
Launcher_expand=1
End
Function SLP_Util_CreateLauncher_small() : Panel
PauseUpdate; Silent 1 // building window...
Dowindow /K SLP_Launcher
NewPanel /W=(100,49,332,419) /N=SLP_Launcher
ModifyPanel fixedSize=1
SetDrawLayer UserBack
SetDrawEnv fsize= 18
DrawText 14,30,"SLRI LEEM PEEM Analysis"
SetDrawEnv fsize= 14
DrawText 12,52,"Launcher"
SetDrawEnv fsize= 30
DrawText 146,367,"SLPA"
Button button_LEEMImage,pos={12,57},size={102,64},proc=ButtonProc_Util_Launch,title="LEEM image"
Button button_Done,pos={11,339},size={50,20},title="done",proc=ButtonProc_Util_Launch
Button button_ImgXPS,pos={120,57},size={102,64},proc=ButtonProc_Util_Launch,title="Imaging XPS"
Button button_ImgXPS,fColor=(26205,52428,1)
Button button_DispXPS,pos={12,125},size={102,64},proc=ButtonProc_Util_Launch,title="Dispersive XPS"
Button button_DispXPS,fColor=(0,43690,65535)
Button button_NEX,pos={120,126},size={102,64},proc=ButtonProc_Util_Launch,title="NEXAFS"
Button button_DLA,pos={13,192},size={102,64},proc=ButtonProc_Util_Launch,title="DLA analysis"
Button button_MGFit,pos={121,192},size={102,64},proc=ButtonProc_Util_Launch,title="Multi GLAs fit"
Button button_Util,pos={121,262},size={102,64},title="Utility",proc=ButtonProc_Util_Launch
NVAR Launcher_expand=root:Package_SLP:Util:Launcher_expand
Launcher_expand=0
End
Function ButtonProc_Util_TraceColors(ba) : ButtonControl
STRUCT WMButtonAction &ba
switch( ba.eventCode )
case 2: // mouse up
// click code here
strswitch (ba.ctrlName) //Name of the image (note the use of WMCheckBoxAction STRUCT)
case "button_MakeRainbow":
SLP_Util_MakeRainbow()
break
case "button_MakeRedGradient":
SLP_Util_MakeRedGradient("")
break
case "button_ColorScale":
SLP_Util_PanelColorScale()
break
case "button_ObjStv":
SLP_Util_PanelObjStv()
break
case "button_OffsetZ":
If (Stringmatch(CsrInfo(A),""))//If cursor A is not on graph
DoAlert 0,"Put Cursor A on the background area in the image"
Else
variable Current_Z=zcsr(A)
NVAR NewZ=root:Package_SLP:Util:NewZ
Variable NewZ_Prompt=NewZ
Prompt NewZ_Prompt,"New Z value"
DoPrompt "Enter parameter",NewZ_Prompt
NewZ=NewZ_Prompt
IF (V_Flag==0) //Press Continue
String ImageName=Stringfromlist(0,ImageNameList("",";"))
Wave ImgW=ImageNameToWaveRef("",ImageName)
ImgW-=(Current_Z-NewZ)
Print "======================="
Print ImageName+"'s Z has been offset"
Print "Original Z value = "+num2str(Current_Z)+", new Z value = "+num2str(NewZ)
Print "Cursor x: "+num2str(hcsr(A))+" ["+num2str(pcsr(A))+"]"
Print "Cursor y: "+num2str(vcsr(A))+" ["+num2str(qcsr(A))+"]"
Print "======================="
EndIF
EndIf
break
EndSwitch
break
case -1: // control being killed
break
endswitch
return 0
End
//////////////
//Multi GLAs Fit
//////////////
//USE OFTEN
Function SLP_MGFit_UseOften()
ControlInfo /W=SLP_MultiGLAFit_01 ListBox_DataList
Variable DataRow=V_Value
ControlInfo /W=SLP_MultiGLAFit_01 ListBox_PeakParam
Variable PeakRow=V_Value
Wave /T SLP_MGFit_DataListW=root:Package_SLP:MGFit:SLP_MGFit_DataListW
Wave SLP_MGFit_DataListSelW=root:Package_SLP:MGFit:SLP_MGFit_DataListSelW
Wave /T SLP_MGFit_ConstraintDisplayW=root:Package_SLP:MGFit:SLP_MGFit_ConstraintDisplayW
Wave SLP_MGFit_ConstraintDisplaySelW=root:Package_SLP:MGFit:SLP_MGFit_ConstraintDisplaySelW
Wave /T SLP_MGFit_DefaultConstraintW=root:Package_SLP:MGFit:SLP_MGFit_DefaultConstraintW
Wave SLP_MGFit_DefaultConstraintSelW=root:Package_SLP:MGFit:SLP_MGFit_DefaultConstraintSelW
Wave /T SLP_MGFit_PeakLibraryW=root:Package_SLP:MGFit:SLP_MGFit_PeakLibraryW
Wave SLP_MGFit_PeakLibrarySelW=root:Package_SLP:MGFit:SLP_MGFit_PeakLibrarySelW
String DataName=SLP_MGFit_DataListW[DataRow][0]
String DataLocation=SLP_MGFit_DataListW[DataRow][1]
String CoefGuessDispW_FName=DataLocation+"CoefGuessDispW"
String CoefGuessDispSelW_FName=DataLocation+"CoefGuessDispSelW"
String ConstraintW_FName=DataLocation+"ConstraintW"
String HilightW_FName=DataLocation+"HilightW"
String CoefGuessM_FName=DataLocation+"CoefGuessM" //Use for fitting
String ConstraintV_FName=DataLocation+"ConstraintV" //Use for fitting
String DataW_FName=DataLocation+DataName //Raw data
String BgW_FName=DataW_FName+"_BG" //Background
String Data_nBGW_FName=DataW_FName+"_nBG" //Data after BG subtraction
String Data_GssW_FName=DataW_FName+"_Gss" //Guess curve
variable i=0
String Data_Comp_FName=DataW_FName+"_p"+num2str(i) //Individual GLA component
End
Function SLP_MGFit_CreatePanel() : Panel
//Init
if (!DataFolderExists("root:Package_SLP:MGFit"))
SLP_MGFit_init()
Endif
Dowindow /K SLP_MultiGLAFit_01
PauseUpdate; Silent 1 // building window...
NewPanel /W=(45,45,1150,670) /N=SLP_MultiGLAFit_01
SetDrawLayer UserBack
SetDrawEnv fsize= 14
DrawText 10,25,"SLP Multi GLA Peaks Fitting Panel"
DrawText 380,30,"Parameter Guess and Results"
DrawText 915,25,"Constraints and Hold"
DrawText 380,280,"Peak library"
DrawText 427,508,"Peak area"