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

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

more changes and additons to display VSANS data

adding functions for IvsQ plotting

coverted much of VCALC to have similar folder structure as HDF to allow re-use of the Q-binning procedures from VCALC with real data in work files.

re-working the beam center finder to get it to work with work file data rather then only VCALC.

new plotting routines for the panels to rescale to the beam center (still in pixels, though)

File size: 7.7 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                        setDataFolder root:
219                        return(NaN)
220        endswitch
221
222        setDataFolder root:
223               
224        return(pixSizeX)
225end
226
227// return the pixel Y size, in [cm]
228Function VCALC_getPixSizeY(type)
229        String type
230
231        SetDataFolder root:Packages:NIST:VSANS:VCALC
232                       
233        strswitch(type)
234                case "FL":
235                        NVAR pixSizeY = gFront_L_pixelY
236                        break
237                case "FR":             
238                        NVAR pixSizeY = gFront_R_pixelY
239                        break
240                case "FT":
241                        NVAR pixSizeY = gFront_T_pixelY
242                        break   
243                case "FB":             
244                        NVAR pixSizeY = gFront_B_pixelY
245                        break
246                       
247                case "ML":
248                        NVAR pixSizeY = gMiddle_L_pixelY
249                        break
250                case "MR":             
251                        NVAR pixSizeY = gMiddle_R_pixelY
252                        break
253                case "MT":
254                        NVAR pixSizeY = gMiddle_T_pixelY
255                        break   
256                case "MB":             
257                        NVAR pixSizeY = gMiddle_B_pixelY
258                        break
259                                               
260                case "B":               
261                        NVAR pixSizeY = gBack_pixelY
262                        break
263                       
264                default:                                                       
265                        Print "Detector type mismatch in        V_getPixSizeY(type)"
266                        SetDataFolder root:
267                        return(NaN)
268        endswitch
269
270        setDatafolder root:
271               
272        return(pixSizeY)
273end
274
275
276// return the number of pixels in x-dimension
277Function VCALC_get_nPix_X(type)
278        String type
279
280        SetDataFolder root:Packages:NIST:VSANS:VCALC
281                       
282        strswitch(type)
283                case "FL":
284                        NVAR nPix = gFront_L_nPix_X
285                        break
286                case "FR":             
287                        NVAR nPix = gFront_R_nPix_X
288                        break
289                case "FT":
290                        NVAR nPix = gFront_T_nPix_X
291                        break   
292                case "FB":             
293                        NVAR nPix = gFront_B_nPix_X
294                        break
295                       
296                case "ML":
297                        NVAR nPix = gMiddle_L_nPix_X
298                        break
299                case "MR":             
300                        NVAR nPix = gMiddle_R_nPix_X
301                        break
302                case "MT":
303                        NVAR nPix = gMiddle_T_nPix_X
304                        break   
305                case "MB":             
306                        NVAR nPix = gMiddle_B_nPix_X
307                        break
308                                               
309                case "B":               
310                        NVAR nPix = gBack_nPix_X
311                        break
312                       
313                default:                                                       
314                        Print "Detector type mismatch in        VCALC_get_nPix_X(type)"
315                        SetDataFolder root:
316                        return(NaN)
317        endswitch
318
319        setDataFolder root:
320               
321        return(nPix)
322end
323
324// return the number of pixels in y-dimension
325Function VCALC_get_nPix_Y(type)
326        String type
327
328        SetDataFolder root:Packages:NIST:VSANS:VCALC
329                       
330        strswitch(type)
331                case "FL":
332                        NVAR nPix = gFront_L_nPix_Y
333                        break
334                case "FR":             
335                        NVAR nPix = gFront_R_nPix_Y
336                        break
337                case "FT":
338                        NVAR nPix = gFront_T_nPix_Y
339                        break   
340                case "FB":             
341                        NVAR nPix = gFront_B_nPix_Y
342                        break
343                       
344                case "ML":
345                        NVAR nPix = gMiddle_L_nPix_Y
346                        break
347                case "MR":             
348                        NVAR nPix = gMiddle_R_nPix_Y
349                        break
350                case "MT":
351                        NVAR nPix = gMiddle_T_nPix_Y
352                        break   
353                case "MB":             
354                        NVAR nPix = gMiddle_B_nPix_Y
355                        break
356                                               
357                case "B":               
358                        NVAR nPix = gBack_nPix_Y
359                        break
360                       
361                default:                                                       
362                        Print "Detector type mismatch in        VCALC_get_nPix_Y(type)"
363                        SetDataFolder root:
364                        return(NaN)
365        endswitch
366
367        SetDataFolder root:
368               
369        return(nPix)
370end
371
372
373
374// SDD offset of the top/bottom panels
375// value returned is in mm (so beware)
376//
377Function VCALC_getTopBottomSDDOffset(type)
378        String type
379
380        SetDataFolder root:Packages:NIST:VSANS:VCALC
381       
382        strswitch(type)
383                case "FL":
384                case "FR":
385                        SetDataFolder root:
386                        return(0)               
387                        break           //already zero, do nothing
388                case "FT":
389                case "FB":             
390                        NVAR sdd_offset = gFront_SDDOffset      //T/B are 300 mm farther back
391                        break
392                       
393                case "ML":
394                case "MR":
395                        SetDataFolder root:
396                        return(0)
397                        break           //already zero, do nothing
398                case "MT":
399                case "MB":
400                        NVAR sdd_offset = gMiddle_SDDOffset     //T/B are 30 cm farther back
401                        break   
402                                               
403                case "B":
404                        SetDataFolder root:
405                        return(0)
406                        break           //already zero, do nothing
407                       
408                default:
409                        Print "Error -- type not found in        VCALC_getTopBottomSDDOffset(type)"                                     
410                        sdd_offset = 0          //no match for type             
411        endswitch
412
413        SetDataFolder root:
414               
415        return(sdd_offset)     
416End
417
418
419/////////// procedure to concatenate I(q) files into a single file
420//
421// currently, no rescaling is done, just crude concatentate and sort
422//
Note: See TracBrowser for help on using the repository browser.