Changeset 248


Ignore:
Timestamp:
Feb 17, 2011 1:33:02 PM (11 years ago)
Author:
vondreele
Message:

histogram2d.for - cleaned up
add azmthOff - as for a rotation of a 2D detector
fix image integration problems

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r240 r248  
    456456                            Data['IOtth'] = [2.0,5.0]
    457457                            Data['LRazimuth'] = [-135,-45]
     458                            Data['azmthOff'] = 0.0
    458459                            Data['outChannels'] = 2500
    459460                            Data['outAzimuths'] = 1
  • trunk/GSASIIimage.py

    r245 r248  
    281281    tilt = data['tilt']
    282282    phi = data['rotation']
     283    azmthoff = data['azmthOff']
    283284    dx = np.array(x-cent[0],dtype=np.float32)
    284285    dy = np.array(y-cent[1],dtype=np.float32)
     
    288289    tth = npatand(np.sqrt(dx**2+dy**2-Z**2)/(dist-Z))
    289290    dsp = wave/(2.*npsind(tth/2.))
    290     azm = npatan2d(dy,dx)
     291    azm = npatan2d(dy,dx)+azmthoff
    291292    return tth,azm,dsp
    292293   
     
    509510    for X,Y,diam in spots:
    510511        tam = ma.mask_or(tam,ma.getmask(ma.masked_less((tax-X)**2+(tay-Y)**2,(diam/2.)**2)))
    511     return GetTthAzm(tax,tay,data),tam           #2-theta & azimuth arrays & position mask
     512    return np.array(GetTthAzm(tax,tay,data)),tam           #2-theta & azimuth arrays & position mask
    512513
    513514def Fill2ThetaAzimuthMap(masks,TA,tam,image):
     
    516517    rings = masks['Rings']
    517518    arcs = masks['Arcs']
    518     nJ = len(image)
    519     nI = len(image[0])
    520     TA = np.reshape(TA,(2,nI,nJ))
    521519    TA = np.dstack((ma.getdata(TA[1]),ma.getdata(TA[0])))    #azimuth, 2-theta
    522520    tax,tay = np.dsplit(TA,2)    #azimuth, 2-theta
     
    526524        tam = ma.mask_or(tam.flatten(),ma.getmask(ma.masked_inside(tay.flatten(),max(0.01,tth-thick/2.),tth+thick/2.))* \
    527525            ma.getmask(ma.masked_inside(tax.flatten(),azm[0],azm[1])))
    528     taz = ma.masked_greater(ma.masked_less(image,Zlim[0]),Zlim[1]).flatten()
     526    taz = ma.masked_outside(image.flatten(),int(Zlim[0]),Zlim[1])
    529527    tam = ma.mask_or(tam.flatten(),ma.getmask(taz))
    530528    tax = ma.compressed(ma.array(tax.flatten(),mask=tam))
     
    546544    Dtth = (LUtth[1]-LUtth[0])/numChans
    547545    Dazm = (LRazm[1]-LRazm[0])/numAzms
    548     NST = np.zeros(shape=(numAzms,numChans),dtype=np.int,order='F')
     546    NST = np.zeros(shape=(numAzms,numChans),order='F',dtype=np.float32)
    549547    H0 = np.zeros(shape=(numAzms,numChans),order='F',dtype=np.float32)
    550548    imageN = len(image)
     
    552550    nXBlks = (Nx-1)/1024+1
    553551    nYBlks = (Ny-1)/1024+1
    554     print Nx,Ny,nXBlks,nYBlks
    555     dlg = wx.ProgressDialog("Elapsed time","2D image integration",nXBlks*nYBlks*3+3,
     552    Nup = nXBlks*nYBlks*3+3
     553    dlg = wx.ProgressDialog("Elapsed time","2D image integration",Nup,
    556554        style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE)
    557555    try:
     
    565563                jBeg = jBlk*1024
    566564                jFin = min(jBeg+1024,Nx)               
    567                 print 'Process map block',iBlk,jBlk,iBeg,iFin,jBeg,jFin
     565                print 'Process map block:',iBlk,jBlk,' limits:',iBeg,iFin,jBeg,jFin
    568566                TA,tam = Make2ThetaAzimuthMap(data,masks,(iBeg,iFin),(jBeg,jFin))           #2-theta & azimuth arrays & create position mask
    569567                Nup += 1
     
    578576                Nup += 1
    579577                dlg.Update(Nup)
    580         H0 = np.nan_to_num(np.divide(H0,NST))
     578        NST = np.array(NST)
     579        H0 = np.divide(H0,NST)
     580        H0 = np.nan_to_num(H0)
    581581        del NST
    582582        if Dtth:
  • trunk/GSASIIimgGUI.py

    r246 r248  
    6262            pass
    6363        calibDmin.SetValue("%.1f"%(data['calibdmin']))          #reset in case of error 
    64        
     64               
     65    def OnAzmthOff(event):
     66        try:
     67            azmthoff = float(azmthOff.GetValue())
     68            data['azmthOff'] = azmthoff
     69        except ValueError:
     70            pass
     71        azmthOff.SetValue("%.2f"%(data['azmthOff']))          #reset in case of error 
    6572       
    6673    def OnCutOff(event):
     
    422429    calSel.Bind(wx.EVT_COMBOBOX, OnNewCalibrant)
    423430    comboSizer.Add(calSel,0,wx.ALIGN_CENTER_VERTICAL)
     431   
     432    #fix for old files:
     433    if 'azmthOff' not in data:
     434        data['azmthOff'] = 0.0       
     435    #end fix
     436   
     437    comboSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' Azimuth offset '),0,
     438        wx.ALIGN_CENTER_VERTICAL)
     439    azmthOff = wx.TextCtrl(parent=self.dataDisplay,value=("%.2f" % (data['azmthOff'])),
     440        style=wx.TE_PROCESS_ENTER)
     441    azmthOff.Bind(wx.EVT_TEXT_ENTER,OnAzmthOff)
     442    azmthOff.Bind(wx.EVT_KILL_FOCUS,OnAzmthOff)
     443    comboSizer.Add(azmthOff,0,wx.ALIGN_CENTER_VERTICAL)
     444   
    424445    mainSizer.Add(comboSizer,0,wx.ALIGN_CENTER_HORIZONTAL)
    425446    mainSizer.Add((10,10),0)
  • trunk/GSASIIplot.py

    r245 r248  
    854854                    xpos = event.xdata-xcent
    855855                    ypos = event.ydata-ycent
     856                    tth,azm = G2img.GetTthAzm(event.xdata,event.ydata,Data)
    856857                    if 'line3' in  str(item) or 'line4' in str(item) and not Data['fullIntegrate']:
    857                         ang = int(atan2d(xpos,ypos))
    858                         Page.canvas.SetToolTipString('%6d deg'%(ang))
     858                        Page.canvas.SetToolTipString('%6d deg'%(azm))
    859859                    elif 'line1' in  str(item) or 'line2' in str(item):
    860                         tth = G2img.GetTth(event.xdata,event.ydata,Data)
    861860                        Page.canvas.SetToolTipString('%8.3fdeg'%(tth))                           
    862861            else:
     
    11021101        if Data['showLines']:
    11031102            LRAzim = Data['LRazimuth']                  #NB: integers
     1103            AzmthOff = Data['azmthOff']
    11041104            IOtth = Data['IOtth']
    11051105            wave = Data['wavelength']
     
    11111111                Azm = np.array(range(0,361))
    11121112            else:
    1113                 Azm = np.array(range(LRAzim[0],LRAzim[1]+1))
     1113                Azm = np.array(range(LRAzim[0],LRAzim[1]+1))-AzmthOff
    11141114            if ellI:
    11151115                xyI = []
  • trunk/fsource/cf2py32.bat

    r212 r248  
    66        move  /Y lib%2.a ..
    77        cd ..
    8         f2py -c -m %1 %1.for --compiler=mingw32 -L./ -l%2
     8        f2py -c -m %1 %1.for --compiler=mingw32 --fcompiler=gnu95 -L./ -l%2
    99        goto TWO
    1010:ONE
    11 f2py -c -m %1 %1.for --compiler=mingw32
     11f2py -c -m %1 %1.for --compiler=mingw32 --fcompiler=gnu95
    1212:TWO
    13 move %1.pyd ..\binwin-2.6
     13move %1.pyd ..\binwin2.6
    1414
  • trunk/fsource/histogram2d.for

    r247 r248  
    1       SUBROUTINE HISTOGRAM2D(N,X,Y,Z,NXBINS,NYBINS,XLIM,YLIM,
    2      1  NST,HST,HSTX,HSTY)
     1      SUBROUTINE HISTOGRAM2D(N,X,Y,Z,NXBINS,NYBINS,XLIM,YLIM,DX,DY,
     2     1  NST,HST)
    33
    44Cf2py intent(in) n
     
    1212Cf2py intent(in) nybins
    1313Cf2py intent(in) xlim       
    14 Cf2py intent(in) ylim       
    15 Cf2py intent(inout) nst
     14Cf2py intent(in) ylim
     15Cf2py intent(in) dx
     16Cf2py intent(in) dy
     17Cf2py intent(in,out) nst
    1618Cf2py depend(nxbins,nybins) nst
    17 Cf2py intent(inout) hst
     19Cf2py intent(in,out) hst
    1820Cf2py depend(nxbins,nybins) hst
    19 Cf2py intent(inout) hstx
    20 Cf2py depend(nxbins) hstx
    21 Cf2py intent(inout) hsty
    22 Cf2py depend(nybins) hsty
    2321
    2422      IMPLICIT NONE
    2523      INTEGER*4   N
    2624      REAL*4      X(0:N-1),Y(0:N-1),Z(0:N-1)
    27       INTEGER*4   NXBINS,NYBINS
     25      INTEGER*8   NXBINS,NYBINS
    2826      REAL*8      XLIM(0:1),YLIM(0:1)
    29       INTEGER*8   NST(0:NXBINS-1,0:NYBINS-1)
    30       REAL*8      HST(0:NXBINS-1,0:NYBINS-1)
    31       REAL*8      HSTX(0:NXBINS),HSTY(0:NYBINS)
     27      REAL*4      NST(0:NXBINS-1,0:NYBINS-1)
     28      REAL*4      HST(0:NXBINS-1,0:NYBINS-1)
    3229
    3330      INTEGER*4   I,J,K
    3431      REAL*8      DX,DY
    3532
    36       DX = (XLIM(1)-XLIM(0))/FLOAT(NXBINS)
    37       DY = (YLIM(1)-YLIM(0))/FLOAT(NYBINS)
    3833
    39       DO I=0,NXBINS
    40         HSTX(I) = XLIM(0)+FLOAT(I)*DX
    41       END DO
    42       DO J=0,NYBINS
    43         HSTY(J) = YLIM(0)+FLOAT(J)*DY
    44       END DO
    45      
    4634      DO K=0,N
    4735        IF ( ( X(K) .GE. XLIM(0) .AND. X(K) .LE. XLIM(1)) .AND.
     
    4937          I = INT((X(K)-XLIM(0))/DX)
    5038          J = INT((Y(K)-YLIM(0))/DY)
    51           NST(I,J) = NST(I,J)+1
    52           HST(I,J) = HST(I,J)+Z(K)
     39          IF ( (I .GE. 0 .AND. I .LT. NXBINS) .AND.
     40     1       (J .GE. 0 .AND. J .LT. NYBINS) ) THEN
     41            NST(I,J) = NST(I,J)+1.0
     42            HST(I,J) = HST(I,J)+Z(K)
     43          END IF
    5344        END IF
    5445      END DO
Note: See TracChangeset for help on using the changeset viewer.