Changeset 5276


Ignore:
Timestamp:
May 14, 2022 9:06:56 PM (4 months ago)
Author:
toby
Message:

always remove excluded regions from difference plots; plot phase partials

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIdataGUI.py

    r5275 r5276  
    1818from __future__ import division, print_function
    1919import platform
     20import pickle
    2021import time
    2122import math
     
    55185519            print('file deleted:',PhasePartials)
    55195520
    5520 
     5521    def LoadPartial(self,target_hId):
     5522        PhasePartials = os.path.abspath(os.path.splitext(self.GSASprojectfile)[0]+'.partials')
     5523        if not os.path.exists(PhasePartials): return None,None,[]
     5524        fp = open(PhasePartials,'rb')
     5525        pickle.load(fp)   # skip over initial None
     5526        while True:   # loop until we find target histogram or hit end of file
     5527            yDict = {}
     5528            try:
     5529                hId = pickle.load(fp)   # get histogram number
     5530                if hId == target_hId:
     5531                    # found the target, read until we get a None or EOF
     5532                    x = pickle.load(fp)   
     5533                    yb = pickle.load(fp)
     5534                    while True:
     5535                        phase = pickle.load(fp)
     5536                        if phase is None:
     5537                            fp.close()
     5538                            return  x, yb, yDict
     5539                        yDict[phase] = pickle.load(fp)
     5540                else:
     5541                    while pickle.load(fp) is not None:
     5542                        pass
     5543            except EOFError:
     5544                if yDict:
     5545                    fp.close()
     5546                    return  x, yb, yDict
     5547                # did not find the right histogram -- unexpected!
     5548                return None,None,[]             
     5549               
    55215550    def OnRefinePartials(self,event):
    55225551        '''Computes and saves the intensities from each phase for each powder
     
    55865615                dlg.Destroy()
    55875616        # write the .csv file(s)
    5588         import pickle
    55895617        histograms,phases = self.GetUsedHistogramsAndPhasesfromTree()
    55905618        phPartialFile = Controls['PhasePartials']
     
    56175645                           histograms[h]['Data'][4]]
    56185646                while True: # read until we hit an EOF or a None
    5619                     phase = pickle.load(fp)   # get histogram number
     5647                    phase = pickle.load(fp)   # get phase & then y vals
    56205648                    if phase is None: break
    56215649                    lblList.append(phase)
  • trunk/GSASIIplot.py

    r5271 r5276  
    34213421            ifpicked = Pattern[2] == G2frame.GPXtree.GetItemText(PatternId)
    34223422            # recompute mask from excluded regions, in case they have changed
    3423             excls = limits[2:]
    3424             for excl in excls:
     3423            for excl in limits[2:]:
    34253424                xye0 = ma.masked_inside(xye[0],excl[0],excl[1],copy=False)                   #excluded region mask
    34263425            if not G2frame.Contour:
     
    34423441            if not refineMode:
    34433442                magLineList = data[0].get('Magnification',[])
    3444             if ('C' in ParmList[0]['Type'][0] and Page.plotStyle['dPlot']) or \
    3445                 ('B' in ParmList[0]['Type'][0] and Page.plotStyle['dPlot']) or \
    3446                 ('E' in ParmList[0]['Type'][0] and Page.plotStyle['dPlot']) or \
    3447                 ('T' in ParmList[0]['Type'][0] and Page.plotStyle['qPlot']): # reversed regions relative to data order
     3443            if ('C' in ParmList[0]['Type'][0] and Page.plotStyle['dPlot']) or (
     3444                'B' in ParmList[0]['Type'][0] and Page.plotStyle['dPlot']) or (
     3445                'E' in ParmList[0]['Type'][0] and Page.plotStyle['dPlot']) or (
     3446                'T' in ParmList[0]['Type'][0] and Page.plotStyle['qPlot']): # reversed regions relative to data order
    34483447                tcorner = 1
    34493448                tpos = 1.0
     
    34973496            elif Page.plotStyle.get('WgtDiagnostic',False):
    34983497                Y = xye[1]*xye[2]       #Y-obs*wt
    3499             elif 'PWDR' in plottype and G2frame.SinglePlot and not \
    3500                 (Page.plotStyle['logPlot'] or Page.plotStyle['sqrtPlot'] or G2frame.Contour):
     3498            elif 'PWDR' in plottype and G2frame.SinglePlot and not (
     3499                    Page.plotStyle['logPlot'] or Page.plotStyle['sqrtPlot'] or G2frame.Contour):
    35013500                Y = YI*multArray+NoffY*Ymax/100.0
    35023501            else:
     
    35203519            elif Page.plotStyle['dPlot'] and 'PWDR' in plottype and not ifLimits:
    35213520                lims = G2lat.Pos2dsp(Parms,lims)
     3521            # plot limit lines
    35223522            Lines.append(Plot.axvline(lims[0][0],color='g',dashes=(5,5),
    35233523                                    picker=True,pickradius=3.))   
    35243524            Lines.append(Plot.axvline(lims[0][1],color='r',dashes=(5,5),
    35253525                                    picker=True,pickradius=3.))
     3526            # plot excluded region lines
    35263527            for i,item in enumerate(lims[1:]):
    35273528                Lines.append(Plot.axvline(item[0],color='m',dashes=(5,5),
     
    36243625                BackLine = None
    36253626                DifLine = [None]
    3626                 if 'PWDR' in plottype and Page.plotStyle['exclude'] and len(limits[2:]):
    3627                     Emask = ma.getmask(X)
    3628                     excls = limits[2:]
    3629                     for excl in excls:
     3627                if 'PWDR' in plottype and len(limits[2:]):   # compute mask for excluded regions
     3628                    Emask = copy.deepcopy(ma.getmask(X))
     3629                    for excl in limits[2:]:
    36303630                        Emask += ma.getmask(ma.masked_inside(xye[0],excl[0],excl[1],copy=False))
    3631                     Xum = ma.array(Xum,mask=Emask)
    3632                     X = ma.array(X,mask=Emask)
    3633                     Y = ma.array(Y,mask=Emask)
    3634                     Z = ma.array(Z,mask=Emask)
    3635                     W = ma.array(W,mask=Emask)
     3631                    if Page.plotStyle['exclude']:            # optionally apply mask
     3632                        Xum = ma.array(Xum,mask=Emask)
     3633                        X = ma.array(X,mask=Emask)
     3634                        Y = ma.array(Y,mask=Emask)
     3635                        Z = ma.array(Z,mask=Emask)
     3636                        W = ma.array(W,mask=Emask)
     3637                    D = ma.array(D,mask=Emask)              # difference plot is always masked
    36363638
    36373639                if G2frame.Weight:
     
    36423644                    else:
    36433645                        DZ = (xye[1]-xye[3])*np.sqrt(wtFactor*xye[2])
    3644                         if Page.plotStyle['exclude']:
    3645                             DZ = ma.array(DZ,mask=Emask)
     3646                        if 'PWDR' in plottype and len(limits[2:]):
     3647                            DZ = ma.array(DZ,mask=Emask)   # weighted difference is always masked
    36463648                    DifLine = Plot1.plot(X,DZ,colors[3],
    36473649                        picker=True,pickradius=1.,label=incCptn('diff'))                    #(Io-Ic)/sig(Io)
     
    38893891                    break
    38903892            Plot.plot(x,y,'rD',clip_on=Clip_on,picker=True,pickradius=10.)
     3893
     3894    # plot the partials. TODO: get partials to show up in publication plot
     3895    plotOpt['lineList']  = ['obs','calc','bkg','zero','diff']
     3896    if 'PWDR' in plottype and G2frame.SinglePlot:
     3897        x, yb, ypList = G2frame.LoadPartial(data[0]['hId'])
     3898        if x is not None:
     3899            if Page.plotStyle['qPlot']:
     3900                x = 2.*np.pi/G2lat.Pos2dsp(Parms,x)
     3901            elif Page.plotStyle['dPlot']:
     3902                x = G2lat.Pos2dsp(Parms,x)
     3903            olderr = np.seterr(invalid='ignore') #get around sqrt(-ve) error
     3904            for ph in ypList:
     3905                #ypList[ph] += yb    # looks better w/o adding background
     3906                if Page.plotStyle['sqrtPlot']:
     3907                    y = np.where(ypList[ph]>=0.,np.sqrt(ypList[ph]),-np.sqrt(-ypList[ph]))
     3908                else:
     3909                    y = ypList[ph]
     3910                Plot.plot(x,y,Page.phaseColors.get(ph,'k'),picker=False,
     3911                          label=ph,linewidth=2.5)
     3912                plotOpt['lineList'].append(ph)   # needed?
    38913913    if not newPlot:
    38923914        # this restores previous plot limits (but I'm not sure why there are two .push_current calls)
     
    50395061                uselbl = '_'+lbl
    50405062            else:
    5041                 uselbl = plotOpt['phaseLabels'][lbl]
     5063                uselbl = plotOpt['phaseLabels'].get(lbl,lbl)
    50425064            art = ax0.plot(l.get_xdata(),l.get_ydata(),color=c,
    50435065                     lw=l.get_lw(),ls=l.get_ls(),label=uselbl,
Note: See TracChangeset for help on using the changeset viewer.