1 | #pragma rtGlobals=1 // Use modern global access method. |
---|
2 | #pragma version=5.1 |
---|
3 | #pragma IgorVersion=6.0 |
---|
4 | |
---|
5 | //*********************** |
---|
6 | // 091901 Vers 1.2 |
---|
7 | // |
---|
8 | // Initialization procedures that must be run before any analysis is started |
---|
9 | // this is accomplished by placing: |
---|
10 | // |
---|
11 | // Initialize() |
---|
12 | // #include "includes" |
---|
13 | // |
---|
14 | // in the built-in procedure window of the .pxt (template) experiment |
---|
15 | // IGOR recognizes this, and executes Initialize() immediately after |
---|
16 | // compiling all of the included procedures. This is all done as the blank |
---|
17 | // template is opened |
---|
18 | // |
---|
19 | // Choosing initialize from the SANS menu will do the same, and no harm is done |
---|
20 | // to the experiment by re- initializing. no data or folders are overwritten |
---|
21 | // |
---|
22 | //************************ |
---|
23 | |
---|
24 | //this is the main initualization procedure that must be the first thing |
---|
25 | //done when opening a new Data reduction experiment |
---|
26 | // |
---|
27 | //sets up data folders, globals, protocols, and draws the main panel |
---|
28 | Proc Initialize() |
---|
29 | |
---|
30 | Variable/G root:SANS_RED_VERSION=5.10 |
---|
31 | |
---|
32 | if(itemsinlist(WinList("Includes.ipf", ";","INCLUDE:6"),";") != 0) |
---|
33 | //must be opening a v4.2 or earlier template |
---|
34 | DoAlert 0,"This experiment was created with an old version of the macros. I'll try to make this work, but please start new work with a current template" |
---|
35 | endif |
---|
36 | |
---|
37 | InitFolders() |
---|
38 | InitFakeProtocols() |
---|
39 | InitGlobals() |
---|
40 | InitFacilityGlobals() |
---|
41 | DoWindow/F Main_Panel |
---|
42 | If(V_flag == 0) |
---|
43 | //draw panel |
---|
44 | Main_Panel() |
---|
45 | Endif |
---|
46 | ResizeCmdWindow() |
---|
47 | End |
---|
48 | |
---|
49 | //creates all the necessary data folders in the root folder |
---|
50 | //does not overwrite any existing folders of the same name |
---|
51 | //it leaves data in them untouched |
---|
52 | Function InitFolders() |
---|
53 | |
---|
54 | NewDataFolder/O root:myGlobals |
---|
55 | NewDataFolder/O root:myGlobals:CatVSHeaderInfo |
---|
56 | NewDataFolder/O root:RAW |
---|
57 | NewDataFolder/O root:SAM |
---|
58 | NewDataFolder/O root:EMP |
---|
59 | NewDataFolder/O root:BGD |
---|
60 | NewDataFolder/O root:COR |
---|
61 | NewDataFolder/O root:DIV |
---|
62 | NewDataFolder/O root:MSK |
---|
63 | NewDataFolder/O root:ABS |
---|
64 | NewDataFolder/O root:CAL |
---|
65 | NewDataFolder/O root:STO |
---|
66 | NewDataFolder/O root:SUB |
---|
67 | NewDataFolder/O root:DRK |
---|
68 | |
---|
69 | Return(0) |
---|
70 | End |
---|
71 | |
---|
72 | //Global folder already exists... |
---|
73 | //adds appropriate globals to the newly created myGlobals folder |
---|
74 | //return data folder to root: before leaving |
---|
75 | // |
---|
76 | // global parameters used for detector constants are facility specific |
---|
77 | // and have been moved |
---|
78 | // |
---|
79 | Function InitGlobals() |
---|
80 | |
---|
81 | Variable/G root:myGlobals:gIsLogScale = 0 |
---|
82 | String/G root:myGlobals:gDataDisplayType = "RAW" |
---|
83 | |
---|
84 | //check platform, so Angstrom can be drawn correctly |
---|
85 | |
---|
86 | if(cmpstr("Macintosh",IgorInfo(2)) == 0) |
---|
87 | String/G root:myGlobals:gAngstStr = num2char(-127) |
---|
88 | Variable/G root:myGlobals:gIsMac = 1 |
---|
89 | else |
---|
90 | //either Windows or Windows NT |
---|
91 | String/G root:myGlobals:gAngstStr = num2char(-59) |
---|
92 | Variable/G root:myGlobals:gIsMac = 0 |
---|
93 | //SetIgorOption to keep some PC's (graphics cards?) from smoothing the 2D image |
---|
94 | Execute "SetIgorOption WinDraw,forceCOLORONCOLOR=1" |
---|
95 | endif |
---|
96 | |
---|
97 | //global to set log scale as the default for display of RAW data |
---|
98 | //these can be set using the Misc->Preferences panel |
---|
99 | Variable/G root:myGlobals:gLogScalingAsDefault=1 |
---|
100 | Variable/G root:myGlobals:gAllowDRK=0 //don't show DRK as default |
---|
101 | Variable/G root:myGlobals:gDoTransCheck=1 |
---|
102 | Variable/G root:myGlobals:gBinWidth=1 |
---|
103 | Variable/G root:myGlobals:gNPhiSteps=72 |
---|
104 | |
---|
105 | // flags to turn detector corrections on/off for testing (you should leave these ON) |
---|
106 | Variable/G root:myGlobals:gDoDetectorEffCorr = 0 |
---|
107 | Variable/G root:myGlobals:gDoTransmissionCorr = 1 |
---|
108 | Variable/G root:myGlobals:gDoDetectorEffCorrILL = 1 |
---|
109 | |
---|
110 | //set flag if Demo Version is detected |
---|
111 | Variable/G root:myGlobals:isDemoVersion = isDemo() |
---|
112 | |
---|
113 | Return(0) |
---|
114 | End |
---|
115 | |
---|
116 | //creates the "base" protocols that should be available, after creating the data folder |
---|
117 | // |
---|
118 | //all protocols are kept in the root:myGlobals:Protocols folder, created here |
---|
119 | // |
---|
120 | Function InitFakeProtocols() |
---|
121 | |
---|
122 | //*****as of 0901, protocols are 8 points long, [6] is used for work.drk, [7] is unused |
---|
123 | NewDataFolder/O root:myGlobals:Protocols |
---|
124 | Make/O/T $"root:myGlobals:Protocols:Base"={"none","none","ask","ask","none","AVTYPE=Circular;SAVE=Yes;NAME=Manual;PLOT=Yes","DRK=none,DRKMODE=0,",""} |
---|
125 | Make/O/T $"root:myGlobals:Protocols:DoAll"={"ask","ask","ask","ask","ask","AVTYPE=Circular;SAVE=Yes;NAME=Manual;PLOT=Yes","DRK=none,DRKMODE=0,",""} |
---|
126 | Make/O/T/N=8 $"root:myGlobals:Protocols:CreateNew" //null wave |
---|
127 | //Initialize waves to store values in |
---|
128 | |
---|
129 | String/G root:myGlobals:Protocols:gProtoStr="" |
---|
130 | String/G root:myGlobals:Protocols:gNewStr="" |
---|
131 | String/G root:myGlobals:Protocols:gAvgInfoStr = "AVTYPE=Circular;SAVE=Yes;NAME=Auto;PLOT=Yes;" |
---|
132 | |
---|
133 | Return(0) |
---|
134 | End |
---|
135 | |
---|
136 | //simple function to resize the comand window to a nice size, no matter what the resolution |
---|
137 | //need to test out on several different monitors and both platforms |
---|
138 | // |
---|
139 | // could easily be incorporated into the initialization routines to ensure that the |
---|
140 | // command window is always visible at startup of the macros. No need for a hook function |
---|
141 | // |
---|
142 | Function ResizeCmdWindow() |
---|
143 | |
---|
144 | String str=IgorInfo(0),rect="",platform=igorinfo(2) |
---|
145 | Variable depth,left,top,right,bottom,factor |
---|
146 | |
---|
147 | if(cmpstr(platform,"Macintosh")==0) |
---|
148 | factor=1 |
---|
149 | else |
---|
150 | factor = 0.6 //fudge factor to get command window on-screen on Windows |
---|
151 | endif |
---|
152 | rect = StringByKey("SCREEN1", str ,":",";") |
---|
153 | sscanf rect,"DEPTH=%d,RECT=%d,%d,%d,%d",depth, left,top,right,bottom |
---|
154 | MoveWindow/C (left+3)*factor,(bottom-150)*factor,(right-50)*factor,(bottom-10)*factor |
---|
155 | End |
---|
156 | |
---|
157 | |
---|
158 | //returns 1 if demo version, 0 if full version |
---|
159 | Function IsDemo() |
---|
160 | |
---|
161 | // create small offscreen graph |
---|
162 | Display/W=(3000,3000,3010,3010) |
---|
163 | DoWindow/C IsDemoGraph |
---|
164 | |
---|
165 | // try to save a PICT or bitmap of it to the clipboard |
---|
166 | SavePICT/Z as "Clipboard" |
---|
167 | Variable isDemo= V_Flag != 0 // if error: must be demo |
---|
168 | DoWindow/K IsDemoGraph |
---|
169 | return isDemo |
---|
170 | End |
---|