Ignore:
Timestamp:
Jan 14, 2020 2:15:48 PM (3 years ago)
Author:
srkline
Message:

Changed the calculation of solid angle to properly reflect the tube geometry. This mode is now the (correct) default calculation. A global switch can be applied for testing to use the old method (with many warning alerts).

File:
1 edited

Legend:

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

    r1151 r1235  
    651651                endfor 
    652652 
    653                 if(gIgnoreDetB==1)               
     653                if(gIgnoreDetB==0)               
    654654                        //"B" is separate 
    655655                        detStr = "B" 
     
    738738        // the solid angle correction is calculated for ALL detector panels. 
    739739        NVAR gDoSolidAngleCor = root:Packages:NIST:VSANS:Globals:gDoSolidAngleCor 
     740        NVAR/Z gDo_OLD_SolidAngleCor = root:Packages:NIST:VSANS:Globals:gDo_OLD_SolidAngleCor 
     741        // for older experiments, this won't exist, so generate it and default to zero 
     742        // so the old calculation is not done 
     743        if(NVAR_Exists(gDo_OLD_SolidAngleCor)==0) 
     744                Variable/G root:Packages:NIST:VSANS:Globals:gDo_OLD_SolidAngleCor=0 
     745        endif 
    740746        if (gDoSolidAngleCor == 1) 
    741747                Print "Doing Solid Angle correction"// for "+ detStr 
     
    744750                         
    745751                        if(cmpstr(detStr,"B") == 0  && gIgnoreDetB == 1) 
    746                                 // do nothing 
     752                                // do nothing if the back is ignored 
    747753                        else 
    748754                                Wave w = V_getDetectorDataW(fname,detStr) 
    749755                                Wave w_err = V_getDetectorDataErrW(fname,detStr) 
    750756                                // any other dimensions to pass in? 
    751                                 V_SolidAngleCorrection(w,w_err,fname,detStr,destPath) 
     757                                 
     758                                if(gDo_OLD_SolidAngleCor == 0) 
     759                                        V_SolidAngleCorrection(w,w_err,fname,detStr,destPath) 
     760                                else 
     761                                        // for testing ONLY -- the cos^3 correction is incorrect for tubes, and the normal 
     762                                        // function call above   correctly handles either high-res grid or tubes. This COS3 function 
     763                                        // will incorrectly treat tubes as a grid        
     764                                        //                              Print "TESTING -- using incorrect COS^3 solid angle !"           
     765                                        V_SolidAngleCorrection_COS3(w,w_err,fname,detStr,destPath) 
     766                                endif 
     767                                 
    752768                        endif 
    753769                         
    754770                endfor 
     771                if(gDo_OLD_SolidAngleCor == 1) 
     772                        DoAlert 0,"TESTING -- using incorrect COS^3 solid angle !"               
     773                endif 
     774 
    755775        else 
    756776                Print "Solid Angle correction NOT DONE" 
     
    838858                        // TODO 
    839859                        // -- do I want to update and save the integrated detector count? 
    840                         Variable integratedCount = V_getDet_IntegratedCount(fname,detStr) 
    841                         V_writeDet_IntegratedCount(fname,detStr,integratedCount*scale) 
     860                        // I can't trust the integrated count for the back detector (ever) - since the  
     861                        // data is shifted for registry and some (~ 10% of the detector) is lost 
     862                        // also, ML panel has the wrong value (Oct-nov 2019) and I don't know why. so sum the data 
     863                        // 
     864                        Variable integratedCount = sum(w) 
     865                        V_writeDet_IntegratedCount(fname,detStr,integratedCount)                //already the scaled value for counts 
     866//                      Variable integratedCount = V_getDet_IntegratedCount(fname,detStr) 
     867//                      V_writeDet_IntegratedCount(fname,detStr,integratedCount*scale) 
    842868 
    843869                endfor 
     
    968994        V_putControlMonitorCount(newType,saved_mon_dest+saved_mon_tmp) 
    969995 
     996// TODO (DONE) 
     997// the new, unscaled monitor count was written to the control block, but it needs to be  
     998// written to the BeamMonNormSaved_count field instead, since this is where I read it from. 
     999// - so this worked in the past for adding two files, but fails on 3+ 
     1000// x- write to the NormSaved_count field... 
     1001        V_writeBeamMonNormSaved_count(newType,saved_mon_dest+saved_mon_tmp)                     // save the true count 
     1002 
    9701003 
    9711004// now loop over all of the detector panels 
     
    9951028                data_err_tmp *= scale_tmp 
    9961029                linear_data_tmp *= scale_tmp 
    997                                  
     1030 
     1031// TODO SRK-ERROR? 
     1032// the integrated count may not be correct (ML error Oct/Nov 2019) 
     1033// and is not correct for the back detector since some pixels were lost due to shifting the image registration 
     1034//                               
    9981035                // add them together, the dest is a wave so it is automatically changed in the "dest" folder 
    999                 V_putDet_IntegratedCount(tmpType,detStr,det_integrated_ct_dest+det_integrated_ct_tmp) 
     1036                V_putDet_IntegratedCount(tmpType,detStr,sum(data_dest)+sum(data_tmp))           // adds the unscaled data sums 
     1037//              V_putDet_IntegratedCount(tmpType,detStr,det_integrated_ct_dest+det_integrated_ct_tmp)           // wrong for "B", may be wrong for ML 
    10001038                data_dest += data_tmp 
    10011039                data_err_dest = sqrt(data_err_dest^2 + data_err_tmp^2)          // add in quadrature 
Note: See TracChangeset for help on using the changeset viewer.