Changeset 2708 for trunk/GSASIIpwdGUI.py


Ignore:
Timestamp:
Feb 16, 2017 1:58:46 PM (6 years ago)
Author:
vondreele
Message:

removed 'Add' fromPDF default file items
add 'Refine' for Sample Bkg file item in PDF Controls GUI
modify OptimizePDF to allow refinement of Sample Bkg. 'Mult'
make sure PDF is updated after each step in Optimize all
add a Only copy flags to PDF Copy dialog

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwdGUI.py

    r2705 r2708  
    46354635    '''
    46364636    import scipy.optimize as opt
    4637     SetUp = SetupPDFEval(G2frame,data)
    4638     Min,Init,Done = SetUp
     4637    Min,Init,Done = SetupPDFEval(G2frame,data)
    46394638    xstart = Init()
     4639    bakMul = data['Sample Bkg.']['Mult']
    46404640    if showFit:
    46414641        rms = Min(xstart)
    46424642        print('  Optimizing corrections to improve G(r) at low r')
    4643         print('  start: Flat Bkg={:.1f}, BackRatio={:.3f}, Ruland={:.3f} (RMS:{:.4f})'.format(
    4644             data['Flat Bkg'],data['BackRatio'],data['Ruland'],rms))
    4645 
    4646     res = opt.minimize(Min,xstart,bounds=([0,None],[0,1],[0.01,1]),
    4647                         method='L-BFGS-B',options={'maxiter':maxCycles},tol=0.001)
     4643        if data['Sample Bkg.']['Refine']:
     4644            print('  start: Ruland={:.3f}, Sample Bkg mult={:.3f} (RMS:{:.4f})'.format(
     4645                data['Ruland'],data['Sample Bkg.']['Mult'],rms))
     4646        else:
     4647            print('  start: Flat Bkg={:.1f}, BackRatio={:.3f}, Ruland={:.3f} (RMS:{:.4f})'.format(
     4648                data['Flat Bkg'],data['BackRatio'],data['Ruland'],rms))
     4649    if data['Sample Bkg.']['Refine']:
     4650        res = opt.minimize(Min,xstart,bounds=([0.01,1],[1.2*bakMul,0.8*bakMul]),
     4651                    method='L-BFGS-B',options={'maxiter':maxCycles},tol=0.001)
     4652    else:
     4653        res = opt.minimize(Min,xstart,bounds=([1,None],[0,1],[0.01,1]),
     4654                    method='L-BFGS-B',options={'maxiter':maxCycles},tol=0.001)
    46484655    Done(res['x'])
    46494656    if showFit:
     
    46524659        else:
    46534660            msg = 'Not Converged'
    4654         print('  end:   Flat Bkg={:.1f}, BackRatio={:.3f}, Ruland={:.3f} (RMS:{:.4f}) *** {} ***\n'.format(
    4655             data['Flat Bkg'],data['BackRatio'],data['Ruland'],res['fun'],msg))
     4661        if data['Sample Bkg.']['Refine']:
     4662            print('  end:   Ruland={:.3f}, Sample Bkg mult={:.3f} (RMS:{:.4f}) *** {} ***\n'.format(
     4663                data['Ruland'],data['Sample Bkg.']['Mult'],res['fun'],msg))
     4664        else:
     4665            print('  end:   Flat Bkg={:.1f}, BackRatio={:.3f}, Ruland={:.3f}) *** {} ***\n'.format(
     4666                data['Flat Bkg'],data['BackRatio'],data['Ruland'],res['fun'],msg))
    46564667    return res['success']
    46574668
     
    46774688        the min & max values are between 0 and 1.
    46784689        '''
    4679         F,B,R = arg
    4680         Data['Flat Bkg'] = F*BkgMax
    4681         Data['BackRatio'] = B
     4690        if Data['Sample Bkg.']['Refine']:
     4691            R,S = arg
     4692            Data['Sample Bkg.']['Mult'] = S
     4693        else:
     4694            F,B,R = arg
     4695            Data['Flat Bkg'] = F*BkgMax
     4696            Data['BackRatio'] = B
    46824697        Data['Ruland'] = R/10.
    46834698        G2pwd.CalcPDF(Data,inst,limits,xydata)
     
    46904705        '''Get the current ['Flat Bkg','BackRatio','Ruland'] with scaling
    46914706        '''
     4707        if data['Sample Bkg.']['Refine']:
     4708            return [max(10*data['Ruland'],.05),data['Sample']['Mult']]           
    46924709        try:
    46934710            F = data['Flat Bkg']/BkgMax
    46944711        except:
    4695             F = 0
     4712            F = 10
    46964713        return [F,data['BackRatio'],max(10*data['Ruland'],.05)]
    46974714    def SetFinalVals(arg):
     
    46994716        scaled, refined values and plot corrected region of G(r)
    47004717        '''
    4701         F,B,R = arg
    4702         data['Flat Bkg'] = F*BkgMax
    4703         data['BackRatio'] = B
     4718        if data['Sample Bkg.']['Refine']:
     4719            R,S = arg
     4720            data['Sample Bkg.']['Mult'] = S
     4721        else:
     4722            F,B,R = arg
     4723            data['Flat Bkg'] = F*BkgMax
     4724            data['BackRatio'] = B
    47044725        data['Ruland'] = R/10.
    47054726        G2pwd.CalcPDF(data,inst,limits,xydata)
     
    47414762                wx.CallLater(100,UpdatePDFGrid,G2frame,data)
    47424763                wx.CallAfter(OnComputePDF,None)
     4764               
     4765            def OnRefMult(event):
     4766                item['Refine'] = refMult.GetValue()
    47434767           
    47444768            item = data[key]
     
    47614785            mulBox.Add(multSpin,0,WACV)
    47624786            fileSizer.Add(mulBox,0,WACV)
     4787            if 'Refine' in item:
     4788                refMult = wx.CheckBox(parent=G2frame.dataDisplay,label='Refine?')
     4789                refMult.SetValue(item['Refine'])
     4790                refMult.Bind(wx.EVT_CHECKBOX, OnRefMult)
     4791                fileSizer.Add(refMult,0,WACV)
     4792            else:
     4793                fileSizer.Add((5,5),0)
    47634794           
    47644795        def ResetFlatBkg():
     
    47884819            PDFfileSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=str),0,WACV)
    47894820        PDFfileSizer.Add((5,5),0)
    4790         fileSizer = wx.FlexGridSizer(0,4,5,1)
     4821        fileSizer = wx.FlexGridSizer(0,5,5,1)
    47914822        select = ['Sample Bkg.','Container']
    47924823        if data['Container']['Name']:
     
    48874918            finally:
    48884919                wx.EndBusyCursor()
     4920            OnComputePDF(event)       
    48894921            wx.CallAfter(UpdatePDFGrid,G2frame,data)
    4890             OnComputePDF(event)       
    48914922                       
    48924923        def AfterChangeNoRefresh(invalid,value,tc):
     
    48964927        def OnDetType(event):
    48974928            data['DetType'] = detType.GetValue()
     4929            wx.CallAfter(OnComputePDF,None)
    48984930            wx.CallAfter(UpdatePDFGrid,G2frame,data)
    4899             wx.CallAfter(OnComputePDF,None)
    49004931       
    49014932        def OnFlatSpin(event):
     
    50435074            G2frame.ErrorDialog('Nothing to copy controls to','There must be more than one "PDF" pattern')
    50445075            return
    5045         dlg = G2G.G2MultiChoiceDialog(G2frame,'Copy PDF controls','Copy controls from '+Source+' to:',TextList)
     5076        od = {'label_1':'Only copy flags','value_1':False}
     5077        dlg = G2G.G2MultiChoiceDialog(G2frame,'Copy PDF controls','Copy controls from '+Source+' to:',TextList,extraOpts=od)
    50465078        try:
    50475079            if dlg.ShowModal() == wx.ID_OK:
     
    50505082                    id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,item)
    50515083                    olddata = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'PDF Controls'))
    5052                     sample = olddata['Sample']
    5053                     olddata.update(copy.deepcopy(data))
    5054                     olddata['Sample'] = sample
     5084                    if od['value_1']:
     5085                        olddata['Sample Bkg.']['Refine'] = data['Sample Bkg.']['Refine']    #only one flag
     5086                    else:
     5087                        sample = olddata['Sample']
     5088                        olddata.update(copy.deepcopy(data))
     5089                        olddata['Sample'] = sample
    50555090                    G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'PDF Controls'),olddata)
    50565091                Status.SetStatusText('PDF controls copied')
     
    51705205            return
    51715206        od = {'label_1':'Optimize PDFs','value_1':True}
    5172         dlg = G2G.G2MultiChoiceDialog(
    5173             G2frame.dataFrame, 'Select PDFs to compute','Select PDFs',
     5207        dlg = G2G.G2MultiChoiceDialog(G2frame.dataFrame, 'Select PDFs to compute','Select PDFs',
    51745208            choices,extraOpts=od)
    51755209        try:
     
    51985232                        pgbar.Destroy()
    51995233                        break
    5200                     Data = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id,'PDF Controls'))
     5234                    pId = G2gd.GetPatternTreeItemId(G2frame,id,'PDF Controls')
     5235                    Data = G2frame.PatternTree.GetItemPyData(pId)
    52015236                    print('  Computing {}'.format(Name))
    52025237                    computePDF(G2frame,Data)
    52035238                    if od['value_1']:
    52045239                        notConverged += not OptimizePDF(G2frame,Data,maxCycles=10)
     5240                    computePDF(G2frame,Data)
     5241                    G2frame.PatternTree.SetItemPyData(pId,Data)
    52055242                id, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie)
    52065243        finally:
     
    52595296    if data['DetType'] == 'Image plate':
    52605297        data['DetType'] = 'Area detector'
     5298    if 'Refine' not in data['Sample Bkg.']:
     5299        data['Sample Bkg.']['Refine'] = False
    52615300    if G2frame.dataDisplay:
    52625301        G2frame.dataFrame.Clear()
Note: See TracChangeset for help on using the changeset viewer.