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

Last change on this file since 1062 was 1062, checked in by srkline, 5 years ago

many changes to the VCALC code and a few changes to the main code to get the units consistent, and centimeters everywhere possible. The real space distance array and the non-linear calibrations are still defined and calculated in mm. This can hopefully be changed in the future. Some constants in the data file will need to be updated to cm, such as the T/B setback, which has been confirmed to be 41.0 cm

File size: 8.3 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 [cm]
22// Does NOT include the setback 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 [cm]
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 [cm]
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        Variable pixSizeX = V_getDet_x_pixel_size("VCALC",type)
184
185//      SetDataFolder root:Packages:NIST:VSANS:VCALC
186//                     
187//      strswitch(type)
188//              case "FL":
189//                      NVAR pixSizeX = gFront_L_pixelX
190//                      break
191//              case "FR":             
192//                      NVAR pixSizeX = gFront_R_pixelX
193//                      break
194//              case "FT":
195//                      NVAR pixSizeX = gFront_T_pixelX
196//                      break   
197//              case "FB":             
198//                      NVAR pixSizeX = gFront_B_pixelX
199//                      break
200//                     
201//              case "ML":
202//                      NVAR pixSizeX = gMiddle_L_pixelX
203//                      break
204//              case "MR":             
205//                      NVAR pixSizeX = gMiddle_R_pixelX
206//                      break
207//              case "MT":
208//                      NVAR pixSizeX = gMiddle_T_pixelX
209//                      break   
210//              case "MB":             
211//                      NVAR pixSizeX = gMiddle_B_pixelX
212//                      break
213//                                             
214//              case "B":               
215//                      NVAR pixSizeX = gBack_pixelX
216//                      break
217//                     
218//              default:                                                       
219//                      Print "Detector type mismatch in        V_getPixSizeX(type)"
220//                      setDataFolder root:
221//                      return(NaN)
222//      endswitch
223//
224//      setDataFolder root:
225               
226        return(pixSizeX)
227end
228
229// return the pixel Y size, in [cm]
230Function VCALC_getPixSizeY(type)
231        String type
232
233        Variable pixSizeY = V_getDet_y_pixel_size("VCALC",type)
234       
235//      SetDataFolder root:Packages:NIST:VSANS:VCALC
236//                     
237//      strswitch(type)
238//              case "FL":
239//                      NVAR pixSizeY = gFront_L_pixelY
240//                      break
241//              case "FR":             
242//                      NVAR pixSizeY = gFront_R_pixelY
243//                      break
244//              case "FT":
245//                      NVAR pixSizeY = gFront_T_pixelY
246//                      break   
247//              case "FB":             
248//                      NVAR pixSizeY = gFront_B_pixelY
249//                      break
250//                     
251//              case "ML":
252//                      NVAR pixSizeY = gMiddle_L_pixelY
253//                      break
254//              case "MR":             
255//                      NVAR pixSizeY = gMiddle_R_pixelY
256//                      break
257//              case "MT":
258//                      NVAR pixSizeY = gMiddle_T_pixelY
259//                      break   
260//              case "MB":             
261//                      NVAR pixSizeY = gMiddle_B_pixelY
262//                      break
263//                                             
264//              case "B":               
265//                      NVAR pixSizeY = gBack_pixelY
266//                      break
267//                     
268//              default:                                                       
269//                      Print "Detector type mismatch in        V_getPixSizeY(type)"
270//                      SetDataFolder root:
271//                      return(NaN)
272//      endswitch
273//
274//      setDatafolder root:
275               
276        return(pixSizeY)
277end
278
279
280// return the number of pixels in x-dimension
281Function VCALC_get_nPix_X(type)
282        String type
283
284        Variable nPix = V_getDet_pixel_num_x("VCALC",type)
285       
286//      SetDataFolder root:Packages:NIST:VSANS:VCALC
287//                     
288//      strswitch(type)
289//              case "FL":
290//                      NVAR nPix = gFront_L_nPix_X
291//                      break
292//              case "FR":             
293//                      NVAR nPix = gFront_R_nPix_X
294//                      break
295//              case "FT":
296//                      NVAR nPix = gFront_T_nPix_X
297//                      break   
298//              case "FB":             
299//                      NVAR nPix = gFront_B_nPix_X
300//                      break
301//                     
302//              case "ML":
303//                      NVAR nPix = gMiddle_L_nPix_X
304//                      break
305//              case "MR":             
306//                      NVAR nPix = gMiddle_R_nPix_X
307//                      break
308//              case "MT":
309//                      NVAR nPix = gMiddle_T_nPix_X
310//                      break   
311//              case "MB":             
312//                      NVAR nPix = gMiddle_B_nPix_X
313//                      break
314//                                             
315//              case "B":               
316//                      NVAR nPix = gBack_nPix_X
317//                      break
318//                     
319//              default:                                                       
320//                      Print "Detector type mismatch in        VCALC_get_nPix_X(type)"
321//                      SetDataFolder root:
322//                      return(NaN)
323//      endswitch
324//
325//      setDataFolder root:
326               
327        return(nPix)
328end
329
330// return the number of pixels in y-dimension
331Function VCALC_get_nPix_Y(type)
332        String type
333
334        Variable nPix = V_getDet_pixel_num_y("VCALC",type)
335
336//      SetDataFolder root:Packages:NIST:VSANS:VCALC
337//                     
338//      strswitch(type)
339//              case "FL":
340//                      NVAR nPix = gFront_L_nPix_Y
341//                      break
342//              case "FR":             
343//                      NVAR nPix = gFront_R_nPix_Y
344//                      break
345//              case "FT":
346//                      NVAR nPix = gFront_T_nPix_Y
347//                      break   
348//              case "FB":             
349//                      NVAR nPix = gFront_B_nPix_Y
350//                      break
351//                     
352//              case "ML":
353//                      NVAR nPix = gMiddle_L_nPix_Y
354//                      break
355//              case "MR":             
356//                      NVAR nPix = gMiddle_R_nPix_Y
357//                      break
358//              case "MT":
359//                      NVAR nPix = gMiddle_T_nPix_Y
360//                      break   
361//              case "MB":             
362//                      NVAR nPix = gMiddle_B_nPix_Y
363//                      break
364//                                             
365//              case "B":               
366//                      NVAR nPix = gBack_nPix_Y
367//                      break
368//                     
369//              default:                                                       
370//                      Print "Detector type mismatch in        VCALC_get_nPix_Y(type)"
371//                      SetDataFolder root:
372//                      return(NaN)
373//      endswitch
374//
375//      SetDataFolder root:
376               
377        return(nPix)
378end
379
380
381
382// SDD offset of the top/bottom panels
383// value returned is in [cm]
384//
385Function VCALC_getTopBottomSDDSetback(type)
386        String type
387
388        SetDataFolder root:Packages:NIST:VSANS:VCALC
389       
390        strswitch(type)
391                case "FL":
392                case "FR":
393                        SetDataFolder root:
394                        return(0)               
395                        break           //already zero, do nothing
396                case "FT":
397                case "FB":             
398                        NVAR sdd_setback = gFront_SDDsetback    //T/B are 41 cm farther back
399                        break
400                       
401                case "ML":
402                case "MR":
403                        SetDataFolder root:
404                        return(0)
405                        break           //already zero, do nothing
406                case "MT":
407                case "MB":
408                        NVAR sdd_setback = gMiddle_SDDsetback   //T/B are 41 cm farther back
409                        break   
410                                               
411                case "B":
412                        SetDataFolder root:
413                        return(0)
414                        break           //already zero, do nothing
415                       
416                default:
417                        Print "Error -- type not found in        VCALC_getTopBottomSDDSetback(type)"                                   
418                        sdd_setback = 0         //no match for type             
419        endswitch
420
421        SetDataFolder root:
422               
423        return(sdd_setback)     
424End
425
426
427/////////// procedure to concatenate I(q) files into a single file
428//
429// currently, no rescaling is done, no trimming is done, just crude concatentate and sort
430//
431// TODO
432// -- all of this needs to be done. There's nothing here...
433//
434
435
436
437
Note: See TracBrowser for help on using the repository browser.