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

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

main changes here are the addition of a first pass at the file catalog, and patch panel. each of these is based on the old SANS file (for now) and has been updated to at least compile.

Much more work needs to be done to get the functionality to be what VSANS needs, both in what is important to report in the file catalog, and how to best present the patch GUI for different situations

File size: 11.7 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        Printf "Hook cleaned out RawVSANS, experiment saved\r"
346
347End
Note: See TracBrowser for help on using the repository browser.