source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/SANS/InitializeILL.ipf @ 570

Last change on this file since 570 was 570, checked in by srkline, 13 years ago

Change (1):
In preparation for release, updated pragma IgorVersion?=6.1 in all procedures

Change (2):
As a side benefit of requiring 6.1, we can use the MultiThread? keyword to thread any model function we like. The speed benefit is only noticeable on functions that require at least one integration and at least 100 points (resolution smearing is NOT threaded, too many threadSafe issues, too little benefit). I have chosen to use the MultiThread? only on the XOP assignment. In the Igor code there are too many functions that are not explicitly declared threadsafe, making for a mess.

  • Property svn:executable set to *
File size: 5.6 KB
Line 
1#pragma rtGlobals=1             // Use modern global access method.
2#pragma version=5.1
3#pragma IgorVersion=6.1
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
28Proc 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()
47End
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
52Function 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)
70End
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//
79Function 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)
114End
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//
120Function 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)
134End
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//
142Function 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
155End
156
157
158//returns 1 if demo version, 0 if full version
159Function 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
170End
Note: See TracBrowser for help on using the repository browser.