Ignore:
Timestamp:
Apr 25, 2017 2:55:34 PM (6 years ago)
Author:
srkline
Message:

re-wrote raw data reader for significant speed boost (mostly by skipping the read of DAS_logs)

added centroid calculation to the Marquee

File:
1 edited

Legend:

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

    r1032 r1034  
    219219        Return (counts) 
    220220End 
     221 
     222 
     223Function V_FindCentroid() :  GraphMarquee 
     224 
     225//      //get the current displayed data (so the correct folder is used) 
     226//      SVAR cur_folder=root:myGlobals:gDataDisplayType 
     227//      String dest = "root:Packages:NIST:" + cur_folder 
     228         
     229        Variable xzsum,yzsum,zsum,xctr,yctr 
     230        Variable left,right,bottom,top,ii,jj,counts 
     231         
     232 
     233         
     234        GetMarquee left,bottom 
     235        if(V_flag == 0) 
     236                Print "There is no Marquee" 
     237        else 
     238                left = round(V_left)            //get integer values for selection limits 
     239                right = round(V_right) 
     240                top = round(V_top) 
     241                bottom = round(V_bottom) 
     242 
     243                // NOTE: 
     244                // this function MODIFIES x and y values on return, converting them to panel coordinates 
     245                // detector panel is identified from the (left,top) coordinate (x1,y2) 
     246                String detStr = V_FindDetStrFromLoc(left,right,bottom,top)               
     247        //      Printf "Detector = %s\r",detStr 
     248         
     249        //  
     250                SVAR gCurDispType = root:Packages:NIST:VSANS:Globals:gCurDispType        
     251                // this function will modify the x and y values (passed by reference) as needed to keep on the panel 
     252                V_KeepSelectionInBounds(left,right,bottom,top,detStr,gCurDispType) 
     253                Print left,right,bottom,top 
     254                         
     255                 
     256                // selection valid now, calculate beamcenter 
     257                // get the waves of the data and the data_err 
     258                Wave data = V_getDetectorDataW(gCurDispType,detStr) 
     259                Wave data_err = V_getDetectorDataErrW(gCurDispType,detStr) 
     260         
     261                xzsum = 0 
     262                yzsum = 0 
     263                zsum = 0 
     264                // count over rectangular selection, doing each row, L-R, bottom to top 
     265                ii = bottom -1 
     266                do 
     267                        ii +=1 
     268                        jj = left-1 
     269                        do 
     270                                jj += 1 
     271                                counts = data[jj][ii] 
     272                                xzsum += jj*counts 
     273                                yzsum += ii*counts 
     274                                zsum += counts 
     275                        while(jj<right) 
     276                while(ii<top) 
     277                 
     278                xctr = xzsum/zsum 
     279                yctr = yzsum/zsum 
     280                 
     281                // add 1 to each to get to detector coordinates (1,128) 
     282                // rather than the data array which is [0,127] 
     283//              xctr+=1 
     284//              yctr+=1 
     285                 
     286                Print "X-center (in array coordinates 0->n-1 ) = ",xctr 
     287                Print "Y-center (in array coordinates 0->n-1 ) = ",yctr 
     288        endif 
     289         
     290        //back to root folder (redundant) 
     291        SetDataFolder root: 
     292         
     293End 
Note: See TracChangeset for help on using the changeset viewer.