Changeset 426


Ignore:
Timestamp:
Nov 21, 2011 2:11:03 PM (10 years ago)
Author:
vondreele
Message:

allow repositioning of reflection markers (up or down)

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r425 r426  
    271271        self.TreeItemDelete = False
    272272        self.Offset = [0.0,0.0]
     273        self.delOffset = .02
     274        self.refOffset = -100.0
     275        self.refDelt = .01
    273276        self.Weight = False
    274277        self.IparmName = ''
  • trunk/GSASIIplot.py

    r423 r426  
    292292    global HKL
    293293   
    294     def OnPick(event):
    295         if self.itemPicked is not None: return
    296         PatternId = self.PatternId
    297         try:
    298             Values,Names = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters'))[1::2]
    299         except TypeError:
    300             return
    301         Parms = dict(zip(Names,Values))
    302         try:
    303             wave = Parms['Lam']
    304         except KeyError:
    305             wave = Parms['Lam1']
    306         PickId = self.PickId
    307         pick = event.artist
    308         mouse = event.mouseevent       
    309         xpos = pick.get_xdata()
    310         ypos = pick.get_ydata()
    311         ind = event.ind
    312         xy = list(zip(np.take(xpos,ind),np.take(ypos,ind))[0])
    313         if self.PatternTree.GetItemText(PickId) == 'Peak List':
    314             if ind.all() != [0]:                                    #picked a data point
    315                 if 'C' in Parms['Type']:                            #CW data - TOF later in an elif
    316                     ins = [Parms[x] for x in ['U','V','W','X','Y']]
    317                     if self.qPlot:                              #qplot - convert back to 2-theta
    318                         xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi))
    319                     sig = ins[0]*tand(xy[0]/2.0)**2+ins[1]*tand(xy[0]/2.0)+ins[2]
    320                     gam = ins[3]/cosd(xy[0]/2.0)+ins[4]*tand(xy[0]/2.0)           
    321                     data = self.PatternTree.GetItemPyData(self.PickId)
    322                     XY = [xy[0],0, xy[1],1, sig,0, gam,0]       #default refine intensity 1st
    323                 data.append(XY)
    324                 G2pdG.UpdatePeakGrid(self,data)
    325                 PlotPatterns(self)
    326             else:                                                   #picked a peak list line
    327                 self.itemPicked = pick
    328         elif self.PatternTree.GetItemText(PickId) == 'Limits':
    329             if ind.all() != [0]:                                    #picked a data point
    330                 LimitId = G2gd.GetPatternTreeItemId(self,PatternId, 'Limits')
    331                 data = self.PatternTree.GetItemPyData(LimitId)
    332                 if 'C' in Parms['Type']:                            #CW data - TOF later in an elif
    333                     if self.qPlot:                              #qplot - convert back to 2-theta
    334                         xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi))
    335                 if mouse.button==1:
    336                     data[1][0] = min(xy[0],data[1][1])
    337                 if mouse.button==3:
    338                     data[1][1] = max(xy[0],data[1][0])
    339                 self.PatternTree.SetItemPyData(LimitId,data)
    340                 G2pdG.UpdateLimitsGrid(self,data)
    341                 PlotPatterns(self)
    342             else:                                                   #picked a limit line
    343                 self.itemPicked = pick
    344         elif self.PatternTree.GetItemText(PickId) == 'Reflection Lists':
    345             if ind.all() == [0]:                                    #picked a limit line
    346                 self.itemPicked = pick
    347        
     294    def OnKeyBox(event):
     295        if self.G2plotNB.nb.GetSelection() == self.G2plotNB.plotList.index('Powder Patterns'):
     296            event.key = cb.GetValue()[0]
     297            cb.SetValue(' key press')
     298            OnPlotKeyPress(event)
     299                       
    348300    def OnPlotKeyPress(event):
    349301        newPlot = False
     
    430382        PlotPatterns(self,newPlot=newPlot)
    431383       
    432     def OnKeyBox(event):
    433         if self.G2plotNB.nb.GetSelection() == self.G2plotNB.plotList.index('Powder Patterns'):
    434             event.key = cb.GetValue()[0]
    435             cb.SetValue(' key press')
    436             OnPlotKeyPress(event)
    437                        
    438384    def OnMotion(event):
    439385        xpos = event.xdata
     
    475421                self.G2plotNB.status.SetStatusText('Select PWDR powder pattern first',1)
    476422                                                   
     423    def OnPick(event):
     424        if self.itemPicked is not None: return
     425        PatternId = self.PatternId
     426        try:
     427            Values,Names = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters'))[1::2]
     428        except TypeError:
     429            return
     430        Parms = dict(zip(Names,Values))
     431        try:
     432            wave = Parms['Lam']
     433        except KeyError:
     434            wave = Parms['Lam1']
     435        PickId = self.PickId
     436        pick = event.artist
     437        mouse = event.mouseevent       
     438        xpos = pick.get_xdata()
     439        ypos = pick.get_ydata()
     440        ind = event.ind
     441        xy = list(zip(np.take(xpos,ind),np.take(ypos,ind))[0])
     442        if self.PatternTree.GetItemText(PickId) == 'Peak List':
     443            if ind.all() != [0]:                                    #picked a data point
     444                if 'C' in Parms['Type']:                            #CW data - TOF later in an elif
     445                    ins = [Parms[x] for x in ['U','V','W','X','Y']]
     446                    if self.qPlot:                              #qplot - convert back to 2-theta
     447                        xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi))
     448                    sig = ins[0]*tand(xy[0]/2.0)**2+ins[1]*tand(xy[0]/2.0)+ins[2]
     449                    gam = ins[3]/cosd(xy[0]/2.0)+ins[4]*tand(xy[0]/2.0)           
     450                    data = self.PatternTree.GetItemPyData(self.PickId)
     451                    XY = [xy[0],0, xy[1],1, sig,0, gam,0]       #default refine intensity 1st
     452                data.append(XY)
     453                G2pdG.UpdatePeakGrid(self,data)
     454                PlotPatterns(self)
     455            else:                                                   #picked a peak list line
     456                self.itemPicked = pick
     457        elif self.PatternTree.GetItemText(PickId) == 'Limits':
     458            if ind.all() != [0]:                                    #picked a data point
     459                LimitId = G2gd.GetPatternTreeItemId(self,PatternId, 'Limits')
     460                data = self.PatternTree.GetItemPyData(LimitId)
     461                if 'C' in Parms['Type']:                            #CW data - TOF later in an elif
     462                    if self.qPlot:                              #qplot - convert back to 2-theta
     463                        xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi))
     464                if mouse.button==1:
     465                    data[1][0] = min(xy[0],data[1][1])
     466                if mouse.button==3:
     467                    data[1][1] = max(xy[0],data[1][0])
     468                self.PatternTree.SetItemPyData(LimitId,data)
     469                G2pdG.UpdateLimitsGrid(self,data)
     470                PlotPatterns(self)
     471            else:                                                   #picked a limit line
     472                self.itemPicked = pick
     473        elif self.PatternTree.GetItemText(PickId) == 'Reflection Lists':
     474            self.itemPicked = pick
     475            pick = str(pick)
     476       
    477477    def OnRelease(event):
    478478        if self.itemPicked is None: return
     
    484484            wave = Parms['Lam1']
    485485        xpos = event.xdata
    486         if xpos:                                        #avoid out of frame mouse position
     486        PickId = self.PickId
     487        if self.PatternTree.GetItemText(PickId) in ['Peak List','Limits'] and xpos:
    487488            lines = []
    488489            for line in self.Lines: lines.append(line.get_xdata()[0])
     
    491492                LimitId = G2gd.GetPatternTreeItemId(self,self.PatternId, 'Limits')
    492493                data = self.PatternTree.GetItemPyData(LimitId)
    493 #                print 'limits',xpos
    494494                if self.qPlot:
    495495                    data[1][lineNo] = 2.0*asind(wave*xpos/(4*math.pi))
     
    512512                self.PatternTree.SetItemPyData(PeakId,data)
    513513                G2pdG.UpdatePeakGrid(self,data)
     514        elif self.PatternTree.GetItemText(PickId) == 'Reflection Lists' and xpos:
     515            Phases = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId,'Reflection Lists'))
     516            pick = str(self.itemPicked).split('(')[1].strip(')')
     517            if 'Line' not in pick:       #avoid data points, etc.
     518                num = Phases.keys().index(pick)
     519                if num:
     520                    self.refDelt = -(event.ydata-self.refOffset)/(num*Ymax)
     521                else:       #1st row of refl ticks
     522                    self.refOffset = event.ydata
    514523        PlotPatterns(self)
    515524        self.itemPicked = None   
     
    639648                Z = xye[3]+offset*N
    640649                W = xye[4]+offset*N
    641                 D = xye[5]-Ymax*.02
     650                D = xye[5]-Ymax*self.delOffset
    642651                if self.Weight:
    643652                    W2 = np.sqrt(xye[2])
    644                     D *= W2-Ymax*.02
     653                    D *= W2-Ymax*self.delOffset
    645654                if self.logPlot:
    646655                    Plot.semilogy(X,Y,colors[N%6]+'+',picker=3.,clip_on=False,nonposy='mask')
     
    694703            Phases = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId,'Reflection Lists'))
    695704            for pId,phase in enumerate(Phases):
    696                 pId += 1
    697705                peaks = Phases[phase]
    698                 for peak in peaks:
    699                     if self.qPlot:
    700                         Plot.plot(2*np.pi/peak[4],offset*N-pId*Ymax*.005,colors[pId%6]+'|',mew=1,ms=8,picker=2.)
    701                     else:
    702                         Plot.plot(peak[5],offset*N-pId*Ymax*.005,colors[pId%6]+'|',mew=1,ms=8,picker=2.)
     706                peak = np.array([[peak[4],peak[5]] for peak in peaks])
     707                pos = self.refOffset-pId*Ymax*self.refDelt*np.ones_like(peak)
     708                if self.qPlot:
     709                    Plot.plot(2*np.pi/peak.T[0],pos,colors[pId%6]+'|',mew=1,ms=8,picker=3.,label=phase)
     710                else:
     711                    Plot.plot(peak.T[1],pos,colors[pId%6]+'|',mew=1,ms=8,picker=3.,label=phase)
     712            handles,legends = Plot.get_legend_handles_labels()  #got double entries in the legends for some reason
     713            Plot.legend(handles[::2],legends[::2],title='Phases',loc='best')    #skip every other one
    703714           
    704715    if self.Contour:
     
    10851096    Z = []
    10861097    W = []
    1087 #    V = []
    10881098    sig = lambda Th,U,V,W: 1.17741*math.sqrt(U*tand(Th)**2+V*tand(Th)+W)*math.pi/18000.
    10891099    gam = lambda Th,X,Y: (X/cosd(Th)+Y*tand(Th))*math.pi/18000.
     
    10951105        g = gam(theta,LX,LY)
    10961106        G = gamFW(g,s)
    1097 #        H = gamFW2(g,s)
    10981107        Y.append(s/tand(theta))
    10991108        Z.append(g/tand(theta))
    11001109        W.append(G/tand(theta))
    1101 #        V.append(H/tand(theta))
    11021110    Plot.set_title('Instrument and sample peak widths')
    11031111    Plot.set_ylabel(r'$\Delta q/q, \Delta d/d$',fontsize=14)
     
    11061114    Plot.plot(X,Z,color='g',label='Lorentzian')
    11071115    Plot.plot(X,W,color='b',label='G+L')
    1108 #    Plot.plot(X,V,color='k',label='G+L2')
    11091116    X = []
    11101117    Y = []
     
    11201127        g = peak[6]*math.pi/18000.
    11211128        G = gamFW(g,s)
    1122 #        H = gamFW2(g,s)
    11231129        Y.append(s/tand(peak[0]/2.))
    11241130        Z.append(g/tand(peak[0]/2.))
    11251131        W.append(G/tand(peak[0]/2.))
    1126 #        V.append(H/tand(peak[0]/2.))
    11271132    Plot.plot(X,Y,'+',color='r',label='G peak')
    11281133    Plot.plot(X,Z,'+',color='g',label='L peak')
    11291134    Plot.plot(X,W,'+',color='b',label='G+L peak')
    1130 #    Plot.plot(X,V,'+',color='k',label='G+L2 peak')
    11311135    Plot.legend(loc='best')
    11321136    Page.canvas.draw()
Note: See TracChangeset for help on using the changeset viewer.