Changeset 4064


Ignore:
Timestamp:
Jul 16, 2019 10:59:42 AM (2 years ago)
Author:
vondreele
Message:

fix background editing; now immediately shows effect on background curve, grid input now improved for peaks & Debye background

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwdGUI.py

    r4063 r4064  
    11391139    '''respond to selection of PWDR background data tree item.
    11401140    '''
    1141    
    11421141    def OnBackFlagCopy(event):
    11431142        flag = data[0][1]
     
    13071306        xdata = pwddata[0][xBeg:xFin]
    13081307        ydata = si.interp1d(X,Y)(ma.getdata(xdata))
    1309         #GSASIIpath.IPyBreak()
    13101308        W = [1]*len(xdata)
    13111309        Z = [0]*len(xdata)
     
    13381336        pwddata[3][xBeg:xFin] *= 0.
    13391337        pwddata[5][xBeg:xFin] *= 0.
    1340         pwddata[4][xBeg:xFin] = G2pwd.getBackground(
    1341             '',parmDict,bakType,dataType,xdata)[0]
     1338        pwddata[4][xBeg:xFin] = G2pwd.getBackground('',parmDict,bakType,dataType,xdata)[0]
    13421339        G2plt.PlotPatterns(G2frame,plotType='PWDR')
    13431340        # show the updated background values
     
    14081405                    del(item[-1])
    14091406            G2frame.GPXtree.SetItemPyData(BackId,data)
    1410             #wx.CallAfter(UpdateBackground,G2frame,data)
    14111407            wx.CallLater(100,UpdateBackground,G2frame,data)
     1408           
     1409        def AfterChange(invalid,value,tc):
     1410            if invalid: return
     1411            CalcBack()
     1412            G2plt.PlotPatterns(G2frame,plotType='PWDR')
    14121413           
    14131414        backSizer = wx.BoxSizer(wx.VERTICAL)
     
    14351436        bakSizer = wx.FlexGridSizer(0,5,5,5)
    14361437        for i,value in enumerate(data[0][3:]):
    1437             bakVal = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data[0],i+3,nDig=(10,4),typeHint=float)
     1438            bakVal = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data[0],i+3,nDig=(10,4),OnLeave=AfterChange)
    14381439            bakSizer.Add(bakVal,0,WACV)
    14391440        backSizer.Add(bakSizer)
     
    14521453                for i in range(N,M):
    14531454                    del(data[1]['debyeTerms'][-1])
    1454             #wx.CallAfter(UpdateBackground,G2frame,data)
    1455             wx.CallLater(100,UpdateBackground,G2frame,data)
     1455            if N == 0:
     1456                CalcBack()
     1457                G2plt.PlotPatterns(G2frame,plotType='PWDR')               
     1458            wx.CallAfter(UpdateBackground,G2frame,data)
    14561459
    14571460        def KeyEditPeakGrid(event):
     
    14721475                        elif key == 78:  #'N'
    14731476                            for row in range(debyeGrid.GetNumberRows()): data[1]['debyeTerms'][row][col]=False
    1474 
    1475        
     1477       
     1478        def OnCellChange(event):
     1479            CalcBack()
     1480            G2plt.PlotPatterns(G2frame,plotType='PWDR')               
     1481
    14761482        debSizer = wx.BoxSizer(wx.VERTICAL)
    14771483        topSizer = wx.BoxSizer(wx.HORIZONTAL)
     
    14961502            debyeGrid.SetTable(debyeTable, True)
    14971503            debyeGrid.Bind(wx.EVT_KEY_DOWN, KeyEditPeakGrid)
     1504            debyeGrid.Bind(wg.EVT_GRID_CELL_CHANGED,OnCellChange)
    14981505            debyeGrid.AutoSizeColumns(False)
    14991506            debSizer.Add(debyeGrid)       
     
    15121519                for i in range(N,M):
    15131520                    del(data[1]['peaksList'][-1])
    1514             #wx.CallAfter(UpdateBackground,G2frame,data)
    1515             wx.CallLater(100,UpdateBackground,G2frame,data)
     1521            if N == 0:
     1522                CalcBack()
     1523                G2plt.PlotPatterns(G2frame,plotType='PWDR')               
     1524            wx.CallAfter(UpdateBackground,G2frame,data)
    15161525           
    15171526        def KeyEditPeakGrid(event):
     
    15321541                        elif key == 78:  #'N'
    15331542                            for row in range(peaksGrid.GetNumberRows()): data[1]['peaksList'][row][col]=False
     1543                           
     1544        def OnCellChange(event):
     1545            CalcBack()
     1546            G2plt.PlotPatterns(G2frame,plotType='PWDR')               
    15341547
    15351548        peaksSizer = wx.BoxSizer(wx.VERTICAL)
     
    15571570            peaksGrid.SetTable(peaksTable, True)
    15581571            peaksGrid.Bind(wx.EVT_KEY_DOWN, KeyEditPeakGrid)
     1572            peaksGrid.Bind(wg.EVT_GRID_CELL_CHANGED,OnCellChange)
    15591573            peaksGrid.AutoSizeColumns(False)
    15601574            peaksSizer.Add(peaksGrid)       
     
    15791593                    data[1]['background PWDR'][0] = back.GetValue()
    15801594                    return
     1595            CalcBack()
    15811596            G2plt.PlotPatterns(G2frame,plotType='PWDR')
    15821597       
     1598        def AfterChange(invalid,value,tc):
     1599            if invalid: return
     1600            CalcBack()
     1601            G2plt.PlotPatterns(G2frame,plotType='PWDR')
     1602
    15831603        fileSizer = wx.BoxSizer(wx.VERTICAL)
    15841604        fileSizer.Add(wx.StaticText(G2frame.dataWindow,-1,' Fixed background file:'),0,WACV)
     
    15941614        backSizer.Add(back)
    15951615        backSizer.Add(wx.StaticText(G2frame.dataWindow,-1,' multiplier'),0,WACV)
    1596         backMult = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data[1]['background PWDR'],1,nDig=(10,3))
     1616        backMult = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data[1]['background PWDR'],1,nDig=(10,3),OnLeave=AfterChange)
    15971617        backSizer.Add(backMult,0,WACV)
    15981618        fileSizer.Add(backSizer)
    15991619        return fileSizer
    1600 
    1601     # UpdateBackground execution starts here
     1620   
     1621    def CalcBack():
     1622            PatternId = G2frame.PatternId
     1623            limits = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Limits'))[1]
     1624            inst,inst2 = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Instrument Parameters'))
     1625            dataType = inst['Type'][0]
     1626            insDict = {inskey:inst[inskey][1] for inskey in inst}
     1627            parmDict = {}
     1628            bakType,bakDict,bakVary = G2pwd.SetBackgroundParms(data)
     1629            parmDict.update(bakDict)
     1630            parmDict.update(insDict)
     1631            limits = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Limits'))[1]
     1632            pwddata = G2frame.GPXtree.GetItemPyData(PatternId)[1]
     1633            xBeg = np.searchsorted(pwddata[0],limits[0])
     1634            xFin = np.searchsorted(pwddata[0],limits[1])
     1635            fixBack = data[1]['background PWDR']
     1636            Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,data[1]['background PWDR'][0])
     1637            fixData = G2frame.GPXtree.GetItemPyData(Id)
     1638            fixedBkg = {'_fixedVary':False,'_fixedMult':fixBack[1],'_fixedValues':fixData[1][1][xBeg:xFin]}
     1639            try:    #typically bad grid value
     1640                pwddata[4][xBeg:xFin] = G2pwd.getBackground('',parmDict,bakType,dataType,pwddata[0][xBeg:xFin],fixedBkg)[0]
     1641            except:
     1642                pass
     1643
     1644    # UpdateBackground execution starts here   
    16021645    if len(data) < 2:       #add Debye diffuse & peaks scattering here
    16031646        data.append({'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]})
Note: See TracChangeset for help on using the changeset viewer.