Changeset 3392 for trunk/GSASIIplot.py


Ignore:
Timestamp:
May 17, 2018 11:27:37 AM (5 years ago)
Author:
vondreele
Message:

fix issues with multiphase refinements & multiphase plots, etc.
move plot OffSet? parameters to Page.plotStyle - required some reorganization of PlotPatterns?
correct colors for peak fit lines (make always blue)
make plot limits behave

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIplot.py

    r3388 r3392  
    15941594       G2frame.HKL (used for tool tip display of hkl for selected phase reflection list)
    15951595    '''
     1596    def PublishPlot(event):
     1597        msg = ""
     1598        if 'PWDR' not in plottype:
     1599            msg += " * only PWDR histograms can be used"
     1600        if G2frame.Contour or not G2frame.SinglePlot:
     1601            if msg: msg += '\n'
     1602            msg += " * only when a single histogram is plotted"
     1603        if Page.plotStyle['logPlot'] or Page.plotStyle['sqrtPlot']:
     1604            if msg: msg += '\n'
     1605            msg += " * only when the intensity scale is linear (not log or sqrt)"
     1606        if G2frame.Weight:
     1607            if msg: msg += '\n'
     1608            msg += " * only when weight plot is set to no weight plot"
     1609        if msg:
     1610            msg = 'Publication export is only available under limited plot settings\n'+msg
     1611            G2G.G2MessageBox(G2frame,msg,'Wrong plot settings')
     1612            print(msg)
     1613        else:
     1614            PublishRietveldPlot(G2frame,Pattern,Plot,Page)
     1615
    15961616    global exclLines,Page
    15971617    global DifLine # BHT: probably does not need to be global
    15981618    global Ymax
    1599     global Pattern,mcolors,Plot
     1619    global Pattern,mcolors,Plot,Page
    16001620    plottype = plotType
    16011621   
     
    16081628    if data is None:
    16091629        data = G2frame.GPXtree.GetItemPyData(G2frame.PatternId)
    1610     if 'Offset' not in data[0] and plotType in ['PWDR','SASD','REFD']:     #plot offset data
     1630    if plottype not in ['SASD','REFD'] and 'PWDR' in G2frame.GPXtree.GetItemText(G2frame.PickId):
     1631        publish = PublishPlot
     1632    else:
     1633        publish = None
     1634    new,plotNum,Page,Plot,limits = G2frame.G2plotNB.FindPlotTab('Powder Patterns','mpl',publish=publish)
     1635    if 'Offset' not in Page.plotStyle and plotType in ['PWDR','SASD','REFD']:     #plot offset data
    16111636        Ymax = max(data[1][1])
    1612         data[0].update({'Offset':[0.0,0.0],'delOffset':0.02*Ymax,'refOffset':-0.1*Ymax,
     1637        Page.plotStyle.update({'Offset':[0.0,0.0],'delOffset':0.02*Ymax,'refOffset':-0.1*Ymax,
    16131638            'refDelt':0.1*Ymax,})
    16141639        G2frame.GPXtree.SetItemPyData(G2frame.PickId,data)
     
    16401665                    Page.plotStyle['sqrtPlot'] = False
    16411666                else:
    1642                     Pattern[0]['Offset'][0] = 0
     1667                    Page.plotStyle['Offset'][0] = 0
    16431668                newPlot = True
    16441669        elif event.key == 's' and 'PWDR' in plottype:
     
    16491674                Ymax = max(Pattern[1][1])
    16501675                if Page.plotStyle['sqrtPlot']:
    1651                     Pattern[0]['delOffset'] = .002*np.sqrt(Ymax)
    1652                     Pattern[0]['refOffset'] = -0.1*np.sqrt(Ymax)
    1653                     Pattern[0]['refDelt'] = .1*np.sqrt(Ymax)
     1676                    Page.plotStyle['delOffset'] = .002*np.sqrt(Ymax)
     1677                    Page.plotStyle['refOffset'] = -0.1*np.sqrt(Ymax)
     1678                    Page.plotStyle['refDelt'] = .1*np.sqrt(Ymax)
    16541679                else:
    1655                     Pattern[0]['delOffset'] = .02*Ymax
    1656                     Pattern[0]['refOffset'] = -0.1*Ymax
    1657                     Pattern[0]['refDelt'] = .1*Ymax
     1680                    Page.plotStyle['delOffset'] = .02*Ymax
     1681                    Page.plotStyle['refOffset'] = -0.1*Ymax
     1682                    Page.plotStyle['refDelt'] = .1*Ymax
    16581683            else:   #select color scheme for multiplots & contour plots
    16591684                choice = [m for m in mpl.cm.datad.keys()]   # if not m.endswith("_r")
     
    16701695            if G2frame.Contour:
    16711696                G2frame.Cmax = min(1.0,G2frame.Cmax*1.2)
    1672             elif Pattern[0]['Offset'][0] < 100.:
    1673                 Pattern[0]['Offset'][0] += 1.
     1697            elif Page.plotStyle['Offset'][0] < 100.:
     1698                Page.plotStyle['Offset'][0] += 1.
    16741699        elif event.key == 'd' and (G2frame.Contour or not G2frame.SinglePlot):
    16751700            if G2frame.Contour:
    16761701                G2frame.Cmax = max(0.0,G2frame.Cmax*0.8)
    1677             elif Pattern[0]['Offset'][0] > -100.:
    1678                 Pattern[0]['Offset'][0] -= 1.
     1702            elif Page.plotStyle['Offset'][0] > -100.:
     1703                Page.plotStyle['Offset'][0] -= 1.
    16791704        elif event.key == 'U':
    16801705            if G2frame.Contour:
    16811706                G2frame.Cmin += (G2frame.Cmax - G2frame.Cmin)/5.
    1682             elif Pattern[0]['Offset'][0] < 100.:
    1683                Pattern[0]['Offset'][0] += 10.
     1707            elif Page.plotStyle['Offset'][0] < 100.:
     1708               Page.plotStyle['Offset'][0] += 10.
    16841709        elif event.key == 'D':
    16851710            if G2frame.Contour:
    16861711                G2frame.Cmin -= (G2frame.Cmax - G2frame.Cmin)/5.
    1687             elif Pattern[0]['Offset'][0] > -100.:
    1688                 Pattern[0]['Offset'][0] -= 10.
     1712            elif Page.plotStyle['Offset'][0] > -100.:
     1713                Page.plotStyle['Offset'][0] -= 10.
    16891714        elif event.key == 'l' and not G2frame.SinglePlot:
    1690             Pattern[0]['Offset'][1] -= 1.
     1715            Page.plotStyle['Offset'][1] -= 1.
    16911716        elif event.key == 'r' and not G2frame.SinglePlot:
    1692             Pattern[0]['Offset'][1] += 1.
     1717            Page.plotStyle['Offset'][1] += 1.
    16931718        elif event.key == 'o' and not G2frame.SinglePlot:
    16941719            G2frame.Cmax = 1.0
    1695             Pattern[0]['Offset'] = [0,0]
     1720            Page.plotStyle['Offset'] = [0,0]
    16961721        elif event.key == 'c' and 'PWDR' in plottype:
    16971722            newPlot = True
    16981723            if not G2frame.Contour:
    16991724                G2frame.SinglePlot = False
    1700                 Pattern[0]['Offset'] = [0.,0.]
     1725                Page.plotStyle['Offset'] = [0.,0.]
    17011726            else:
    17021727                G2frame.SinglePlot = True               
     
    17461771        elif event.key == 'm':
    17471772            Page.plotStyle['sqrtPlot'] = False
    1748             G2frame.SinglePlot = not G2frame.SinglePlot               
     1773            if not G2frame.Contour:               
     1774                G2frame.SinglePlot = not G2frame.SinglePlot               
     1775            G2frame.Contour = False
    17491776            newPlot = True
    17501777        elif event.key == 'f' and not G2frame.SinglePlot:
     
    19611988            Page.canvas.restore_region(savedplot)
    19621989            if Page.pickTicknum:
    1963                 refDelt = -(event.ydata-Pattern[0]['refOffset'])/Page.pickTicknum
    1964                 refOffset = Pattern[0]['refOffset']
     1990                refDelt = -(event.ydata-Page.plotStyle['refOffset'])/Page.pickTicknum
     1991                refOffset = Page.plotStyle['refOffset']
    19651992            else:       #1st row of refl ticks
    19661993                refOffset = event.ydata
    1967                 refDelt = Pattern[0]['refDelt']
     1994                refDelt = Page.plotStyle['refDelt']
    19681995            for pId,phase in enumerate(Page.phaseList):
    19691996                pos = refOffset - pId*refDelt
     
    20842111                Page.canvas.draw() # save bitmap
    20852112                savedplot = Page.canvas.copy_from_bbox(Page.figure.gca().bbox)
    2086                 Page.diffOffset = Pattern[0]['delOffset']
     2113                Page.diffOffset = Page.plotStyle['delOffset']
    20872114                G2frame.cid = Page.canvas.mpl_connect('motion_notify_event', OnDragDiffCurve)
    20882115            elif G2frame.itemPicked in G2frame.MagLines: # drag of magnification marker
     
    22052232            data = G2frame.GPXtree.GetItemPyData(PickId)
    22062233            ypos = event.ydata
    2207             Pattern[0]['delOffset'] = -ypos
     2234            Page.plotStyle['delOffset'] = -ypos
    22082235            G2frame.itemPicked = None
    22092236            wx.CallAfter(PlotPatterns,G2frame,plotType=plottype)
     
    22912318                        num = Page.phaseList.index(pick)
    22922319                        if num:
    2293                             data[0]['refDelt'] = -(event.ydata-Pattern[0]['refOffset'])/num
     2320                            Page.plotStyle['refDelt'] = -(event.ydata-Page.plotStyle['refOffset'])/num
    22942321                        else:       #1st row of refl ticks
    2295                             data[0]['refOffset'] = event.ydata
     2322                            Page.plotStyle['refOffset'] = event.ydata
    22962323        PlotPatterns(G2frame,plotType=plottype)
    22972324        G2frame.itemPicked = None
    22982325       
    2299     def PublishPlot(event):
    2300         msg = ""
    2301         if 'PWDR' not in plottype:
    2302             msg += " * only PWDR histograms can be used"
    2303         if G2frame.Contour or not G2frame.SinglePlot:
    2304             if msg: msg += '\n'
    2305             msg += " * only when a single histogram is plotted"
    2306         if Page.plotStyle['logPlot'] or Page.plotStyle['sqrtPlot']:
    2307             if msg: msg += '\n'
    2308             msg += " * only when the intensity scale is linear (not log or sqrt)"
    2309         if G2frame.Weight:
    2310             if msg: msg += '\n'
    2311             msg += " * only when weight plot is set to no weight plot"
    2312         if msg:
    2313             msg = 'Publication export is only available under limited plot settings\n'+msg
    2314             G2G.G2MessageBox(G2frame,msg,'Wrong plot settings')
    2315             print(msg)
    2316         else:
    2317             PublishRietveldPlot(G2frame,Pattern,Plot,Page)
    2318 
    23192326    #=====================================================================================
    23202327    # beginning PlotPatterns execution
    2321     if plottype not in ['SASD','REFD'] and 'PWDR' in G2frame.GPXtree.GetItemText(G2frame.PickId):
    2322         publish = PublishPlot
    2323     else:
    2324         publish = None
    2325     new,plotNum,Page,Plot,limits = G2frame.G2plotNB.FindPlotTab('Powder Patterns','mpl',publish=publish)
    23262328    if not new:
    23272329        G2frame.xylim = limits
     
    24242426    exclLines = []
    24252427    if G2frame.SinglePlot and PatternId:
    2426         Pattern = copy.deepcopy(G2frame.GPXtree.GetItemPyData(PatternId))
     2428#        Pattern = copy.deepcopy(G2frame.GPXtree.GetItemPyData(PatternId))
     2429        Pattern = G2frame.GPXtree.GetItemPyData(PatternId)
    24272430        Pattern.append(G2frame.GPXtree.GetItemText(PatternId))
    24282431        PlotList = [Pattern,]
     
    24502453        for item in choices:
    24512454            id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root, item)
    2452             Pattern = copy.deepcopy(G2frame.GPXtree.GetItemPyData(id))
     2455            Pattern = G2frame.GPXtree.GetItemPyData(id)
     2456#            Pattern = copy.deepcopy(G2frame.GPXtree.GetItemPyData(id))
    24532457            if len(Pattern) < 3:                    # put name on end if needed
    24542458                Pattern.append(G2frame.GPXtree.GetItemText(id))
    2455             if 'Offset' not in Pattern[0]:     #plot offset data
     2459            if 'Offset' not in Page.plotStyle:     #plot offset data
    24562460                Ymax = max(Pattern[1][1])
    2457                 Pattern[0].update({'Offset':[0.0,0.0],'delOffset':0.02*Ymax,'refOffset':-0.1*Ymax,'refDelt':0.1*Ymax,})
     2461                Page.plotStyle.update({'Offset':[0.0,0.0],'delOffset':0.02*Ymax,'refOffset':-0.1*Ymax,'refDelt':0.1*Ymax,})
    24582462            PId = G2gd.GetGPXtreeItemId(G2frame,G2frame.PatternId, 'Background')
    24592463            Pattern[0]['BackFile'] = ['',-1.0]
     
    24782482        Ymax = max(Ymax,max(xye[1]+bxye))
    24792483    if Ymax is None: return # nothing to plot
    2480     offsetX = Pattern[0]['Offset'][1]
    2481     offsetY = Pattern[0]['Offset'][0]
     2484    offsetX = Page.plotStyle['Offset'][1]
     2485    offsetY = Page.plotStyle['Offset'][0]
    24822486    if Page.plotStyle['logPlot']:
    24832487        Title = 'log('+Title+')'
     
    25522556            excls = limits[2:]
    25532557            xye0 = ma.array(xye0,mask=False)
    2554 #            xye0.mask = False # resets mask for xye0 & Pattern[1][0](!)
    2555             xye0 = ma.masked_outside(xye0,limits[1][0],limits[1][1])
    25562558            for excl in excls:
    2557                 xye0 = ma.masked_inside(xye0,excl[0],excl[1]) # sets mask on xye0 but not Pattern[1][0] !
    2558             Pattern[1][0] = ma.array(Pattern[1][0],mask=ma.getmask(xye0))
    2559 #            Pattern[1][0].mask = xye0.mask # transfer the mask
     2559                xye0 = ma.masked_inside(xye0,excl[0],excl[1])                   #excluded region mask
     2560            Pattern[1][0] = ma.array(Pattern[1][0],mask=ma.getmask(xye0))       #save the excluded region masking
     2561            if not G2frame.Contour:
     2562                xye0 = ma.masked_outside(xye0,limits[1][0],limits[1][1])            #now mask for limits
    25602563        if Page.plotStyle['qPlot'] and 'PWDR' in plottype:
    25612564            X = 2.*np.pi/G2lat.Pos2dsp(Parms,xye0)
     
    26082611                magMarkers.append(Plot.axvline(x,color='0.5',dashes=(1,1),picker=2.,label='_magline'))
    26092612                lbl = Plot.annotate("x{}".format(ml), xy=(x, tpos), xycoords=("data", "axes fraction"),
    2610                                 verticalalignment='bottom',horizontalalignment=halign,label='_maglbl')
     2613                    verticalalignment='bottom',horizontalalignment=halign,label='_maglbl')
    26112614                Plot.magLbls.append(lbl)
    26122615            if ml0:
    26132616                lbl = Plot.annotate("x{}".format(ml0), xy=(tcorner, tpos), xycoords="axes fraction",
    2614                                 verticalalignment='bottom',horizontalalignment=halign,label='_maglbl')
     2617                    verticalalignment='bottom',horizontalalignment=halign,label='_maglbl')
    26152618                Plot.magLbls.append(lbl)
    26162619                Page.toolbar.updateActions = (PlotPatterns,G2frame)
     
    26912694                        W = np.where(xye[4]>=0.,np.sqrt(xye[4]),-np.sqrt(-xye[4]))
    26922695                        np.seterr(invalid=olderr['invalid'])
    2693                         D = np.where(xye[5],(Y-Z),0.)-Pattern[0]['delOffset']
     2696                        D = np.where(xye[5],(Y-Z),0.)-Page.plotStyle['delOffset']
    26942697                    elif 'PWDR' in plottype and G2frame.SinglePlot and not (
    26952698                        Page.plotStyle['logPlot'] or Page.plotStyle['sqrtPlot'] or G2frame.Contour):
    26962699                        W = xye[4]*multArray+NoffY*Ymax/100.0
    2697                         D = multArray*xye[5]-Pattern[0]['delOffset']  #powder background
     2700                        D = multArray*xye[5]-Page.plotStyle['delOffset']  #powder background
    26982701                    else:
    26992702                        W = xye[4]+NoffY*Ymax/100.0
    2700                         D = xye[5]-Pattern[0]['delOffset']  #powder background
     2703                        D = xye[5]-Page.plotStyle['delOffset']  #powder background
    27012704                elif plottype in ['SASD','REFD']:
    27022705                    if Page.plotStyle['sqPlot']:
     
    27792782                                Ni = N
    27802783                            if Page.plotStyle['qPlot']:
    2781                                 Lines.append(Plot.axvline(2.*np.pi/G2lat.Pos2dsp(Parms,item[0]),color=colors[Ni%6],picker=2.))
     2784                                Lines.append(Plot.axvline(2.*np.pi/G2lat.Pos2dsp(Parms,item[0]),color='b',picker=2.))
    27822785                            elif Page.plotStyle['dPlot']:
    2783                                 Lines.append(Plot.axvline(G2lat.Pos2dsp(Parms,item[0]),color=colors[Ni%6],picker=2.))
     2786                                Lines.append(Plot.axvline(G2lat.Pos2dsp(Parms,item[0]),color='b',picker=2.))
    27842787                            else:
    2785                                 Lines.append(Plot.axvline(item[0],color=colors[Ni%6],picker=2.))
     2788                                Lines.append(Plot.axvline(item[0],color='b',picker=2.))
    27862789                            if Ni == N+1:
    27872790                                Lines[-1].set_lw(Lines[-1].get_lw()+1)
     
    28522855                else:
    28532856                    peak = np.array([[peak[4],peak[5]] for peak in peaks])
    2854                 pos = Pattern[0]['refOffset']-pId*Pattern[0]['refDelt']*np.ones_like(peak)
    2855                 plsym = Page.phaseColors.get(phase,'y')+'|' # yellow should never happen!
     2857                pos = Page.plotStyle['refOffset']-pId*Page.plotStyle['refDelt']*np.ones_like(peak)
     2858                plsym = Page.phaseColors[phase]+'|' # yellow should never happen!
    28562859                if Page.plotStyle['qPlot']:
    28572860                    Page.tickDict[phase],j = Plot.plot(2*np.pi/peak.T[0],pos,plsym,mew=w,ms=l,picker=3.,label=phase)
     
    33413344    # save information needed to reload from tree and redraw
    33423345    G2frame.G2plotNB.RegisterRedrawRoutine(G2frame.G2plotNB.lastRaisedPlotTab,
    3343                                            PlotDeltSig,(
    3344                                                G2frame,kind,
    3345                                                G2frame.GPXtree.GetItemText(G2frame.PatternId))
    3346                                            )
     3346        PlotDeltSig,(G2frame,kind,G2frame.GPXtree.GetItemText(G2frame.PatternId)))
    33473347    Page.Choice = None
    33483348    PatternId = G2frame.PatternId
Note: See TracChangeset for help on using the changeset viewer.