Changeset 4671 for trunk/GSASIIpwdGUI.py


Ignore:
Timestamp:
Dec 12, 2020 1:30:31 PM (2 years ago)
Author:
vondreele
Message:

add refinable multiplier for a fixed background; multiplier is now normally > 0
usable for peak fitting and Rietved refinement
add the fixed background entry to all background defaults
fix bug in GetDetectorXY fo when cursor outside image - returns [0,0] not None; changes elsewhere to use this
GetTthAzmDsp? now returns explicit list not assumed tuple
put the abs in the nl.qr test for singularities in HessianLSQ
Add 'BF mult' to name list in G2obj
put a try - except TypeError? around setting plot style stuff in PlotPatterns?
Remove the setting of Pattern[0]BackFile? - this was redundant for PWDR
remove picker/pickradius from linescan plot - failed
remove the alternate fixed background definition ('_fixedVary', etc.)
clear the PhaseReaderClass?Drawing? dictionary upon import of phase from a gpx file

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwdGUI.py

    r4667 r4671  
    284284################################################################################
    285285
    286 def GetFileBackground(G2frame,xye,Pattern):
     286def GetFileBackground(G2frame,xye,background,scale=True):
    287287    bxye = np.zeros(len(xye[1]))
    288     if 'BackFile' in Pattern[0]:
    289         backfile,mult = Pattern[0]['BackFile'][:2]
     288    mult = 1.0
     289    if 'background PWDR' in background[1]:
     290        backfile,mult = background[1]['background PWDR'][:2]
    290291        if backfile:
    291292            bId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,backfile)
    292293            if bId:
    293                 bxye = mult*G2frame.GPXtree.GetItemPyData(bId)[1][1]
     294                bxye = G2frame.GPXtree.GetItemPyData(bId)[1][1]
    294295            else:
    295296                print('Error: background PWDR {} not found'.format(backfile))
    296                 Pattern[0]['BackFile'][0] = ''
    297     return bxye
     297                background[1]['background PWDR'] = ['',1.0,False]
     298    if scale:
     299        return bxye*mult
     300    else:
     301        return bxye
    298302   
    299303def IsHistogramInAnyPhase(G2frame,histoName):
     
    641645        PatternId = G2frame.PatternId
    642646        limits = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Limits'))[1]
     647        background = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Background'))
    643648        inst,inst2 = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Instrument Parameters'))
    644649        Pattern = G2frame.GPXtree.GetItemPyData(PatternId)
    645650        profile = Pattern[1]
    646         bxye = GetFileBackground(G2frame,profile,Pattern)
     651        bxye = GetFileBackground(G2frame,profile,background)
    647652        x0 = profile[0]
    648653        iBeg = np.searchsorted(x0,limits[0])
    649654        iFin = np.searchsorted(x0,limits[1])
    650655        x = x0[iBeg:iFin]
    651         y0 = (profile[1]+bxye)[iBeg:iFin]
     656        y0 = (profile[1]-bxye)[iBeg:iFin]
    652657        ysig = 1.0*np.std(y0)
    653658        offset = [-1,1]
     
    834839                Pattern = G2frame.GPXtree.GetItemPyData(PatternId)
    835840                data = Pattern[1]
    836                 fixback = GetFileBackground(G2frame,data,Pattern)
     841                fixback = GetFileBackground(G2frame,data,background,scale=False)
    837842                peaks['sigDict'],result,sig,Rvals,varyList,parmDict,fullvaryList,badVary = G2pwd.DoPeakFit(FitPgm,peaks['peaks'],
    838843                    background,limits,inst,inst2,data,fixback,prevVaryList,oneCycle,controls)   #needs wtFactor after controls?
     
    881886        data = Pattern[1]
    882887        wtFactor = Pattern[0]['wtFactor']
    883         bxye = GetFileBackground(G2frame,data,Pattern)
     888        bxye = GetFileBackground(G2frame,data,background,scale=False)
    884889        dlg = wx.ProgressDialog('Residual','Peak fit Rwp = ',101.0,
    885890            style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_ABORT)
     
    11371142    reflGrid.SetScrollRate(10,10)
    11381143    G2frame.reflGrid = reflGrid
    1139     mainSizer.Add(reflGrid,1,wx.ALL|wx.EXPAND,1)
     1144#    mainSizer.Add(reflGrid,1,wx.ALL|wx.EXPAND,1)
     1145    mainSizer.Add(reflGrid)
     1146    mainSizer.Add(G2G.HelpButton(G2frame.dataWindow,helpIndex=G2frame.dataWindow.helpKey))
    11401147    G2frame.dataWindow.SetDataSize()
    11411148
     
    11571164            PKflags = []
    11581165            for term in backDict['peaksList']:
    1159                 PKflags.append(term[1::2])           
     1166                PKflags.append(term[1::2])
     1167        FBflag = backDict['background PWDR'][2]
    11601168        hst = G2frame.GPXtree.GetItemText(G2frame.PatternId)
    11611169        histList = GetHistsLikeSelected(G2frame)
     
    11821190            if bkDict['nPeaks'] == backDict['nPeaks']:
    11831191                for i,term in enumerate(bkDict['peaksList']):
    1184                     term[1::2] = copy.copy(PKflags[i])                   
     1192                    term[1::2] = copy.copy(PKflags[i])
     1193            backData[1]['background PWDR'] = copy.copy(FBflag)
    11851194           
    11861195    def OnBackCopy(event):
     
    16011610        def OnBackPWDR(event):
    16021611            data[1]['background PWDR'][0] = back.GetValue()
    1603             if  data[1]['background PWDR'][0]:
     1612            if len(data[1]['background PWDR'][0]):
    16041613                curHist = G2frame.GPXtree.GetItemPyData(G2frame.PatternId)
    16051614                Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,data[1]['background PWDR'][0])
     
    16151624                    data[1]['background PWDR'][0] = back.GetValue()
    16161625                    return
     1626            else:
     1627                data[1]['background PWDR'][2] = False
    16171628            CalcBack()
    16181629            G2plt.PlotPatterns(G2frame,plotType='PWDR')
     1630            wx.CallLater(100,UpdateBackground,G2frame,data)
    16191631       
    16201632        def AfterChange(invalid,value,tc):
     
    16221634            CalcBack()
    16231635            G2plt.PlotPatterns(G2frame,plotType='PWDR')
     1636           
     1637        def OnBackFit(event):
     1638            data[1]['background PWDR'][2] = not data[1]['background PWDR'][2]           
    16241639
    16251640        fileSizer = wx.BoxSizer(wx.VERTICAL)
     
    16381653        backMult = G2G.ValidatedTxtCtrl(G2frame.dataWindow,data[1]['background PWDR'],1,nDig=(10,3),OnLeave=AfterChange)
    16391654        backSizer.Add(backMult,0,WACV)
     1655        if len(data[1]['background PWDR'][0]):
     1656            backFit = wx.CheckBox(G2frame.dataWindow,label=' Refine?')
     1657            backFit.SetValue(data[1]['background PWDR'][2])
     1658            backFit.Bind(wx.EVT_CHECKBOX, OnBackFit)
     1659            backSizer.Add(backFit,0,WACV)
    16401660        fileSizer.Add(backSizer)
    16411661        return fileSizer
    16421662   
    16431663    def CalcBack(PatternId=G2frame.PatternId):
    1644             limits = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Limits'))[1]
    1645             inst,inst2 = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Instrument Parameters'))
    1646             backData = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Background'))
    1647             dataType = inst['Type'][0]
    1648             insDict = {inskey:inst[inskey][1] for inskey in inst}
    1649             parmDict = {}
    1650             bakType,bakDict,bakVary = G2pwd.SetBackgroundParms(data)
    1651             parmDict.update(bakDict)
    1652             parmDict.update(insDict)
    1653             pwddata = G2frame.GPXtree.GetItemPyData(PatternId)
    1654             xBeg = np.searchsorted(pwddata[1][0],limits[0])
    1655             xFin = np.searchsorted(pwddata[1][0],limits[1])
    1656             fixBack = backData[1]['background PWDR']
    1657             try:    #typically bad grid value or no fixed bkg file
    1658                 Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,fixBack[0])
    1659                 fixData = G2frame.GPXtree.GetItemPyData(Id)
    1660                 fixedBkg = {'_fixedVary':False,'_fixedMult':fixBack[1],'_fixedValues':fixData[1][1][xBeg:xFin]}
    1661                 pwddata[1][4][xBeg:xFin] = G2pwd.getBackground('',parmDict,bakType,dataType,pwddata[1][0][xBeg:xFin],fixedBkg)[0]
    1662             except:
    1663                 pass
     1664        limits = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Limits'))[1]
     1665        inst,inst2 = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Instrument Parameters'))
     1666        backData = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Background'))
     1667        dataType = inst['Type'][0]
     1668        insDict = {inskey:inst[inskey][1] for inskey in inst}
     1669        parmDict = {}
     1670        bakType,bakDict,bakVary = G2pwd.SetBackgroundParms(data)
     1671        parmDict.update(bakDict)
     1672        parmDict.update(insDict)
     1673        pwddata = G2frame.GPXtree.GetItemPyData(PatternId)
     1674        xBeg = np.searchsorted(pwddata[1][0],limits[0])
     1675        xFin = np.searchsorted(pwddata[1][0],limits[1])
     1676        fixBack = GetFileBackground(G2frame,pwddata[1],backData,scale=False)
     1677        pwddata[1][4][xBeg:xFin] = G2pwd.getBackground('',parmDict,bakType,dataType,pwddata[1][0][xBeg:xFin],fixBack[xBeg:xFin])[0]
    16641678
    16651679    # UpdateBackground execution starts here   
    16661680    if len(data) < 2:       #add Debye diffuse & peaks scattering here
    1667         data.append({'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[]})
     1681        data.append({'nDebye':0,'debyeTerms':[],'nPeaks':0,'peaksList':[],'background PWDR':['',1.0,False]})
    16681682    if 'nPeaks' not in data[1]:
    1669         data[1].update({'nPeaks':0,'peaksList':[]})
     1683        data[1].update({'nPeaks':0,'peaksList':[],'background PWDR':['',1.0,False]})
     1684    if 'background PWDR' not in data[1]:
     1685        data[1].update({'background PWDR':['',1.0,False]})
     1686    elif len(data[1]['background PWDR']) < 3:
     1687        data[1]['background PWDR'].append(False)
    16701688    G2frame.dataWindow.currentGrids = []
    16711689    G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.BackMenu)
     
    50045022                G2frame.RefList = ''
    50055023                phaseName = ''
     5024    G2frame.dataWindow.GetSizer().Add(G2G.HelpButton(G2frame.dataWindow,helpIndex=G2frame.dataWindow.helpKey))
    50065025    if phaseName: ShowReflTable(phaseName)
    50075026    G2frame.refBook.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged)
Note: See TracChangeset for help on using the changeset viewer.