source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VC_UtilityProcedures.ipf @ 955

Last change on this file since 955 was 955, checked in by srkline, 8 years ago

some reorganization of the r/w routines to generate HDF test files for SANS and VSANS (all are housed together for testing). also some reorganization of the detector binning routines to get functions grouped in more logical locations.

File size: 5.9 KB
Line 
1#pragma rtGlobals=3             // Use modern global access method and strict wave access.
2
3////////////////////////
4//
5//
6// a bunch of utility procedures to access information from the VCALC panel and to access
7// constants based in which of the detectors I'm trying to work with. Saves a lot of repetitive switches
8//
9// start the function names with VCALC_ to avoid the eventual conflicts with the file loading utilities
10// for reduction of real VSANS data
11//
12//
13// -- add more of these procedures as more items are added to the panel
14//
15////////////////////////
16
17
18//  Values from the VCALC panel
19
20
21// returns the nominal SDD from the panel -- value is METERS
22// Does NOT include the set back (offset) of the T/B panels. This is a separate value
23Function VCALC_getSDD(type)
24        String type
25       
26        Variable sdd
27       
28        strswitch(type)
29                case "FL":
30                case "FR":             
31                        ControlInfo/W=VCALC VCALCCtrl_2d
32                        SDD = V_Value
33                        break
34                case "FT":
35                case "FB":             
36                        ControlInfo/W=VCALC VCALCCtrl_2d
37                        SDD = V_Value   
38                        break
39
40                case "ML":
41                case "MR":             
42                        ControlInfo/W=VCALC VCALCCtrl_3d
43                        SDD = V_Value
44                        break
45                case "MT":
46                case "MB":
47                        ControlInfo/W=VCALC VCALCCtrl_3d
48                        SDD = V_Value
49                        break   
50                                               
51                case "B":               
52                        ControlInfo/W=VCALC VCALCCtrl_4b
53                        SDD = V_Value
54                        break
55                       
56                default:
57                        Print "Error -- type not found in        V_getSDD(type)"                                       
58                        sdd = NaN               //no match for type             
59        endswitch
60       
61        return(sdd)
62end
63
64// returns the panel separation [mm]
65Function VCALC_getPanelSeparation(type)
66        String type
67       
68        Variable sep
69       
70        strswitch(type)
71                case "FL":
72                case "FR":
73                case "FLR":             
74                        ControlInfo/W=VCALC VCALCCtrl_2a
75                        sep = V_Value
76                        break
77                case "FT":
78                case "FB":
79                case "FTB":             
80                        ControlInfo/W=VCALC VCALCCtrl_2b
81                        sep = V_Value   
82                        break
83
84                case "ML":
85                case "MR":
86                case "MLR":             
87                        ControlInfo/W=VCALC VCALCCtrl_3a
88                        sep = V_Value
89                        break
90                case "MT":
91                case "MB":
92                case "MTB":
93                        ControlInfo/W=VCALC VCALCCtrl_3b
94                        sep = V_Value
95                        break   
96                                               
97                case "B":               
98                        sep = 0
99                        break
100                       
101                default:
102                        Print "Error -- type not found in        VCALC_getPanelSeparation(type)"                                       
103                        sep = NaN               //no match for type             
104        endswitch
105       
106        return(sep)
107end
108
109// returns the lateral panel offset [mm]
110Function VCALC_getLateralOffset(type)
111        String type
112       
113        Variable offset
114       
115        strswitch(type)
116                case "FL":
117                case "FR":
118                case "FLR":
119                case "FT":
120                case "FB":
121                case "FTB":             
122                        ControlInfo/W=VCALC VCALCCtrl_2c
123                        offset = V_Value       
124                        break
125
126                case "ML":
127                case "MR":
128                case "MLR":
129                case "MT":
130                case "MB":
131                case "MTB":
132                        ControlInfo/W=VCALC VCALCCtrl_3c
133                        offset = V_Value
134                        break   
135                                               
136                case "B":               
137                        ControlInfo/W=VCALC VCALCCtrl_4a
138                        offset = V_Value
139                        break
140                       
141                default:
142                        Print "Error -- type not found in        VCALC_getLateralOffset(type)"                                 
143                        offset = NaN            //no match for type             
144        endswitch
145       
146        return(offset)
147end
148
149// returns the (mean) wavelength from the panel -- value is angstroms
150Function VCALC_getWavelength()
151       
152        ControlInfo/W=VCALC VCALCCtrl_0b
153
154        return(V_Value)
155end
156
157// returns the number of neutrons on the sample
158Function VCALC_getImon()
159       
160        ControlInfo/W=VCALC VCALCCtrl_5a
161
162        return(V_Value)
163end
164
165// returns the model function to use
166Function/S VCALC_getModelFunctionStr()
167       
168        ControlInfo/W=VCALC VCALCCtrl_5b
169
170        return(S_Value)
171end
172
173
174
175/// NVARs set in VCALC space (not necessarily matching the true instrument values)
176// -- these all set to the proper data folder, then BACK TO ROOT:
177
178
179// return the pixel X size, in [cm]
180Function VCALC_getPixSizeX(type)
181        String type
182
183        SetDataFolder root:Packages:NIST:VSANS:VCALC
184                       
185        strswitch(type)
186                case "FL":
187                        NVAR pixSizeX = gFront_L_pixelX
188                        break
189                case "FR":             
190                        NVAR pixSizeX = gFront_R_pixelX
191                        break
192                case "FT":
193                        NVAR pixSizeX = gFront_T_pixelX
194                        break   
195                case "FB":             
196                        NVAR pixSizeX = gFront_B_pixelX
197                        break
198                       
199                case "ML":
200                        NVAR pixSizeX = gMiddle_L_pixelX
201                        break
202                case "MR":             
203                        NVAR pixSizeX = gMiddle_R_pixelX
204                        break
205                case "MT":
206                        NVAR pixSizeX = gMiddle_T_pixelX
207                        break   
208                case "MB":             
209                        NVAR pixSizeX = gMiddle_B_pixelX
210                        break
211                                               
212                case "B":               
213                        NVAR pixSizeX = gBack_pixelX
214                        break
215                       
216                default:                                                       
217                        Print "Detector type mismatch in        V_getPixSizeX(type)"
218                        return(NaN)
219        endswitch
220
221        setDataFolder root:
222               
223        return(pixSizeX)
224end
225
226// return the pixel Y size, in [cm]
227Function VCALC_getPixSizeY(type)
228        String type
229
230        SetDataFolder root:Packages:NIST:VSANS:VCALC
231                       
232        strswitch(type)
233                case "FL":
234                        NVAR pixSizeY = gFront_L_pixelY
235                        break
236                case "FR":             
237                        NVAR pixSizeY = gFront_R_pixelY
238                        break
239                case "FT":
240                        NVAR pixSizeY = gFront_T_pixelY
241                        break   
242                case "FB":             
243                        NVAR pixSizeY = gFront_B_pixelY
244                        break
245                       
246                case "ML":
247                        NVAR pixSizeY = gMiddle_L_pixelY
248                        break
249                case "MR":             
250                        NVAR pixSizeY = gMiddle_R_pixelY
251                        break
252                case "MT":
253                        NVAR pixSizeY = gMiddle_T_pixelY
254                        break   
255                case "MB":             
256                        NVAR pixSizeY = gMiddle_B_pixelY
257                        break
258                                               
259                case "B":               
260                        NVAR pixSizeY = gBack_pixelY
261                        break
262                       
263                default:                                                       
264                        Print "Detector type mismatch in        V_getPixSizeY(type)"
265                        return(NaN)
266        endswitch
267
268        setDatafolder root:
269               
270        return(pixSizeY)
271end
272
273// SDD offset of the top/bottom panels
274// value returned is in mm (so beware)
275//
276Function VCALC_getTopBottomSDDOffset(type)
277        String type
278
279        SetDataFolder root:Packages:NIST:VSANS:VCALC
280       
281        strswitch(type)
282                case "FL":
283                case "FR":
284                        return(0)               
285                        break           //already zero, do nothing
286                case "FT":
287                case "FB":             
288                        NVAR sdd_offset = gFront_SDDOffset      //T/B are 300 mm farther back
289                        break
290                       
291                case "ML":
292                case "MR":
293                        return(0)
294                        break           //already zero, do nothing
295                case "MT":
296                case "MB":
297                        NVAR sdd_offset = gMiddle_SDDOffset     //T/B are 30 cm farther back
298                        break   
299                                               
300                case "B":
301                        return(0)
302                        break           //already zero, do nothing
303                       
304                default:
305                        Print "Error -- type not found in        VCALC_getTopBottomSDDOffset(type)"                                     
306                        sdd_offset = 0          //no match for type             
307        endswitch
308
309        SetDataFolder root:
310               
311        return(sdd_offset)     
312End
313
314
315/////////// procedure to concatenate I(q) files into a single file
316//
317// currently, no rescaling is done, just crude concatentate and sort
318//
Note: See TracBrowser for help on using the repository browser.