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

Last change on this file since 963 was 963, checked in by srkline, 7 years ago

Updated the display of the "beam center finder" to better display the panels with an appropriate aspect ratio for the pixels.

Made the number of pixels (x,y) on each of the panels as globals, plus access functions. Large panels were coded for 256, but will likely be 128 pixels in reality. Make global for easy changes. Made sure that exsting functions used the global and were not hard-wired.

File size: 7.5 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
274// return the number of pixels in x-dimension
275Function VCALC_get_nPix_X(type)
276        String type
277
278        SetDataFolder root:Packages:NIST:VSANS:VCALC
279                       
280        strswitch(type)
281                case "FL":
282                        NVAR nPix = gFront_L_nPix_X
283                        break
284                case "FR":             
285                        NVAR nPix = gFront_R_nPix_X
286                        break
287                case "FT":
288                        NVAR nPix = gFront_T_nPix_X
289                        break   
290                case "FB":             
291                        NVAR nPix = gFront_B_nPix_X
292                        break
293                       
294                case "ML":
295                        NVAR nPix = gMiddle_L_nPix_X
296                        break
297                case "MR":             
298                        NVAR nPix = gMiddle_R_nPix_X
299                        break
300                case "MT":
301                        NVAR nPix = gMiddle_T_nPix_X
302                        break   
303                case "MB":             
304                        NVAR nPix = gMiddle_B_nPix_X
305                        break
306                                               
307                case "B":               
308                        NVAR nPix = gBack_nPix_X
309                        break
310                       
311                default:                                                       
312                        Print "Detector type mismatch in        VCALC_get_nPix_X(type)"
313                        return(NaN)
314        endswitch
315
316        setDataFolder root:
317               
318        return(nPix)
319end
320
321// return the number of pixels in y-dimension
322Function VCALC_get_nPix_Y(type)
323        String type
324
325        SetDataFolder root:Packages:NIST:VSANS:VCALC
326                       
327        strswitch(type)
328                case "FL":
329                        NVAR nPix = gFront_L_nPix_Y
330                        break
331                case "FR":             
332                        NVAR nPix = gFront_R_nPix_Y
333                        break
334                case "FT":
335                        NVAR nPix = gFront_T_nPix_Y
336                        break   
337                case "FB":             
338                        NVAR nPix = gFront_B_nPix_Y
339                        break
340                       
341                case "ML":
342                        NVAR nPix = gMiddle_L_nPix_Y
343                        break
344                case "MR":             
345                        NVAR nPix = gMiddle_R_nPix_Y
346                        break
347                case "MT":
348                        NVAR nPix = gMiddle_T_nPix_Y
349                        break   
350                case "MB":             
351                        NVAR nPix = gMiddle_B_nPix_Y
352                        break
353                                               
354                case "B":               
355                        NVAR nPix = gBack_nPix_Y
356                        break
357                       
358                default:                                                       
359                        Print "Detector type mismatch in        VCALC_get_nPix_Y(type)"
360                        return(NaN)
361        endswitch
362
363        setDataFolder root:
364               
365        return(nPix)
366end
367
368
369
370// SDD offset of the top/bottom panels
371// value returned is in mm (so beware)
372//
373Function VCALC_getTopBottomSDDOffset(type)
374        String type
375
376        SetDataFolder root:Packages:NIST:VSANS:VCALC
377       
378        strswitch(type)
379                case "FL":
380                case "FR":
381                        return(0)               
382                        break           //already zero, do nothing
383                case "FT":
384                case "FB":             
385                        NVAR sdd_offset = gFront_SDDOffset      //T/B are 300 mm farther back
386                        break
387                       
388                case "ML":
389                case "MR":
390                        return(0)
391                        break           //already zero, do nothing
392                case "MT":
393                case "MB":
394                        NVAR sdd_offset = gMiddle_SDDOffset     //T/B are 30 cm farther back
395                        break   
396                                               
397                case "B":
398                        return(0)
399                        break           //already zero, do nothing
400                       
401                default:
402                        Print "Error -- type not found in        VCALC_getTopBottomSDDOffset(type)"                                     
403                        sdd_offset = 0          //no match for type             
404        endswitch
405
406        SetDataFolder root:
407               
408        return(sdd_offset)     
409End
410
411
412/////////// procedure to concatenate I(q) files into a single file
413//
414// currently, no rescaling is done, just crude concatentate and sort
415//
Note: See TracBrowser for help on using the repository browser.