Changeset 87


Ignore:
Timestamp:
Jun 15, 2010 1:21:20 PM (12 years ago)
Author:
vondreel
Message:

"Spots" in Masks is really "Points"
Start of "points" for masks

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r85 r87  
    415415                        Data['range'] = [(Imin,Imax),[Imin,Imax]]
    416416                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Image Controls'),Data)
    417                         Masks = {'Spots':[],'Rings':[],'Arcs':[],'Polygons':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
     417                        Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
    418418                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Masks'),Masks)
    419419                        self.PatternTree.SetItemPyData(Id,[Size,imagefile])
     
    774774                            self.PatternTree.SelectItem(Id)
    775775                            self.PatternTree.Expand(Id)
    776                         Masks = {'Spots':[],'Rings':[],'Arcs':[],'Polygons':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
     776                        Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
    777777                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Masks'),Masks)
    778778                        self.PickId = G2gd.GetPatternTreeItemId(self,self.root,outname)
  • trunk/GSASIIimage.py

    r85 r87  
    434434    return True
    435435   
    436 def Make2ThetaAzimuthMap(data,imageN):
     436def Make2ThetaAzimuthMap(data,masks,imageN):
    437437    #transforms 2D image from x,y space to 2-theta,azimuth space based on detector orientation
    438438    pixelSize = data['pixelSize']
     
    442442    tax = np.asfarray(tax*scalex,dtype=np.float32)
    443443    tay = np.asfarray(tay*scaley,dtype=np.float32)
    444     return GetTthAzm(tay,tax,data)           #2-theta & azimuth arrays
     444    #make position masks here
     445    XY = np.dstack((tax,tay))
     446    return GetTthAzm(tay,tax,data),0           #2-theta & azimuth arrays & position mask
    445447
    446 def Fill2ThetaAzimuthMap(masks,TA,image):
     448def Fill2ThetaAzimuthMap(masks,TA,tam,image):
    447449    import numpy.ma as ma
    448450    Zlim = masks['Thresholds'][1]
     
    481483        dlg.Update(0)
    482484        imageN = len(self.ImageZ)
    483         TA = Make2ThetaAzimuthMap(data,imageN)           #2-theta & azimuth arrays
     485        TA,tam = Make2ThetaAzimuthMap(data,masks,imageN)           #2-theta & azimuth arrays & create position mask
    484486        dlg.Update(1)
    485487        print 'Fill map with 2-theta/azimuth values'
    486         tax,tay,taz = Fill2ThetaAzimuthMap(masks,TA,self.ImageZ)
     488        tax,tay,taz = Fill2ThetaAzimuthMap(masks,TA,tam,self.ImageZ)    #and apply masks
    487489        del TA
    488490        dlg.Update(2)
     
    496498        dlg.Update(4)
    497499        t1 = time.time()
     500        print "Elapsed time:","%8.3f"%(t1-t0), "s"
    498501        print 'Integration complete'
    499         print "Elapsed time:","%8.3f"%(t1-t0), "s"
    500502    finally:
    501503        dlg.Destroy()
  • trunk/GSASIIplot.py

    r85 r87  
    1111import GSASIIIO as G2IO
    1212import GSASIIpwdGUI as G2pdG
     13import GSASIIimgGUI as G2imG
    1314from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as Canvas
    1415from matplotlib.backends.backend_wxagg import NavigationToolbar2Wx as Toolbar
     
    4950        self.status = parent.CreateStatusBar()
    5051        self.status.SetFieldsCount(2)
    51         self.status.SetStatusWidths([-1,120])
     52        self.status.SetStatusWidths([125,-1])
    5253        self.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
    5354       
     
    99100        print i
    100101        HKLtxt = '(%3d,%3d,%3d %10.2f %6.3f %10.2f)'%(h,k,l,Fosq,sig,Fcsq)
    101         self.G2plotNB.status.SetFields(['HKL, Fosq, sig, Fcsq = '+HKLtxt,''])
     102        self.G2plotNB.status.SetFields(['','HKL, Fosq, sig, Fcsq = '+HKLtxt])
    102103                         
    103104       
     
    272273                if abs(xpos) > 0.:                  #avoid possible singularity at beam center
    273274                    dsp = wave/(2.*sind(abs(xpos)/2.0))
    274                 self.G2plotNB.status.SetStatusText('2-theta =%9.3f d =%9.5f Intensity =%9.1f'%(xpos,dsp,ypos),0)
     275                self.G2plotNB.status.SetStatusText('2-theta =%9.3f d =%9.5f Intensity =%9.1f'%(xpos,dsp,ypos),1)
    275276                if self.itemPicked:
    276277                    Page.canvas.SetToolTipString('%9.3f'%(xpos))
    277278            except TypeError:
    278                 self.G2plotNB.status.SetStatusText('Select PWDR powder pattern first',0)
     279                self.G2plotNB.status.SetStatusText('Select PWDR powder pattern first',1)
    279280                                   
    280281    def OnRelease(event):
     
    325326        choices=(' key press','d: offset down','u: offset up','c: toggle contour','s: toggle single plot'))
    326327    cb.Bind(wx.EVT_COMBOBOX, OnKeyBox)
    327     rect = self.G2plotNB.status.GetFieldRect(1)
    328     cb.SetPosition((rect.x,rect.y))
    329328    cb.SetValue(' key press')
    330329   
     
    433432        if xpos:                                        #avoid out of frame mouse position
    434433            Page.canvas.SetCursor(wx.CROSS_CURSOR)
    435             self.G2plotNB.status.SetFields(['2-theta =%9.3f '%(xpos,),''])
     434            self.G2plotNB.status.SetFields(['','2-theta =%9.3f '%(xpos,)])
    436435
    437436    try:
     
    562561
    563562def PlotImage(self,newPlot=False):
    564     from matplotlib.patches import Ellipse,Arc
     563    from matplotlib.patches import Ellipse,Arc,Circle
    565564    import numpy.ma as ma
    566565
     
    569568        size = len(self.ImageZ)
    570569        if event.xdata and event.ydata:                 #avoid out of frame errors
    571             Data = self.PatternTree.GetItemPyData( \
    572                 G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls'))
    573570            Page.canvas.SetCursor(wx.CROSS_CURSOR)
    574571            item = self.itemPicked
     
    597594                if (0 <= xpix <= size) and (0 <= ypix <= size):
    598595                    Int = self.ImageZ[ypix][xpix]
    599 #                    Page.canvas.SetToolTipString('%4x'%((ypix*2048+xpix)*2+4096))
    600596                tth,azm,dsp = G2img.GetTthAzmDsp(xpos,ypos,Data)
    601597                Q = 2.*math.pi/dsp
    602598                self.G2plotNB.status.SetFields(\
    603                     ['Detector 2-th =%9.2fdeg, dsp =%9.3fA, Q = %6.3fA-1, azm = %7.2fdeg, I = %6d'%(tth,dsp,Q,azm,Int),''])
     599                    ['','Detector 2-th =%9.2fdeg, dsp =%9.3fA, Q = %6.3fA-1, azm = %7.2fdeg, I = %6d'%(tth,dsp,Q,azm,Int)])
    604600
    605601    def OnImPlotKeyPress(event):
    606         if self.PatternTree.GetItemText(self.PickId) == 'Image Controls':
    607             Data = self.PatternTree.GetItemPyData(self.PickId)
    608             pixelSize = Data['pixelSize']
    609             size = len(self.ImageZ)
     602        if self.PatternTree.GetItemText(self.PickId) == 'Masks':
     603            Mask = self.PatternTree.GetItemPyData(self.PickId)
    610604            Xpos = event.xdata
    611605            if not Xpos:            #got point out of frame
    612606                return
    613607            Ypos = event.ydata
    614             if event.key == 'm':
    615                 print 'mask = ',Xpos,Ypos
     608            if event.key == 's':
     609                print 'spot mask @ ',Xpos,Ypos
     610                Mask['Points'].append([Xpos,Ypos,1])
     611            elif event.key == 'r':
     612                print 'ring mask @ ',Xpos,Ypos
     613            elif event.key == 'a':
     614                print 'arc mask @ ', Xpos,Ypos
     615            G2imG.UpdateMasks(self,Mask)
     616        PlotImage(self)
    616617           
    617618    def OnImPick(event):
    618         if self.PatternTree.GetItemText(self.PickId) != 'Image Controls':
     619        if self.PatternTree.GetItemText(self.PickId) not in ['Image Controls','Masks']:
    619620            return
    620621        if self.itemPicked is not None: return
     
    623624       
    624625    def OnImRelease(event):
    625         if self.PatternTree.GetItemText(self.PickId) != 'Image Controls':
     626        PickName = self.PatternTree.GetItemText(self.PickId)
     627        if PickName not in ['Image Controls','Masks']:
    626628            return
    627         Data = self.PatternTree.GetItemPyData(self.PickId)
    628629        pixelSize = Data['pixelSize']
    629630        scalex = 1000./pixelSize[0]
    630631        scaley = 1000./pixelSize[1]
    631         if self.itemPicked is None:
     632        if self.itemPicked is None and PickName == 'Image Controls':
    632633            size = len(self.ImageZ)
    633634            Xpos = event.xdata
     
    660661                else:
    661662                    tth,azm,dsp = G2img.GetTthAzmDsp(xpos,ypos,Data)
    662                     if 'Line2D' in str(self.itemPicked):
     663                    itemPicked = str(self.itemPicked)
     664                    if 'Line2D' in itemPicked and PickName == 'Image Controls':
    663665                        if 'line1' in str(self.itemPicked):
    664666                            Data['IOtth'][0] = tth
     
    679681                        self.Lazim.SetValue("%6d" % (Data['LRazimuth'][0]))
    680682                        self.Razim.SetValue("%6d" % (Data['LRazimuth'][1]))
     683                    elif 'Circle' in itemPicked and PickName == 'Masks':
     684                        spots = Masks['Points']
     685                        newPos = itemPicked.split(')')[0].split('(')[2].split(',')
     686                        newPos = np.array([float(newPos[0]),float(newPos[1])])
     687                        for spot in spots:
     688                            if np.allclose(np.array([spot[:2]]),newPos):
     689                                spot[:2] = xpos,ypos
     690                        G2imG.UpdateMasks(self,Masks)
    681691                    else:
    682                         print event.xdata,event.ydata,event.button
     692                        print str(self.itemPicked),event.xdata,event.ydata,event.button
    683693                PlotImage(self)
    684694            self.itemPicked = None
     
    711721    Masks = self.PatternTree.GetItemPyData(
    712722        G2gd.GetPatternTreeItemId(self,self.Image, 'Masks'))
     723
    713724    imScale = 1
    714725    if len(self.ImageZ) > 1024:
     
    728739    #need "applyMask" routine here
    729740    Zlim = Masks['Thresholds'][1]
     741    spots = Masks['Points']
    730742    MA = ma.masked_greater(ma.masked_less(self.ImageZ,Zlim[0]),Zlim[1])
    731743    MaskA = ma.getmaskarray(MA)
     
    737749    Img = Plot.imshow(A,aspect='equal',cmap=acolor,
    738750        interpolation='nearest',vmin=Imin,vmax=Imax,extent=[0,Xmax,Xmax,0])
     751    for x,y,d in spots:
     752        Plot.add_artist(Circle((x,y),radius=d/2,fc='r',ec='r',picker=3))
    739753
    740754    Plot.plot(xcent,ycent,'x')
     
    800814        if azm and tth:
    801815            self.G2plotNB.status.SetFields(\
    802                 ['Detector 2-th =%9.3fdeg, azm = %7.2fdeg'%(tth,azm),''])
     816                ['','Detector 2-th =%9.3fdeg, azm = %7.2fdeg'%(tth,azm)])
    803817                               
    804818    try:
     
    865879        if azm and tth:
    866880            self.G2plotNB.status.SetFields(\
    867                 ['Detector 2-th =%9.3fdeg, azm = %7.2fdeg'%(tth,azm),''])
     881                ['','Detector 2-th =%9.3fdeg, azm = %7.2fdeg'%(tth,azm)])
    868882                               
    869883    try:
Note: See TracChangeset for help on using the changeset viewer.