source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Initialize.ipf @ 1003

Last change on this file since 1003 was 1003, checked in by srkline, 6 years ago

* updated the detector dead time constants in NCNR_Utils for the new NISTO hardware *

other changes were to the file catalog and patch files, which are still works in progress.

File size: 11.8 KB
Line 
1#pragma rtGlobals=3             // Use modern global access method and strict wave access.
2#pragma version=0.1
3#pragma IgorVersion=6.1
4
5//***********************
6// NOV 2015 Vers 0.1
7//
8// Initialization procedures that must be run before anything
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 VSANS 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
25
26// TODO -- need to set up a separate file of "constants" or "globals" where the actual numbers are
27//stored. If there are not a lot, that place could be here. InitFacilityGlobals() is currently in NCNR_Utils.ipf
28
29
30
31//
32/// Search for TODO to clean up the missing pieces
33//
34
35
36
37
38
39Proc Initialize_VSANS()
40        V_Initialize()
41End
42
43//this is the main initualization procedure that must be the first thing
44//done when opening a new Data reduction experiment
45//
46//sets up data folders, globals, protocols, and draws the main panel
47Proc V_Initialize()
48
49        Variable curVersion = 0.1
50        Variable oldVersion = NumVarOrDefault("root:VSANS_RED_VERSION",curVersion)
51               
52        if(oldVersion == curVersion)
53                //must just be a new startup with the current version
54                Variable/G root:VSANS_RED_VERSION=0.1
55        endif
56       
57        if(oldVersion < curVersion)
58                String str =    "This experiment was created with version "+num2str(oldVersion)+" of the macros. I'll try to make this work, but please start new work with a current template"
59                DoAlert 0,str
60        endif
61       
62        V_InitFolders()
63        V_InitFakeProtocols()
64        V_InitGlobals()
65        V_InitFacilityGlobals()
66        DoWindow/F Main_VSANS_Panel
67        If(V_flag == 0)
68                //draw panel
69                Main_VSANS_Panel()
70        Endif
71//      ResizeCmdWindow()
72
73// TODO - be sure that NCNR is defined correctly       
74        //unload the NCNR_Package_Loader, if NCNR not defined
75        UnloadNCNR_VSANS_Procedures()
76
77End
78
79//creates all the necessary data folders in the root folder
80//does not overwrite any existing folders of the same name
81//it leaves data in them untouched
82//
83// TODO -- make sure that I have all of the folders that I need
84//
85Function V_InitFolders()
86       
87        NewDataFolder/O root:Packages
88        NewDataFolder/O root:Packages:NIST
89        NewDataFolder/O root:Packages:NIST:VSANS
90       
91// for the file catalog
92        NewDataFolder/O root:Packages:NIST:VSANS:CatVSHeaderInfo
93// for the globals
94        NewDataFolder/O root:Packages:NIST:VSANS:Globals
95// for the raw nexus data (so I don't need to reload to get a single value)
96        NewDataFolder/O root:Packages:NIST:VSANS:RawVSANS
97
98// folders for the reduction steps             
99        NewDataFolder/O root:Packages:NIST:VSANS:RAW
100        NewDataFolder/O root:Packages:NIST:VSANS:SAM
101        NewDataFolder/O root:Packages:NIST:VSANS:EMP
102        NewDataFolder/O root:Packages:NIST:VSANS:BGD
103        NewDataFolder/O root:Packages:NIST:VSANS:COR
104        NewDataFolder/O root:Packages:NIST:VSANS:DIV
105        NewDataFolder/O root:Packages:NIST:VSANS:MSK
106        NewDataFolder/O root:Packages:NIST:VSANS:ABS
107        NewDataFolder/O root:Packages:NIST:VSANS:CAL
108        NewDataFolder/O root:Packages:NIST:VSANS:STO
109        NewDataFolder/O root:Packages:NIST:VSANS:SUB
110        NewDataFolder/O root:Packages:NIST:VSANS:DRK
111        NewDataFolder/O root:Packages:NIST:VSANS:ADJ
112
113
114// ?? anything else
115
116// for simulation
117//      NewDataFolder/O root:Packages:NIST:VSANS:SAS
118
119
120       
121        Return(0)
122End
123
124
125
126
127//
128//Global folder already exists...
129//adds appropriate globals to the newly created myGlobals folder
130//return data folder to root: before leaving
131//
132//
133Function V_InitGlobals()
134       
135        Variable/G root:Packages:NIST:VSANS:Globals:gIsLogScale = 0
136        String/G root:Packages:NIST:VSANS:Globals:gCurDispType = "RAW"
137       
138        //check platform, so Angstrom can be drawn correctly
139
140        //TODO  - this is different on Igor 7
141        if(cmpstr("Macintosh",IgorInfo(2)) == 0)
142                String/G root:Packages:NIST:VSANS:Globals:gAngstStr = num2char(-127)
143                Variable/G root:Packages:NIST:VSANS:Globals:gIsMac = 1
144        else
145                //either Windows or Windows NT
146                String/G root:Packages:NIST:VSANS:Globals:gAngstStr = num2char(-59)
147                Variable/G root:Packages:NIST:VSANS:Globals:gIsMac = 0
148                //SetIgorOption to keep some PC's (graphics cards?) from smoothing the 2D image
149                Execute "SetIgorOption WinDraw,forceCOLORONCOLOR=1"
150        endif
151       
152        // TODO -- find the SANS preferences, copy over and update for VSANS
153        // -- these are all in PlotUtilsMacro_v40.ipf as the preferences are set up as common
154        // to all packages. I'm not sure that I want to do this with VSANS, but make the packages
155        // separate entities. I'm seeing little benefit of the crossover, especially now that
156        // Analysis is not mine. So for VSANS, there is a new, separate file: V_VSANS_Preferences.ipf
157
158        //this is critical to initialize now - as it has the y/n flags for the detector correction steps
159        Execute "Initialize_VSANSPreferences()"
160
161       
162        // lookup waves for log and linear display of images
163        // this is used for the main data display. With this, I can use the original
164        // detector data (no copy) and the zeros in the data set are tolerated when displaying
165        // on log scale
166        SetDataFolder root:Packages:NIST:VSANS:Globals
167        Variable num,val,offset
168        num=10000
169        offset = 1/num
170       
171        Make/O/D/N=(num) logLookupWave,linearLookupWave
172        linearLookupWave = (p+1)/num
173       
174        logLookupWave = log(linearLookupWave)
175        val = logLookupWave[0]
176        logLookupWave += -val + offset
177        val = logLookupWave[num-1]
178        logLookupWave /= val
179       
180        SetDataFolder root:
181
182
183        //set flag if Demo Version is detected
184        Variable/G root:Packages:NIST:VSANS:Globals:isDemoVersion = V_isDemo()
185       
186        //set XML globals
187//      String/G root:Packages:NIST:gXMLLoader_Title = ""
188       
189        Return(0)
190End
191
192
193//
194// initializes globals that are specific to VSANS
195//
196// there really should be nothing here... all of this should now be in the Nexus data file
197// and not tethered to hard-wired constants.
198//
199// -- what was here was:
200// number of detector pixels
201// pixel size
202// deadtime
203// beamstop "tolerance" to identify Trans files
204// sample aperture offset
205//
206Function V_InitFacilityGlobals()
207
208//      //Detector -specific globals
209//      Variable/G root:myGlobals:gNPixelsX=128
210//      Variable/G root:myGlobals:gNPixelsY=128
211//     
212//      // as of Jan2008, detector pixel sizes are read directly from the file header, so they MUST
213//      // be set correctly in instr.cfg - these values are not used, but declared to avoid errors
214//      Variable/G root:myGlobals:PixelResNG3_ILL = 1.0         //pixel resolution in cm
215//      Variable/G root:myGlobals:PixelResNG5_ILL = 1.0
216//      Variable/G root:myGlobals:PixelResNG7_ILL = 1.0
217//      Variable/G root:myGlobals:PixelResNG3_ORNL = 0.5
218//      Variable/G root:myGlobals:PixelResNG5_ORNL = 0.5
219//      Variable/G root:myGlobals:PixelResNG7_ORNL = 0.5
220//      Variable/G root:myGlobals:PixelResNGB_ORNL = 0.5
221////    Variable/G root:myGlobals:PixelResCGB_ORNL = 0.5                // fiction
222//
223//      Variable/G root:myGlobals:PixelResDefault = 0.5
224//     
225//      Variable/G root:myGlobals:DeadtimeNG3_ILL = 3.0e-6              //deadtime in seconds
226//      Variable/G root:myGlobals:DeadtimeNG5_ILL = 3.0e-6
227//      Variable/G root:myGlobals:DeadtimeNG7_ILL = 3.0e-6
228//      Variable/G root:myGlobals:DeadtimeNGB_ILL = 4.0e-6              // fictional
229//      Variable/G root:myGlobals:DeadtimeNG3_ORNL_VAX = 3.4e-6         //pre - 23-JUL-2009 used VAX
230//      Variable/G root:myGlobals:DeadtimeNG3_ORNL_ICE = 1.5e-6         //post - 23-JUL-2009 used ICE
231//      Variable/G root:myGlobals:DeadtimeNG5_ORNL = 0.6e-6                     //as of 9 MAY 2002
232//      Variable/G root:myGlobals:DeadtimeNG7_ORNL_VAX = 3.4e-6         //pre 25-FEB-2010 used VAX
233//      Variable/G root:myGlobals:DeadtimeNG7_ORNL_ICE = 2.3e-6         //post 25-FEB-2010 used ICE
234//      Variable/G root:myGlobals:DeadtimeNGB_ORNL_ICE = 4.0e-6         //per JGB 16-JAN-2013, best value we have for the oscillating data
235//
236////    Variable/G root:myGlobals:DeadtimeCGB_ORNL_ICE = 1.5e-6         // fiction
237//
238//      Variable/G root:myGlobals:DeadtimeDefault = 3.4e-6
239//
240//      //new 11APR07
241//      Variable/G root:myGlobals:BeamstopXTol = -8                     // (cm) is BS Xpos is -5 cm or less, it's a trans measurement
242//      // sample aperture offset is NOT stored in the VAX header, but it should be
243//      // - when it is, remove the global and write an accessor AND make a place for
244//      // it in the RealsRead
245//      Variable/G root:myGlobals:apOff = 5.0                           // (cm) distance from sample aperture to sample position
246
247End
248
249///////////////////////////////////////////////
250//
251////////////// everything below needs to be re-written for VSANS
252//
253//////////////////////////////////////////////
254
255
256// TODO
257// do I need to make the protocols any longer for VSANS?
258// What other options for processing / averaging / saving are needed??
259// - TODO
260// -- likely that I'll want to have #pts to cut from I(q) as input to NSORT within the protocol so that the
261// entire reduction can be automatic
262//
263//
264// -- creates the "base" protocols that should be available, after creating the data folder
265// -- all protocols are kept in the root:Packages:NIST:VSANS:Globals:Protocols folder, created here
266//
267Function V_InitFakeProtocols()
268       
269        //*****as of 0901, protocols are 8 points long, [6] is used for work.drk, [7] is unused
270        NewDataFolder/O root:Packages:NIST:VSANS:Globals:Protocols
271        Make/O/T $"root:Packages:NIST:VSANS:Globals:Protocols:Base"={"none","none","ask","ask","none","AVTYPE=Circular;SAVE=Yes;NAME=Manual;PLOT=Yes","DRK=none,DRKMODE=0,",""}
272        Make/O/T $"root:Packages:NIST:VSANS:Globals:Protocols:DoAll"={"ask","ask","ask","ask","ask","AVTYPE=Circular;SAVE=Yes;NAME=Manual;PLOT=Yes","DRK=none,DRKMODE=0,",""}
273        Make/O/T/N=8 $"root:Packages:NIST:VSANS:Globals:Protocols:CreateNew"                    //null wave
274        //Initialize waves to store values in
275       
276        String/G root:Packages:NIST:VSANS:Globals:Protocols:gProtoStr=""
277        String/G root:Packages:NIST:VSANS:Globals:Protocols:gNewStr=""
278        String/G root:Packages:NIST:VSANS:Globals:Protocols:gAvgInfoStr = "AVTYPE=Circular;SAVE=Yes;NAME=Auto;PLOT=Yes;"
279       
280        Return(0)
281End
282
283//simple function to resize the comand window to a nice size, no matter what the resolution
284//need to test out on several different monitors and both platforms
285//
286// could easily be incorporated into the initialization routines to ensure that the
287// command window is always visible at startup of the macros. No need for a hook function
288//
289Function ResizeCmdWindow()
290
291        String str=IgorInfo(0),rect="",platform=igorinfo(2)
292        Variable depth,left,top,right,bottom,factor
293       
294        if(cmpstr(platform,"Macintosh")==0)
295                factor=1
296        else
297                factor = 0.6            //fudge factor to get command window on-screen on Windows
298        endif
299        rect = StringByKey("SCREEN1", str  ,":",";")   
300        sscanf rect,"DEPTH=%d,RECT=%d,%d,%d,%d",depth, left,top,right,bottom
301        MoveWindow/C  (left+3)*factor,(bottom-150)*factor,(right-50)*factor,(bottom-10)*factor
302End
303
304// since the NCNR procedures can't be loaded concurrently with the other facility functions,
305// unload this procedure file, and add this to the functions that run at initialization of the
306// experiment
307//
308// TODO - be sure that this unloads correctly
309Function UnloadNCNR_VSANS_Procedures()
310
311#if (exists("NCNR_VSANS")==6)                   //defined in the main #includes file.
312        //do nothing if an NCNR reduction experiment
313#else
314        if(ItemsInList(WinList("NCNR_Package_Loader.ipf", ";","WIN:128")))
315                Execute/P "CloseProc /NAME=\"NCNR_Package_Loader.ipf\""
316                Execute/P "COMPILEPROCEDURES "
317        endif
318#endif
319
320End
321
322//returns 1 if demo version, 0 if full version
323Function V_IsDemo()
324
325        // create small offscreen graph
326        Display/W=(3000,3000,3010,3010)
327        DoWindow/C IsDemoGraph
328
329        // try to save a PICT or bitmap of it to the clipboard
330        SavePICT/Z  as "Clipboard"
331        Variable isDemo= V_Flag != 0    // if error: must be demo
332        DoWindow/K IsDemoGraph
333        return isDemo
334End
335
336// Clean out the RawVSANS folder before saving
337Function BeforeExperimentSaveHook(rN,fileName,path,type,creator,kind)
338        Variable rN,kind
339        String fileName,path,type,creator
340
341        // clean out, so that the file SAVE is not slow due to the large experiment size
342        // TODO -- decide if this is really necessary
343//     
344//      V_CleanOutRawVSANS()
345// present a progress window
346        V_CleanupData_w_Progress(0,1)
347        Printf "Hook cleaned out RawVSANS, experiment saved\r"
348
349End
Note: See TracBrowser for help on using the repository browser.