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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.