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

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

additions to VCALC procedures to correctly account for panel motion (individual, not symmetric). Updated the plotting routines to all (mostly) pass through the same subroutines so that additional averaging modes will be easier to add.

File size: 7.8 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_getPanelTranslation(type)
66        String type
67       
68        Variable sep
69       
70        strswitch(type)
71                case "FL":
72                        ControlInfo/W=VCALC VCALCCtrl_2a
73                        sep = V_Value
74                        break
75                case "FR":
76                        ControlInfo/W=VCALC VCALCCtrl_2aa
77                        sep = V_Value
78                        break
79                case "FT":
80                        ControlInfo/W=VCALC VCALCCtrl_2b
81                        sep = V_Value   
82                        break
83                case "FB":
84                        ControlInfo/W=VCALC VCALCCtrl_2bb
85                        sep = V_Value   
86                        break
87
88                case "ML":
89                        ControlInfo/W=VCALC VCALCCtrl_3a
90                        sep = V_Value
91                        break
92                case "MR":
93                        ControlInfo/W=VCALC VCALCCtrl_3aa
94                        sep = V_Value
95                        break
96                case "MT":
97                        ControlInfo/W=VCALC VCALCCtrl_3b
98                        sep = V_Value
99                        break   
100                case "MB":
101                        ControlInfo/W=VCALC VCALCCtrl_3bb
102                        sep = V_Value
103                        break   
104                                               
105                case "B":               
106                        sep = 0
107                        break
108                       
109                default:
110                        Print "Error -- type not found in        VCALC_getPanelSeparation(type)"                                       
111                        sep = NaN               //no match for type             
112        endswitch
113       
114        return(sep)
115end
116
117
118
119// returns the (mean) wavelength from the panel -- value is angstroms
120Function VCALC_getWavelength()
121       
122        ControlInfo/W=VCALC VCALCCtrl_0b
123
124        return(V_Value)
125end
126
127// returns the number of neutrons on the sample
128Function VCALC_getImon()
129       
130        ControlInfo/W=VCALC VCALCCtrl_5a
131
132        return(V_Value)
133end
134
135// returns the model function to use
136Function/S VCALC_getModelFunctionStr()
137       
138        ControlInfo/W=VCALC VCALCCtrl_5b
139
140        return(S_Value)
141end
142
143
144
145/// NVARs set in VCALC space (not necessarily matching the true instrument values)
146// -- these all set to the proper data folder, then BACK TO ROOT:
147
148
149// return the pixel X size, in [cm]
150Function VCALC_getPixSizeX(type)
151        String type
152
153        Variable pixSizeX = V_getDet_x_pixel_size("VCALC",type)
154
155//      SetDataFolder root:Packages:NIST:VSANS:VCALC
156//                     
157//      strswitch(type)
158//              case "FL":
159//                      NVAR pixSizeX = gFront_L_pixelX
160//                      break
161//              case "FR":             
162//                      NVAR pixSizeX = gFront_R_pixelX
163//                      break
164//              case "FT":
165//                      NVAR pixSizeX = gFront_T_pixelX
166//                      break   
167//              case "FB":             
168//                      NVAR pixSizeX = gFront_B_pixelX
169//                      break
170//                     
171//              case "ML":
172//                      NVAR pixSizeX = gMiddle_L_pixelX
173//                      break
174//              case "MR":             
175//                      NVAR pixSizeX = gMiddle_R_pixelX
176//                      break
177//              case "MT":
178//                      NVAR pixSizeX = gMiddle_T_pixelX
179//                      break   
180//              case "MB":             
181//                      NVAR pixSizeX = gMiddle_B_pixelX
182//                      break
183//                                             
184//              case "B":               
185//                      NVAR pixSizeX = gBack_pixelX
186//                      break
187//                     
188//              default:                                                       
189//                      Print "Detector type mismatch in        V_getPixSizeX(type)"
190//                      setDataFolder root:
191//                      return(NaN)
192//      endswitch
193//
194//      setDataFolder root:
195               
196        return(pixSizeX)
197end
198
199// return the pixel Y size, in [cm]
200Function VCALC_getPixSizeY(type)
201        String type
202
203        Variable pixSizeY = V_getDet_y_pixel_size("VCALC",type)
204       
205//      SetDataFolder root:Packages:NIST:VSANS:VCALC
206//                     
207//      strswitch(type)
208//              case "FL":
209//                      NVAR pixSizeY = gFront_L_pixelY
210//                      break
211//              case "FR":             
212//                      NVAR pixSizeY = gFront_R_pixelY
213//                      break
214//              case "FT":
215//                      NVAR pixSizeY = gFront_T_pixelY
216//                      break   
217//              case "FB":             
218//                      NVAR pixSizeY = gFront_B_pixelY
219//                      break
220//                     
221//              case "ML":
222//                      NVAR pixSizeY = gMiddle_L_pixelY
223//                      break
224//              case "MR":             
225//                      NVAR pixSizeY = gMiddle_R_pixelY
226//                      break
227//              case "MT":
228//                      NVAR pixSizeY = gMiddle_T_pixelY
229//                      break   
230//              case "MB":             
231//                      NVAR pixSizeY = gMiddle_B_pixelY
232//                      break
233//                                             
234//              case "B":               
235//                      NVAR pixSizeY = gBack_pixelY
236//                      break
237//                     
238//              default:                                                       
239//                      Print "Detector type mismatch in        V_getPixSizeY(type)"
240//                      SetDataFolder root:
241//                      return(NaN)
242//      endswitch
243//
244//      setDatafolder root:
245               
246        return(pixSizeY)
247end
248
249
250// return the number of pixels in x-dimension
251Function VCALC_get_nPix_X(type)
252        String type
253
254        Variable nPix = V_getDet_pixel_num_x("VCALC",type)
255       
256//      SetDataFolder root:Packages:NIST:VSANS:VCALC
257//                     
258//      strswitch(type)
259//              case "FL":
260//                      NVAR nPix = gFront_L_nPix_X
261//                      break
262//              case "FR":             
263//                      NVAR nPix = gFront_R_nPix_X
264//                      break
265//              case "FT":
266//                      NVAR nPix = gFront_T_nPix_X
267//                      break   
268//              case "FB":             
269//                      NVAR nPix = gFront_B_nPix_X
270//                      break
271//                     
272//              case "ML":
273//                      NVAR nPix = gMiddle_L_nPix_X
274//                      break
275//              case "MR":             
276//                      NVAR nPix = gMiddle_R_nPix_X
277//                      break
278//              case "MT":
279//                      NVAR nPix = gMiddle_T_nPix_X
280//                      break   
281//              case "MB":             
282//                      NVAR nPix = gMiddle_B_nPix_X
283//                      break
284//                                             
285//              case "B":               
286//                      NVAR nPix = gBack_nPix_X
287//                      break
288//                     
289//              default:                                                       
290//                      Print "Detector type mismatch in        VCALC_get_nPix_X(type)"
291//                      SetDataFolder root:
292//                      return(NaN)
293//      endswitch
294//
295//      setDataFolder root:
296               
297        return(nPix)
298end
299
300// return the number of pixels in y-dimension
301Function VCALC_get_nPix_Y(type)
302        String type
303
304        Variable nPix = V_getDet_pixel_num_y("VCALC",type)
305
306//      SetDataFolder root:Packages:NIST:VSANS:VCALC
307//                     
308//      strswitch(type)
309//              case "FL":
310//                      NVAR nPix = gFront_L_nPix_Y
311//                      break
312//              case "FR":             
313//                      NVAR nPix = gFront_R_nPix_Y
314//                      break
315//              case "FT":
316//                      NVAR nPix = gFront_T_nPix_Y
317//                      break   
318//              case "FB":             
319//                      NVAR nPix = gFront_B_nPix_Y
320//                      break
321//                     
322//              case "ML":
323//                      NVAR nPix = gMiddle_L_nPix_Y
324//                      break
325//              case "MR":             
326//                      NVAR nPix = gMiddle_R_nPix_Y
327//                      break
328//              case "MT":
329//                      NVAR nPix = gMiddle_T_nPix_Y
330//                      break   
331//              case "MB":             
332//                      NVAR nPix = gMiddle_B_nPix_Y
333//                      break
334//                                             
335//              case "B":               
336//                      NVAR nPix = gBack_nPix_Y
337//                      break
338//                     
339//              default:                                                       
340//                      Print "Detector type mismatch in        VCALC_get_nPix_Y(type)"
341//                      SetDataFolder root:
342//                      return(NaN)
343//      endswitch
344//
345//      SetDataFolder root:
346               
347        return(nPix)
348end
349
350
351
352// SDD offset of the top/bottom panels
353// value returned is in [cm]
354//
355Function VCALC_getTopBottomSDDSetback(type)
356        String type
357
358        SetDataFolder root:Packages:NIST:VSANS:VCALC
359       
360        strswitch(type)
361                case "FL":
362                case "FR":
363                        SetDataFolder root:
364                        return(0)               
365                        break           //already zero, do nothing
366                case "FT":
367                case "FB":             
368                        NVAR sdd_setback = gFront_SDDsetback    //T/B are 41 cm farther back
369                        break
370                       
371                case "ML":
372                case "MR":
373                        SetDataFolder root:
374                        return(0)
375                        break           //already zero, do nothing
376                case "MT":
377                case "MB":
378                        NVAR sdd_setback = gMiddle_SDDsetback   //T/B are 41 cm farther back
379                        break   
380                                               
381                case "B":
382                        SetDataFolder root:
383                        return(0)
384                        break           //already zero, do nothing
385                       
386                default:
387                        Print "Error -- type not found in        VCALC_getTopBottomSDDSetback(type)"                                   
388                        sdd_setback = 0         //no match for type             
389        endswitch
390
391        SetDataFolder root:
392               
393        return(sdd_setback)     
394End
395
396
397/////////// procedure to concatenate I(q) files into a single file
398//
399// currently, no rescaling is done, no trimming is done, just crude concatentate and sort
400//
401// TODO
402// -- all of this needs to be done. There's nothing here...
403//
404
405
406
407
Note: See TracBrowser for help on using the repository browser.