source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/SANS/Initialize.ipf @ 668

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

Made the preference panel fancier, with a tab control. this makes it much easier to add more things in the future. Added two more SANS items to turn off some detector corrections. good for testing, but maybe a bit dangerous.

removed the SANSPreferences procedure file from the general includes list for reduction. kept it in the very old versions of the includes (510 and older) for backwards comaptibility. new experiments start with 520 or higher.

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:Packages
55        NewDataFolder/O root:Packages:NIST
56       
57        NewDataFolder/O root:myGlobals
58        NewDataFolder/O root:myGlobals:CatVSHeaderInfo
59        NewDataFolder/O root:Packages:NIST:RAW
60        NewDataFolder/O root:Packages:NIST:SAM
61        NewDataFolder/O root:Packages:NIST:EMP
62        NewDataFolder/O root:Packages:NIST:BGD
63        NewDataFolder/O root:Packages:NIST:COR
64        NewDataFolder/O root:Packages:NIST:DIV
65        NewDataFolder/O root:Packages:NIST:MSK
66        NewDataFolder/O root:Packages:NIST:ABS
67        NewDataFolder/O root:Packages:NIST:CAL
68        NewDataFolder/O root:Packages:NIST:STO
69        NewDataFolder/O root:Packages:NIST:SUB
70        NewDataFolder/O root:Packages:NIST:DRK
71       
72
73       
74        Return(0)
75End
76
77//Global folder already exists...
78//adds appropriate globals to the newly created myGlobals folder
79//return data folder to root: before leaving
80//
81// global parameters used for detector constants are facility specific
82// and have been moved
83//
84Function InitGlobals()
85       
86        Variable/G root:myGlobals:gIsLogScale = 0
87        String/G root:myGlobals:gDataDisplayType = "RAW"
88       
89        //check platform, so Angstrom can be drawn correctly
90       
91        if(cmpstr("Macintosh",IgorInfo(2)) == 0)
92                String/G root:myGlobals:gAngstStr = num2char(-127)
93                Variable/G root:myGlobals:gIsMac = 1
94        else
95                //either Windows or Windows NT
96                String/G root:myGlobals:gAngstStr = num2char(-59)
97                Variable/G root:myGlobals:gIsMac = 0
98                //SetIgorOption to keep some PC's (graphics cards?) from smoothing the 2D image
99                Execute "SetIgorOption WinDraw,forceCOLORONCOLOR=1"
100        endif
101       
102        //global to set log scale as the default for display of RAW data
103        //these can be set using the Misc->Preferences panel
104        //initializes preferences. this includes XML y/n, and SANS Reduction items.
105        // if they already exist, they won't be overwritten
106        Execute "Initialize_Preferences()"     
107
108       
109
110
111        //set flag if Demo Version is detected
112        Variable/G root:myGlobals:isDemoVersion = isDemo()
113       
114        //set XML globals
115        String/G root:Packages:NIST:gXMLLoader_Title = ""
116       
117        Return(0)
118End
119
120//creates the "base" protocols that should be available, after creating the data folder
121//
122//all protocols are kept in the root:myGlobals:Protocols folder, created here
123//
124Function InitFakeProtocols()
125       
126        //*****as of 0901, protocols are 8 points long, [6] is used for work.drk, [7] is unused
127        NewDataFolder/O root:myGlobals:Protocols
128        Make/O/T $"root:myGlobals:Protocols:Base"={"none","none","ask","ask","none","AVTYPE=Circular;SAVE=Yes;NAME=Manual;PLOT=Yes","DRK=none,DRKMODE=0,",""}
129        Make/O/T $"root:myGlobals:Protocols:DoAll"={"ask","ask","ask","ask","ask","AVTYPE=Circular;SAVE=Yes;NAME=Manual;PLOT=Yes","DRK=none,DRKMODE=0,",""}
130        Make/O/T/N=8 $"root:myGlobals:Protocols:CreateNew"                      //null wave
131        //Initialize waves to store values in
132       
133        String/G root:myGlobals:Protocols:gProtoStr=""
134        String/G root:myGlobals:Protocols:gNewStr=""
135        String/G root:myGlobals:Protocols:gAvgInfoStr = "AVTYPE=Circular;SAVE=Yes;NAME=Auto;PLOT=Yes;"
136       
137        Return(0)
138End
139
140//simple function to resize the comand window to a nice size, no matter what the resolution
141//need to test out on several different monitors and both platforms
142//
143// could easily be incorporated into the initialization routines to ensure that the
144// command window is always visible at startup of the macros. No need for a hook function
145//
146Function ResizeCmdWindow()
147
148        String str=IgorInfo(0),rect="",platform=igorinfo(2)
149        Variable depth,left,top,right,bottom,factor
150       
151        if(cmpstr(platform,"Macintosh")==0)
152                factor=1
153        else
154                factor = 0.6            //fudge factor to get command window on-screen on Windows
155        endif
156        rect = StringByKey("SCREEN1", str  ,":",";")   
157        sscanf rect,"DEPTH=%d,RECT=%d,%d,%d,%d",depth, left,top,right,bottom
158        MoveWindow/C  (left+3)*factor,(bottom-150)*factor,(right-50)*factor,(bottom-10)*factor
159End
160
161
162//returns 1 if demo version, 0 if full version
163Function IsDemo()
164
165        // create small offscreen graph
166        Display/W=(3000,3000,3010,3010)
167        DoWindow/C IsDemoGraph
168
169        // try to save a PICT or bitmap of it to the clipboard
170        SavePICT/Z  as "Clipboard"
171        Variable isDemo= V_Flag != 0    // if error: must be demo
172        DoWindow/K IsDemoGraph
173        return isDemo
174End
Note: See TracBrowser for help on using the repository browser.