source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VC_VCALCPanel_MockUp.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: 27.4 KB
Line 
1#pragma rtGlobals=1             // Use modern global access method.
2
3//
4//
5// mockup of the panel for VCALC
6//
7// -- all is housed in the folder:
8//      NewDataFolder/O root:Packages:NIST:VSANS:VCALC
9//
10// -- Put all of the constants to define the instrument plus all of the VCALC stuff
11//
12// anticipating that at the same level as VCALC will be all of the reduction folders
13// in a similar way as for SANS reduction
14//
15//
16
17
18Macro VCALC_Panel()
19        DoWindow/F VCALC
20        if(V_flag==0)
21       
22                //initialize space = folders, parameters, instrument constants, etc.
23                V_Initialize_Space()
24               
25                //open the panel
26                DrawVCALC_Panel()
27               
28                // two graphs with the ray-tracing side/top views
29                SetupSideView()
30                SetupTopView()
31               
32                // a front view of the panels
33                FrontView_1x()
34               
35                // TODO: fake a "click" on the front SDD to force (almost)everything to update
36                // including the I(q) graph
37                FakeFrontMiddleSDDClick()
38
39        endif
40End
41
42Function FakeFrontMiddleSDDClick()
43       
44        STRUCT WMSetVariableAction sva
45        sva.eventCode = 3
46//      sva.dval = 0.3
47
48        V_BDet_SDD_SetVarProc(sva)             
49        V_MDet_SDD_SetVarProc(sva)
50        V_FDet_SDD_SetVarProc(sva)
51
52        return(0)
53end
54
55
56Proc DrawVCALC_Panel()
57        PauseUpdate; Silent 1           // building window...
58        NewPanel /W=(34,44,1274,699)/N=VCALC/K=1
59        ModifyPanel cbRGB=(49151,60031,65535)
60//      ShowTools/A
61        SetDrawLayer UserBack
62       
63// always visible stuff, not on any tab
64       
65        GroupBox group0,pos={10,10},size={444,180},title="Setup"
66        TabControl Vtab,labelBack=(45000,61000,58000),pos={14,215},size={430,426},tabLabel(0)="Collim"
67        TabControl Vtab,tabLabel(1)="Sample",tabLabel(2)="Front Det",tabLabel(3)="Mid Det"
68        TabControl Vtab,tabLabel(4)="Back Det",tabLabel(5)="Simul",value= 0,proc=VCALCTabProc
69        GroupBox group1,pos={460,10},size={762,635},title="Detector Panel Positions + Data"
70
71        PopupMenu popup_a,pos={50,40},size={142,20},title="Presets"
72        PopupMenu popup_a,mode=1,popvalue="Low Q",value= root:Packages:NIST:VSANS:VCALC:gPresetPopStr
73
74        PopupMenu popup_b,pos={690,310},size={142,20},title="Binning type",proc=V_RebinIQ_PopProc
75        PopupMenu popup_b,mode=1,popvalue="One",value= root:Packages:NIST:VSANS:VCALC:gBinTypeStr
76       
77        SetVariable setVar_a,pos={476,26},size={120,15},title="axis degrees",proc=FrontView_Range_SetVarProc
78        SetVariable setVar_a,limits={0.3,30,0.2},value=_NUM:20
79
80        // for panels (in degrees)     
81        Display/W=(476,45,757,303)/HOST=# root:Packages:NIST:VSANS:VCALC:fv_degY vs root:Packages:NIST:VSANS:VCALC:fv_degX
82        RenameWindow #,FrontView
83        ModifyGraph mode=2              // mode = 2 = dots
84        ModifyGraph marker=19
85        ModifyGraph rgb=(0,0,0)
86        ModifyGraph tick=2,mirror=1
87        Label left "degrees"
88        Label bottom "degrees" 
89        SetActiveSubwindow ##
90
91
92        // for side view
93        Display/W=(842,25,1200,170)/HOST=# root:Packages:NIST:VSANS:VCALC:fv_degY vs root:Packages:NIST:VSANS:VCALC:fv_degX
94        RenameWindow #,SideView
95        ModifyGraph mode=2              // mode = 2 = dots
96        ModifyGraph marker=19
97        ModifyGraph rgb=(0,0,0)
98        ModifyGraph tick=2,mirror=1
99        Label left "Vertical position (mm)"
100        Label bottom "SDD (m)" 
101        SetActiveSubwindow ##   
102       
103        // for top view
104        Display/W=(842,180,1200,325)/HOST=# root:Packages:NIST:VSANS:VCALC:fv_degY vs root:Packages:NIST:VSANS:VCALC:fv_degX
105        RenameWindow #,TopView
106        ModifyGraph mode=2              // mode = 2 = dots
107        ModifyGraph marker=19
108        ModifyGraph rgb=(0,0,0)
109        ModifyGraph tick=2,mirror=1
110        Label left "Horizontal position (mm)"
111        Label bottom "SDD (m)" 
112        SetActiveSubwindow ##   
113
114        // for panels (as 2D Q)
115        Display/W=(475,332,814,631)/HOST=# root:Packages:NIST:VSANS:VCALC:fv_degY vs root:Packages:NIST:VSANS:VCALC:fv_degX
116        RenameWindow #,Panels_Q
117        ModifyGraph mode=2              // mode = 2 = dots
118        ModifyGraph tick=2,mirror=1,grid=2,standoff=0
119        ModifyGraph width={Aspect,1},height={Aspect,1},gbRGB=(56797,56797,56797)
120        SetAxis left -0.2,0.2
121        SetAxis bottom -0.2,0.2
122        Label left "Qy"
123        Label bottom "Qx"       
124        SetActiveSubwindow ##
125
126        SetVariable setVar_b,pos={476,314},size={120,15},title="axis Q",proc=Front2DQ_Range_SetVarProc
127        SetVariable setVar_b,limits={0.02,1,0.02},value=_NUM:0.3
128        CheckBox check_0a title="Log?",size={60,20},pos={619,313},proc=Front2DQ_Log_CheckProc
129
130        // for averaged I(Q)
131        Display/W=(842,334,1204,629)/HOST=# //root:Packages:NIST:VCALC:fv_degY vs root:Packages:NIST:VSANS:VCALC:fv_degX
132        RenameWindow #,Panels_IQ
133//      ModifyGraph mode=2              // mode = 2 = dots
134        ModifyGraph tick=2,mirror=1,grid=2
135//      Label left "Intensity"
136//      Label bottom "Q"       
137        SetActiveSubwindow ##
138
139
140       
141// all controls are named VCALCCtrl_NA where N is the tab number and A is the letter denoting
142
143       
144// tab(0), collimation - initially visible
145        Slider VCALCCtrl_0a,pos={223,324},size={200,45},limits={0,10,1},value= 1,vert= 0
146        SetVariable VCALCCtrl_0b,pos={25,294},size={120,15},title="wavelength"
147        SetVariable VCALCCtrl_0b,limits={4,20,1},value=_NUM:8,proc=V_Lambda_SetVarProc
148        PopupMenu VCALCCtrl_0c,pos={26,257},size={150,20},title="monochromator"
149        PopupMenu VCALCCtrl_0c,mode=1,popvalue="Velocity Selector",value= root:Packages:NIST:VSANS:VCALC:gMonochromatorType
150        PopupMenu VCALCCtrl_0d,pos={26,321},size={115,20},title="delta lambda"
151        PopupMenu VCALCCtrl_0d,mode=1,popvalue="0.10",value= root:Packages:NIST:VSANS:VCALC:gDeltaLambda
152        PopupMenu VCALCCtrl_0e,pos={291,262},size={132,20},title="source shape"
153        PopupMenu VCALCCtrl_0e,mode=1,popvalue="circular",value= root:Packages:NIST:VSANS:VCALC:gSourceShape
154        PopupMenu VCALCCtrl_0f,pos={283,293},size={141,20},title="source aperture"
155        PopupMenu VCALCCtrl_0f,mode=1,popvalue="1.0 cm",value= root:Packages:NIST:VSANS:VCALC:gSourceDiam
156       
157
158// tab(1) - Sample conditions, initially not visible
159        PopupMenu VCALCCtrl_1a,pos={38,270},size={142,20},title="table location",disable=1
160        PopupMenu VCALCCtrl_1a,mode=1,popvalue="Changer",value= root:Packages:NIST:VSANS:VCALC:gTableLocation
161        PopupMenu VCALCCtrl_1b,pos={270,270},size={115,20},title="Aperture Shape",disable=1
162        PopupMenu VCALCCtrl_1b,mode=1,popvalue="circular",value= root:Packages:NIST:VSANS:VCALC:gSampleApertureShape
163        PopupMenu VCALCCtrl_1c,pos={270,330},size={132,20},title="Aperture Size (cm)",disable=1
164        PopupMenu VCALCCtrl_1c,mode=1,popvalue="0.5",value= root:Packages:NIST:VSANS:VCALC:gSampleApertureDiam
165       
166
167// tab(2) - Front detector panels, initially not visible
168        SetVariable VCALCCtrl_2a,pos={30,260},size={150,15},title="L/R Separation (mm)",proc=V_FDet_LR_SetVarProc
169        SetVariable VCALCCtrl_2a,limits={0,400,1},disable=1,value=_NUM:100
170        SetVariable VCALCCtrl_2b,pos={30,290},size={150,15},title="T/B Separation (mm)",proc=V_FDet_LR_SetVarProc
171        SetVariable VCALCCtrl_2b,limits={0,400,1},disable=1,value=_NUM:100
172        SetVariable VCALCCtrl_2c,pos={205,290},size={150,15},title="Lateral Offset (mm)"
173        SetVariable VCALCCtrl_2c,limits={0,200,0.1},disable=1,value=_NUM:0
174        SetVariable VCALCCtrl_2d,pos={205,260},size={230,15},title="Sample to Detector Distance (m)",proc=V_FDet_SDD_SetVarProc
175        SetVariable VCALCCtrl_2d,limits={1,8,0.1},disable=1     ,value=_NUM:1.5
176       
177
178// tab(3) - Middle detector panels, initially not visible
179        SetVariable VCALCCtrl_3a,pos={30,260},size={150,15},title="L/R Separation (mm)",proc=V_MDet_LR_SetVarProc
180        SetVariable VCALCCtrl_3a,limits={0,400,1},disable=1,value=_NUM:120
181        SetVariable VCALCCtrl_3b,pos={30,290},size={150,15},title="T/B Separation (mm)",proc=V_MDet_LR_SetVarProc
182        SetVariable VCALCCtrl_3b,limits={0,400,1},disable=1,value=_NUM:120
183        SetVariable VCALCCtrl_3c,pos={205,290},size={150,15},title="Lateral Offset (mm)"
184        SetVariable VCALCCtrl_3c,limits={0,200,0.1},disable=1,value=_NUM:0
185        SetVariable VCALCCtrl_3d,pos={205,260},size={230,15},title="Sample to Detector Distance (m)",proc=V_MDet_SDD_SetVarProc
186        SetVariable VCALCCtrl_3d,limits={8,20,0.1},disable=1,value=_NUM:10
187       
188// tab(4) - Back detector panel
189        SetVariable VCALCCtrl_4a,pos={188,290},size={150,15},title="Lateral Offset (mm)"
190        SetVariable VCALCCtrl_4a,limits={0,200,0.1},disable=1,value=_NUM:0
191        SetVariable VCALCCtrl_4b,pos={188,260},size={230,15},title="Sample to Detector Distance (m)",proc=V_BDet_SDD_SetVarProc
192        SetVariable VCALCCtrl_4b,limits={20,25,0.1},disable=1,value=_NUM:22
193        PopupMenu VCALCCtrl_4c,pos={40,260},size={180,20},title="Detector type",disable=1
194        PopupMenu VCALCCtrl_4c,mode=1,popvalue="2D",value= root:Packages:NIST:VSANS:VCALC:gBackDetType
195
196// tab(5) - Simulation setup
197        SetVariable VCALCCtrl_5a,pos={40,290},size={200,15},title="Neutrons on Sample (imon)"
198        SetVariable VCALCCtrl_5a,limits={1e7,1e15,1e7},disable=1,value=_NUM:1e10,proc=V_SimImon_SetVarProc
199        PopupMenu VCALCCtrl_5b,pos={40,260},size={180,20},title="Model Function",disable=1
200        PopupMenu VCALCCtrl_5b,mode=1,popvalue="Debye",value= root:Packages:NIST:VSANS:VCALC:gModelFunctionType,proc=V_SimModelFunc_PopProc
201       
202End
203
204//
205// just recalculates the detector panels, doesn't adjust the views
206//
207Function Recalculate_AllDetectors()
208
209        fPlotBackPanels()
210        fPlotMiddlePanels()
211        fPlotFrontPanels()
212
213        return(0)
214End
215
216// function to control the drawing of controls in the TabControl on the main panel
217// Naming scheme for the controls MUST be strictly adhered to... else controls will
218// appear in odd places...
219// all controls are named VCALCCtrl_NA where N is the tab number and A is the letter denoting
220// the controls position on that particular tab.
221// in this way, they will always be drawn correctly..
222//
223//
224// -- this will need to be modified to allow for the graph to be drawn of the detector bank positions
225//     if that is individual to each tab - or if it's  always visible - that's still to be decided.
226//
227//
228Function VCALCTabProc(name,tab)
229        String name
230        Variable tab
231       
232//      Print "name,number",name,tab
233        String ctrlList = ControlNameList("",";"),item="",nameStr=""
234        Variable num = ItemsinList(ctrlList,";"),ii,onTab
235        for(ii=0;ii<num;ii+=1)
236                //items all start w/"VCALCCtrl_", 10 characters
237                item=StringFromList(ii, ctrlList ,";")
238                nameStr=item[0,9]
239                if(cmpstr(nameStr,"VCALCCtrl_")==0)
240                        onTab = str2num(item[10])                       //[10] is a number
241                        ControlInfo $item
242                        switch(abs(V_flag))     
243                                case 1:
244                                        Button $item,disable=(tab!=onTab)
245                                        break
246                                case 2:
247                                        CheckBox $item,disable=(tab!=onTab)
248                                        break
249                                case 3:
250                                        PopupMenu $item,disable=(tab!=onTab)
251                                        break
252                                case 4:
253                                        ValDisplay $item,disable=(tab!=onTab)
254                                        break
255                                case 5:
256                                        SetVariable $item,disable=(tab!=onTab)
257                                        break
258                                case 7:
259                                        Slider $item,disable=(tab!=onTab)
260                                        break
261                                case 9:
262                                        GroupBox $item,disable=(tab!=onTab)
263                                        break
264                                case 10:       
265                                        TitleBox $item,disable=(tab!=onTab)
266                                        break
267                                // add more items to the switch if different control types are used
268                        endswitch
269                endif
270        endfor
271       
272
273       
274        return(0)
275End
276
277Function Front2DQ_Log_CheckProc(cba) : CheckBoxControl
278        STRUCT WMCheckboxAction &cba
279
280        switch( cba.eventCode )
281                case 2: // mouse up
282                        Variable checked = cba.checked
283                       
284                        Execute "FrontPanels_AsQ()"
285                        Execute "MiddlePanels_AsQ()"
286                        Execute "BackPanels_AsQ()"
287                       
288                        break
289                case -1: // control being killed
290                        break
291        endswitch
292
293        return 0
294End
295
296//
297// recalculate the detectors with a preset model function
298//
299Function V_SimModelFunc_PopProc(ctrlName,popNum,popStr) : PopupMenuControl
300        String ctrlName
301        Variable popNum // which item is currently selected (1-based)
302        String popStr           // contents of current popup item as string
303
304        Recalculate_AllDetectors()
305       
306        return(0)       
307End
308
309
310//
311// recalculate the I(q) binning. no need to adjust model function or views
312// just rebin
313//
314Function V_RebinIQ_PopProc(ctrlName,popNum,popStr) : PopupMenuControl
315        String ctrlName
316        Variable popNum // which item is currently selected (1-based)
317        String popStr           // contents of current popup item as string
318
319        // do the q-binning for front panels to get I(Q)
320        Execute "BinAllFrontPanels()"
321        Execute "Front_IQ_Graph()"
322
323        // do the q-binning for middle panels to get I(Q)
324        Execute "BinAllMiddlePanels()"
325        Execute "Middle_IQ_Graph()"
326       
327        // do the q-binning for the back panel to get I(Q)
328        Execute "BinAllBackPanels()"
329        Execute "Back_IQ_Graph()"
330       
331        return(0)       
332End
333
334
335
336       
337       
338//
339// setVar for the wavelength
340//
341Function V_Lambda_SetVarProc(sva) : SetVariableControl
342        STRUCT WMSetVariableAction &sva
343
344        switch( sva.eventCode )
345                case 1: // mouse up
346                case 2: // Enter key
347                case 3: // Live update
348                        Variable dval = sva.dval
349                        String sval = sva.sval
350                       
351//                      // don't need to recalculate the views, but need to recalculate the detectors
352//                      fPlotBackPanels()
353//                      fPlotMiddlePanels()
354//                      fPlotFrontPanels()
355
356                        Recalculate_AllDetectors()             
357                               
358                        break
359                case -1: // control being killed
360                        break
361        endswitch
362
363        return 0
364End
365
366//
367// setVar for the simulation monitor count
368//
369Function V_SimImon_SetVarProc(sva) : SetVariableControl
370        STRUCT WMSetVariableAction &sva
371
372        switch( sva.eventCode )
373                case 1: // mouse up
374                case 2: // Enter key
375                case 3: // Live update
376                        Variable dval = sva.dval
377                        String sval = sva.sval
378
379                        Recalculate_AllDetectors()             
380                               
381                        break
382                case -1: // control being killed
383                        break
384        endswitch
385
386        return 0
387End
388
389
390// setVar for the range (in degrees) for the FrontView plot of the detectors
391//
392Function FrontView_Range_SetVarProc(sva) : SetVariableControl
393        STRUCT WMSetVariableAction &sva
394
395        switch( sva.eventCode )
396                case 1: // mouse up
397                case 2: // Enter key
398                case 3: // Live update
399                        Variable dval = sva.dval
400                        String sval = sva.sval
401                       
402                        FrontView_1x()
403                       
404                        break
405                case -1: // control being killed
406                        break
407        endswitch
408
409        return 0
410End
411
412// setVar for the range (in Q) for the FrontView plot of the detectors
413//
414// TODO: this assumes that everything (the data) is already updated - this only updates the plot range
415Function Front2DQ_Range_SetVarProc(sva) : SetVariableControl
416        STRUCT WMSetVariableAction &sva
417
418        switch( sva.eventCode )
419                case 1: // mouse up
420                case 2: // Enter key
421                case 3: // Live update
422                        Variable dval = sva.dval
423                        String sval = sva.sval
424                       
425                        SetAxis/W=VCALC#Panels_Q left -dval,dval
426                        SetAxis/W=VCALC#Panels_Q bottom -dval,dval
427                       
428//                      FrontPanels_AsQ()
429                       
430                        break
431                case -1: // control being killed
432                        break
433        endswitch
434
435        return 0
436End
437
438// SDD for the Front detector. triggers a recalculation
439// of the intensity and a redraw of the banks
440//
441Function V_FDet_SDD_SetVarProc(sva) : SetVariableControl
442        STRUCT WMSetVariableAction &sva
443
444        switch( sva.eventCode )
445                case 1: // mouse up
446                case 2: // Enter key
447                case 3: // Live update
448                        Variable dval = sva.dval
449                        String sval = sva.sval
450                       
451//                      Variable LR_sep,TB_sep
452//                      // don't know if LR or TB called, so get the explicit values
453//                      //
454//                      ControlInfo VCALCCtrl_2a
455//                      LR_sep = V_Value
456//                      ControlInfo VCALCCtrl_2b
457//                      TB_sep = V_Value
458//                     
459//                      UpdateFrontDetector(LR_sep,TB_sep)
460                       
461                        UpdateSideView()
462                        UpdateTopView()
463                        FrontView_1x()
464                       
465                        fPlotFrontPanels()
466                       
467                        break
468                case -1: // control being killed
469                        break
470        endswitch
471
472        return 0
473End
474
475// SDD for the Middle detector. triggers a recalculation
476// of the intensity and a redraw of the banks
477//
478Function V_MDet_SDD_SetVarProc(sva) : SetVariableControl
479        STRUCT WMSetVariableAction &sva
480
481        switch( sva.eventCode )
482                case 1: // mouse up
483                case 2: // Enter key
484                case 3: // Live update
485                        Variable dval = sva.dval
486                        String sval = sva.sval
487                       
488//                      Variable LR_sep,TB_sep
489//                      // don't know if LR or TB called, so get the explicit values
490//                      //
491//                      ControlInfo VCALCCtrl_2a
492//                      LR_sep = V_Value
493//                      ControlInfo VCALCCtrl_2b
494//                      TB_sep = V_Value
495//                     
496//                      UpdateFrontDetector(LR_sep,TB_sep)
497                       
498                        UpdateSideView()
499                        UpdateTopView()
500                        FrontView_1x()
501                       
502                        fPlotMiddlePanels()
503                       
504                        break
505                case -1: // control being killed
506                        break
507        endswitch
508
509        return 0
510End
511
512// SDD for the Back detector. triggers a recalculation
513// of the intensity and a redraw of the banks
514//
515Function V_BDet_SDD_SetVarProc(sva) : SetVariableControl
516        STRUCT WMSetVariableAction &sva
517
518        switch( sva.eventCode )
519                case 1: // mouse up
520                case 2: // Enter key
521                case 3: // Live update
522                        Variable dval = sva.dval
523                        String sval = sva.sval
524                       
525//                      Variable LR_sep,TB_sep
526//                      // don't know if LR or TB called, so get the explicit values
527//                      //
528//                      ControlInfo VCALCCtrl_2a
529//                      LR_sep = V_Value
530//                      ControlInfo VCALCCtrl_2b
531//                      TB_sep = V_Value
532//                     
533//                      UpdateFrontDetector(LR_sep,TB_sep)
534                       
535                        UpdateSideView()
536                        UpdateTopView()
537                        FrontView_1x()
538                       
539                        fPlotBackPanels()
540                       
541                        break
542                case -1: // control being killed
543                        break
544        endswitch
545
546        return 0
547End
548
549// separation, either LR or TB of the front detector. triggers a recalculation
550// of the intensity and a redraw of the banks
551//
552Function V_FDet_LR_SetVarProc(sva) : SetVariableControl
553        STRUCT WMSetVariableAction &sva
554
555        switch( sva.eventCode )
556                case 1: // mouse up
557                case 2: // Enter key
558                case 3: // Live update
559                        Variable dval = sva.dval
560                        String sval = sva.sval
561                       
562                        Variable LR_sep,TB_sep
563                        // don't know if LR or TB called, so get the explicit values
564                        //
565                        ControlInfo VCALCCtrl_2a
566                        LR_sep = V_Value
567                        ControlInfo VCALCCtrl_2b
568                        TB_sep = V_Value
569                       
570//                      UpdateFrontDetector(LR_sep,TB_sep)
571                       
572                        UpdateSideView()
573                        UpdateTopView()
574                        FrontView_1x()
575                       
576                        fPlotFrontPanels()
577                       
578                        break
579                case -1: // control being killed
580                        break
581        endswitch
582
583        return 0
584End
585
586
587// separation, either LR or TB of the middle detector. triggers a recalculation
588// of the intensity and a redraw of the banks
589//
590Function V_MDet_LR_SetVarProc(sva) : SetVariableControl
591        STRUCT WMSetVariableAction &sva
592
593        switch( sva.eventCode )
594                case 1: // mouse up
595                case 2: // Enter key
596                case 3: // Live update
597                        Variable dval = sva.dval
598                        String sval = sva.sval
599                       
600                        Variable LR_sep,TB_sep
601                        // don't know if LR or TB called, so get the explicit values
602                        //
603                        ControlInfo VCALCCtrl_3a
604                        LR_sep = V_Value
605                        ControlInfo VCALCCtrl_3b
606                        TB_sep = V_Value
607                       
608//                      UpdateMiddleDetector(LR_sep,TB_sep)
609                       
610                        UpdateSideView()
611                        UpdateTopView()
612                        FrontView_1x()
613                       
614                        fPlotMiddlePanels()
615                       
616                        break
617                case -1: // control being killed
618                        break
619        endswitch
620
621        return 0
622End
623
624
625
626
627// this all needs to be fixed and updated - it is all pertinent to SANS (SASCALC)
628// and not yet specific to VSANS
629//
630// -- all of the simulation stuff will need to be re-thought
631// -- all of the integersRead, data, etc. will need to be re-thought...
632// -- but the space needs to be allocated.
633// -- parameters and constants need to be defined in their own space
634//
635//
636Proc V_Initialize_Space()
637//
638        NewDataFolder/O root:Packages
639        NewDataFolder/O root:Packages:NIST
640        NewDataFolder/O root:Packages:NIST:VSANS
641        NewDataFolder/O root:Packages:NIST:VSANS:VCALC
642        NewDataFolder/O root:Packages:NIST:VSANS:VCALC:Front
643        NewDataFolder/O root:Packages:NIST:VSANS:VCALC:Middle
644        NewDataFolder/O root:Packages:NIST:VSANS:VCALC:Back
645       
646       
647        SetDataFolder root:Packages:NIST:VSANS:VCALC
648       
649
650///// FRONT DETECTOR BANKS
651// dimensions for the detector banks (then get them in the drawing functions)
652        Variable/G gFront_LR_w = 384            //front bank, nominal LR panel width (mm)
653        Variable/G gFront_LR_h = 1000
654        Variable/G gFront_TB_w = 500
655        Variable/G gFront_TB_h = 384
656
657// SDD offset of T/B (decide on units??)
658        Variable/G gFront_SDDOffset = 300                       // (mm)
659       
660// detector resolution (xy for each bank!)
661        Variable/G gFront_L_pixelX = 0.8                        // (cm)         these tubes are vertical
662        Variable/G gFront_L_pixelY = 0.8                        // (cm)         //!! now 8 mm, since nPix=128, rather than 256
663        Variable/G gFront_R_pixelX = 0.8                        // (cm)
664        Variable/G gFront_R_pixelY = 0.8                        // (cm)
665       
666        Variable/G gFront_T_pixelX = 0.4                        // (cm)         these tubes are horizontal
667        Variable/G gFront_T_pixelY = 0.8                        // (cm)
668        Variable/G gFront_B_pixelX = 0.4                        // (cm)
669        Variable/G gFront_B_pixelY = 0.8                        // (cm)
670       
671// number of pixels in each bank (this can be modified at acquisition time, so it must be adjustable here)
672        Variable/G gFront_L_nPix_X = 48         // == number of tubes
673        Variable/G gFront_L_nPix_Y = 128                // == pixels in vertical direction (was 256, John says likely will run @ 128 9/2015)
674        Variable/G gFront_R_nPix_X = 48         // == number of tubes
675        Variable/G gFront_R_nPix_Y = 128                // == pixels in vertical direction
676        Variable/G gFront_T_nPix_X = 128                // == pixels in horizontal direction
677        Variable/G gFront_T_nPix_Y = 48         // == number of tubes
678        Variable/G gFront_B_nPix_X = 128                // == pixels in horizontal direction
679        Variable/G gFront_B_nPix_Y = 48         // == number of tubes
680
681
682
683
684///// MIDDLE DETECTOR BANKS
685        Variable/G gMiddle_LR_w = 384           //middle bank, nominal LR panel width (mm)
686        Variable/G gMiddle_LR_h = 1000
687        Variable/G gMiddle_TB_w = 500
688        Variable/G gMiddle_TB_h = 384
689// SDD offset of T/B (decide on units??)
690        Variable/G gMiddle_SDDOffset = 300                      // (mm)
691       
692// detector resolution (xy for each bank!)
693        Variable/G gMiddle_L_pixelX = 0.8                       // (cm)         these tubes are vertical
694        Variable/G gMiddle_L_pixelY = 0.8               // (cm)
695        Variable/G gMiddle_R_pixelX = 0.8                       // (cm)
696        Variable/G gMiddle_R_pixelY = 0.8               // (cm)
697       
698        Variable/G gMiddle_T_pixelX = 0.4                       // (cm)         these tubes are horizontal
699        Variable/G gMiddle_T_pixelY = 0.8                       // (cm)
700        Variable/G gMiddle_B_pixelX = 0.4                       // (cm)
701        Variable/G gMiddle_B_pixelY = 0.8                       // (cm)
702
703// number of pixels in each bank (this can be modified at acquisition time, so it must be adjustable here)
704        Variable/G gMiddle_L_nPix_X = 48                // == number of tubes
705        Variable/G gMiddle_L_nPix_Y = 128               // == pixels in vertical direction (was 256, John says likely will run @ 128 9/2015)
706        Variable/G gMiddle_R_nPix_X = 48                // == number of tubes
707        Variable/G gMiddle_R_nPix_Y = 128               // == pixels in vertical direction
708        Variable/G gMiddle_T_nPix_X = 128               // == pixels in horizontal direction
709        Variable/G gMiddle_T_nPix_Y = 48                // == number of tubes
710        Variable/G gMiddle_B_nPix_X = 128               // == pixels in horizontal direction
711        Variable/G gMiddle_B_nPix_Y = 48                // == number of tubes
712
713
714
715
716
717//// BACK DETECTOR
718        Variable/G gBack_w = 320                                //w and h for the back detector, (mm)
719        Variable/G gBack_h = 320
720        Variable/G gBack_pixelX = 0.1           // 1mm resolution (units of cm here)
721        Variable/G gBack_pixelY = 0.1
722        Variable/G gBack_nPix_X = 320           // detector pixels in x-direction
723        Variable/G gBack_nPix_Y = 320   
724
725
726// Generate all of the waves used for the detector and the q values
727//
728// TODO: the detector dimensions need to be properly defined here...
729// FRONT
730        SetDataFolder root:Packages:NIST:VSANS:VCALC:Front
731
732        Make/O/D/N=(::gFront_L_nPix_X,::gFront_L_nPix_Y) det_FL
733        Make/O/D/N=(::gFront_R_nPix_X,::gFront_R_nPix_Y) det_FR
734        Make/O/D/N=(::gFront_T_nPix_X,::gFront_T_nPix_Y) det_FT
735        Make/O/D/N=(::gFront_B_nPix_X,::gFront_B_nPix_Y) det_FB
736        Duplicate/O det_FL qTot_FL,qx_FL,qy_FL,qz_FL
737        Duplicate/O det_FR qTot_FR,qx_FR,qy_FR,qz_FR
738        Duplicate/O det_FT qTot_FT,qx_FT,qy_FT,qz_FT
739        Duplicate/O det_FB qTot_FB,qx_FB,qy_FB,qz_FB
740
741//MIDDLE
742// TODO: the detector dimensions need to be properly defined here...
743        SetDataFolder root:Packages:NIST:VSANS:VCALC:Middle
744
745        Make/O/D/N=(::gMiddle_L_nPix_X,::gMiddle_L_nPix_Y) det_ML
746        Make/O/D/N=(::gMiddle_R_nPix_X,::gMiddle_R_nPix_Y) det_MR
747        Make/O/D/N=(::gMiddle_T_nPix_X,::gMiddle_T_nPix_Y) det_MT
748        Make/O/D/N=(::gMiddle_B_nPix_X,::gMiddle_B_nPix_Y) det_MB
749        Duplicate/O det_ML qTot_ML,qx_ML,qy_ML,qz_ML
750        Duplicate/O det_MR qTot_MR,qx_MR,qy_MR,qz_MR
751        Duplicate/O det_MT qTot_MT,qx_MT,qy_MT,qz_MT
752        Duplicate/O det_MB qTot_MB,qx_MB,qy_MB,qz_MB
753
754// BACK
755// TODO: the detector dimensions need to be properly defined here...
756        SetDataFolder root:Packages:NIST:VSANS:VCALC:Back
757       
758        Make/O/D/N=(::gBack_nPix_X,::gBack_nPix_Y) det_B
759        Duplicate/O det_B qTot_B,qx_B,qy_B,qz_B
760
761
762
763
764////////////    FOR THE PANEL
765
766        SetDataFolder root:Packages:NIST:VSANS:VCALC
767
768        Make/O/D/N=2 fpx1,fpy1,mpx1,mpy1                // for display of the detector panels
769        Make/O/D/N=2 fv_degX,fv_degY
770
771
772// to fill in:
773// values for always-visible items
774        String/G gPresetPopStr = "Low Q;High Q;Converging Pinholes;Narrow Slit Aperture;Converging Slits;White Beam;Polarizer;"
775        String/G gBinTypeStr = "One;Two;Four;Slit Mode;"
776
777
778
779
780// popup strings for each tab (then use the string in the panel)
781// tab 0 - collimation
782        String/G gMonochromatorType = "Velocity Selector;Graphite;White Beam;"
783        String/G gSourceShape = "circular;rectangular;converging pinholes;converging slits;"
784        String/G gSourceDiam = "1.0 cm;2.0 cm;5.0 cm;"
785        String/G gDeltaLambda = "0.10;0.20;0.30;"
786       
787// tab 1 - sample conditions
788        String/G gTableLocation = "Changer;Stage;"
789        String/G gSampleApertureShape = "circular;rectangular;converging pinholes;converging slits;"
790        String/G gSampleApertureDiam = "0.5;1.0;1.5;2.0;"
791       
792// tab 2
793
794// tab 3
795
796// tab 4 - back detector
797        String/G gBackDetType = "1D;2D;"
798
799// tab 5
800        String/G gModelFunctionType = "Debye;Sphere;Big Debye;Big Sphere;AgBeh;Vycor;Empty Cell;Blocked Beam;"
801
802
803////////////////////
804
805
806
807// limits for detector travel? or are these limits part of the panel, hard-wired there
808
809
810//      // for the panel
811
812        Variable/G gNg=0
813//      Variable/G gOffset=0
814        Variable/G gSamAp=1.27          //samAp diameter in cm
815        String/G gSourceApString = "1.43 cm;2.54 cm;3.81 cm;"
816        String/G gApPopStr = "1/16\";1/8\";3/16\";1/4\";5/16\";3/8\";7/16\";1/2\";9/16\";5/8\";11/16\";3/4\";other;"
817        Variable/G gSamApOther = 10             //non-standard aperture diameter, in mm
818        Variable/G gUsingLenses = 0             //0=no lenses, 1=lenses(or prisms)
819//      Variable/G gModelOffsetFactor = 1
820//     
821//      // for the MC simulation
822//      Variable/G doSimulation =0              // == 1 if 1D simulated data, 0 if other from the checkbox
823//      Variable/G gRanDateTime=datetime
824//      Variable/G gImon = 10000
825//      Variable/G gThick = 0.1
826//      Variable/G gSig_incoh = 0.1
827//      String/G gFuncStr = ""
828//      Variable/G gR2 = 2.54/2
829//      Variable/G gSamTrans=0.8                        //for 1D, default value
830//      Variable/G gCntTime = 300
831//      Variable/G gDoMonteCarlo = 0
832//      Variable/G gUse_MC_XOP = 1                              //set to zero to use Igor code
833//      Variable/G gBeamStopIn = 1                      //set to zero for beamstop out (transmission)
834//      Variable/G gRawCounts = 0
835//      Variable/G gSaveIndex = 100
836//      String/G gSavePrefix = "SIMUL"
837//      Variable/G gAutoSaveIndex = 100                 //a way to set the index for automated saves
838//      String/G gAutoSaveLabel = ""                            //a way to set the "sample" label for automated saves
839//      Make/O/D/N=10 results = 0
840//      Make/O/T/N=10 results_desc = {"total X-section (1/cm)","SAS X-section (1/cm)","number that scatter","number that reach detector","avg # times scattered","fraction single coherent","fraction multiple coherent","fraction multiple scattered","fraction transmitted","detector counts w/beamstop"}
841//
842//      Variable/G g_1DTotCts = 0                       //summed counts (simulated)
843//      Variable/G g_1DEstDetCR = 0             // estimated detector count rate
844//      Variable/G g_1DFracScatt = 0            // fraction of beam captured on detector
845//      Variable/G g_1DEstTrans = 0             // estimated transmission of sample
846//      Variable/G g_1D_DoABS = 1
847//      Variable/G g_1D_AddNoise = 1
848//      Variable/G g_MultScattFraction=0
849//      Variable/G g_detectorEff=0.75                   //average value for most wavelengths
850//      Variable/G g_actSimTime = 0                             //for the save
851//      Variable/G g_SimTimeWarn = 10                   //manually set to a very large value for scripted operation
852//     
853
854//     
855//      //for the fake dependency
856//      Variable/G gTouched=0
857//      Variable/G gCalculate=0
858//      //for plotting
859//      Variable/G gFreezeCount=1               //start the count at 1 to keep Jeff happy
860//      Variable/G gDoTraceOffset=0             // (1==Yes, offset 2^n), 0==turn off the offset
861
862
863
864//
865// instrument - specific dimensions
866//
867
868//     
869        Variable/G gInstrument = 6              // files (may) be tagged SA6 as the 6th SANS instrument
870        Variable/G gS12 = 54.8
871//      Variable/G d_det = 0.5
872//      Variable/G a_pixel = 0.5
873//      Variable/G del_r = 0.5
874//      Variable/G det_width = 64.0
875        Variable/G gLambda_t = 5.50
876        Variable/G gL2r_lower = 132.3
877        Variable/G gL2r_upper =  1317
878        Variable/G gLambda_lower = 2.5
879        Variable/G gLambda_upper = 20.0
880        Variable/G gD_upper = 25.0
881        Variable/G gBs_factor = 1.05
882        Variable/G gT1 = 0.63
883        Variable/G gT2 = 1.0
884        Variable/G gT3 = 0.75
885        Variable/G gL_gap = 100.0
886        Variable/G gGuide_width = 6.0
887        Variable/G gIdmax = 100.0
888
889//
890//      //new values, from 11/2009 --- BeamFluxReport_2009.ifn
891        Variable/G gPhi_0 = 2.42e13
892        Variable/G gB = 0.0
893        Variable/G gC = -0.0243
894        Variable/G gGuide_loss = 0.924
895//     
896//      //fwhm values (new variables) (+3, 0, -3, calibrated 2009)
897        Variable/G gFwhm_narrow = 0.109
898        Variable/G gFwhm_mid = 0.125
899        Variable/G gFwhm_wide = 0.236
900//     
901//      //source apertures (cm)
902        Variable/G gA1_0_0 = 1.43
903        Variable/G gA1_0_1 = 2.54
904        Variable/G gA1_0_2 = 3.81
905        Variable/G gA1_7_0 = 2.5                        // after the polarizer         
906        Variable/G gA1_7_1 = 5.0
907        Variable/G gA1_7_1 = 0.95               //
908        Variable/G gA1_def = 5.00
909//     
910        SetDataFolder root:
911end
Note: See TracBrowser for help on using the repository browser.