Changeset 2355 for trunk/GSASIIpwdGUI.py


Ignore:
Timestamp:
Jun 30, 2016 8:36:29 AM (6 years ago)
Author:
vondreele
Message:

fix plot bug
add RDF calc - in progress
add background correction to pdf

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwdGUI.py

    r2336 r2355  
    5656cosd = lambda x: math.cos(x*math.pi/180.)
    5757asind = lambda x: 180.*math.asin(x)/math.pi
     58   
     59################################################################################
     60###### class definitions
     61################################################################################
     62
     63class RDFDialog(wx.Dialog):
     64    def __init__(self,parent):
     65        wx.Dialog.__init__(self,parent,-1,'Background radial distribution function',
     66            pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE)
     67        self.panel = wx.Panel(self)         #just a dummy - gets destroyed in Draw!
     68        self.result = {'UseObsCalc':False,'maxR':10.0,'Smooth':'linear'}
     69       
     70        self.Draw()
     71       
     72    def Draw(self):
     73       
     74        def OnUseOC(event):
     75            self.result['UseObsCalc'] = not self.result['UseObsCalc']
     76           
     77        def OnSmCombo(event):
     78            self.result['Smooth'] = smCombo.GetValue()
     79           
     80        def OnMaxR(event):
     81            try:
     82                val = float(maxR.GetValue())
     83                if val <= 0.:
     84                    raise ValueError
     85            except ValueError:
     86                val = self.result['maxR']
     87            self.result['maxR'] = val
     88            maxR.SetValue('%.1f'%(val))
     89       
     90        self.panel.Destroy()
     91        self.panel = wx.Panel(self)
     92        Ind = {}
     93        mainSizer = wx.BoxSizer(wx.VERTICAL)
     94        mainSizer.Add(wx.StaticText(self.panel,label='Background RDF controls:'),0,WACV)
     95        useOC = wx.CheckBox(self.panel,label=' Use obs && calc intensities?')
     96        useOC.SetValue(self.result['UseObsCalc'])
     97        useOC.Bind(wx.EVT_CHECKBOX,OnUseOC)
     98        mainSizer.Add(useOC,0,WACV)
     99        dataSizer = wx.BoxSizer(wx.HORIZONTAL)
     100        dataSizer.Add(wx.StaticText(self.panel,label=' Smoothing type: '),0,WACV)
     101        smChoice = ['linear','nearest','zero','slinear',]
     102        smCombo = wx.ComboBox(self.panel,value=self.result['Smooth'],choices=smChoice,
     103            style=wx.CB_READONLY|wx.CB_DROPDOWN)
     104        smCombo.Bind(wx.EVT_COMBOBOX, OnSmCombo)
     105        dataSizer.Add(smCombo,0,WACV)
     106        dataSizer.Add(wx.StaticText(self.panel,label=' Maximum radial dist.: '),0,WACV)
     107        maxR = wx.TextCtrl(self.panel,value='%.1f'%(self.result['maxR']),style=wx.TE_PROCESS_ENTER)
     108        maxR.Bind(wx.EVT_TEXT_ENTER,OnMaxR)       
     109        maxR.Bind(wx.EVT_KILL_FOCUS,OnMaxR)
     110        dataSizer.Add(maxR,0,WACV)
     111        mainSizer.Add(dataSizer,0,WACV)
     112
     113        OkBtn = wx.Button(self.panel,-1,"Ok")
     114        OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)
     115        cancelBtn = wx.Button(self.panel,-1,"Cancel")
     116        cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel)
     117        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
     118        btnSizer.Add((20,20),1)
     119        btnSizer.Add(OkBtn)
     120        btnSizer.Add((20,20),1)
     121        btnSizer.Add(cancelBtn)
     122        btnSizer.Add((20,20),1)
     123       
     124        mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)
     125        self.panel.SetSizer(mainSizer)
     126        self.panel.Fit()
     127        self.Fit()
     128       
     129    def GetSelection(self):
     130        return self.result
     131
     132    def OnOk(self,event):
     133        parent = self.GetParent()
     134        parent.Raise()
     135        self.EndModal(wx.ID_OK)
     136
     137    def OnCancel(self,event):
     138        parent = self.GetParent()
     139        parent.Raise()
     140        self.EndModal(wx.ID_CANCEL)
     141       
     142   
     143################################################################################
     144##### Setup routines
     145################################################################################
    58146   
    59147def IsHistogramInAnyPhase(G2frame,histoName):
     
    851939        try:
    852940            G2pwd.DoPeakFit('LSQ',[],background,limits,inst,inst2,
    853                             np.array((xdata,ydata,W,Z,Z,Z)),bakVary,False,controls)
     941                np.array((xdata,ydata,W,Z,Z,Z)),bakVary,False,controls)
    854942        finally:
    855943            wx.EndBusyCursor()
     
    882970            Peaks['peaks'].append([peak[0],0,peak[2],0,peak[4],0,peak[6],0])
    883971        G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Peak List'),Peaks)
     972       
     973    def OnMakeRDF(event):
     974        dlg = RDFDialog(G2frame)
     975        try:
     976            if dlg.ShowModal() == wx.ID_OK:
     977                RDFcontrols = dlg.GetSelection()
     978            else:
     979                return
     980        finally:
     981            dlg.Destroy()
     982        xydata = {}
     983        PatternId = G2frame.PatternId       
     984        background = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Background'))
     985        limits = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Limits'))[1]
     986        inst,inst2 = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Instrument Parameters'))
     987        pwddata = G2frame.PatternTree.GetItemPyData(PatternId)[1]
     988        auxPlot = G2pwd.MakeRDF(RDFcontrols,background,inst,pwddata,xydata)
     989#        GSASIIpath.IPyBreak()
     990        superMinusOne = unichr(0xaf)+unichr(0xb9)
     991        for plot in auxPlot:
     992            XY = np.array(plot[:2])
     993            G2plt.PlotXY(G2frame,[XY,],Title=plot[2],labelX=r'$Q,\AA$'+superMinusOne,labelY=r'$I(Q)$')     
     994        G2plt.PlotXY(G2frame,xydata,Title='D(r)') 
     995       
    884996       
    885997    def BackSizer():
     
    10761188    G2frame.Bind(wx.EVT_MENU,OnBackFlagCopy,id=G2gd.wxID_BACKFLAGCOPY)
    10771189    G2frame.Bind(wx.EVT_MENU,OnPeaksMove,id=G2gd.wxID_PEAKSMOVE)
     1190    G2frame.Bind(wx.EVT_MENU,OnMakeRDF,id=G2gd.wxID_MAKEBACKRDF)
    10781191    G2frame.Bind(wx.EVT_MENU,OnBkgFit,id=G2frame.dataFrame.wxID_BackPts['Fit'])
    10791192    G2frame.Bind(wx.EVT_MENU,OnBkgClear,id=G2frame.dataFrame.wxID_BackPts['Clear'])   
     
    44784591    azimuth = inst['Azimuth'][1]
    44794592    itemDict = {}
     4593    #patch
     4594    if 'BackRatio' not in data:
     4595        data['BackRatio'] = 0.
    44804596   
    44814597    def FillFileSizer(fileSizer,key):
     
    46354751        G2plt.PlotISFG(G2frame,newPlot=False)
    46364752       
     4753    def OnBackVal(event):
     4754        try:
     4755            value = float(backVal.GetValue())
     4756            value = min(max(0.,value),1.0)
     4757        except ValueError:
     4758            value = data['BackRatio']
     4759        data['BackRatio'] = value
     4760        backVal.SetValue('%.3f'%(value))
     4761        auxPlot = ComputePDF(data)
     4762        G2plt.PlotISFG(G2frame,newPlot=False)
     4763       
     4764    def OnBackSlider(event):
     4765        value = int(backSldr.GetValue())/100.
     4766        data['BackRatio'] = value
     4767        backVal.SetValue('%.3f'%(data['BackRatio']))
     4768        auxPlot = ComputePDF(data)
     4769        G2plt.PlotISFG(G2frame,newPlot=False)
     4770       
    46374771    def OnRulandWdt(event):
    46384772        try:
     
    46584792    def OnLorch(event):
    46594793        data['Lorch'] = lorch.GetValue()
     4794        auxPlot = ComputePDF(data)
     4795        G2plt.PlotISFG(G2frame,newPlot=False)       
     4796                       
     4797    def OnSinDamp(event):
     4798        data['sinDamp'] = sinDamp.GetValue()
    46604799        auxPlot = ComputePDF(data)
    46614800        G2plt.PlotISFG(G2frame,newPlot=False)       
     
    49445083    mainSizer.Add(sqBox,0)
    49455084       
     5085    bkBox = wx.BoxSizer(wx.HORIZONTAL)
     5086    bkBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Background ratio: '),0,WACV)   
     5087    backSldr = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,
     5088        value=int(100*data['BackRatio']))
     5089    bkBox.Add(backSldr,1,wx.EXPAND)
     5090    backSldr.Bind(wx.EVT_SLIDER, OnBackSlider)
     5091    backVal = wx.TextCtrl(G2frame.dataDisplay,value='%.3f'%(data['BackRatio']))
     5092    backVal.Bind(wx.EVT_TEXT_ENTER,OnBackVal)       
     5093    backVal.Bind(wx.EVT_KILL_FOCUS,OnBackVal)
     5094    bkBox.Add(backVal,0,WACV)   
     5095    mainSizer.Add(bkBox,0,wx.ALIGN_LEFT|wx.EXPAND)
     5096
    49465097    sqBox = wx.BoxSizer(wx.HORIZONTAL)
    49475098    sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Ruland width: '),0,WACV)   
     
    49615112    lorch.Bind(wx.EVT_CHECKBOX, OnLorch)
    49625113    sqBox.Add(lorch,0,WACV)
     5114# this isn't the right thing but something is needed here - leave as place holder
     5115#    sinDamp = wx.CheckBox(G2frame.dataDisplay,label='SinQ damping?')
     5116#    sinDamp.SetValue(data['sinDamp'])
     5117#    sinDamp.Bind(wx.EVT_CHECKBOX,OnSinDamp)
     5118#    sqBox.Add(sinDamp,0,WACV)
    49635119    sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Scaling q-range: '),0,WACV)
    49645120    SQmin = wx.TextCtrl(G2frame.dataDisplay,value='%.1f'%(data['QScaleLim'][0]))
Note: See TracChangeset for help on using the changeset viewer.