Changeset 250


Ignore:
Timestamp:
Feb 22, 2011 1:36:58 PM (11 years ago)
Author:
vondreele
Message:

GSASIIgrid.py - improve Comments listing
GSASII.py - add qPlot option
GSASIIpwdGUI.py - remove a couple of prints
GSASIIplot.py - add q & log(Y) plotting

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r249 r250  
    258258        self.ContourColor = 'Paired'
    259259        self.logPlot = False
     260        self.qPlot = False
    260261        self.Contour = False
    261262        self.SinglePlot = False
  • trunk/GSASIIgrid.py

    r242 r250  
    554554        style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER | wx.TE_DONTWRAP)
    555555    for line in data:
    556         self.dataDisplay.AppendText(line+"\n")
     556        if line[-1] == '\n':
     557            self.dataDisplay.AppendText(line)
     558        else:
     559            self.dataDisplay.AppendText(line+'\n')
    557560             
    558561def UpdateHKLControls(self,data):
  • trunk/GSASIIplot.py

    r248 r250  
    282282        if self.itemPicked is not None: return
    283283        PatternId = self.PatternId
     284        try:
     285            Values,Names = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters'))[1::2]
     286        except TypeError:
     287            return
     288        Parms = dict(zip(Names,Values))
     289        try:
     290            wave = Parms['Lam']
     291        except KeyError:
     292            wave = Parms['Lam1']
    284293        PickId = self.PickId
    285294        pick = event.artist
    286         mouse = event.mouseevent
     295        mouse = event.mouseevent       
    287296        xpos = pick.get_xdata()
    288297        ypos = pick.get_ydata()
    289298        ind = event.ind
    290         xy = zip(np.take(xpos,ind),np.take(ypos,ind))[0]
     299        xy = list(zip(np.take(xpos,ind),np.take(ypos,ind))[0])
    291300        if self.PatternTree.GetItemText(PickId) == 'Peak List':
    292301            if ind.all() != [0]:                                    #picked a data point
    293                 inst = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))
    294                 if len(inst[1]) == 11:
    295                     ins = inst[1][4:10]
    296                 else:
    297                     ins = inst[1][6:12]   
     302                ins = [Parms[x] for x in ['U','V','W','X','Y','SH/L']]
     303                if self.qPlot:                              #qplot - convert back to 2-theta
     304                    xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi))
    298305                sig = ins[0]*tand(xy[0]/2.0)**2+ins[1]*tand(xy[0]/2.0)+ins[2]
    299306                gam = ins[3]/cosd(xy[0]/2.0)+ins[4]*tand(xy[0]/2.0)           
    300307                data = self.PatternTree.GetItemPyData(self.PickId)
    301                 XY = [xy[0],0, xy[1],1, sig,0, gam,0]       #default refine intensity 1st   
     308                XY = [xy[0],0, xy[1],1, sig,0, gam,0]       #default refine intensity 1st
    302309                data.append(XY)
    303310                G2pdG.UpdatePeakGrid(self,data)
     
    309316                LimitId = G2gd.GetPatternTreeItemId(self,PatternId, 'Limits')
    310317                data = self.PatternTree.GetItemPyData(LimitId)
     318                if self.qPlot:                              #qplot - convert back to 2-theta
     319                    xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi))
    311320                if mouse.button==1:
    312321                    data[1][0] = min(xy[0],data[1][1])
     
    358367                self.SinglePlot = False
    359368                self.Offset = 0
     369        elif event.key == 'q':
     370            newPlot = True
     371            if self.qPlot:
     372                self.qPlot = False
     373            else:
     374                self.qPlot = True
    360375        elif event.key == 's':
    361376            if self.Contour:
     
    376391            if self.PickId:
    377392                self.PickId = False
    378         elif event.key == 'i':
     393        elif event.key == 'i':                  #for smoothing contour plot
    379394            choice = ['nearest','bilinear','bicubic','spline16','spline36','hanning',
    380395               'hamming','hermite','kaiser','quadric','catrom','gaussian','bessel',
     
    402417            Page.canvas.SetCursor(wx.CROSS_CURSOR)
    403418            try:
    404                 wave = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self, \
    405                     self.PatternId, 'Instrument Parameters'))[0][1]
     419                Values,Names = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters'))[1::2]
     420                Parms = dict(zip(Names,Values))
     421                try:
     422                    wave = Parms['Lam']
     423                except KeyError:
     424                    wave = Parms['Lam1']
     425                if self.qPlot:
     426                    xpos = 2.0*asind(xpos*wave/(4*math.pi))
    406427                dsp = 0.0
    407428                if abs(xpos) > 0.:                  #avoid possible singularity at beam center
     
    430451    def OnRelease(event):
    431452        if self.itemPicked is None: return
     453        Values,Names = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters'))[1::2]
     454        Parms = dict(zip(Names,Values))
     455        try:
     456            wave = Parms['Lam']
     457        except KeyError:
     458            wave = Parms['Lam1']
    432459        xpos = event.xdata
    433460        if xpos:                                        #avoid out of frame mouse position
     
    439466                data = self.PatternTree.GetItemPyData(LimitId)
    440467#                print 'limits',xpos
    441                 data[1][lineNo] = xpos
     468                if self.qPlot:
     469                    data[1][lineNo] = 2.0*asind(wave*xpos/(4*math.pi))
     470                else:
     471                    data[1][lineNo] = xpos
    442472                self.PatternTree.SetItemPyData(LimitId,data)
    443473                if self.PatternTree.GetItemText(self.PickId) == 'Limits':
     
    447477                data = self.PatternTree.GetItemPyData(PeakId)
    448478#                print 'peaks',xpos
    449                 data[lineNo-2][0] = xpos
     479                if self.qPlot:
     480                    data[lineNo-2][0] = 2.0*asind(wave*xpos/(4*math.pi))
     481                else:
     482                    data[lineNo-2][0] = xpos
    450483                self.PatternTree.SetItemPyData(PeakId,data)
    451484                G2pdG.UpdatePeakGrid(self,data)
     
    480513        if self.logPlot:
    481514            Choice = (' key press','l: log(I) off',
    482                 'c: contour on','s: toggle single plot','+: no selection')
     515                'c: contour on','q: toggle q plot','s: toggle single plot','+: no selection')
    483516        else:
    484517            Choice = (' key press','d: offset down','u: offset up','l: log(I) on',
    485                 'c: contour on','s: toggle single plot','+: no selection')
     518                'c: contour on','q: toggle q plot','s: toggle single plot','+: no selection')
    486519    cb = wx.ComboBox(self.G2plotNB.status,style=wx.CB_DROPDOWN|wx.CB_READONLY,
    487520        choices=Choice)
     
    494527    Lines = []
    495528    if self.SinglePlot:
    496         Pattern = self.PatternTree.GetItemPyData(self.PatternId)
    497         Pattern.append(self.PatternTree.GetItemText(self.PatternId))
     529        Pattern = self.PatternTree.GetItemPyData(PatternId)
     530        Pattern.append(self.PatternTree.GetItemText(PatternId))
    498531        PlotList = [Pattern,]
     532        ParmList = [self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,
     533            self.PatternId, 'Instrument Parameters'))[1],]
    499534    else:       
    500535        PlotList = []
     536        ParmList = []
    501537        item, cookie = self.PatternTree.GetFirstChild(self.root)
    502538        while item:
     
    506542                    Pattern.append(self.PatternTree.GetItemText(item))
    507543                PlotList.append(Pattern)
     544                ParmList.append(self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,
     545                    item,'Instrument Parameters'))[1])
    508546            item, cookie = self.PatternTree.GetNextChild(self.root, cookie)               
    509547    Ymax = 1.0
     
    514552        Ymax = max(Ymax,max(xye[1]))
    515553    offset = self.Offset*Ymax/100.0
    516     Plot.set_title('Powder Patterns: '+os.path.split(self.GSASprojectfile)[1])
    517     Plot.set_xlabel(r'$\mathsf{2\theta}$',fontsize=14)
     554    Title = 'Powder Patterns: '+os.path.split(self.GSASprojectfile)[1]
     555    if self.logPlot:
     556        Title = 'log('+Title+')'
     557    Plot.set_title(Title)
     558    if self.qPlot:
     559        Plot.set_xlabel(r'$q, \AA^{-1}$',fontsize=14)
     560    else:       
     561        Plot.set_xlabel(r'$\mathsf{2\theta}$',fontsize=14)
    518562    Plot.set_ylabel('Intensity',fontsize=12)
    519563    if self.Contour:
     
    522566        Nseq = 0
    523567    for N,Pattern in enumerate(PlotList):
     568        Parms = ParmList[N]
    524569        ifpicked = False
    525570        LimitId = 0
     
    528573            ifpicked = Pattern[2] == self.PatternTree.GetItemText(PatternId)
    529574            LimitId = G2gd.GetPatternTreeItemId(self,PatternId, 'Limits')
    530         X = xye[0]
     575        if self.qPlot:
     576            Id = G2gd.GetPatternTreeItemId(self,self.root, Pattern[2])
     577            X = 4*np.pi*npsind(xye[0]/2.0)/Parms[1]
     578        else:
     579            X = xye[0]
    531580        if not lenX:
    532581            lenX = len(X)           
    533582        Y = xye[1]+offset*N
    534583        if LimitId:
    535             limits = self.PatternTree.GetItemPyData(LimitId)
     584            limits = np.array(self.PatternTree.GetItemPyData(LimitId))
     585            if self.qPlot:
     586                limits = 4*np.pi*npsind(limits/2.0)/Parms[1]
    536587            Lines.append(Plot.axvline(limits[1][0],color='g',dashes=(5,5),picker=3.))   
    537588            Lines.append(Plot.axvline(limits[1][1],color='r',dashes=(5,5),picker=3.))                   
     
    568619                    data = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Peak List'))
    569620                    for item in data:
    570                         Lines.append(Plot.axvline(item[0],color=colors[N%6],picker=2.))
     621                        if self.qPlot:
     622                            Lines.append(Plot.axvline(4*math.pi*sind(item[0]/2.)/Parms[1],color=colors[N%6],picker=2.))
     623                        else:
     624                            Lines.append(Plot.axvline(item[0],color=colors[N%6],picker=2.))
    571625                if self.PatternTree.GetItemText(PickId) == 'Limits':
    572626                    tip = 'On data point: Lower limit - L MB; Upper limit - R MB. On limit: MB down to move'
     
    579633                    Plot.plot(X,Y,colors[N%6],picker=False)
    580634    if PickId and self.PatternTree.GetItemText(PickId) in ['Index Peak List','Unit Cells List']:
     635        Values,Names = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))[1::2]
     636        Parms = dict(zip(Names,Values))
     637        try:
     638            wave = Parms['Lam']
     639        except KeyError:
     640            wave = Parms['Lam1']
    581641        peaks = np.array((self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, 'Index Peak List'))))
    582642        for peak in peaks:
    583             Plot.axvline(peak[0],color='b')
     643            if self.qPlot:
     644                Plot.axvline(4*np.pi*sind(peak[0]/2.0)/wave,color='b')
     645            else:
     646                Plot.axvline(peak[0],color='b')
    584647        for hkl in self.HKL:
    585             Plot.axvline(hkl[5],color='r',dashes=(5,5))
     648            if self.qPlot:
     649                Plot.axvline(4*np.pi*sind(hkl[5]/2.0)/wave,color='r',dashes=(5,5))
     650            else:
     651                Plot.axvline(hkl[5],color='r',dashes=(5,5))
    586652    if self.Contour:
    587653        acolor = mpl.cm.get_cmap(self.ContourColor)
     
    876942
    877943    def OnImPlotKeyPress(event):
    878         if self.PatternTree.GetItemText(self.PickId) == 'Masks':
     944        try:
     945            PickName = self.PatternTree.GetItemText(self.PickId)
     946        except TypeError:
     947            return
     948        if PickName == 'Masks':
    879949            Xpos = event.xdata
    880950            if not Xpos:            #got point out of frame
     
    898968                self.G2plotNB.status.SetFields(['','Polygon mask active - LB pick next point, RB close polygon'])
    899969            G2imG.UpdateMasks(self,Masks)
    900         else:
    901             Xpos = event.xdata
    902             if not Xpos:            #got point out of frame
    903                 return
    904             Ypos = event.ydata
     970        elif PickName == 'Image Controls':
    905971            if event.key == 'c':
    906                 print 'move center to: ',Xpos,Ypos
    907                 Data['center'] = [Xpos,Ypos]
    908                 G2imG.UpdateImageControls(self,Data,Masks)
     972                Xpos = event.xdata
     973                if not Xpos:            #got point out of frame
     974                    return
     975                Ypos = event.ydata
     976                dlg = wx.MessageDialog(self,'Are you sure you want to change the center?',
     977                    'Center change',style=wx.OK|wx.CANCEL)
     978                try:
     979                    if dlg.ShowModal() == wx.ID_OK:
     980                        print 'move center to: ',Xpos,Ypos
     981                        Data['center'] = [Xpos,Ypos]
     982                        G2imG.UpdateImageControls(self,Data,Masks)
     983                finally:
     984                    dlg.Destroy()
     985            elif event.key == 'l':
     986                if self.logPlot:
     987                    self.logPlot = False
     988                else:
     989                    self.logPlot = True
    909990        PlotImage(self)
    910991           
     992    def OnKeyBox(event):
     993        if self.G2plotNB.nb.GetSelection() == self.G2plotNB.plotList.index('2D Powder Image'):
     994            event.key = cb.GetValue()[0]
     995            cb.SetValue(' key press')
     996            if event.key in 'l':
     997                OnImPlotKeyPress(event)
     998                       
    911999    def OnImPick(event):
    9121000        if self.PatternTree.GetItemText(self.PickId) not in ['Image Controls','Masks']:
     
    9311019       
    9321020    def OnImRelease(event):
    933         PickName = self.PatternTree.GetItemText(self.PickId)
     1021        try:
     1022            PickName = self.PatternTree.GetItemText(self.PickId)
     1023        except TypeError:
     1024            return
    9341025        if PickName not in ['Image Controls','Masks']:
    9351026            return
     
    10541145    if not event:                       #event from GUI TextCtrl - don't want focus to change to plot!!!
    10551146        Page.SetFocus()
    1056     Plot.set_title(self.PatternTree.GetItemText(self.Image)[4:])
     1147    Title = self.PatternTree.GetItemText(self.Image)[4:]
     1148    self.G2plotNB.status.DestroyChildren()
     1149    if self.logPlot:
     1150        Title = 'log('+Title+')'
     1151    Plot.set_title(Title)
     1152    try:
     1153        if self.PatternTree.GetItemText(self.PickId) in ['Image Controls',]:
     1154            if self.logPlot:
     1155                Choice = (' key press','l: log(I) off')
     1156            else:
     1157                Choice = (' key press','l: log(I) on')
     1158            cb = wx.ComboBox(self.G2plotNB.status,style=wx.CB_DROPDOWN|wx.CB_READONLY,
     1159                choices=Choice)
     1160            cb.Bind(wx.EVT_COMBOBOX, OnKeyBox)
     1161            cb.SetValue(' key press')
     1162    except TypeError:
     1163        pass
    10571164    size,imagefile = self.PatternTree.GetItemPyData(self.Image)
    10581165    if imagefile != self.oldImagefile:
     
    10901197        A = G2img.ImageCompress(MA,imScale)
    10911198        AM = G2img.ImageCompress(MaskA,imScale)
    1092        
     1199        if self.logPlot:
     1200            A = np.log(A)
     1201            AM = np.log(AM)
     1202            Imin,Imax = [np.amin(A),np.amax(A)]
     1203                   
    10931204        ImgM = Plot.imshow(AM,aspect='equal',cmap='Reds',
    10941205            interpolation='nearest',vmin=0,vmax=2,extent=[0,Xmax,Xmax,0])
  • trunk/GSASIIpwdGUI.py

    r230 r250  
    275275def UpdateBackgroundGrid(self,data):
    276276    if self.dataDisplay:
    277         print 'clearing background'
    278277        self.dataFrame.Clear()
    279278    BackId = G2gd.GetPatternTreeItemId(self,self.PatternId, 'Background')
     
    332331def UpdateLimitsGrid(self, data):
    333332    if self.dataDisplay:
    334         print 'clearing limits'
    335333        self.dataFrame.Clear()
    336334       
Note: See TracChangeset for help on using the changeset viewer.