Changeset 1017


Ignore:
Timestamp:
Aug 6, 2013 9:10:46 PM (8 years ago)
Author:
vondreele
Message:

implement excluded regions - 1st attempt

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r1016 r1017  
    101101
    102102[ wxID_BACKCOPY,wxID_LIMITCOPY,wxID_SAMPLECOPY, wxID_BACKFLAGCOPY, wxID_SAMPLEFLAGCOPY,
    103     wxID_SAMPLESAVE, wxID_SAMPLELOAD,
    104 ] = [wx.NewId() for item in range(7)]
     103    wxID_SAMPLESAVE, wxID_SAMPLELOAD,wxID_ADDEXCLREGION,
     104] = [wx.NewId() for item in range(8)]
    105105
    106106[ wxID_INSTPRMRESET,wxID_CHANGEWAVETYPE,wxID_INSTCOPY, wxID_INSTFLAGCOPY, wxID_INSTLOAD,
     
    16661666        self.PrefillDataMenu(self.LimitMenu,helpType='Limits')
    16671667        self.LimitEdit = wx.Menu(title='')
    1668         self.LimitMenu.Append(menu=self.LimitEdit, title='File')
     1668        self.LimitMenu.Append(menu=self.LimitEdit, title='Edit')
    16691669        self.LimitEdit.Append(id=wxID_LIMITCOPY, kind=wx.ITEM_NORMAL,text='Copy',
    16701670            help='Copy limits to other histograms')
     1671        self.LimitEdit.Append(id=wxID_ADDEXCLREGION, kind=wx.ITEM_NORMAL,text='Add exclude',
     1672            help='Add excluded region - select a point on plot; drag to adjust')           
    16711673        self.PostfillDataMenu()
    16721674           
  • trunk/GSASIIplot.py

    r1005 r1017  
    398398#            wx.CallAfter(OnPlotKeyPress,event)
    399399#                       
     400    global exclLines
    400401    def OnPlotKeyPress(event):
    401402        newPlot = False
     
    573574                    if G2frame.qPlot:                              #qplot - convert back to 2-theta
    574575                        xy[0] = 2.0*asind(xy[0]*wave/(4*math.pi))
    575                 if mouse.button==1:
    576                     data[1][0] = min(xy[0],data[1][1])
    577                 if mouse.button==3:
    578                     data[1][1] = max(xy[0],data[1][0])
     576                if G2frame.ifGetExclude:
     577                    excl = [0,0]
     578                    excl[0] = max(data[1][0],min(xy[0],data[1][1]))
     579                    excl[1] = excl[0]+0.1
     580                    data.append(excl)
     581                    G2frame.ifGetExclude = False
     582                else:
     583                    if mouse.button==1:
     584                        data[1][0] = min(xy[0],data[1][1])
     585                    if mouse.button==3:
     586                        data[1][1] = max(xy[0],data[1][0])
    579587                G2frame.PatternTree.SetItemPyData(LimitId,data)
    580588                G2pdG.UpdateLimitsGrid(G2frame,data)
    581                 PlotPatterns(G2frame)
     589                wx.CallAfter(PlotPatterns,G2frame)
    582590            else:                                                   #picked a limit line
    583591                G2frame.itemPicked = pick
     
    602610#            print G2frame.itemPicked.get_xdata()
    603611            lineNo = lines.index(G2frame.itemPicked.get_xdata()[0])
    604             if  lineNo in [0,1]:
     612            if  lineNo in [0,1] or lineNo in exclLines:
    605613                LimitId = G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Limits')
    606614                data = G2frame.PatternTree.GetItemPyData(LimitId)
     615                id = lineNo/2+1
     616                id2 = lineNo%2
    607617                if G2frame.qPlot:
    608618                    if 'C' in Parms['Type'][0]:
    609                         data[1][lineNo] = 2.0*asind(wave*xpos/(4*math.pi))
     619                        data[id][id2] = 2.0*asind(wave*xpos/(4*math.pi))
    610620                    else:
    611                         data[1][lineNo] = 2*math.pi*Parms['difC'][1]/xpos
     621                        data[id][id2] = 2*math.pi*Parms['difC'][1]/xpos
    612622                else:
    613                     data[1][lineNo] = xpos
     623                    data[id][id2] = xpos
    614624                G2frame.PatternTree.SetItemPyData(LimitId,data)
    615625                if G2frame.PatternTree.GetItemText(G2frame.PickId) == 'Limits':
     
    618628                PeakId = G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Peak List')
    619629                data = G2frame.PatternTree.GetItemPyData(PeakId)
    620 #                print 'peaks',xpos
    621630                if event.button == 3:
    622631                    del data[lineNo-2]
     
    679688    colors=['b','g','r','c','m','k']
    680689    Lines = []
     690    exclLines = []
    681691    if G2frame.SinglePlot:
    682692        Pattern = G2frame.PatternTree.GetItemPyData(PatternId)
     
    748758        ifpicked = False
    749759        LimitId = 0
    750         xye = np.array(Pattern[1])
     760        xye = ma.array(Pattern[1])
    751761        if PickId:
    752762            ifpicked = Pattern[2] == G2frame.PatternTree.GetItemText(PatternId)
    753763            LimitId = G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Limits')
     764            limits = np.array(G2frame.PatternTree.GetItemPyData(LimitId))
     765            excls = limits[2:]
     766            for excl in excls:
     767                xye[0] = ma.masked_inside(xye[0],excl[0],excl[1])
    754768        if G2frame.qPlot:
    755769            Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root, Pattern[2])
     
    771785                    limits = 2*np.pi*difC/limits
    772786            Lines.append(Plot.axvline(limits[1][0],color='g',dashes=(5,5),picker=3.))   
    773             Lines.append(Plot.axvline(limits[1][1],color='r',dashes=(5,5),picker=3.))                   
     787            Lines.append(Plot.axvline(limits[1][1],color='r',dashes=(5,5),picker=3.))
     788            for i,item in enumerate(limits[2:]):
     789                Lines.append(Plot.axvline(item[0],color='m',dashes=(5,5),picker=3.))   
     790                Lines.append(Plot.axvline(item[1],color='m',dashes=(5,5),picker=3.))
     791                exclLines += [2*i+2,2*i+3]
    774792        if G2frame.Contour:
    775793           
     
    782800        else:
    783801            X += G2frame.Offset[1]*.005*N
     802            Xum = ma.getdata(X)
    784803            if ifpicked:
    785804                Z = xye[3]+offset*N
     
    801820                else:
    802821                    if G2frame.SubBack:
    803                         Plot.plot(X,Y-W,colors[N%6]+'+',picker=3.,clip_on=False)
     822                        Plot.plot(Xum,Y-W,colors[N%6]+'+',picker=3.,clip_on=False)
    804823                        Plot.plot(X,Z-W,colors[(N+1)%6],picker=False)
    805824                    else:
    806                         Plot.plot(X,Y,colors[N%6]+'+',picker=3.,clip_on=False)
     825                        Plot.plot(Xum,Y,colors[N%6]+'+',picker=3.,clip_on=False)
    807826                        Plot.plot(X,Z,colors[(N+1)%6],picker=False)
    808827                    Plot.plot(X,W,colors[(N+2)%6],picker=False)
     
    10171036            else:
    10181037                G2frame.Legend = True
    1019            
    1020            
    10211038        PlotISFG(G2frame,newPlot=newPlot,type=type)
    10221039       
     
    12871304    limitID = G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Limits')
    12881305    if limitID:
    1289         limits = G2frame.PatternTree.GetItemPyData(limitID)
     1306        limits = G2frame.PatternTree.GetItemPyData(limitID)[:2]
    12901307    else:
    12911308        return
  • trunk/GSASIIpwdGUI.py

    r1008 r1017  
    611611    '''respond to selection of PWDR Limits data tree item.
    612612    '''
    613     #Add excluded regions here
    614613    if G2frame.dataDisplay:
    615614        G2frame.dataFrame.Clear()
    616615       
     616    def KeyEditPeakGrid(event):
     617        row = G2frame.dataDisplay.GetSelectedRows()[0]
     618        if row > 1: #can't delete limits!
     619            G2frame.dataDisplay.ClearSelection()
     620            if event.GetKeyCode() == wx.WXK_DELETE:
     621                G2frame.dataDisplay.ClearGrid()
     622                del(data[row])
     623                wx.CallAfter(UpdateLimitsGrid,G2frame,data)
     624                G2plt.PlotPatterns(G2frame)
     625                       
    617626    def RefreshLimitsGrid(event):
    618627        event.StopPropagation()
     
    622631        new[0] = max(old[0],new[0])
    623632        new[1] = max(new[0],min(old[1],new[1]))
    624         data = [old,new]
     633        if len(data) > 2:
     634            excl = data[2:]
     635            for item in excl:
     636                item[0] = max(old[0],item[0])
     637                item[1] = max(item[0],min(old[1],item[1]))
     638        data = [old,new]+excl
     639        G2frame.LimitsTable.SetData(data)
    625640        G2plt.PlotPatterns(G2frame)
    626641       
     
    644659        finally:
    645660            dlg.Destroy()
     661           
     662    def OnAddExcl(event):
     663        G2frame.ifGetExclude = True
     664        print 'Add excluded region'
    646665       
    647666    G2frame.LimitsTable = []
    648667    colLabels = ['Tmin','Tmax']
    649668    rowLabels = ['original','changed']
     669    for i in range(len(data)-2):
     670        rowLabels.append('exclude')
    650671    Types = 2*[wg.GRID_VALUE_FLOAT+':10,3',]
    651672    G2frame.LimitsTable = G2gd.Table(data,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     
    655676        Status = G2frame.dataFrame.CreateStatusBar()
    656677    G2frame.Bind(wx.EVT_MENU,OnLimitCopy,id=G2gd.wxID_LIMITCOPY)
     678    G2frame.Bind(wx.EVT_MENU,OnAddExcl,id=G2gd.wxID_ADDEXCLREGION)   
    657679    G2frame.dataDisplay = G2gd.GSGrid(parent=G2frame.dataFrame)
    658680    G2frame.dataDisplay.SetTable(G2frame.LimitsTable, True)
    659681    G2frame.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshLimitsGrid)               
     682    G2frame.dataDisplay.Bind(wx.EVT_KEY_DOWN, KeyEditPeakGrid)
    660683    G2frame.dataDisplay.SetMargins(0,0)
    661684    G2frame.dataDisplay.AutoSizeColumns(False)
    662     G2frame.dataFrame.setSizePosLeft([230,160])
     685    G2frame.dataFrame.setSizePosLeft([230,260])
    663686   
    664687################################################################################
     
    20392062    powName = 'PWDR'+dataFile[4:]
    20402063    powId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root, powName)
    2041     fullLimits,limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,powId, 'Limits'))
     2064    fullLimits,limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,powId, 'Limits'))[:2]
    20422065    inst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,powId, 'Instrument Parameters'))[0]
    20432066    if 'Lam' in inst:
  • trunk/GSASIIstrIO.py

    r989 r1017  
    283283                except ValueError:
    284284                    PWDRdata['wtFactor'] = 1.0          #patch
    285                 PWDRdata['Data'] = datum[1][1]          #powder data arrays
    286                 PWDRdata[data[2][0]] = data[2][1]       #Limits
     285                PWDRdata['Data'] = ma.array(datum[1][1])          #masked powder data arrays
     286                PWDRdata[data[2][0]] = data[2][1]       #Limits & excluded regions (if any)
    287287                PWDRdata[data[3][0]] = data[3][1]       #Background
    288288                PWDRdata[data[4][0]] = data[4][1]       #Instrument parameters
     
    440440            histogram = Histograms[datum[0]]
    441441#            print 'found ',datum[0]
    442             data[0][1][1] = histogram['Data']
     442            data[0][1][1] = list(histogram['Data'])
    443443            for datus in data[1:]:
    444444#                print '    read: ',datus[0]
     
    474474        try:
    475475            histogram = Histograms[datum[0]]
    476             data[0][1][1] = histogram['Data']
     476            data[0][1][1] = list(histogram['Data'])
    477477            for datus in data[1:]:
    478478                if datus[0] in ['Background','Instrument Parameters','Sample Parameters','Reflection Lists']:
     
    22722272            controlDict[pfx+'wtFactor'] = Histogram['wtFactor']
    22732273            controlDict[pfx+'Limits'] = Histogram['Limits'][1]
     2274            controlDict[pfx+'Exclude'] = Histogram['Limits'][2:]
     2275            for excl in controlDict[pfx+'Exclude']:
     2276                Histogram['Data'][0] = ma.masked_inside(Histogram['Data'][0],excl[0],excl[1])
    22742277           
    22752278            Background = Histogram['Background']
     
    23032306                Limits = controlDict[pfx+'Limits']
    23042307                print >>pFile,' Instrument type: ',Sample['Type']
    2305                 print >>pFile,' Histogram limits: %8.2f%s to %8.2f%s'%(Limits[0],units,Limits[1],units)     
     2308                print >>pFile,' Histogram limits: %8.2f%s to %8.2f%s'%(Limits[0],units,Limits[1],units)
     2309                if len(controlDict[pfx+'Exclude']):
     2310                    excls = controlDict[pfx+'Exclude']
     2311                    for excl in excls:
     2312                        print >>pFile,' Excluded region:  %8.2f%s to %8.2f%s'%(excl[0],units,excl[1],units)   
    23062313                PrintSampleParms(Sample)
    23072314                PrintInstParms(Inst)
  • trunk/GSASIIstrMath.py

    r990 r1017  
    17401740            dMdvh = getPowderProfileDerv(parmDict,x[xB:xF],
    17411741                varylist,Histogram,Phases,rigidbodyDict,calcControls,pawleyLookup)
    1742             Wt = np.sqrt(W[xB:xF])[np.newaxis,:]
     1742            Wt = ma.sqrt(W[xB:xF])[np.newaxis,:]
    17431743            Dy = dy[xB:xF][np.newaxis,:]
    17441744            dMdvh *= Wt
     
    18781878            xB = np.searchsorted(x,Limits[0])
    18791879            xF = np.searchsorted(x,Limits[1])
    1880             Histogram['Nobs'] = xF-xB
     1880            Histogram['Nobs'] = ma.count(x[xB:xF])
    18811881            Nobs += Histogram['Nobs']
    1882             Histogram['sumwYo'] = np.sum(W[xB:xF]*y[xB:xF]**2)
     1882            Histogram['sumwYo'] = ma.sum(W[xB:xF]*y[xB:xF]**2)
    18831883            SumwYo += Histogram['sumwYo']
    18841884            yc[xB:xF],yb[xB:xF] = getPowderProfile(parmDict,x[xB:xF],
     
    18861886            yc[xB:xF] += yb[xB:xF]
    18871887            yd[xB:xF] = y[xB:xF]-yc[xB:xF]
    1888             Histogram['sumwYd'] = np.sum(np.sqrt(W[xB:xF])*(yd[xB:xF]))
    1889             wdy = -np.sqrt(W[xB:xF])*(yd[xB:xF])
    1890             Histogram['wR'] = min(100.,np.sqrt(np.sum(wdy**2)/Histogram['sumwYo'])*100.)
     1888            Histogram['sumwYd'] = ma.sum(np.sqrt(W[xB:xF])*(yd[xB:xF]))
     1889            wdy = -ma.sqrt(W[xB:xF])*(yd[xB:xF])
     1890            Histogram['wR'] = min(100.,ma.sqrt(ma.sum(wdy**2)/Histogram['sumwYo'])*100.)
    18911891            if dlg:
    18921892                dlg.Update(Histogram['wR'],newmsg='For histogram %d Rw=%8.3f%s'%(hId,Histogram['wR'],'%'))[0]
Note: See TracChangeset for help on using the changeset viewer.