-
Notifications
You must be signed in to change notification settings - Fork 2
/
SLPA_ce20180130a.ipf
17009 lines (13467 loc) · 563 KB
/
SLPA_ce20180130a.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. 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]
// - Fitting and Global Fitting
// - Use 'absolute' scale (in ref. to the MCP screen size).
// - Default parameters
// 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
/////////////////////////////////////
/////////////CODE START HERE/////////
/////////////////////////////////////
Menu "SLPA"
"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()
End
Function SLP_LL_CreatePanel01()
//Check whether initiallization is needed
If (!DataFolderExists("root:Package_SLP:LoadLEEM" ))
SLP_LoadLEEM_init()
slp_Stitch_Init()
SLP_Util_Init()
Endif
wave /T SLP_ImgParamColDescrptn=root:Package_SLP:LoadLEEM:SLP_ImgParamColDescrptn
wave /T SLP_ImgSetListW=root:Package_SLP:LoadLEEM:SLP_ImgSetListW
wave SLP_ImgSetListSelW=root:Package_SLP:LoadLEEM:SLP_ImgSetListSelW
NVAR LoadLEEM_Sel=root:Package_SLP:LoadLEEM:LoadLEEM_Sel
NVAR LL_InitFlg=root:Package_SLP:LoadLEEM:LL_InitFlg
NVAR Dataset_Sel=root:Package_SLP:LoadLEEM:Dataset_Sel
DoWindow/K SLP_LL_01
NewPanel /W=(200,90,1000,610) /N=SLP_LL_01
//ShowTools/A
//SetDrawLayer UserBack
//DrawRect 38,43,330,266
Display /HOST=SLP_LL_01 /N=SLP_LL_01_ImPlot /W=(20,40,330,270)
ModifyGraph tick=3,noLabel=2
ModifyGraph width=0,height=0
ModifyGraph standoff=0
Button Button_DelDataSet,pos={650,10},size={130,20}, Fsize=10,title="Delete selected datasets",proc=ButtonProc_LL_DelDataSet
Button Button_FindScreenPos,pos={370,130},size={130,20}, Fsize=10,title="Find screen position..",proc=ButtonProc_LL_FindScreen
Button Button_SetScale,pos={370,155},size={130,20},Fsize=10,title="Set scale..", proc=ButtonProc_LL_SetScale
Button Button_Stitch,pos={370,180},size={130,20},Fsize=10,title="Stitch images..", proc=ButtonProc_LL_Stitch
Button Button_LoadFullSize,pos={370,215},size={130,20},Fsize=10,title="Load fullsize image", proc=ButtonProc_LL_LoadFullSize
Button Button_ExportSelImg,pos={370,240},size={130,20},Fsize=10,title="Export selected images..",proc=ButtonProc_LL_ExportSelImg
Button Button_CreateReport,pos={370,265},size={130,20},Fsize=10,title="Create report.."
Button Button_LoadImg,pos={20,280},size={115,20},Fsize=10,title="Load image set..", proc=ButtonProc_LL_LoadImg
Button Button_SelAll,pos={150,280},size={90,20},Fsize=10,title="Select all", proc=ButtonProc_LL_SelAll
Button Button_SelNone,pos={245,280},size={90,20},Fsize=10,title="Select none", proc=ButtonProc_LL_SelNone
Button Button_Done,pos={725,490},size={50,20},title="Done", proc=ButtonProc_LL_done
TitleBox SLP_LLP_TitleBox_Main,pos={330,10},size={210,20},title="LEEM/PEEM Image Browser"
TitleBox SLP_LLP_TitleBox_Main,fSize=16,frame=0
TitleBox SLP_LLP_TitleBox_Main1,pos={556,22},size={66,16},title="Dataset list"
TitleBox SLP_LLP_TitleBox_Main1,fSize=12,frame=0
TitleBox SLP_LLP_Titlebox_Descriptions, fsize=9, frame=0, pos={20,485},title="Double click wave name to display image in a separate window"
ListBox list0,pos={20,305},size={750,177}
ListBox list0,titleWave=SLP_ImgParamColDescrptn,mode= 2,selRow= 0
ListBox list0,widths={35,150,50,50,50,50,40,40,50,50,70,50,70,250,85,85}
ListBox list0,userColumnResize= 1
ListBox list0, proc=ListBoxProc_LL_ImgList
//ListBox list0, selWave=SLP_ImgParamListSelW
ListBox list1,pos={550,40},size={220,255}
ListBox list1,listWave=SLP_ImgSetListW
ListBox list1,mode= 2,selRow= 0
ListBox list1 widths={35,76,48,60}
ListBox list1,userColumnResize= 1
ListBox list1,titleWave=root:Package_SLP:LoadLEEM:SLP_DatasetColDescrptn
ListBox list1, proc=ListBoxProc_LL_DatasetList
ListBox list1, selrow=Dataset_Sel
ListBox list1, selWave=SLP_ImgSetListSelW
NVAR ce_X=root:Package_SLP:LoadLEEM:ce_X
NVAR ce_Y=root:Package_SLP:LoadLEEM:ce_Y
NVAR ce_SampleTemp=root:Package_SLP:LoadLEEM:ce_SampleTemp
SVAR ce_FOV1=root:Package_SLP:LoadLEEM:ce_FOV1
SVAR ce_Notes=root:Package_SLP:LoadLEEM:ce_Notes
SVAR ce_Date=root:Package_SLP:LoadLEEM:ce_Date
TitleBox SLP_LLP_TitleBox_02, pos={350,40},frame=0,title="Image parameters:"
Setvariable SetVar_X,pos={350,60},size={80,15},limits={-inf,inf,0},title="x:",value=ce_X,noedit=1
Setvariable SetVar_Y,pos={435,60},size={80,15},limits={-inf,inf,0},title="y:",value=ce_Y,noedit=1
Setvariable SetVar_SampleTemp,pos={350,80},size={80,15},limits={-inf,inf,0},title="Temp:",value=ce_SampleTemp,noedit=1
Setvariable SetVar_FOV1,pos={435,80},size={80,15},title="FOV:",value=ce_FOV1,noedit=1
Setvariable SetVar_Date,pos={350,100},size={180,15},title=" ",value=ce_Date,noedit=1,frame=0
Setvariable SetVar_notes,pos={20,15},size={300,15},title="Image notes:",value=ce_Notes,proc=SetVarProc_ImgNotes
//SetVariable setvar0,pos={387,149},size={50,19},fSize=12
//SetVariable setvar0,limits={-inf,inf,0},noedit= 1
//string DataSetName=SLP_ImgSetListW[LoadLEEM_Sel][1]
SVAR CurrentDataSet=root:Package_SLP:LoadLEEM:CurrentDataSet
If (LL_InitFlg==0)
string Pkg_Location="root:Package_SLP:LoadLEEM:"+CurrentDataSet
string ImgList_Fname=Pkg_Location+":SLP_ImgListW"
string ImgParam_Fname=Pkg_Location+":SLP_ImgParamListW"
string ImgParamSel_Fname=Pkg_Location+":SLP_ImgParamListSelW"
wave /T SLP_ImgListW=$ImgList_Fname
wave /T SLP_ImgParamListW=$ImgParam_Fname
wave SLP_ImgParamListSelW=$ImgParamSel_Fname
Wave /T SLP_ImgSetListW=root:Package_SLP:LoadLEEM:SLP_ImgSetListW
SLP_LL_PlotImage(SLP_ImgListW[LoadLEEM_sel][3],SLP_ImgListW[LoadLEEM_sel][2])
ListBox list0,listWave=SLP_ImgParamListW
ListBox list0, selWave=SLP_ImgParamListSelW
ListBox list0,selRow=LoadLEEM_sel
ListBox list0, selWave=SLP_ImgParamListSelW
Endif
End
Function SLP_Load_oldLEEM_Img()
//Load old .DAT file from Elmitec LEEM (before 2014)
//Positions (in bytes) for image size and image data (can be found from U-View manual)
variable ImWidth_Location=40
variable ImHeight_Location=42
variable ImageData_Location=392
variable ce_RefNum
String fileFilters = "Data Files (*.dat):.dat;"
Open /R /F=fileFilters ce_RefNum
String ce_FileName=S_fileName
ce_FileName=stringfromlist(itemsinlist(S_fileName,":")-1,S_fileName,":")
ce_FileName=stringfromlist(0,ce_FileName,".")
variable ce_ImWidth=0
variable ce_ImHeight=0
fsetpos ce_RefNum,ImWidth_Location
fbinread /F=2 ce_RefNum, ce_ImWidth
fsetpos ce_RefNum,ImHeight_Location
fbinread /F=2 ce_RefNum, ce_ImHeight
string ImgW_Name=ce_FileName
Prompt ImgW_Name, "Image wave name:"
DoPrompt "Enter",ImgW_Name
make /O /N=(ce_ImWidth,ce_ImHeight) $ImgW_Name /WAVE=ImgW
fsetpos ce_RefNum,ImageData_Location
fbinread /F=2 ce_RefNum,ImgW
Close ce_RefNum
NewImage ImgW
End
Function SLP_LL_DataSetSelect(DataSet_Row)
variable DataSet_Row
string SelectedDataSetName
//Plot the new image and select the new dataset
//NVAR N_Datasets=root:Package_SLP:LoadLEEM:N_Datasets
SVAR CurrentDataset=root:Package_SLP:LoadLEEM:CurrentDataset
NVAR LoadLEEM_Sel=root:Package_SLP:LoadLEEM:LoadLEEM_Sel
NVAR DataSet_Sel=root:Package_SLP:LoadLEEM:DataSet_Sel
wave /T SLP_ImgSetListW=root:Package_SLP:LoadLEEM:SLP_ImgSetListW
string DataSetName=SLP_ImgSetListW[DataSet_Row][1]
string Pkg_Location="root:Package_SLP:LoadLEEM:"+DataSetName
string ImgList_Fname=Pkg_Location+":SLP_ImgListW"
string ImgParam_Fname=Pkg_Location+":SLP_ImgParamListW"
string ImgParamSel_Fname=Pkg_Location+":SLP_ImgParamListSelW"
wave /T SLP_ImgListW=$ImgList_Fname
wave /T SLP_ImgParamListW=$ImgParam_Fname
wave SLP_ImgParamListSelW=$ImgParamSel_Fname
string LLSel_Recall_Fname=Pkg_Location+":LoadLEEM_Sel_Recall"
NVAR LoadLEEM_Sel_Recall=$LLSel_Recall_Fname
//Make selection for List0 (Image list)
ListBox list0,listwave= SLP_ImgParamListW,selRow=LoadLEEM_Sel_Recall,Row=LoadLEEM_Sel_Recall,selWave=SLP_ImgParamListSelW
LoadLEEM_Sel=LoadLEEM_Sel_Recall
//Make selection for List1 (Dataset list)
ListBox list1,selRow=DataSet_Row
CurrentDataset=SLP_ImgSetListW[DataSet_Row][1]
Dataset_Sel=DataSet_Row
//Plot the image (the first one in the new dataset)
SLP_LL_PlotImage(SLP_ImgListW[LoadLEEM_Sel_Recall][3],SLP_ImgListW[LoadLEEM_Sel_Recall][2])
End
Function ButtonProc_LL_DelDataSet(ba) : ButtonControl
STRUCT WMButtonAction &ba
switch( ba.eventCode )
case 2: // mouse up
// click code here
DoAlert 1,"Delete selected dataset(s)?"
if (V_flag==1)
NVAR Dataset_Sel=root:Package_SLP:LoadLEEM:Dataset_Sel
wave SLP_ImgSetListSelW=root:Package_SLP:LoadLEEM:SLP_ImgSetListSelW
//Change dataset selection if the current one is going to be delected
if (SLP_ImgSetListSelW[Dataset_Sel][0]==48)
//Find the first non-selected DataSet from the top
variable i=0
For (i=0;i<dimsize(SLP_ImgSetListSelW,0)&&SLP_ImgSetListSelW[i][0]==48;i+=1)
DoUpdate
Endfor
//i is now the index of the first non-selected DataSet
If (i<dimsize(SLP_ImgSetListSelW,0))
SLP_LL_DataSetSelect(i)
Else //All datasets have been selected
SLP_LoadLEEM_Init()
Endif
Endif
SLP_LL_DelDataSetBatch()
endif
break
case -1: // control being killed
break
endswitch
return 0
End
Function SLP_LL_DelDataSetBatch()
//Modified 20170226 by CE
WAVE /T SLP_ImgSetListW=root:Package_SLP:LoadLEEM:SLP_ImgSetListW
WAVE SLP_ImgSetListSelW=root:Package_SLP:LoadLEEM:SLP_ImgSetListSelW
variable i=0
string DataSetName=""
string DeleteList=""
variable Del_error=0
string Error_txt=""
For (i=0;i<dimsize(SLP_ImgSetListW,0)&&Del_error==0;i+=1)
if (SLP_ImgSetListSelW[i][0]==48) //If the check box is checked
//Deleting the dataset [CODE:SLP_LL_DelDataSet]
DataSetName=SLP_ImgSetListW[i][1]
Del_error=SLP_LL_DelDataSet(DataSetName)
i-=1 //Go back one row
//Add the index of the dataset to be deleted in the DataSet list
If (Del_error!=0) //If imageset folder cannot be deleted, generate an error message
Error_txt="Error deleting dataset: "+DataSetName+"\r Images in the dataset are being used somewhere in the current project"
DoAlert 0,Error_txt
EndIf
Endif
Endfor
End
Function SLP_LL_DelDataSet(DataSetName)
string DataSetName
// - DataSet name as the input parameter and not the row position
// - Delete data folder, and modify the ListW in Pkg folder
// - The function returen Error_Flg
//Modified 20170226 by CE
WAVE /T SLP_ImgSetListW=root:Package_SLP:LoadLEEM:SLP_ImgSetListW
WAVE SLP_ImgSetListSelW=root:Package_SLP:LoadLEEM:SLP_ImgSetListSelW
NVAR N_datasets=root:Package_SLP:LoadLEEM:N_datasets
FindValue /TEXT=DataSetName /TXOP=6 SLP_ImgSetListW
variable col=floor(V_value/dimsize(SLP_ImgSetListW,0))
variable row=V_value-col*dimsize(SLP_ImgSetListW,0)
string Pkg_Location="root:Package_SLP:LoadLEEM:"+DataSetName
string ImgList_Fname=Pkg_Location+":SLP_ImgListW"
wave /T ImgListW=$ImgList_Fname
string Img_Location=ImgListW[0][2]
killDataFolder /Z $Img_Location
variable DeleteImgError_Flg=V_Flag
if (DeleteImgError_Flg==0)
//Only delete package folder if Image folder can be deleted
killDataFolder /Z $Pkg_Location
//Remove the row from SLP_ImgSetListW
DeletePoints row,1, SLP_ImgSetListW
DeletePoints row,1, SLP_ImgSetListSelW
//Update the number of DataSets
N_datasets-=1
Endif
Return DeleteImgError_Flg
End
Function ButtonProc_LL_SetScale(ba) : ButtonControl
STRUCT WMButtonAction &ba
switch( ba.eventCode )
case 2: // mouse up
// click code here
Create_SetScale_Panel()
break
case -1: // control being killed
break
endswitch
return 0
End
Function ButtonProc_LL_LoadFullSize(ba) : ButtonControl
STRUCT WMButtonAction &ba
switch( ba.eventCode )
case 2: // mouse up
// click code here
SLP_LoadFullSize()
break
case -1: // control being killed
break
endswitch
return 0
End
Function ListBoxProc_LL_ImgList(lba) : ListBoxControl
STRUCT WMListboxAction &lba
Variable row = lba.row
Variable col = lba.col
WAVE/T/Z listWave = lba.listWave
WAVE/Z selWave = lba.selWave
SVAR CurrentDataSet=root:Package_SLP:LoadLEEM:CurrentDataSet
NVAR LoadLEEM_Sel=root:Package_SLP:LoadLEEM:LoadLEEM_Sel
string LoadLEEM_Sel_Recall_FName="root:Package_SLP:LoadLEEM:"+CurrentDataSet+":LoadLEEM_Sel_Recall"
NVAR LoadLEEM_Sel_Recall=$LoadLEEM_Sel_Recall_FName
string Pkg_Location="root:Package_SLP:LoadLEEM:"+CurrentDataSet
string ImgList_Fname=Pkg_Location+":SLP_ImgListW"
string ImgParam_Fname=Pkg_Location+":SLP_ImgParamListW"
wave /T SLP_ImgListW=$ImgList_Fname
wave /T SLP_ImgParamListW=$ImgParam_Fname
wave /T SLP_ImgSetListW=root:Package_SLP:LoadLEEM:SLP_ImgSetListW
if (row>=0&&row<dimsize(SLP_ImgParamListW,0))
String ImageName=SLP_ImgListW[row][3]
String ImageLocation=SLP_ImgListW[row][2]
//string Full_ImageName=ImageLocation+":"+ImageName
switch( lba.eventCode )
case -1: // control being killed
break
case 4: // mouse down
LoadLEEM_Sel=row
LoadLEEM_Sel_Recall=row
SLP_LL_PlotImage(ImageName,ImageLocation)
break
case 3: // double click
LoadLEEM_Sel=row
LoadLEEM_Sel_Recall=row
SLP_LL_PlotImage(ImageName,ImageLocation)
SLP_LL_PlotSingleImg()
break
//case 4: // cell selection
case 5: // cell selection plus shift key
break
case 6: // begin edit
break
case 7: // finish edit
break
case 13: // checkbox clicked (Igor 6.2 or later)
break
endswitch
Else
ListBox List0, SelRow=LoadLEEM_Sel
endif
return 0
End
Function ButtonProc_LL_ExportSelImg(ba) : ButtonControl
STRUCT WMButtonAction &ba
switch( ba.eventCode )
case 2: // mouse up
// click code here
SLP_LL_ExportSelImg()
break
case -1: // control being killed
break
endswitch
return 0
End
Function SLP_LL_ExportSelImg()
SVAR CurrentDataSet=root:Package_SLP:LoadLEEM:CurrentDataSet
string Pkg_Location="root:Package_SLP:LoadLEEM:"+CurrentDataSet
string ImgList_Fname=Pkg_Location+":SLP_ImgListW"
string ImgParam_Fname=Pkg_Location+":SLP_ImgParamListW"
string ImgParamSel_Fname=Pkg_Location+":SLP_ImgParamListSelW"
wave /T SLP_ImgListW=$ImgList_Fname
wave /T SLP_ImgParamListW=$ImgParam_Fname
wave /T SLP_ImgSetListW=root:Package_SLP:LoadLEEM:SLP_ImgSetListW
wave SLP_ImgParamListSelW=$ImgParamSel_Fname
wave SLP_ImgSetListSelW=root:Package_SLP:LoadLEEM:SLP_ImgSetListSelW
//Choose folder to save image files
GetFileFolderInfo /D/Q
NewPath /O/Q PathName, S_Path //Create SYMBOLIC path (cannot use normal text for path!)
//Prepare textwave to convert to .csv file
make /T/O /N=(1,dimsize(SLP_ImgParamListW,1)) SLP_ImgParamExpW
wave SLP_ImgParamColDescrptn=root:Package_SLP:LoadLEEM:SLP_ImgParamColDescrptn
duplicate /T/O SLP_ImgParamColDescrptn, SLP_ImgParamColDescrptn_tmp
redimension /N=(1,dimsize(SLP_ImgParamColDescrptn,0)) SLP_ImgParamColDescrptn_tmp
SLP_ImgParamExpW[0][]=SLP_ImgParamColDescrptn_tmp[0][q]
killwaves SLP_ImgParamColDescrptn_tmp
//Load selected images
variable i=0
variable j=1
string FileName=""
string ImgFName=""
For (i=0;i<dimsize(SLP_ImgListW,0);i+=1)
if (SLP_ImgParamListSelW[i][0]==48)
ImgFName=SLP_ImgListW[i][2]+SLP_ImgListW[i][3]
wave ImgW=$ImgFName
FileName=SLP_ImgListW[i][3]+".TIFF"
//Filename="test"+num2str(i)
ImageSave /IGOR /T="tiff" /P=PathName ImgW as FileName //(cannot use normal text for path!)
redimension /N=(dimsize(SLP_ImgParamExpW,0)+1,dimsize(SLP_ImgParamExpW,1)) SLP_ImgParamExpW
SLP_ImgParamExpW[j][]=SLP_ImgParamListW[i][q]
j+=1
Endif
Endfor
//Create .csv file w/ image details
//edit SLP_ImgParamExpW
string out_name="Parameter_List_"+CurrentDataSet+".csv"
Save/G /O /M="\n" /P=PathName SLP_ImgParamExpW as out_name
killwaves SLP_ImgParamExpW
End
Function SLP_LL_PlotSingleImg()
SVAR CurrentDataSet=root:Package_SLP:LoadLEEM:CurrentDataSet
string Pkg_Location="root:Package_SLP:LoadLEEM:"+CurrentDataSet
string ImgList_Fname=Pkg_Location+":SLP_ImgListW"
string ImgParam_Fname=Pkg_Location+":SLP_ImgParamListW"
wave /T SLP_ImgListW=$ImgList_Fname
wave /T SLP_ImgParamListW=$ImgParam_Fname
wave /T SLP_ImgSetListW=root:Package_SLP:LoadLEEM:SLP_ImgSetListW
wave SLP_ImgSetListSelW=root:Package_SLP:LoadLEEM:SLP_ImgSetListSelW
NVAR LoadLEEM_Sel=root:Package_SLP:LoadLEEM:LoadLEEM_Sel
NVAR Dataset_Sel=root:Package_SLP:LoadLEEM:Dataset_Sel
String ImgW_FName=SLP_ImgListW[LoadLEEM_Sel][2]+SLP_ImgListW[LoadLEEM_Sel][3]
wave ImgW=$ImgW_FName
String ImgLabel_L1="Image wave name: "+SLP_ImgListW[LoadLEEM_Sel][3]
String ImgLabel_L2="(x,y): ("+SLP_ImgParamListW[LoadLEEM_Sel][2]+"mm ,"+SLP_ImgParamListW[LoadLEEM_Sel][3]+"mm), FOV: "+SLP_ImgParamListW[LoadLEEM_Sel][5]
String ImgLabel_L3="Temperature: "+SLP_ImgParamListW[LoadLEEM_Sel][4]+ "。"
NewImage ImgW
//ModifyGraph margin(bottom)=60
Legend /A=RB "\Z08"+ImgLabel_L1+"\r"+ImgLabel_L2+"\r"+ImgLabel_L3
End
Function ListBoxProc_LL_DatasetList(lba) : ListBoxControl
STRUCT WMListboxAction &lba
Variable row = lba.row
Variable col = lba.col
WAVE/T/Z listWave = lba.listWave
WAVE/Z selWave = lba.selWave
SVAR CurrentDataSet=root:Package_SLP:LoadLEEM:CurrentDataSet
NVAR Dataset_sel=root:Package_SLP:LoadLEEM:Dataset_sel
wave /T SLP_ImgSetListW=root:Package_SLP:LoadLEEM:SLP_ImgSetListW
string Sel_Recall_Name="root:Package_SLP:LoadLEEM:"+CurrentDataSet+":LoadLEEM_Sel_Recall"
NVAR LoadLEEM_Sel_Recall=$Sel_Recall_Name
NVAR LoadLEEM_Sel=root:Package_SLP:LoadLEEM:LoadLEEM_Sel
LoadLEEM_Sel_Recall=LoadLEEM_Sel
if (row!=-1&&row<dimsize(SLP_ImgSetListW,0)) //Prevent users from clicking outside the SLP_ImgSetListW's range
switch( lba.eventCode )
case -1: // control being killed
break
case 4: // mouse down
CurrentDataSet=SLP_ImgSetListW[row][1]
Dataset_Sel=row
string ImageParamListW_FName="root:Package_SLP:LoadLEEM:"+CurrentDataSet+":SLP_ImgParamListW"
string ImageListW_FName="root:Package_SLP:LoadLEEM:"+CurrentDataSet+":SLP_ImgListW"
Sel_Recall_Name="root:Package_SLP:LoadLEEM:"+CurrentDataSet+":LoadLEEM_Sel_Recall"
NVAR LoadLEEM_Sel_Recall=$Sel_Recall_Name
LoadLEEM_Sel=LoadLEEM_Sel_Recall
wave /T SLP_ImgParamListW=$ImageParamListW_FName
wave /T SLP_ImgListW=$ImageListW_FName
ListBox list0,listWave=SLP_ImgParamListW,selRow=LoadLEEM_Sel,Row=LoadLEEM_Sel
string Pkg_Location="root:Package_SLP:LoadLEEM:"+CurrentDataSet
string ImgParamSel_Fname=Pkg_Location+":SLP_ImgParamListSelW"
wave SLP_ImgParamListSelW=$ImgParamSel_Fname
ListBox list0, selWave=SLP_ImgParamListSelW
SLP_LL_PlotImage(SLP_ImgListW[LoadLEEM_Sel][3],SLP_ImgListW[LoadLEEM_Sel][2])
break
case 3: // double click
break
//case 4: // cell selection
case 5: // cell selection plus shift key
break
case 6: // begin edit
break
case 7: // finish edit
break
case 13: // checkbox clicked (Igor 6.2 or later)
break
endswitch
else
Listbox List1, SelRow=Dataset_Sel
endif
return 0
End
Function SLP_LL_PlotImage(ImageName,ImageLocation)
string ImageName
string ImageLocation
SVAR CurrentImageName=root:Package_SLP:LoadLEEM:CurrentImageName
SVAR LL_ImgColour=root:Package_SLP:LoadLEEM:LL_ImgColour
//SVAR Image_Location=root:Package_SLP:LoadLEEM:LoadLEEM_ImgLoc
//Check whether the plot is blank
variable N_images=itemsinlist(ImageNameList("SLP_LL_01#SLP_LL_01_ImPlot",";"))
string FullImageName=ImageLocation+ImageName
string PlotName="SLP_LL_01#SLP_LL_01_ImPlot"
If (N_images!=0) //If the image plot is not empty
if (!stringmatch(ImageName,CurrentImageName)) //If the same image is already there - don't do anything
//Accquire the colour setting of the previous image
string prev_ImgInfo=imageinfo(PlotName,CurrentImageName,0)
string prev_ImgColour=stringfromlist(1,greplist(prev_ImgInfo,"RECREATION",0,";"),":")
prev_ImgColour=RemoveEnding(prev_ImgColour) //Remove ';' at the end
LL_ImgColour=prev_ImgColour //Save the image colour settings
Appendimage /W=$PlotName $FullImageName;delayupdate
Execute "ModifyImage /W="+PlotName+" "+ImageName +" "+ prev_ImgColour + ";Delayupdate"//Need to use Execute command
//ModifyImage /W=$PlotName $ImageName ctab= {45,90,Terrain,0};delayupdate
removeimage /W=$PlotName $CurrentImageName //Remove previous image
Endif
Else
Appendimage /W=$PlotName $FullImageName;delayupdate
Execute "ModifyImage /W="+PlotName+" "+ImageName +" "+ LL_ImgColour + ";Delayupdate"//Need to use Execute command
//ModifyImage /W=$PlotName $ImageName ctab= {45,90,Terrain,0};delayupdate
Endif
ModifyGraph /W=$PlotName standoff=0
ModifyGraph /W=$PlotName fSize=7
SetAxis /W=$PlotName/A/R left
ModifyGraph /W=$PlotName minor=1
CurrentImageName=ImageName
//Display the important parameters
NVAR LoadLEEM_sel=root:Package_SLP:LoadLEEM:LoadLEEM_sel
SVAR CurrentDataSet=root:Package_SLP:LoadLEEM:CurrentDataSet
string SLP_ImgParamListW_FName="root:Package_SLP:LoadLEEM:"+CurrentDataSet+":SLP_ImgParamListW"
Wave /T SLP_ImgParamListW=$SLP_ImgParamListW_FName
NVAR ce_X=root:Package_SLP:LoadLEEM:ce_X
NVAR ce_Y=root:Package_SLP:LoadLEEM:ce_Y
NVAR ce_SampleTemp=root:Package_SLP:LoadLEEM:ce_SampleTemp
SVAR ce_FOV1=root:Package_SLP:LoadLEEM:ce_FOV1
SVAR ce_notes=root:Package_SLP:LoadLEEM:ce_notes
SVAR ce_Date=root:Package_SLP:LoadLEEM:ce_Date
ce_X=str2num(SLP_ImgParamListW[LoadLEEM_sel][2])
ce_Y=str2num(SLP_ImgParamListW[LoadLEEM_sel][3])
ce_SampleTemp=str2num(SLP_ImgParamListW[LoadLEEM_sel][4])
ce_FOV1=SLP_ImgParamListW[LoadLEEM_sel][5]
ce_Notes=SLP_ImgParamListW[LoadLEEM_sel][13]
ce_Date=SLP_ImgParamListW[LoadLEEM_sel][14]
End
Function SLP_LL_LoadImg_V2()