Ignore:
Timestamp:
Sep 18, 2019 2:31:55 PM (3 years ago)
Author:
krzywon
Message:

Combine elliptical averaging with circular averaging and wrote the binning routine. Need to verify calculations and fix issues with elliptical drawing routine.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sans/Dev/branches/elliptical_averaging/NCNR_User_Procedures/Reduction/SANS/CircSectAve.ipf

    r902 r1212  
    3232         
    3333        SVAR keyListStr = root:myGlobals:Protocols:gAvgInfoStr          //this is the list that has it all 
    34         Variable isCircular = 0 
     34        Variable isCircular = 0, isElliptical = 0 
    3535         
    3636        if( cmpstr("Circular",StringByKey("AVTYPE",keyListStr,"=",";")) ==0) 
    3737                isCircular = 1          //set a switch for later 
     38        Endif 
     39        if( cmpstr("Elliptical",StringByKey("AVTYPE",keyListStr,"=",";")) ==0) 
     40                isElliptical = 1                //set a switch for later 
    3841        Endif 
    3942         
     
    4447        // 
    4548        Variable xcenter,ycenter,x0,y0,sx,sx3,sy,sy3,dtsize,dtdist,dr,ddr 
    46         Variable lambda,trans 
     49        Variable lambda,trans,raxes 
    4750        WAVE reals = $(destPath + ":RealsRead") 
    4851        WAVE/T textread = $(destPath + ":TextRead") 
     
    8891                phi_y = sin(phi_rad) 
    8992        Endif 
     93        if(isElliptical) 
     94                raxes = NumberByKey("RATIOAXES",keyListStr,"=",";") 
     95        EndIf 
    9096         
    9197        /// data wave is data in the current folder which was set at the top of the function 
     
    145151        //BEGIN AVERAGE ********** 
    146152        Variable xi,dxi,dx,jj,data_pixel,yj,dyj,dy,mask_val=0.1 
    147         Variable dr2,nd,fd,nd2,ll,kk,dxx,dyy,ir,dphi_p 
     153        Variable dr2,nd,fd,nd2,ll,kk,dxx,dyy,ir,dphi_p,rho 
    148154         
    149155        // IGOR arrays are indexed from [0][0], FORTAN from (1,1) (and the detector too) 
     
    178184                                        do 
    179185                                                dyy = dy + (kk - fd)*sy/3 
    180                                                 if(isCircular) 
    181                                                         //circular average, use all pixels 
    182                                                         //(increment)  
    183                                                         nq = IncrementPixel(data_pixel,ddr,dxx,dyy,aveint,dsq,ncells,nq,nd2) 
     186                                                if(isCircular || isElliptical) 
     187                                                        //use all pixels 
     188                                                        if (isElliptical) 
     189                                                                rho = atan(dyy/dxx) - phi_rad 
     190                                                                nq = IncrementEllipticalPixel(data_pixel,ddr,dxx,dyy,rho,raxes, aveint,dsq,ncells,nq,nd2) 
     191                                                        else 
     192                                                                //circular average 
     193                                                                nq = IncrementPixel(data_pixel,ddr,dxx,dyy,aveint,dsq,ncells,nq,nd2) 
     194                                                        EndIf 
    184195                                                else 
    185196                                                        //a sector average - determine azimuthal angle 
     
    396407End 
    397408 
     409//returns nq, new number of q-values 
     410//arrays aveint,dsq,ncells are also changed by this function 
     411// 
     412Function IncrementEllipticalPixel(dataPixel,ddr,dxx,dyy,rho,raxes,aveint,dsq,ncells,nq,nd2) 
     413        Variable dataPixel,ddr,dxx,dyy,rho,raxes 
     414        Wave aveint,dsq,ncells 
     415        Variable nq,nd2 
     416         
     417        Variable irCircular,ir 
     418         
     419        irCircular = (sqrt(dxx*dxx+dyy*dyy)/ddr) 
     420        ir = irCircular*sqrt(cos(rho)*cos(rho) + raxes*raxes*sin(rho)*sin(rho))+1 
     421        if (ir>nq) 
     422                nq = ir         //resets maximum number of q-values 
     423        endif 
     424        aveint[ir-1] += dataPixel/nd2           //ir-1 must be used, since ir is physical 
     425        dsq[ir-1] += dataPixel*dataPixel/nd2 
     426        ncells[ir-1] += 1/nd2 
     427         
     428        Return nq 
     429End 
     430 
    398431//function determines azimuthal angle dphi that a vector connecting 
    399432//center of detector to pixel makes with respect to vector 
Note: See TracChangeset for help on using the changeset viewer.