Ignore:
Timestamp:
Feb 1, 2019 2:25:12 PM (4 years ago)
Author:
srkline
Message:

added procedures to output QxQy_ASCII data. Each panel is output into its own file. Output format is the same as for 2D SANS data, including the 2D resolution function. However, reading the data back in with the SANS analysis macros currently does not redimension the data back to the matrix correctly as it assumes a square detector.

I will need to add the X and Y dimensions of each panel into the header, and then make use of these values when they are read in. Also, writing the QxQy? data is quick for the M and F panels ( 0.8 s) but is extremely slow for the back, High-res panel (120 s) since there are 1.1.E6 points there vs. 6144 pts. I'll need to find a way to speed this operation up.

File:
1 edited

Legend:

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

    r1117 r1119  
    561561                for(ii=0;ii<ItemsInList(ksDetectorListAll);ii+=1) 
    562562                        detStr = StringFromList(ii, ksDetectorListAll, ";") 
    563                         Wave w = V_getDetectorDataW(fname,detStr) 
    564                         Wave w_err = V_getDetectorDataErrW(fname,detStr) 
    565                          
    566                         V_DIVCorrection(w,w_err,detStr,newType) 
     563                         
     564                        if(cmpstr(detStr,"B") == 0  && gIgnoreDetB == 1) 
     565                                // do nothing 
     566                        else 
     567                                Wave w = V_getDetectorDataW(fname,detStr) 
     568                                Wave w_err = V_getDetectorDataErrW(fname,detStr) 
     569                                 
     570                                V_DIVCorrection(w,w_err,detStr,newType) 
     571                        endif 
    567572                endfor 
    568573        else 
     
    632637                         
    633638                endfor 
    634                  
    635                 //"B" is separate 
    636                 detStr = "B" 
    637                 Wave w = V_getDetectorDataW(fname,detStr) 
    638                 Wave cal_x = V_getDet_cal_x(fname,detStr) 
    639                 Wave cal_y = V_getDet_cal_y(fname,detStr) 
    640                  
    641                 V_NonLinearCorrection_B(fname,w,cal_x,cal_y,detStr,destPath) 
    642  
    643 // "B" is always naturally defined in terms of a pixel center. This can be converted to mm,  
    644 // but the experiment will measure pixel x,y - just like ordela detectors. 
    645                  
    646 //              if(kBCTR_CM) 
    647 // 
    648 //                      Make/O/D/N=1 $(destPath + ":entry:instrument:detector_"+detStr+":beam_center_x_mm") 
    649 //                      Make/O/D/N=1 $(destPath + ":entry:instrument:detector_"+detStr+":beam_center_y_mm") 
    650 //                      WAVE x_mm = $(destPath + ":entry:instrument:detector_"+detStr+":beam_center_x_mm") 
    651 //                      WAVE y_mm = $(destPath + ":entry:instrument:detector_"+detStr+":beam_center_y_mm") 
    652 //                      x_mm[0] = V_getDet_beam_center_x(fname,detStr) * 10             // convert cm to mm 
    653 //                      y_mm[0] = V_getDet_beam_center_y(fname,detStr) * 10             // convert cm to mm 
    654 //                       
    655 //                      // now I need to convert the beam center in mm to pixels 
    656 //                      // and have some rational place to look for it... 
    657 //                      V_ConvertBeamCtr_to_pixB(fname,detStr,destPath) 
    658 //              else 
    659                         // beam center is in pixels, so use the old routine 
    660                         V_ConvertBeamCtrPix_to_mmB(fname,detStr,destPath) 
    661  
    662 //              endif 
    663                 V_Detector_CalcQVals(fname,detStr,destPath) 
     639 
     640                if(gIgnoreDetB==1)               
     641                        //"B" is separate 
     642                        detStr = "B" 
     643                        Wave w = V_getDetectorDataW(fname,detStr) 
     644                        Wave cal_x = V_getDet_cal_x(fname,detStr) 
     645                        Wave cal_y = V_getDet_cal_y(fname,detStr) 
     646                         
     647                        V_NonLinearCorrection_B(fname,w,cal_x,cal_y,detStr,destPath) 
     648         
     649        // "B" is always naturally defined in terms of a pixel center. This can be converted to mm,  
     650        // but the experiment will measure pixel x,y - just like ordela detectors. 
     651                         
     652        //              if(kBCTR_CM) 
     653        // 
     654        //                      Make/O/D/N=1 $(destPath + ":entry:instrument:detector_"+detStr+":beam_center_x_mm") 
     655        //                      Make/O/D/N=1 $(destPath + ":entry:instrument:detector_"+detStr+":beam_center_y_mm") 
     656        //                      WAVE x_mm = $(destPath + ":entry:instrument:detector_"+detStr+":beam_center_x_mm") 
     657        //                      WAVE y_mm = $(destPath + ":entry:instrument:detector_"+detStr+":beam_center_y_mm") 
     658        //                      x_mm[0] = V_getDet_beam_center_x(fname,detStr) * 10             // convert cm to mm 
     659        //                      y_mm[0] = V_getDet_beam_center_y(fname,detStr) * 10             // convert cm to mm 
     660        //                       
     661        //                      // now I need to convert the beam center in mm to pixels 
     662        //                      // and have some rational place to look for it... 
     663        //                      V_ConvertBeamCtr_to_pixB(fname,detStr,destPath) 
     664        //              else 
     665                                // beam center is in pixels, so use the old routine 
     666                                V_ConvertBeamCtrPix_to_mmB(fname,detStr,destPath) 
     667         
     668        //              endif 
     669                        V_Detector_CalcQVals(fname,detStr,destPath) 
     670                 
     671                endif 
    664672                 
    665673        else 
     
    686694                        ctTime = V_getCount_time(fname) 
    687695 
    688                         if(cmpstr(detStr,"B") == 0) 
    689                                 Variable b_dt = V_getDetector_deadtime_B(fname,detStr) 
    690                                 // do the correction for the back panel 
    691                                 countRate = sum(w,-inf,inf)/ctTime              //use sum of detector counts 
    692  
    693                                 w = w/(1-countRate*b_dt) 
    694                                 w_err = w_err/(1-countRate*b_dt) 
    695                                                                  
     696                        if(cmpstr(detStr,"B") == 0 ) 
     697                                if(gIgnoreDetB == 0) 
     698                                        Variable b_dt = V_getDetector_deadtime_B(fname,detStr) 
     699                                        // do the correction for the back panel 
     700                                        countRate = sum(w,-inf,inf)/ctTime              //use sum of detector counts 
     701         
     702                                        w = w/(1-countRate*b_dt) 
     703                                        w_err = w_err/(1-countRate*b_dt) 
     704                                endif                    
    696705                        else 
    697706                                // do the corrections for 8 tube panels 
     
    720729                for(ii=0;ii<ItemsInList(ksDetectorListAll);ii+=1) 
    721730                        detStr = StringFromList(ii, ksDetectorListAll, ";") 
    722                         Wave w = V_getDetectorDataW(fname,detStr) 
    723                         Wave w_err = V_getDetectorDataErrW(fname,detStr) 
    724                         // any other dimensions to pass in? 
    725                         V_SolidAngleCorrection(w,w_err,fname,detStr,destPath) 
     731                         
     732                        if(cmpstr(detStr,"B") == 0  && gIgnoreDetB == 1) 
     733                                // do nothing 
     734                        else 
     735                                Wave w = V_getDetectorDataW(fname,detStr) 
     736                                Wave w_err = V_getDetectorDataErrW(fname,detStr) 
     737                                // any other dimensions to pass in? 
     738                                V_SolidAngleCorrection(w,w_err,fname,detStr,destPath) 
     739                        endif 
    726740                         
    727741                endfor 
     
    756770                for(ii=0;ii<ItemsInList(ksDetectorListAll);ii+=1) 
    757771                        detStr = StringFromList(ii, ksDetectorListAll, ";") 
    758                         Wave w = V_getDetectorDataW(fname,detStr) 
    759                         Wave w_err = V_getDetectorDataErrW(fname,detStr) 
    760                          
    761                         V_LargeAngleTransmissionCorr(w,w_err,fname,detStr,destPath) 
    762                          
     772                         
     773                        if(cmpstr(detStr,"B") == 0  && gIgnoreDetB == 1) 
     774                                // do nothing 
     775                        else 
     776                                Wave w = V_getDetectorDataW(fname,detStr) 
     777                                Wave w_err = V_getDetectorDataErrW(fname,detStr) 
     778                                 
     779                                V_LargeAngleTransmissionCorr(w,w_err,fname,detStr,destPath) 
     780                        endif 
    763781                endfor 
    764782        else 
Note: See TracChangeset for help on using the changeset viewer.