#pragma rtGlobals=1 // Use modern global access method. // // // mockup of the panel for VCALC // // -- all is housed in the folder: // NewDataFolder/O root:Packages:NIST:VSANS:VCALC // // -- Put all of the constants to define the instrument plus all of the VCALC stuff // // anticipating that at the same level as VCALC will be all of the reduction folders // in a similar way as for SANS reduction // // Macro VCALC_Panel() DoWindow/F VCALC if(V_flag==0) //initialize space = folders, parameters, instrument constants, etc. V_Initialize_Space() //open the panel DrawVCALC_Panel() // two graphs with the ray-tracing side/top views SetupSideView() SetupTopView() // a front view of the panels FrontView_1x() // TODO: fake a "click" on the front SDD to force (almost)everything to update // including the I(q) graph FakeFrontMiddleSDDClick() endif End Function FakeFrontMiddleSDDClick() STRUCT WMSetVariableAction sva sva.eventCode = 3 // sva.dval = 0.3 V_BDet_SDD_SetVarProc(sva) V_MDet_SDD_SetVarProc(sva) V_FDet_SDD_SetVarProc(sva) return(0) end Proc DrawVCALC_Panel() PauseUpdate; Silent 1 // building window... NewPanel /W=(34,44,1274,699)/N=VCALC/K=1 ModifyPanel cbRGB=(49151,60031,65535) // ShowTools/A SetDrawLayer UserBack // always visible stuff, not on any tab GroupBox group0,pos={10,10},size={444,180},title="Setup" TabControl Vtab,labelBack=(45000,61000,58000),pos={14,215},size={430,426},tabLabel(0)="Collim" TabControl Vtab,tabLabel(1)="Sample",tabLabel(2)="Front Det",tabLabel(3)="Mid Det" TabControl Vtab,tabLabel(4)="Back Det",tabLabel(5)="Simul",value= 0,proc=VCALCTabProc GroupBox group1,pos={460,10},size={762,635},title="Detector Panel Positions + Data" PopupMenu popup_a,pos={50,40},size={142,20},title="Presets" PopupMenu popup_a,mode=1,popvalue="Low Q",value= root:Packages:NIST:VSANS:VCALC:gPresetPopStr PopupMenu popup_b,pos={690,310},size={142,20},title="Binning type" PopupMenu popup_b,mode=1,popvalue="One",value= root:Packages:NIST:VSANS:VCALC:gBinTypeStr SetVariable setVar_a,pos={476,26},size={120,15},title="axis degrees",proc=FrontView_Range_SetVarProc SetVariable setVar_a,limits={0.3,30,0.2},value=_NUM:20 // for panels (in degrees) Display/W=(476,45,757,303)/HOST=# root:Packages:NIST:VSANS:VCALC:fv_degY vs root:Packages:NIST:VSANS:VCALC:fv_degX RenameWindow #,FrontView ModifyGraph mode=2 // mode = 2 = dots ModifyGraph marker=19 ModifyGraph rgb=(0,0,0) ModifyGraph tick=2,mirror=1 Label left "degrees" Label bottom "degrees" SetActiveSubwindow ## // for side view Display/W=(842,25,1200,170)/HOST=# root:Packages:NIST:VSANS:VCALC:fv_degY vs root:Packages:NIST:VSANS:VCALC:fv_degX RenameWindow #,SideView ModifyGraph mode=2 // mode = 2 = dots ModifyGraph marker=19 ModifyGraph rgb=(0,0,0) ModifyGraph tick=2,mirror=1 Label left "Vertical position (mm)" Label bottom "SDD (m)" SetActiveSubwindow ## // for top view Display/W=(842,180,1200,325)/HOST=# root:Packages:NIST:VSANS:VCALC:fv_degY vs root:Packages:NIST:VSANS:VCALC:fv_degX RenameWindow #,TopView ModifyGraph mode=2 // mode = 2 = dots ModifyGraph marker=19 ModifyGraph rgb=(0,0,0) ModifyGraph tick=2,mirror=1 Label left "Horizontal position (mm)" Label bottom "SDD (m)" SetActiveSubwindow ## // for panels (as 2D Q) Display/W=(475,332,814,631)/HOST=# root:Packages:NIST:VSANS:VCALC:fv_degY vs root:Packages:NIST:VSANS:VCALC:fv_degX RenameWindow #,Panels_Q ModifyGraph mode=2 // mode = 2 = dots ModifyGraph tick=2,mirror=1,grid=2,standoff=0 ModifyGraph width={Aspect,1},height={Aspect,1},gbRGB=(56797,56797,56797) SetAxis left -0.2,0.2 SetAxis bottom -0.2,0.2 Label left "Qy" Label bottom "Qx" SetActiveSubwindow ## SetVariable setVar_b,pos={476,314},size={120,15},title="axis Q",proc=Front2DQ_Range_SetVarProc SetVariable setVar_b,limits={0.02,1,0.02},value=_NUM:0.3 CheckBox check_0a title="Log?",size={60,20},pos={619,313},proc=Front2DQ_Log_CheckProc // for averaged I(Q) Display/W=(842,334,1204,629)/HOST=# //root:Packages:NIST:VCALC:fv_degY vs root:Packages:NIST:VSANS:VCALC:fv_degX RenameWindow #,Panels_IQ // ModifyGraph mode=2 // mode = 2 = dots ModifyGraph tick=2,mirror=1,grid=2 // Label left "Intensity" // Label bottom "Q" SetActiveSubwindow ## // all controls are named VCALCCtrl_NA where N is the tab number and A is the letter denoting // tab(0), collimation - initially visible Slider VCALCCtrl_0a,pos={223,324},size={200,45},limits={0,10,1},value= 1,vert= 0 SetVariable VCALCCtrl_0b,pos={25,294},size={120,15},title="wavelength" SetVariable VCALCCtrl_0b,limits={4,20,1},value=_NUM:8,proc=V_Lambda_SetVarProc PopupMenu VCALCCtrl_0c,pos={26,257},size={150,20},title="monochromator" PopupMenu VCALCCtrl_0c,mode=1,popvalue="Velocity Selector",value= root:Packages:NIST:VSANS:VCALC:gMonochromatorType PopupMenu VCALCCtrl_0d,pos={26,321},size={115,20},title="delta lambda" PopupMenu VCALCCtrl_0d,mode=1,popvalue="0.10",value= root:Packages:NIST:VSANS:VCALC:gDeltaLambda PopupMenu VCALCCtrl_0e,pos={291,262},size={132,20},title="source shape" PopupMenu VCALCCtrl_0e,mode=1,popvalue="circular",value= root:Packages:NIST:VSANS:VCALC:gSourceShape PopupMenu VCALCCtrl_0f,pos={283,293},size={141,20},title="source aperture" PopupMenu VCALCCtrl_0f,mode=1,popvalue="1.0 cm",value= root:Packages:NIST:VSANS:VCALC:gSourceDiam // tab(1) - Sample conditions, initially not visible PopupMenu VCALCCtrl_1a,pos={38,270},size={142,20},title="table location",disable=1 PopupMenu VCALCCtrl_1a,mode=1,popvalue="Changer",value= root:Packages:NIST:VSANS:VCALC:gTableLocation PopupMenu VCALCCtrl_1b,pos={270,270},size={115,20},title="Aperture Shape",disable=1 PopupMenu VCALCCtrl_1b,mode=1,popvalue="circular",value= root:Packages:NIST:VSANS:VCALC:gSampleApertureShape PopupMenu VCALCCtrl_1c,pos={270,330},size={132,20},title="Aperture Size (cm)",disable=1 PopupMenu VCALCCtrl_1c,mode=1,popvalue="0.5",value= root:Packages:NIST:VSANS:VCALC:gSampleApertureDiam // tab(2) - Front detector panels, initially not visible SetVariable VCALCCtrl_2a,pos={30,260},size={150,15},title="L/R Separation (mm)",proc=V_FDet_LR_SetVarProc SetVariable VCALCCtrl_2a,limits={0,400,1},disable=1,value=_NUM:100 SetVariable VCALCCtrl_2b,pos={30,290},size={150,15},title="T/B Separation (mm)",proc=V_FDet_LR_SetVarProc SetVariable VCALCCtrl_2b,limits={0,400,1},disable=1,value=_NUM:100 SetVariable VCALCCtrl_2c,pos={205,290},size={150,15},title="Lateral Offset (mm)" SetVariable VCALCCtrl_2c,limits={0,200,0.1},disable=1,value=_NUM:0 SetVariable VCALCCtrl_2d,pos={205,260},size={230,15},title="Sample to Detector Distance (m)",proc=V_FDet_SDD_SetVarProc SetVariable VCALCCtrl_2d,limits={1,8,0.1},disable=1 ,value=_NUM:1.5 // tab(3) - Middle detector panels, initially not visible SetVariable VCALCCtrl_3a,pos={30,260},size={150,15},title="L/R Separation (mm)",proc=V_MDet_LR_SetVarProc SetVariable VCALCCtrl_3a,limits={0,400,1},disable=1,value=_NUM:120 SetVariable VCALCCtrl_3b,pos={30,290},size={150,15},title="T/B Separation (mm)",proc=V_MDet_LR_SetVarProc SetVariable VCALCCtrl_3b,limits={0,400,1},disable=1,value=_NUM:120 SetVariable VCALCCtrl_3c,pos={205,290},size={150,15},title="Lateral Offset (mm)" SetVariable VCALCCtrl_3c,limits={0,200,0.1},disable=1,value=_NUM:0 SetVariable VCALCCtrl_3d,pos={205,260},size={230,15},title="Sample to Detector Distance (m)",proc=V_MDet_SDD_SetVarProc SetVariable VCALCCtrl_3d,limits={8,20,0.1},disable=1,value=_NUM:10 // tab(4) - Back detector panel SetVariable VCALCCtrl_4a,pos={188,290},size={150,15},title="Lateral Offset (mm)" SetVariable VCALCCtrl_4a,limits={0,200,0.1},disable=1,value=_NUM:0 SetVariable VCALCCtrl_4b,pos={188,260},size={230,15},title="Sample to Detector Distance (m)",proc=V_BDet_SDD_SetVarProc SetVariable VCALCCtrl_4b,limits={20,25,0.1},disable=1,value=_NUM:22 PopupMenu VCALCCtrl_4c,pos={40,260},size={180,20},title="Detector type",disable=1 PopupMenu VCALCCtrl_4c,mode=1,popvalue="2D",value= root:Packages:NIST:VSANS:VCALC:gBackDetType // tab(5) - Simulation setup SetVariable VCALCCtrl_5a,pos={40,290},size={200,15},title="Neutrons on Sample (imon)" SetVariable VCALCCtrl_5a,limits={1e7,1e15,1e7},disable=1,value=_NUM:1e10 PopupMenu VCALCCtrl_5b,pos={40,260},size={180,20},title="Model Function",disable=1 PopupMenu VCALCCtrl_5b,mode=1,popvalue="Debye",value= root:Packages:NIST:VSANS:VCALC:gModelFunctionType End // function to control the drawing of controls in the TabControl on the main panel // Naming scheme for the controls MUST be strictly adhered to... else controls will // appear in odd places... // all controls are named VCALCCtrl_NA where N is the tab number and A is the letter denoting // the controls position on that particular tab. // in this way, they will always be drawn correctly.. // // // -- this will need to be modified to allow for the graph to be drawn of the detector bank positions // if that is individual to each tab - or if it's always visible - that's still to be decided. // // Function VCALCTabProc(name,tab) String name Variable tab // Print "name,number",name,tab String ctrlList = ControlNameList("",";"),item="",nameStr="" Variable num = ItemsinList(ctrlList,";"),ii,onTab for(ii=0;ii