Changeset 3154 for trunk/GSASIIplot.py


Ignore:
Timestamp:
Nov 18, 2017 6:14:55 PM (5 years ago)
Author:
vondreele
Message:

new & imporved spot mask routines:
manual spot mask now fits position & size for selected spot.
changed mouse controls LB drag moves spot, shift-LB changes size & RB deletes spot
autospotmask improved - new algorithm

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIplot.py

    r3153 r3154  
    46134613    if G2frame.MaskKey == 's':
    46144614        Page.figure.suptitle('Multiple spot mode on (size={}), press s or right-click to end'
    4615                              .format(G2frame.spotSize),color='r',fontweight='bold')
     4615            .format(G2frame.spotSize),color='r',fontweight='bold')
    46164616    else:
    46174617        Page.figure.suptitle('New spot size={}'.format(G2frame.spotSize),
     
    46664666    from matplotlib.patches import Ellipse,Circle
    46674667    import numpy.ma as ma
     4668    G2frame.ShiftDown = False
    46684669    G2frame.cid = None
    46694670    #Dsp = lambda tth,wave: wave/(2.*npsind(tth/2.))
     
    47294730                     G2frame.G2plotNB.status.SetStatusText( \
    47304731                        'Radius=%.3fmm, 2-th=%.3fdeg, dsp=%.3fA, Q=%.5fA-1, azm=%.2fdeg, I=%6d'%(radius,tth,dsp,Q,azm,Int),1)
     4732
     4733    def OnImPlotKeyRelease(event):
     4734        if event.key == 'shift':
     4735            G2frame.ShiftDown = False
    47314736
    47324737    def OnImPlotKeyPress(event):
     
    47844789                G2frame.MskDelete = True
    47854790                OnStartMask(G2frame)
     4791            elif event.key == 'shift':
     4792                G2frame.ShiftDown = True
    47864793               
    47874794        elif treeItem == 'Stress/Strain':
     
    49084915                itemNum = G2frame.itemPicked.itemNumber
    49094916                if event.button == 1:
    4910                     x = Masks['Points'][itemNum][0]+Xpos-XposBeforeDrag
    4911                     y = Masks['Points'][itemNum][1]+Ypos-YposBeforeDrag
    4912                     pick.center=[x,y]
    4913                 elif event.button == 3:
    4914                     r = math.sqrt((Xpos-Masks['Points'][itemNum][0])**2+
    4915                               (Ypos-Masks['Points'][itemNum][1])**2)
    4916                     pick.radius = r
     4917                    if G2frame.ShiftDown:
     4918                        r = math.sqrt((Xpos-Masks['Points'][itemNum][0])**2+
     4919                                  (Ypos-Masks['Points'][itemNum][1])**2)
     4920                        pick.radius = r
     4921                    else:
     4922                        x = Masks['Points'][itemNum][0]+Xpos-XposBeforeDrag
     4923                        y = Masks['Points'][itemNum][1]+Ypos-YposBeforeDrag
     4924                        pick.center=[x,y]
    49174925                Page.figure.gca().draw_artist(pick)
    49184926            elif pickType.startswith('Ring'):
     
    51325140                    ToggleMultiSpotMask(G2frame)
    51335141                else:
    5134                     #TODO - try a fit of spot to image?
    5135                     spot = [Xpos,Ypos,G2frame.spotSize]
     5142                    if G2frame.ShiftDown:   #force user selection
     5143                        sig = G2frame.spotSize
     5144                    else:                   #optimize spot pick
     5145                        pixLimit = 5
     5146                        Xpix,Ypix = Xpos*scalex,Ypos*scaley
     5147                        Xpix,Ypix,I,J = G2img.ImageLocalMax(G2frame.ImageZ,pixLimit,Xpix,Ypix)
     5148                        ind = [int(Xpix),int(Ypix)]
     5149                        nxy = 15
     5150                        ImMax = np.max(G2frame.ImageZ)
     5151                        result = G2img.FitImageSpots(G2frame.ImageZ,ImMax,ind,pixelSize,nxy)
     5152                        if result:
     5153                            Xpos,Ypos,sig = result
     5154                        else:
     5155                            print ('Not a spot')
     5156                            return
     5157                    spot = [Xpos,Ypos,sig]
    51365158                    Masks['Points'].append(spot)
    51375159                    artist = Circle((Xpos,Ypos),radius=spot[2]/2,fc='none',ec='r',picker=3)
     
    51425164                    Page.canvas.draw()
    51435165                return
    5144             elif G2frame.MaskKey == 's':
    5145                 if event.button == 1:
    5146                     spot = [Xpos,Ypos,G2frame.spotSize]
    5147                     Masks['Points'].append(spot)
    5148                     G2imG.UpdateMasks(G2frame,Masks)
    5149                 G2frame.MaskKey = ''
    5150                 wx.CallAfter(PlotImage,G2frame,newImage=True)
    5151                 return
    51525166            elif G2frame.MaskKey == 'r':
    51535167                if event.button == 1:
     
    52745288                G2frame.Razim.SetValue(Data['LRazimuth'][1])
    52755289            elif pickType == "Spot" and treeItem == 'Masks':
     5290                spotnum = G2frame.itemPicked.itemNumber
    52765291                if event.button == 1:
    5277                     spotnum = G2frame.itemPicked.itemNumber
    5278                     Masks['Points'][spotnum][0:2] = G2frame.itemPicked.center
     5292                    if G2frame.ShiftDown:
     5293                        Masks['Points'][spotnum] = list(G2frame.itemPicked.center) + [2.*G2frame.itemPicked.radius,]
     5294                    else:
     5295                    # update the selected circle mask with the last drawn values
     5296                        Masks['Points'][spotnum][0:2] = G2frame.itemPicked.center
    52795297                elif event.button == 3:
    5280                     # update the selected circle mask with the last drawn values
    5281                     spotnum = G2frame.itemPicked.itemNumber
    5282                     Masks['Points'][spotnum] = list(G2frame.itemPicked.center) + [
    5283                         2.*G2frame.itemPicked.radius]
     5298                    del Masks['Points'][spotnum]
    52845299                G2imG.UpdateMasks(G2frame,Masks)
    52855300            elif pickType.startswith('Ring') and treeItem == 'Masks':
     
    53125327    else:
    53135328        Page.canvas.mpl_connect('key_press_event', OnImPlotKeyPress)
     5329        Page.canvas.mpl_connect('key_release_event', OnImPlotKeyRelease)
    53145330        Page.canvas.mpl_connect('motion_notify_event', OnImMotion)
    53155331        Page.canvas.mpl_connect('pick_event', OnImPick)
Note: See TracChangeset for help on using the changeset viewer.