Ignore:
Timestamp:
Feb 25, 2019 3:17:03 PM (4 years ago)
Author:
srkline
Message:

multiple changes to improve the functionality of VCALC

more values are reported, and the IQ plot now accounts for a beam stop shadowing the low q region. Qmin and qmax values are reported for each panel. the beam intensity value is more realistic, with correct SSD values.

Location:
sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VC_DetectorBinning_Q.ipf

    r1114 r1128  
    154154        F_B_sep = VCALC_getPanelTranslation("FB") 
    155155         
    156         SDD = VCALC_getSDD("FL")                //nominal SDD [cm] - need offset for TB 
     156 
    157157        lam = VCALC_getWavelength() 
    158158 
     
    165165// TODO (make the N along the tube length a variable, since this can be reset @ acquisition) 
    166166 
    167         F_sdd_setback = VCALC_getTopBottomSDDSetback("FT")      //T/B are 41 cm farther back  //TODO: make all detector parameters global, not hard-wired 
     167//      F_sdd_setback = VCALC_getTopBottomSDDSetback("FT")      //T/B are 41 cm farther back  //TODO: make all detector parameters global, not hard-wired 
     168        F_sdd_setback = 0               // this setback is included in the SDD value 
    168169 
    169170// detector data to bin 
     
    206207        V_putDet_beam_center_x("VCALC","FL",xCtr) 
    207208        V_putDet_beam_center_y("VCALC","FL",yCtr) 
    208          
     209 
     210        SDD = VC_getSDD("FL")           // SDD [cm] - INCLUDES offset for TB 
     211                 
    209212//      VC_Detector_2Q(det_FL,qTot_FL,qx_FL,qy_FL,qz_FL,xCtr,yCtr,sdd,lam,pixSizeX,pixSizeY) 
    210213        VC_Detector_2Q_NonLin(det_FL,qTot_FL,qx_FL,qy_FL,qz_FL,xCtr,yCtr,sdd,lam,pixSizeX,pixSizeY,"FL") 
     
    250253        V_putDet_beam_center_x("VCALC","FR",xCtr) 
    251254        V_putDet_beam_center_y("VCALC","FR",yCtr)        
     255         
     256        SDD = VC_getSDD("FR")           // SDD [cm] - INCLUDES offset for TB 
     257         
    252258//      VC_Detector_2Q(det_FR,qTot_FR,qx_FR,qy_FR,qz_FR,xCtr,yCtr,sdd,lam,pixSizeX,pixSizeY) 
    253259        VC_Detector_2Q_NonLin(det_FR,qTot_FR,qx_FR,qy_FR,qz_FR,xCtr,yCtr,sdd,lam,pixSizeX,pixSizeY,"FR") 
     
    289295        V_putDet_beam_center_x("VCALC","FT",xCtr) 
    290296        V_putDet_beam_center_y("VCALC","FT",yCtr) 
    291            
     297 
     298        SDD = VC_getSDD("FT")           // SDD [cm] - INCLUDES offset for TB 
     299                   
    292300        // global sdd_offset is in (mm), convert to meters here for the Q-calculation 
    293301//      VC_Detector_2Q(det_FT,qTot_FT,qx_FT,qy_FT,qz_FT,xCtr,yCtr,sdd+F_sdd_offset/1000,lam,pixSizeX,pixSizeY) 
    294         VC_Detector_2Q_NonLin(det_FT,qTot_FT,qx_FT,qy_FT,qz_FT,xCtr,yCtr,sdd+F_sdd_setback,lam,pixSizeX,pixSizeY,"FT") 
     302        VC_Detector_2Q_NonLin(det_FT,qTot_FT,qx_FT,qy_FT,qz_FT,xCtr,yCtr,sdd,lam,pixSizeX,pixSizeY,"FT") 
    295303 
    296304//      Print "xy for FT = ",xCtr,yCtr 
     
    330338        V_putDet_beam_center_x("VCALC","FB",xCtr) 
    331339        V_putDet_beam_center_y("VCALC","FB",yCtr) 
    332          
     340 
     341        SDD = VC_getSDD("FB")           // SDD [cm] - INCLUDES offset for TB 
     342                 
    333343        // global sdd_offset is in (mm), convert to meters here for the Q-calculation 
    334344//      VC_Detector_2Q(det_FB,qTot_FB,qx_FB,qy_FB,qz_FB,xCtr,yCtr,sdd+F_sdd_offset/1000,lam,pixSizeX,pixSizeY) 
    335         VC_Detector_2Q_NonLin(det_FB,qTot_FB,qx_FB,qy_FB,qz_FB,xCtr,yCtr,sdd+F_sdd_setback,lam,pixSizeX,pixSizeY,"FB") 
     345        VC_Detector_2Q_NonLin(det_FB,qTot_FB,qx_FB,qy_FB,qz_FB,xCtr,yCtr,sdd,lam,pixSizeX,pixSizeY,"FB") 
    336346 
    337347//      Print "xy for FB = ",xCtr,yCtr 
     
    689699        M_B_sep = VCALC_getPanelTranslation("MB") 
    690700         
    691         SDD = VCALC_getSDD("ML")                //nominal SDD [cm] - need offset for TB 
    692701        lam = VCALC_getWavelength() 
    693702 
     
    699708 
    700709// TODO (make the N along the tube length a variable, since this can be reset @ acquisition) 
    701         M_sdd_setback = VCALC_getTopBottomSDDSetback("MT")      //T/B are 41 cm farther back  //TODO: make all detector parameters global, not hard-wired 
    702  
     710//      M_sdd_setback = VCALC_getTopBottomSDDSetback("MT")      //T/B are 41 cm farther back  //TODO: make all detector parameters global, not hard-wired 
     711        M_sdd_setback = 0 
    703712 
    704713//      SetDataFolder root:Packages:NIST:VSANS:VCALC:Middle 
     
    739748        V_putDet_beam_center_x("VCALC","ML",xCtr) 
    740749        V_putDet_beam_center_y("VCALC","ML",yCtr) 
     750 
     751        SDD = VC_getSDD("ML")           //SDD [cm] - INCLUDES offset for TB 
    741752         
    742753//      VC_Detector_2Q(det_ML,qTot_ML,qx_ML,qy_ML,qz_ML,xCtr,yCtr,sdd,lam,pixSizeX,pixSizeY) 
     
    787798        V_putDet_beam_center_x("VCALC","MR",xCtr) 
    788799        V_putDet_beam_center_y("VCALC","MR",yCtr) 
     800 
     801        SDD = VC_getSDD("MR")           //SDD [cm] - INCLUDES offset for TB 
    789802         
    790803//      VC_Detector_2Q(det_MR,qTot_MR,qx_MR,qy_MR,qz_MR,xCtr,yCtr,sdd,lam,pixSizeX,pixSizeY) 
     
    828841        V_putDet_beam_center_x("VCALC","MT",xCtr) 
    829842        V_putDet_beam_center_y("VCALC","MT",yCtr) 
     843 
     844        SDD = VC_getSDD("MT")           //SDD [cm] - INCLUDES offset for TB 
    830845         
    831846        // global sdd_offset is in (mm), convert to meters here for the Q-calculation   
     
    869884        V_putDet_beam_center_x("VCALC","MB",xCtr) 
    870885        V_putDet_beam_center_y("VCALC","MB",yCtr) 
     886 
     887        SDD = VC_getSDD("MB")           //SDD [cm] - INCLUDES offset for TB 
    871888         
    872889                // global sdd_offset is in (mm), convert to meters here for the Q-calculation 
     
    12571274        B_offset = V_Value 
    12581275         
    1259         SDD = VCALC_getSDD("B")         //nominal SDD - need offset for TB 
     1276        SDD = VC_getSDD("B")            // SDD 
    12601277        lam = VCALC_getWavelength() 
    12611278 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VC_DetectorBinning_Utils.ipf

    r1119 r1128  
    3737        // need pixel dimensions 
    3838        // nominal sdd in cm, offset in cm, want result in cm ! 
    39         sdd = VCALC_getSDD(type)        +  VCALC_getTopBottomSDDSetback(type)           // result is sdd in [cm] 
     39 
     40        sdd = VC_getSDD(type)   // setback is already included  VCALC_getTopBottomSDDSetback(type)              // result is sdd in [cm] 
    4041 
    4142        pixSizeX = VCALC_getPixSizeX(type)              // cm 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VC_SideView.ipf

    r1093 r1128  
    453453                Label/W=VCALC#TopView left "\\Z10Horizontal position (cm)" 
    454454                Label/W=VCALC#TopView bottom "\\Z10SDD (cm)" 
    455                 SetAxis/W=VCALC#TopView left -80.0,80.0 
     455                SetAxis/W=VCALC#TopView left 80.0,-80.0 
    456456                SetAxis/W=VCALC#TopView bottom 0,2500 
    457457                TextBox/W=VCALC#TopView/C/N=text0/A=MC/X=41.61/Y=43.62 "\\JCTOP VIEW\r= Left/Right panels" 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VC_UtilityProcedures.ipf

    r1109 r1128  
    1919 
    2020 
    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 
    23 Function 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) 
    62 end 
     21 
    6322 
    6423// returns the panel separation [cm] 
     
    12584end 
    12685 
     86// returns the wavelength spread from the panel -- value is fraction 
     87Function VCALC_getWavelengthSpread() 
     88         
     89        ControlInfo/W=VCALC VCALCCtrl_0d 
     90 
     91        return(V_Value) 
     92end 
     93 
    12794// returns the number of neutrons on the sample 
    12895Function VCALC_getImon() 
     
    153120        Variable pixSizeX = V_getDet_x_pixel_size("VCALC",type) 
    154121 
    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                  
    196122        return(pixSizeX) 
    197123end 
     
    203129        Variable pixSizeY = V_getDet_y_pixel_size("VCALC",type) 
    204130         
    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                  
    246131        return(pixSizeY) 
    247132end 
     
    254139        Variable nPix = V_getDet_pixel_num_x("VCALC",type) 
    255140         
    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                  
    297141        return(nPix) 
    298142end 
     
    304148        Variable nPix = V_getDet_pixel_num_y("VCALC",type) 
    305149 
    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                  
    347150        return(nPix) 
    348151end 
     
    380183                                                 
    381184                case "B": 
     185                case "B ": 
    382186                        SetDataFolder root: 
    383187                        return(0) 
     
    402206////////////////////////////////// 
    403207 
    404 // read the number of guides from the slider 
    405 // return the Source to Sample Distance in [cm] 
     208// get the sourceAperture_to_GateValve distance from the table 
     209// 
     210// correct for the sampleAperture_to_GateValve distance 
     211// 
     212// return the SourceAp to SampleAp Distance in [cm] 
    406213Function VC_calcSSD() 
    407214 
    408         Variable ng,ssd 
    409         ControlInfo VCALCCtrl_0a 
     215        Variable ng,ssd,samAp_to_GV 
     216        ControlInfo/W=VCALC VCALCCtrl_0a 
    410217        ng = V_Value 
    411          
    412         ssd = 2388 - ng*200 
    413         print "SSD (cm) = ",ssd 
     218 
     219        ControlInfo/W=VCALC VCALCCtrl_1d 
     220        samAp_to_GV = V_Value           // [cm] 
     221         
     222        switch(ng) 
     223                case 0: 
     224                                ssd = 2441 
     225                        break 
     226                case 1: 
     227                                ssd = 2157 
     228                        break 
     229                case 2: 
     230                                ssd = 1976 
     231                        break 
     232                case 3: 
     233                                ssd = 1782 
     234                        break                    
     235                case 4: 
     236                                ssd = 1582 
     237                        break                    
     238                case 5: 
     239                                ssd = 1381 
     240                        break                    
     241                case 6: 
     242                                ssd = 1181 
     243                        break                    
     244                case 7: 
     245                                ssd = 980 
     246                        break                    
     247                case 8: 
     248                                ssd = 780 
     249                        break                    
     250                case 9: 
     251                                ssd = 579 
     252                        break                    
     253                default: 
     254                        Print "Error - using default SSD value" 
     255                        ssd = 2441 
     256        endswitch 
     257        ssd -= samAp_to_GV 
     258         
     259//      print "SSD (cm) = ",ssd 
    414260        return(ssd) 
    415261End 
     
    422268 
    423269        Variable ng,a1 
    424         ControlInfo VCALCCtrl_0a 
     270        ControlInfo/W=VCALC VCALCCtrl_0a 
    425271        ng = V_Value 
    426          
    427         a1 = 6          // 60 mm diameter 
    428  
    429         Print "Source Ap diam (cm) = ",a1 
     272 
     273        ControlInfo/W=VCALC VCALCCtrl_0f 
     274        String apStr = S_Value 
     275         
     276 
     277        if(ng > 0)       
     278                a1 = 6          // 60 mm diameter 
     279        else 
     280                sscanf apStr, "%g cm", a1 
     281        endif 
     282 
     283//      Print "Source Ap diam (cm) = ",a1 
    430284        return(a1) 
    431285End 
    432286 
    433  
    434  
     287// reports tha value in [cm] 
     288Function VC_sampleApertureDiam() 
     289 
     290        ControlInfo/W=VCALC VCALCCtrl_1c 
     291        Variable val = str2num(S_Value) 
     292 
     293        return(val) 
     294End 
    435295/////////////////// 
    436296// 
     
    468328 
    469329        // middle carriage 
    470         SetVariable VCALCCtrl_3a,value=_NUM:0           //Left offset 
    471         SetVariable VCALCCtrl_3aa,value=_NUM:0          //Right offset 
     330        SetVariable VCALCCtrl_3a,value=_NUM:-10         //Left offset 
     331        SetVariable VCALCCtrl_3aa,value=_NUM:-10                //Right offset 
    472332        SetVariable VCALCCtrl_3b,value=_NUM:4                   //Top offset (doesn't matter) 
    473333        SetVariable VCALCCtrl_3bb,value=_NUM:-4         //Bottom offset (doesn't matter) 
     
    570430end 
    571431 
     432// calculates L2, the sample aperture to detector distance 
     433Function VC_calc_L2(detStr) 
     434        String detStr 
     435 
     436        Variable a2_to_GV,sam_to_GV,sdd,l2 
     437        sdd = VC_getSDD(detStr)                 //sample pos to detector 
     438        ControlInfo VCALCCtrl_1d 
     439        a2_to_GV = V_Value 
     440        ControlInfo VCALCCtrl_1e 
     441        sam_to_GV = V_Value 
     442        l2 = sdd - sam_to_GV + a2_to_GV 
     443         
     444        return(l2) 
     445End 
    572446 
    573447// 
     
    578452// 
    579453// returns a value in [cm] 
    580 Function VC_beamDiameter(direction,carrNum) 
     454Function VC_beamDiameter(direction,detStr) 
    581455        String direction 
    582         Variable carrNum 
     456        String detStr 
    583457 
    584458//      NVAR lens = root:Packages:NIST:SAS:gUsingLenses 
     
    591465        Variable lambda,lambda_width,bs_factor 
    592466     
    593 //    NVAR L2diff = root:Packages:NIST:SAS:L2diff 
    594  
    595 // TODO: proper value for l2Diff, bs_factor 
    596         l2Diff = 0 
     467// TODO: proper value for bs_factor 
    597468        bs_factor = 1.05 
    598469         
    599470        l1 = VC_calcSSD() 
    600471        lambda = VCALC_getWavelength() 
    601         ControlInfo VCALCCtrl_0d 
    602         lambda_width = str2num(S_Value) 
    603          
    604          
    605         l2 = VC_getSDD(carrNum) + L2diff 
    606      
     472        lambda_width = VCALC_getWavelengthSpread() 
     473         
     474         
     475        Variable a2_to_GV,sam_to_GV,sdd 
     476        sdd = VC_getSDD(detStr)                 //sample pos to detector 
     477        ControlInfo VCALCCtrl_1d 
     478        a2_to_GV = V_Value 
     479        ControlInfo VCALCCtrl_1e 
     480        sam_to_GV = V_Value 
     481        l2 = sdd - sam_to_GV + a2_to_GV 
     482    
     483    
    607484    // TODO verify that these values are in cm 
    608485        a1 = VC_sourceApertureDiam() 
     
    642519// 3=back 
    643520// return value is in cm 
    644 Function VC_getSDD(carrNum) 
    645         Variable carrNum 
    646          
    647         if(carrNum == 1) 
    648                 ControlInfo VCALCCtrl_2d 
    649         endif 
    650         if(carrNum == 2) 
    651                 ControlInfo VCALCCtrl_3d 
    652         endif 
    653         if(carrNum == 3) 
    654                 ControlInfo VCALCCtrl_4b 
    655         endif 
    656          
    657         return(V_Value) 
    658 end 
    659          
    660  
    661 // these are numbers from NG3, when it was a SANS instrument 
    662 //       
    663 // updated with new flux numbers from John Barker 
    664 // NG3 - Feb 2009 
    665 // NG7 - July 2009 
    666 // 
    667 // guide loss has been changed to 0.95 rather than the old value of 0.95 
    668 // 
    669 // other values are changed in the initialization routines 
     521// actual Sample position to detector distance is reported 
     522// Top/Bottom setback is included 
     523Function VC_getSDD(detStr) 
     524        String detStr 
     525         
     526        Variable sdd 
     527 
     528        strswitch(detstr) 
     529                case "B": 
     530                case "B ": 
     531                        ControlInfo VCALCCtrl_4b 
     532                        break 
     533                case "ML": 
     534                case "MR": 
     535                case "MT": 
     536                case "MB": 
     537                        ControlInfo VCALCCtrl_3d 
     538                        break 
     539                case "FL": 
     540                case "FR": 
     541                case "FT": 
     542                case "FB": 
     543                        ControlInfo VCALCCtrl_2d 
     544                        break            
     545                default: 
     546                        Print "no case matched in VC_getSDD()" 
     547        endswitch 
     548 
     549        // this is gate valve to detector distance 
     550        sdd = V_Value 
     551         
     552        sdd += VCALC_getTopBottomSDDSetback(detStr) 
     553         
     554        // VCALCCtrl_1e is Sample Pos to Gate Valve (cm) 
     555        ControlInfo VCALCCtrl_1e 
     556        sdd += V_Value 
     557         
     558        return(sdd) 
     559end 
     560         
     561 
     562// TODO 
     563// -- verify all of the numbers, constants, and "empirical" transmission corrections 
     564// -- 
    670565// 
    671566Function V_beamIntensity() 
    672567 
    673         Variable alpha,f,t,t4,t5,t6,as,solid_angle,l1,d2_phi 
     568        Variable as,solid_angle,l1,d2_phi 
    674569        Variable a1,a2,retVal 
    675         Variable l_gap,guide_width,ng 
    676         Variable lambda_t,b,c 
    677         Variable lambda,t1,t2,t3,phi_0 
     570        Variable ng 
     571        Variable lambda_t 
     572        Variable lambda,phi_0 
    678573        Variable lambda_width 
    679         Variable guide_loss 
     574        Variable guide_loss,t_guide,t_filter,t_total,t_special 
    680575 
    681576        NVAR gBeamInten = root:Packages:NIST:VSANS:VCALC:gBeamIntensity 
    682  
    683577  
    684578// TODO 
    685 // these are numbers from NG3, when it was a SANS instrument 
    686          
    687         lambda_t = 5.50 
    688  
    689         t1 = 0.63 
    690         t2 = 1.0 
    691         t3 = 0.75 
    692         l_gap = 100.0 
    693         guide_width = 6.0 
    694   
    695         //new values, from 11/2009 --- BeamFluxReport_2009.ifn 
    696         phi_0 = 2.42e13 
    697         b = 0.0 
    698         c = -0.0243 
    699         guide_loss = 0.924 
    700           
    701           
    702           
     579// -- verify these numbers 
     580        lambda_t = 6.20 
     581        phi_0 = 1.82e13 
     582        guide_loss = 0.97 
     583        t_special = 1 
     584 
    703585        ControlInfo VCALCCtrl_0a 
    704586        ng = V_Value 
    705587  
    706588        lambda = VCALC_getWavelength() 
    707         ControlInfo VCALCCtrl_0d 
    708         lambda_width = str2num(S_Value) 
    709   
    710      
     589        lambda_width = VCALC_getWavelengthSpread() 
    711590        l1 = VC_calcSSD() 
    712591     
     
    718597        a2 = V_Value 
    719598     
    720      
    721         alpha = (a1+a2)/(2*l1)  //angular divergence of beam 
    722         f = l_gap*alpha/(2*guide_width) 
    723         t4 = (1-f)*(1-f) 
    724         t5 = exp(ng*ln(guide_loss))     // trans losses of guides in pre-sample flight 
    725         t6 = 1 - lambda*(b-(ng/8)*(b-c))                //experimental correction factor 
    726         t = t1*t2*t3*t4*t5*t6 
     599//      alpha = (a1+a2)/(2*l1)  //angular divergence of beam 
     600//      f = l_gap*alpha/(2*guide_width) 
     601//      t4 = (1-f)*(1-f) 
     602//      t6 = 1 - lambda*(b-(ng/8)*(b-c))                //experimental correction factor 
     603 
     604        t_guide = exp(ng*ln(guide_loss))        // trans losses of guides in pre-sample flight 
     605        t_filter = exp(-0.371 - 0.0305*lambda - 0.00352*lambda*lambda) 
     606        t_total = t_special*t_guide*t_filter 
     607 
    727608     
    728609        as = pi/4*a2*a2         //area of sample in the beam 
     
    733614        solid_angle = pi/4* (a1/l1)*(a1/l1) 
    734615 
    735         retVal = as * d2_phi * lambda_width * solid_angle * t 
     616        retVal = as * d2_phi * lambda_width * solid_angle * t_total 
    736617 
    737618        // set the global for display 
    738619        gBeamInten = retVal 
     620         
    739621        return (retVal) 
    740622end 
     
    750632 
    751633// return a beamstop diameter (cm) larger than maximum beam dimension 
    752 Function VC_beamstopDiam(carrNum) 
    753         Variable carrNum 
     634Function VC_beamstopDiam(detStr) 
     635        String detStr 
    754636         
    755637        Variable bm=0 
     
    761643                bs = 1                                                          //force the diameter to 1" 
    762644        else 
    763                 bm = VC_beamDiameter("maximum",carrNum) 
     645                bm = VC_beamDiameter("maximum",detStr) 
    764646                do 
    765647                bs += 1 
     
    770652End 
    771653 
    772  
     654// multiply the appropriate IQ data by the beamstop shadow factor for display 
     655// 
     656Function V_IQ_BeamstopShadow() 
     657 
     658        String popStr 
     659        Variable binType 
     660         
     661        ControlInfo/W=VCALC popup_b 
     662        popStr = S_Value         
     663 
     664        binType = V_BinTypeStr2Num(popStr)       
     665         
     666        String folderStr = "root:Packages:NIST:VSANS:VCALC:" 
     667         
     668 
     669        String extStr ="" 
     670         
     671        switch(binType) 
     672                case 1: 
     673                        extStr = ksBinType1              
     674 
     675                        break 
     676                case 2: 
     677                        extStr = ksBinType2              
     678 
     679                        break 
     680                case 3: 
     681                        extStr = ksBinType3      
     682                         
     683                        break 
     684                case 4:                         /// this is for a tall, narrow slit mode         
     685                        extStr = ksBinType4 
     686 
     687                        break 
     688                case 5: 
     689                        extStr = ksBinType5      
     690                 
     691                        break 
     692                case 6: 
     693                        extStr = ksBinType6      
     694                 
     695                        break 
     696                case 7: 
     697                        extStr = ksBinType7      
     698                 
     699                        break 
     700                         
     701                default: 
     702                        Abort "Binning mode not found in V_IQ_BeamstopShadow"// when no case matches     
     703        endswitch 
     704 
     705 
     706//      root:Packages:NIST:VSANS:VCALC:fSubS_qxqy_MLR 
     707//      root:Packages:NIST:VSANS:VCALC:iBin_qxqy_MLR 
     708         
     709        Variable ii 
     710        String ext 
     711//      loop over all of the types of data 
     712        for(ii=0;ii<ItemsInList(extStr);ii+=1) 
     713                ext = StringFromList(ii, extStr, ";") 
     714                Wave iq = $(folderStr+"iBin_qxqy_"+ext) 
     715                Wave fs = $(folderStr+"fSubS_qxqy_"+ext) 
     716                iq = (fs < 0.1) ? iq*0.1 : iq*fs 
     717//              iq *= fs 
     718        endfor   
     719         
     720        return(0) 
     721end 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VC_VCALCPanel_MockUp.ipf

    r1117 r1128  
    6363// always visible stuff, not on any tab 
    6464         
    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" 
     65        GroupBox group0,pos={10,10},size={440,125},title="Setup" 
     66        TabControl Vtab,labelBack=(45000,61000,58000),pos={14,150},size={430,200},tabLabel(0)="Collim" 
    6767        TabControl Vtab,tabLabel(1)="Sample",tabLabel(2)="Front Det",tabLabel(3)="Mid Det" 
    6868        TabControl Vtab,tabLabel(4)="Back Det",tabLabel(5)="Simul",value= 0,proc=VCALCTabProc 
     
    8282        SetVariable setVar_a,limits={0.3,30,0.2},value=_NUM:20 
    8383 
    84         ValDisplay valDisp_a,pos={50,100},size={150,15},title="Beam Intensity",value=root:Packages:NIST:VSANS:VCALC:gBeamIntensity 
     84        ValDisplay valDisp_a,pos={50,380},size={150,15},title="Beam Intensity",value=root:Packages:NIST:VSANS:VCALC:gBeamIntensity 
     85 
     86        ValDisplay valDisp_b,pos={50,410},size={150,15},title="Q min (Front) (1/A)",value=root:Packages:NIST:VSANS:VCALC:gQmin_F 
     87        ValDisplay valDisp_c,pos={250,410},size={150,15},title="Q max (Front) (1/A)",value=root:Packages:NIST:VSANS:VCALC:gQmax_F 
     88        ValDisplay valDisp_d,pos={50,440},size={150,15},title="Q min (Mid) (1/A)",value=root:Packages:NIST:VSANS:VCALC:gQmin_M 
     89        ValDisplay valDisp_e,pos={250,440},size={150,15},title="Q max (Mid) (1/A)",value=root:Packages:NIST:VSANS:VCALC:gQmax_M 
     90        ValDisplay valDisp_f,pos={50,470},size={150,15},title="Q min (Back) (1/A)",value=root:Packages:NIST:VSANS:VCALC:gQmin_B 
     91        ValDisplay valDisp_g,pos={250,470},size={150,15},title="Q max (Back) (1/A)",value=root:Packages:NIST:VSANS:VCALC:gQmax_B 
     92        ValDisplay valDisp_h,pos={50,500},size={200,15},title="Beam Diam (middle) (cm)",value=root:Packages:NIST:VSANS:VCALC:gBeamDiam 
     93        ValDisplay valDisp_i,pos={50,530},size={200,15},title="Beam Stop Diam (middle) (in)",value=root:Packages:NIST:VSANS:VCALC:gBeamStopDiam 
     94        ValDisplay valDisp_j,pos={50,560},size={200,15},title="Real Q min (1/A)",value=root:Packages:NIST:VSANS:VCALC:gRealQMin 
    8595 
    8696 
     
    149159         
    150160// tab(0), collimation - initially visible 
    151         Slider VCALCCtrl_0a,pos={223,324},size={200,45},limits={0,10,1},value= 1,vert= 0 
    152         SetVariable VCALCCtrl_0b,pos={25,294},size={120,15},title="wavelength" 
     161        Slider VCALCCtrl_0a,pos={223,324-50},size={200,45},limits={0,9,1},value= 1,vert= 0,proc=V_GuideSliderProc 
     162        SetVariable VCALCCtrl_0b,pos={25,294-50},size={120,15},title="wavelength" 
    153163        SetVariable VCALCCtrl_0b,limits={4,20,1},value=_NUM:8,proc=VC_Lambda_SetVarProc 
    154         PopupMenu VCALCCtrl_0c,pos={26,257},size={150,20},title="monochromator" 
     164        PopupMenu VCALCCtrl_0c,pos={26,257-50},size={150,20},title="monochromator" 
    155165        PopupMenu VCALCCtrl_0c,mode=1,popvalue="Velocity Selector",value= root:Packages:NIST:VSANS:VCALC:gMonochromatorType 
    156166        PopupMenu VCALCCtrl_0c,proc=VC_MonochromSelectPopup 
    157         PopupMenu VCALCCtrl_0d,pos={26,321},size={115,20},title="delta lambda" 
    158         PopupMenu VCALCCtrl_0d,mode=1,popvalue="0.10",value= root:Packages:NIST:VSANS:VCALC:gDeltaLambda 
     167        PopupMenu VCALCCtrl_0d,pos={26,321-50},size={115,20},title="delta lambda" 
     168        PopupMenu VCALCCtrl_0d,mode=1,popvalue="0.12",value= root:Packages:NIST:VSANS:VCALC:gDeltaLambda 
    159169        PopupMenu VCALCCtrl_0d,proc=VC_DeltaLamSelectPopup 
    160         PopupMenu VCALCCtrl_0e,pos={291,262},size={132,20},title="source shape" 
     170        PopupMenu VCALCCtrl_0e,pos={291,262-50},size={132,20},title="source shape" 
    161171        PopupMenu VCALCCtrl_0e,mode=1,popvalue="circular",value= root:Packages:NIST:VSANS:VCALC:gSourceShape 
    162172        PopupMenu VCALCCtrl_0e,proc=VC_SourceApShapeSelectPopup 
    163         PopupMenu VCALCCtrl_0f,pos={283,293},size={141,20},title="source aperture" 
    164         PopupMenu VCALCCtrl_0f,mode=1,popvalue="1.0 cm",value= root:Packages:NIST:VSANS:VCALC:gSourceDiam 
     173        PopupMenu VCALCCtrl_0f,pos={283,293-50},size={141,20},title="source aperture" 
     174        PopupMenu VCALCCtrl_0f,mode=1,popvalue="6.0 cm",value= root:Packages:NIST:VSANS:VCALC:gSourceDiam 
    165175        PopupMenu VCALCCtrl_0f,proc=VC_SourceAperDiamSelectPopup 
    166176 
    167177 
    168178// tab(1) - Sample conditions, initially not visible 
    169         PopupMenu VCALCCtrl_1a,pos={38,270},size={142,20},title="table location",disable=1 
     179        PopupMenu VCALCCtrl_1a,pos={38,250-50},size={142,20},title="table location",disable=1 
    170180        PopupMenu VCALCCtrl_1a,mode=1,popvalue="Changer",value= root:Packages:NIST:VSANS:VCALC:gTableLocation 
    171         PopupMenu VCALCCtrl_1b,pos={270,270},size={115,20},title="Aperture Shape",disable=1 
     181        PopupMenu VCALCCtrl_1b,pos={270,250-50},size={115,20},title="Aperture Shape",disable=1 
    172182        PopupMenu VCALCCtrl_1b,mode=1,popvalue="circular",value= root:Packages:NIST:VSANS:VCALC:gSampleApertureShape  
    173         PopupMenu VCALCCtrl_1c,pos={270,330},size={132,20},title="Aperture Size (cm)",disable=1 
    174         PopupMenu VCALCCtrl_1c,mode=1,popvalue="0.5",value= root:Packages:NIST:VSANS:VCALC:gSampleApertureDiam 
    175          
     183        PopupMenu VCALCCtrl_1c,pos={270,310-50},size={132,20},title="Aperture Diam (cm)",disable=1 
     184        PopupMenu VCALCCtrl_1c,mode=1,popvalue="1.27",value= root:Packages:NIST:VSANS:VCALC:gSampleApertureDiam 
     185        SetVariable VCALCCtrl_1d,pos={25,280-50},size={200,15},title="Sample Aperture to Gate Valve (cm)" 
     186        SetVariable VCALCCtrl_1d,limits={4,40,0.1},value=_NUM:22,proc=VC_A2_to_GV_SetVarProc,disable=1 
     187        SetVariable VCALCCtrl_1e,pos={25,310-50},size={200,15},title="Sample Pos to Gate Valve (cm)" 
     188        SetVariable VCALCCtrl_1e,limits={4,40,0.1},value=_NUM:11,proc=VC_Sam_to_GV_SetVarProc,disable=1  
    176189 
    177190// tab(2) - Front detector panels, initially not visible 
    178         SetVariable VCALCCtrl_2a,pos={30,260},size={150,15},title="LEFT Offset (cm)",proc=VC_FDet_LR_SetVarProc 
     191        SetVariable VCALCCtrl_2a,pos={30,260-50},size={150,15},title="LEFT Offset (cm)",proc=VC_FDet_LR_SetVarProc 
    179192        SetVariable VCALCCtrl_2a,limits={-20,19,0.1},disable=1,value=_NUM:-10 
    180         SetVariable VCALCCtrl_2aa,pos={30,290},size={150,15},title="RIGHT Offset (cm)",proc=VC_FDet_LR_SetVarProc 
     193        SetVariable VCALCCtrl_2aa,pos={30,290-50},size={150,15},title="RIGHT Offset (cm)",proc=VC_FDet_LR_SetVarProc 
    181194        SetVariable VCALCCtrl_2aa,limits={-19,20,0.1},disable=1,value=_NUM:10 
    182195         
    183         SetVariable VCALCCtrl_2b,pos={30,330},size={150,15},title="TOP Offset (cm)",proc=VC_FDet_LR_SetVarProc 
     196        SetVariable VCALCCtrl_2b,pos={30,330-50},size={150,15},title="TOP Offset (cm)",proc=VC_FDet_LR_SetVarProc 
    184197        SetVariable VCALCCtrl_2b,limits={0,18,0.1},disable=1,value=_NUM:10 
    185         SetVariable VCALCCtrl_2bb,pos={30,360},size={150,15},title="BOTTOM Offset (cm)",proc=VC_FDet_LR_SetVarProc 
     198        SetVariable VCALCCtrl_2bb,pos={30,360-50},size={150,15},title="BOTTOM Offset (cm)",proc=VC_FDet_LR_SetVarProc 
    186199        SetVariable VCALCCtrl_2bb,limits={-18,0,0.1},disable=1,value=_NUM:-10 
    187200         
    188         SetVariable VCALCCtrl_2d,pos={205,260},size={230,15},title="Sample to Detector Distance (cm)",proc=VC_FDet_SDD_SetVarProc 
     201        SetVariable VCALCCtrl_2d,pos={205,260-50},size={230,15},title="Gate Valve to Detector Distance (cm)",proc=VC_FDet_SDD_SetVarProc 
    189202        SetVariable VCALCCtrl_2d,limits={100,800,1},disable=1   ,value=_NUM:150 
    190203         
    191204 
    192205// tab(3) - Middle detector panels, initially not visible 
    193         SetVariable VCALCCtrl_3a,pos={30,260},size={150,15},title="LEFT Offset (cm)",proc=VC_MDet_LR_SetVarProc 
     206        SetVariable VCALCCtrl_3a,pos={30,260-50},size={150,15},title="LEFT Offset (cm)",proc=VC_MDet_LR_SetVarProc 
    194207        SetVariable VCALCCtrl_3a,limits={-20,19,0.1},disable=1,value=_NUM:-7 
    195         SetVariable VCALCCtrl_3aa,pos={30,290},size={150,15},title="RIGHT Offset (cm)",proc=VC_MDet_LR_SetVarProc 
     208        SetVariable VCALCCtrl_3aa,pos={30,290-50},size={150,15},title="RIGHT Offset (cm)",proc=VC_MDet_LR_SetVarProc 
    196209        SetVariable VCALCCtrl_3aa,limits={-19,20,0.1},disable=1,value=_NUM:7 
    197210                 
    198         SetVariable VCALCCtrl_3b,pos={30,330},size={150,15},title="TOP Offset (cm)",proc=VC_MDet_LR_SetVarProc 
     211        SetVariable VCALCCtrl_3b,pos={30,330-50},size={150,15},title="TOP Offset (cm)",proc=VC_MDet_LR_SetVarProc 
    199212        SetVariable VCALCCtrl_3b,limits={0,18,0.1},disable=1,value=_NUM:14 
    200         SetVariable VCALCCtrl_3bb,pos={30,360},size={150,15},title="BOTTOM Offset (cm)",proc=VC_MDet_LR_SetVarProc 
     213        SetVariable VCALCCtrl_3bb,pos={30,360-50},size={150,15},title="BOTTOM Offset (cm)",proc=VC_MDet_LR_SetVarProc 
    201214        SetVariable VCALCCtrl_3bb,limits={-18,0,0.1},disable=1,value=_NUM:-14 
    202215 
    203         SetVariable VCALCCtrl_3d,pos={205,260},size={230,15},title="Sample to Detector Distance (cm)",proc=VC_MDet_SDD_SetVarProc 
     216        SetVariable VCALCCtrl_3d,pos={205,260-50},size={230,15},title="Gate Valve to Detector Distance (cm)",proc=VC_MDet_SDD_SetVarProc 
    204217        SetVariable VCALCCtrl_3d,limits={800,2000,1},disable=1,value=_NUM:1000 
    205218 
    206219         
    207220// tab(4) - Back detector panel 
    208         SetVariable VCALCCtrl_4a,pos={188,290},size={150,15},title="Lateral Offset (cm)" 
     221        SetVariable VCALCCtrl_4a,pos={188,290-50},size={150,15},title="Lateral Offset (cm)" 
    209222        SetVariable VCALCCtrl_4a,limits={0,20,0.1},disable=1,value=_NUM:0 
    210         SetVariable VCALCCtrl_4b,pos={188,260},size={230,15},title="Sample to Detector Distance (cm)",proc=VC_BDet_SDD_SetVarProc 
     223        SetVariable VCALCCtrl_4b,pos={188,260-50},size={230,15},title="Gate Valve to Detector Distance (cm)",proc=VC_BDet_SDD_SetVarProc 
    211224        SetVariable VCALCCtrl_4b,limits={2000,2500,1},disable=1,value=_NUM:2200 
    212225//      PopupMenu VCALCCtrl_4c,pos={40,260},size={180,20},title="Detector type",disable=1 
     
    214227 
    215228// tab(5) - Simulation setup 
    216         SetVariable VCALCCtrl_5a,pos={40,290},size={200,15},title="Neutrons on Sample (imon)" 
     229        SetVariable VCALCCtrl_5a,pos={40,290-50},size={200,15},title="Neutrons on Sample (imon)" 
    217230        SetVariable VCALCCtrl_5a,limits={1e7,1e15,1e7},disable=1,value=_NUM:1e11,proc=VC_SimImon_SetVarProc 
    218         PopupMenu VCALCCtrl_5b,pos={40,260},size={180,20},title="Model Function",disable=1 
     231        PopupMenu VCALCCtrl_5b,pos={40,260-50},size={180,20},title="Model Function",disable=1 
    219232        PopupMenu VCALCCtrl_5b,mode=1,popvalue="Debye",value= root:Packages:NIST:VSANS:VCALC:gModelFunctionType,proc=VC_SimModelFunc_PopProc 
    220233         
     
    232245        V_beamIntensity() 
    233246         
     247//      Print "Beam diam (middle) = ",VC_beamDiameter("horizontal",2)           //middle carriage 
     248         
     249        // fill in the Qmin and Qmax values 
     250        V_QMinMax_Back() 
     251        V_QMinMax_Middle() 
     252        V_QMinMax_Front() 
     253         
     254        //calculate beam diameter and beamstop size  
     255        V_BeamDiamDisplay("maximum", "MR")      //TODO -- hard-wired here for the Middle carriage (and in the SetVar label) 
     256        V_BeamStopDiamDisplay("MR") 
     257         
     258        //calculate the "real" QMin with the beamstop 
     259        V_QMin_withBeamStop("MR")               //TODO -- hard-wired here as the middle carriage and MR panel 
     260         
     261         
     262        // 
     263//      Print "Still need to truncate the plotted data for Low Q that is behind the beam stop" 
     264        // multiply the averaged data by the shadow factor to simulate a beamstop 
     265        V_IQ_BeamstopShadow() 
     266         
    234267        return(0) 
    235268End 
     269 
     270 
    236271 
    237272// function to control the drawing of controls in the TabControl on the main panel 
     
    291326        endfor 
    292327         
    293  
    294          
    295328        return(0) 
    296329End 
     330 
     331 
     332 
     333// TODO 
     334//changing the number of guides changes the SSD 
     335// the source aperture popup may need to be updated 
     336// 
     337Function V_GuideSliderProc(ctrlName,sliderValue,event) 
     338        String ctrlName 
     339        Variable sliderValue 
     340        Variable event  // bit field: bit 0: value set, 1: mouse down, 2: mouse up, 3: mouse moved 
     341         
     342        Variable recalc=0 
     343        SVAR apStr = root:Packages:NIST:VSANS:VCALC:gSourceDiam 
     344         
     345        if(event %& 0x1)        // bit 0, value set 
     346                if(cmpstr(ctrlName,"") != 0)            //here by direct action, so do LensCheck and recalculate 
     347//                      recalc=1 
     348//                      LensCheckProc("",2)             //make sure lenses are deselected 
     349                endif 
     350//              sourceToSampleDist()            //updates the SSD global and wave 
     351                //change the sourceAp popup, SDD range, etc 
     352                switch(sliderValue) 
     353                        case 0: 
     354//                              ControlInfo/W=SASCALC popup0 
     355//                              mode=V_value 
     356                                apStr = "0.75 cm;1.5 cm;3.0 cm;" 
     357                                break 
     358                        default: 
     359                                apStr = "6 cm;" 
     360                endswitch 
     361                ControlUpdate/W=VCALC VCALCCtrl_0f 
     362//              UpdateControls()                                // the Ng global is actually set inside this function 
     363                Recalculate_AllDetectors() 
     364        endif 
     365        return 0 
     366End 
     367 
     368 
     369 
     370 
    297371 
    298372Function Front2DQ_Log_CheckProc(cba) : CheckBoxControl 
     
    314388        return 0 
    315389End 
    316  
    317  
    318  
    319          
    320  
    321390 
    322391 
     
    565634 
    566635 
    567  
    568          
    569          
    570 // 
    571 // setVar for the wavelength 
    572 // 
    573 Function VC_Lambda_SetVarProc(sva) : SetVariableControl 
     636// 
     637// setVar for the distance from Sample Position to Gave Valve 
     638// 
     639Function VC_Sam_to_GV_SetVarProc(sva) : SetVariableControl 
    574640        STRUCT WMSetVariableAction &sva 
    575641 
     
    582648                         
    583649//                      // don't need to recalculate the views, but need to recalculate the detectors 
    584 //                      fPlotBackPanels() 
    585 //                      fPlotMiddlePanels() 
    586 //                      fPlotFrontPanels() 
     650 
     651                        Recalculate_AllDetectors()               
     652                                 
     653                        break 
     654                case -1: // control being killed 
     655                        break 
     656        endswitch 
     657 
     658        return 0 
     659End 
     660         
     661 
     662// 
     663// setVar for the distance from Sample Aperture to Gave Valve 
     664// 
     665Function VC_A2_to_GV_SetVarProc(sva) : SetVariableControl 
     666        STRUCT WMSetVariableAction &sva 
     667 
     668        switch( sva.eventCode ) 
     669                case 1: // mouse up 
     670                case 2: // Enter key 
     671                case 3: // Live update 
     672                        Variable dval = sva.dval 
     673                        String sval = sva.sval 
     674                         
     675//                      // don't need to recalculate the views, but need to recalculate the detectors 
     676 
     677                        Recalculate_AllDetectors()               
     678                                 
     679                        break 
     680                case -1: // control being killed 
     681                        break 
     682        endswitch 
     683 
     684        return 0 
     685End 
     686         
     687// 
     688// setVar for the wavelength 
     689// 
     690Function VC_Lambda_SetVarProc(sva) : SetVariableControl 
     691        STRUCT WMSetVariableAction &sva 
     692 
     693        switch( sva.eventCode ) 
     694                case 1: // mouse up 
     695                case 2: // Enter key 
     696                case 3: // Live update 
     697                        Variable dval = sva.dval 
     698                        String sval = sva.sval 
     699                         
     700//                      // don't need to recalculate the views, but need to recalculate the detectors 
    587701 
    588702                        Recalculate_AllDetectors()               
     
    11061220        Variable/G gBeamIntensity= 0 
    11071221 
    1108  
     1222        Variable/G gQmin_F,gQmax_F,gQmin_M,gQmax_M,gQmin_B,gQmax_B 
     1223        Variable/G gBeamDiam,gBeamStopDiam 
     1224        Variable/G gRealQMin 
    11091225 
    11101226// popup strings for each tab (then use the string in the panel) 
     
    11121228        String/G gMonochromatorType = "Velocity Selector;Graphite;White Beam;" 
    11131229        String/G gSourceShape = "circular;rectangular;converging pinholes;" 
    1114         String/G gSourceDiam = "1.0 cm;2.0 cm;5.0 cm;" 
     1230        String/G gSourceDiam = "6.0 cm;" 
    11151231        String/G gSourceDiam_0g = "0.75 cm;1.5 cm;3.0 cm;"              // values from John Mar 2018 
    1116         String/G gDeltaLambda = "0.01;0.10;0.20;0.30;0.40;" 
     1232        String/G gDeltaLambda = "0.12;" 
    11171233         
    11181234// tab 1 - sample conditions 
    11191235        String/G gTableLocation = "Changer;Stage;" 
    11201236        String/G gSampleApertureShape = "circular;rectangular;converging pinholes;" 
    1121         String/G gSampleApertureDiam = "0.5;1.0;1.5;2.0;" 
     1237        String/G gSampleApertureDiam = "1.27;1.59;1.0;2.0;" 
    11221238         
    11231239// tab 2 
     
    11441260//      Variable/G gOffset=0 
    11451261        Variable/G gSamAp=1.27          //samAp diameter in cm 
    1146         String/G gSourceApString = "1.43 cm;2.54 cm;3.81 cm;" 
     1262//      String/G gSourceApString = "1.43 cm;2.54 cm;3.81 cm;" 
    11471263        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;" 
    11481264        Variable/G gSamApOther = 10             //non-standard aperture diameter, in mm 
     
    12411357        SetDataFolder root: 
    12421358end 
     1359 
     1360// set the global values for display 
     1361Function V_QMinMax_Back() 
     1362 
     1363        NVAR min_b = root:Packages:NIST:VSANS:VCALC:gQmin_B 
     1364        NVAR max_b = root:Packages:NIST:VSANS:VCALC:gQmax_B 
     1365 
     1366        String folderStr = "VCALC" 
     1367        String detStr = "" 
     1368 
     1369        String folderPath = "root:Packages:NIST:VSANS:"+folderStr 
     1370        String instPath = ":entry:instrument:detector_"  
     1371 
     1372        detStr = "B" 
     1373        WAVE qTot_B = $(folderPath+instPath+detStr+":qTot_"+detStr) 
     1374 
     1375        min_b = WaveMin(qTot_B) 
     1376        max_b = WaveMax(qTot_B) 
     1377 
     1378 
     1379        return(0) 
     1380end 
     1381 
     1382// set the global values for display 
     1383Function V_QMinMax_Middle() 
     1384 
     1385        NVAR min_m = root:Packages:NIST:VSANS:VCALC:gQmin_M 
     1386        NVAR max_m = root:Packages:NIST:VSANS:VCALC:gQmax_M 
     1387 
     1388        String folderStr = "VCALC" 
     1389        String detStr = "" 
     1390 
     1391        String folderPath = "root:Packages:NIST:VSANS:"+folderStr 
     1392        String instPath = ":entry:instrument:detector_"  
     1393 
     1394        detStr = "ML" 
     1395        WAVE qTot_ML = $(folderPath+instPath+detStr+":qTot_"+detStr) 
     1396 
     1397        detStr = "MR" 
     1398        WAVE qTot_MR = $(folderPath+instPath+detStr+":qTot_"+detStr) 
     1399 
     1400        detStr = "MT" 
     1401        WAVE qTot_MT = $(folderPath+instPath+detStr+":qTot_"+detStr) 
     1402 
     1403        detStr = "MB" 
     1404        WAVE qTot_MB = $(folderPath+instPath+detStr+":qTot_"+detStr) 
     1405 
     1406        min_m = min(WaveMin(qTot_ML),WaveMin(qTot_MT),WaveMin(qTot_MR),WaveMin(qTot_MB)) 
     1407        max_m = max(WaveMax(qTot_ML),WaveMax(qTot_MT),WaveMax(qTot_MR),WaveMax(qTot_MB)) 
     1408 
     1409 
     1410        return(0) 
     1411end 
     1412 
     1413// set the global values for display 
     1414Function V_QMinMax_Front() 
     1415 
     1416        NVAR min_f = root:Packages:NIST:VSANS:VCALC:gQmin_F 
     1417        NVAR max_f = root:Packages:NIST:VSANS:VCALC:gQmax_F 
     1418 
     1419        String folderStr = "VCALC" 
     1420        String detStr = "" 
     1421         
     1422        String folderPath = "root:Packages:NIST:VSANS:"+folderStr 
     1423        String instPath = ":entry:instrument:detector_"  
     1424 
     1425        detStr = "FL" 
     1426        WAVE qTot_FL = $(folderPath+instPath+detStr+":qTot_"+detStr) 
     1427 
     1428        detStr = "FR" 
     1429        WAVE qTot_FR = $(folderPath+instPath+detStr+":qTot_"+detStr) 
     1430 
     1431        detStr = "FT" 
     1432        WAVE qTot_FT = $(folderPath+instPath+detStr+":qTot_"+detStr) 
     1433 
     1434        detStr = "FB" 
     1435        WAVE qTot_FB = $(folderPath+instPath+detStr+":qTot_"+detStr) 
     1436 
     1437        min_f = min(WaveMin(qTot_FL),WaveMin(qTot_FT),WaveMin(qTot_FR),WaveMin(qTot_FB)) 
     1438        max_f = max(WaveMax(qTot_FL),WaveMax(qTot_FT),WaveMax(qTot_FR),WaveMax(qTot_FB)) 
     1439 
     1440 
     1441        return(0) 
     1442end 
     1443 
     1444Function V_QMin_withBeamStop(detStr) 
     1445        String detStr 
     1446         
     1447        NVAR val = root:Packages:NIST:VSANS:VCALC:gRealQMin 
     1448 
     1449        Variable BSDiam,SDD,two_theta,lambda,qMin 
     1450 
     1451        BSDiam = VC_beamstopDiam(detStr) 
     1452        SDD = VC_getSDD(detStr) 
     1453        lambda = VCALC_getWavelength() 
     1454         
     1455        two_theta = atan(BSDiam/2/SDD) 
     1456        qMin = 4*pi/lambda*sin(two_theta/2) 
     1457                 
     1458        val = qMin 
     1459         
     1460        return(0) 
     1461End 
     1462 
     1463 
     1464Function V_BeamDiamDisplay(direction, detStr) 
     1465        String direction 
     1466        String detStr 
     1467         
     1468        NVAR val = root:Packages:NIST:VSANS:VCALC:gBeamDiam 
     1469 
     1470        val = VC_beamDiameter(direction, detStr)                //middle carriage, maximum extent, includes gravity 
     1471 
     1472        return(0) 
     1473End 
     1474 
     1475 
     1476// carrNum 1=front, 2=middle, 3=back 
     1477Function V_BeamStopDiamDisplay(detStr) 
     1478        String detStr 
     1479 
     1480        NVAR val = root:Packages:NIST:VSANS:VCALC:gBeamStopDiam 
     1481 
     1482        val = VC_beamstopDiam(detStr)/2.54              //return the value in inches 
     1483 
     1484        return(0) 
     1485End 
     1486         
     1487                 
     1488         
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_HDF5_RW_Utils.ipf

    r1117 r1128  
    291291//      det_B += 2 
    292292        Wave distance=distance 
    293         distance = VCALC_getSDD("B")*100                // to convert m to cm 
     293        distance = VC_getSDD("B")*100           // to convert m to cm 
    294294 
    295295                         
     
    307307//      det_MT += 2 
    308308        Wave distance=distance 
    309         distance = VCALC_getSDD("MT")*100               // to convert m to cm 
     309        distance = VC_getSDD("MT")*100          // to convert m to cm 
    310310 
    311311         
     
    322322//      det_MB += 2 
    323323        Wave distance=distance 
    324         distance = VCALC_getSDD("MB")*100               // to convert m to cm 
     324        distance = VC_getSDD("MB")*100          // to convert m to cm 
    325325 
    326326         
     
    338338//      det_ML += 2 
    339339        Wave distance=distance 
    340         distance = VCALC_getSDD("ML")*100               // to convert m to cm 
     340        distance = VC_getSDD("ML")*100          // to convert m to cm 
    341341 
    342342                 
     
    352352//      det_MR += 2 
    353353        Wave distance=distance 
    354         distance = VCALC_getSDD("MR")*100               // to convert m to cm 
     354        distance = VC_getSDD("MR")*100          // to convert m to cm 
    355355         
    356356         
     
    365365//      det_FT=tmpw 
    366366        Wave distance=distance 
    367         distance = VCALC_getSDD("FT")*100               // to convert m to cm 
     367        distance = VC_getSDD("FT")*100          // to convert m to cm 
    368368 
    369369 
     
    377377//      det_FB=tmpw 
    378378        Wave distance=distance 
    379         distance = VCALC_getSDD("FB")*100               // to convert m to cm 
     379        distance = VC_getSDD("FB")*100          // to convert m to cm 
    380380 
    381381                         
     
    389389//      det_FL=tmpw 
    390390        Wave distance=distance 
    391         distance = VCALC_getSDD("FL")*100               // to convert m to cm 
     391        distance = VC_getSDD("FL")*100          // to convert m to cm 
    392392 
    393393         
     
    401401//      det_FR=tmpw 
    402402        Wave distance=distance 
    403         distance = VCALC_getSDD("FR")*100               // to convert m to cm 
     403        distance = VC_getSDD("FR")*100          // to convert m to cm 
    404404 
    405405         
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Instrument_Resolution.ipf

    r1120 r1128  
    9292        Variable &SigmaQ, &QBar, &fSubS         //these are the output quantities at the input Q value 
    9393 
     94        Variable isVCALC 
     95        if(cmpstr(folderStr,"VCALC") == 0) 
     96                isVCALC = 1 
     97        endif 
    9498 
    9599        Variable lambda,lambdaWidth,DDet,apOff,S1,S2,L1,L2,BS,del_r,usingLenses 
     
    106110// TODO: check the units of all of the inputs 
    107111// lambda = wavelength [A] 
    108         lambda = V_getWavelength(folderStr) 
     112        if(isVCALC) 
     113                lambda = VCALC_getWavelength() 
     114        else 
     115                lambda = V_getWavelength(folderStr) 
     116        endif 
    109117         
    110118// lambdaWidth = [dimensionless] 
    111         lambdaWidth = V_getWavelength_spread(folderStr) 
     119        if(isVCALC) 
     120                lambdaWidth = VCALC_getWavelengthSpread() 
     121        else 
     122                lambdaWidth = V_getWavelength_spread(folderStr) 
     123        endif 
    112124         
    113125// DDet = detector pixel resolution [cm]        **assumes square pixel 
     
    116128//      DDet = 0.8              // TODO -- this is hard-wired 
    117129 
    118         if(strlen(type) == 1) 
    119                 // it's "B" 
    120                 DDet = V_getDet_pixel_fwhm_x(folderStr,type)            // value is already in cm 
    121         else 
    122                 DDet = V_getDet_pixel_fwhm_x(folderStr,type[0,1])               // value is already in cm 
    123         endif 
    124                  
     130        if(isVCALC) 
     131                if(strlen(type) == 1) 
     132                        // it's "B" 
     133                        DDet = VCALC_getPixSizeX(type)          // value is already in cm 
     134                else 
     135                        DDet = VCALC_getPixSizeX(type[0,1])             // value is already in cm 
     136                endif            
     137        else 
     138                if(strlen(type) == 1) 
     139                        // it's "B" 
     140                        DDet = V_getDet_pixel_fwhm_x(folderStr,type)            // value is already in cm 
     141                else 
     142                        DDet = V_getDet_pixel_fwhm_x(folderStr,type[0,1])               // value is already in cm 
     143                endif            
     144        endif    
    125145// apOff = sample aperture to sample distance [cm] 
    126146        apOff = 10              // TODO -- this is hard-wired 
    127147 
    128148 
    129          
    130149// S1 = source aperture diameter [mm] 
    131150// may be either circle or rectangle 
     
    133152        Variable width,height,equiv_S1,equiv_bs 
    134153         
    135          
    136         s1_shape = V_getSourceAp_shape(folderStr) 
    137         if(cmpstr(s1_shape,"CIRCLE") == 0) 
    138                 S1 = str2num(V_getSourceAp_size(folderStr)) 
    139         else 
    140                 S1 = V_getSourceAp_height(folderStr)            // TODO: need the width or at least an equivalent diameter 
    141         endif 
    142          
     154        if(isVCALC) 
     155                S1 = VC_sourceApertureDiam()*10         //VCALC is in cm, conver to [mm] 
     156        else 
     157                s1_shape = V_getSourceAp_shape(folderStr) 
     158                if(cmpstr(s1_shape,"CIRCLE") == 0) 
     159                        S1 = str2num(V_getSourceAp_size(folderStr)) 
     160                else 
     161                        S1 = V_getSourceAp_height(folderStr)            // TODO: need the width or at least an equivalent diameter 
     162                endif 
     163        endif 
    143164         
    144165// S2 = sample aperture diameter [cm] 
     
    148169// sample aperture 2(external) reports the number typed in... 
    149170// 
    150 // so I'm trusting [cm] is in the file 
    151         S2 = V_getSampleAp2_size(folderStr)*10          // sample ap 1 or 2? 2 = the "external", convert to [mm] 
    152          
    153 // L1 = source to sample distance [m]  
    154         L1 = V_getSourceAp_distance(folderStr)/100 
    155  
    156 // L2 = sample to detector distance [m] 
     171        if(isVCALC) 
     172                S2 = VC_sampleApertureDiam()*10         // convert cm to mm 
     173        else 
     174        // I'm trusting [cm] is in the RAW data file 
     175                S2 = V_getSampleAp2_size(folderStr)*10          // sample ap 1 or 2? 2 = the "external", convert to [mm] 
     176        endif 
     177         
     178// L1 = source Ap to sample Ap distance [m]  
     179        if(isVCALC) 
     180                L1 = VC_calcSSD()/100           //convert cm to m 
     181        else 
     182                L1 = V_getSourceAp_distance(folderStr)/100 
     183        endif 
     184 
     185// L2 = sample aperture to detector distance [m] 
    157186// take the first two characters of the "type" to get the correct distance. 
    158187// if the type is say, MLRTB, then the implicit assumption in combining all four panels is that the resolution 
    159188// is not an issue for the slightly different distances. 
    160         if(strlen(type) == 1) 
     189        if(isVCALC) 
     190                if(strlen(type) == 1) 
     191                        // it's "B" 
     192                        L2 = VC_calc_L2(type)/100               //convert cm to m 
     193                else 
     194                        L2 = VC_calc_L2(type[0,1])/100          //convert cm to m 
     195                endif 
     196        else 
     197                if(strlen(type) == 1) 
    161198                // it's "B" 
    162                 L2 = V_getDet_ActualDistance(folderStr,type)/100                //convert cm to m 
    163         else 
    164                 L2 = V_getDet_ActualDistance(folderStr,type[0,1])/100           //convert cm to m 
    165         endif 
     199                        L2 = V_getDet_ActualDistance(folderStr,type)/100                //convert cm to m 
     200                else 
     201                        L2 = V_getDet_ActualDistance(folderStr,type[0,1])/100           //convert cm to m 
     202                endif 
     203        endif 
     204 
    166205         
    167206// BS = beam stop diameter [mm] 
     
    169208// -- need to check the detector, num_beamstops field, then description, then shape/size or shape/height and shape/width 
    170209// 
    171 // TODO: the values in the file are incorrect!!! BS = 1000 mm diameter!!! 
    172         BS = V_DeduceBeamstopDiameter(folderStr,type)           //returns diameter in [mm] 
     210 
     211        if(isVCALC) 
     212                BS = VC_beamstopDiam(type[0,1])*10 // convert cm to mm 
     213        else 
     214                BS = V_DeduceBeamstopDiameter(folderStr,type)           //returns diameter in [mm] 
     215        endif 
    173216//      BS = V_getBeamStopC2_size(folderStr)            // Units are [mm]  
    174217//      BS = 25.4                       //TODO hard-wired value 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Testing_Data_Procs.ipf

    r1117 r1128  
    5151                V_writeDetectorData(fileName,detStr,tmpData) 
    5252                 
    53                 val = VCALC_getSDD(detStr)              // make sure value is in cm 
     53         
     54                val = VC_getSDD(detStr)         // make sure value is in cm 
    5455                print val 
    5556                V_writeDet_distance(fileName,detStr,val) 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Write_VSANS_QIS.ipf

    r1126 r1128  
    594594                fprintf refnum,"\r\n" 
    595595//              wfprintf refNum,"%8g\t%8g\t%8g\t%8g\t%8g\r\n",qx_val_s,qy_val_s,qz_val_s,z_val_s,sw_s 
    596                 wfprintf refNum,"%8g\t%8g\t%8g\t%8g\t%8g\t%8g\t%8g\t%8g\r\n",qx_val,qy_val,z_val,sw,qz_val,SigmaQx,SigmaQy,fSubS 
     596                wfprintf refNum,"%8g\t%8g\t%8g\t%8g\t%8g\t%8g\t%8g\t%8g\r\n",qx_val_s,qy_val_s,z_val_s,sw_s,qz_val_s,SigmaQx_s,SigmaQy_s,fSubS_s 
    597597                Close refNum 
    598598#endif 
Note: See TracChangeset for help on using the changeset viewer.