Changeset 2676


Ignore:
Timestamp:
Jan 30, 2017 4:03:55 PM (5 years ago)
Author:
vondreele
Message:

refactor UpdatePDFGrid to break up into blocks of sizers

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIimgGUI.py

    r2675 r2676  
    16481648    if Polygons:
    16491649        lbl = wx.StaticText(parent=G2frame.dataDisplay,
    1650             label=' Polygon masks (on plot RB vertex drag to move,\nLB vertex drag to insert)')
     1650            label=' Polygon masks (on plot RB vertex drag to move, LB vertex drag to insert)')
    16511651        lbl.SetBackgroundColour(wx.Colour(200,200,210))
    16521652        mainSizer.Add(lbl,0,wx.EXPAND|wx.ALIGN_CENTER,0)
     
    16651665    if frame:
    16661666        lbl = wx.StaticText(parent=G2frame.dataDisplay,
    1667             label=' Frame mask (on plot RB vertex drag to move,LB vertex drag to insert)')
     1667            label=' Frame mask (on plot RB vertex drag to move, LB vertex drag to insert)')
    16681668        lbl.SetBackgroundColour(wx.Colour(200,200,210))
    16691669        mainSizer.Add(lbl,0,wx.EXPAND|wx.ALIGN_CENTER,0)
  • trunk/GSASIIpwdGUI.py

    r2675 r2676  
    47334733    '''respond to selection of PWDR PDF data tree item.
    47344734    '''   
    4735     def FillFileSizer(fileSizer,key):
    4736         #fileSizer is a FlexGridSizer(3,4)
    4737        
    4738         def OnSelectFile(event):
    4739             Obj = event.GetEventObject()
    4740             fileKey,itemKey,fmt = itemDict[Obj.GetId()]
    4741             if itemKey == 'Name':
    4742                 value = Obj.GetValue()
    4743             Obj.SetValue(fmt%(value))
    4744             data[fileKey][itemKey] = value
    4745             wx.CallLater(100,UpdatePDFGrid,G2frame,data)
     4735   
     4736    def PDFFileSizer():
     4737       
     4738        def FillFileSizer(fileSizer,key):
     4739            #fileSizer is a FlexGridSizer(3,4)
     4740           
     4741            def OnSelectFile(event):
     4742                Obj = event.GetEventObject()
     4743                fileKey,itemKey,fmt = itemDict[Obj.GetId()]
     4744                if itemKey == 'Name':
     4745                    value = Obj.GetValue()
     4746                Obj.SetValue(fmt%(value))
     4747                data[fileKey][itemKey] = value
     4748                wx.CallLater(100,UpdatePDFGrid,G2frame,data)
     4749                wx.CallAfter(OnComputePDF,None)
     4750               
     4751            def OnMoveMult(event):
     4752                data[key]['Mult'] += multSpin.GetValue()*0.01
     4753                mult.SetValue(data[key]['Mult'])
     4754                multSpin.SetValue(0)
     4755                wx.CallAfter(OnComputePDF,None)
     4756                           
     4757            def AfterChange(invalid,value,tc):
     4758                if invalid: return
     4759                wx.CallAfter(OnComputePDF,None)
     4760           
     4761            item = data[key]
     4762            fileList = [''] + GetFileList(G2frame,'PWDR')
     4763            fileSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' '+key+' file:'),0,WACV)
     4764            fileName = wx.ComboBox(G2frame.dataDisplay,value=item['Name'],choices=fileList,
     4765                style=wx.CB_READONLY|wx.CB_DROPDOWN)
     4766            itemDict[fileName.GetId()] = [key,'Name','%s']
     4767            fileName.Bind(wx.EVT_COMBOBOX,OnSelectFile)       
     4768            fileSizer.Add(fileName,0,)
     4769            fileSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label='Multiplier:'),0,WACV)
     4770            mulBox = wx.BoxSizer(wx.HORIZONTAL)
     4771            mult = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,item,'Mult',nDig=(10,3),
     4772                typeHint=float,OnLeave=AfterChange)
     4773            mulBox.Add(mult,0,)
     4774            multSpin = wx.SpinButton(G2frame.dataDisplay,style=wx.SP_VERTICAL,size=wx.Size(20,25))
     4775            multSpin.SetRange(-1,1)
     4776            multSpin.SetValue(0)
     4777            multSpin.Bind(wx.EVT_SPIN, OnMoveMult)
     4778            mulBox.Add(multSpin,0,WACV)
     4779            fileSizer.Add(mulBox,0,WACV)
     4780       
     4781        PDFfileSizer = wx.BoxSizer(wx.VERTICAL)
     4782        PDFfileSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' PDF data files: '),0,WACV)
     4783        PDFfileSizer.Add((5,5),0)   
     4784        if 'C' in inst['Type'][0]:
     4785            str = ' Sample file: PWDR %s   Wavelength, A: %.5f  Energy, keV: %.3f  Polariz.: %.2f '%(dataFile[3:],wave,keV,polariz)
     4786            PDFfileSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=str),0,WACV)
     4787        PDFfileSizer.Add((5,5),0)
     4788        fileSizer = wx.FlexGridSizer(0,4,5,1)
     4789        select = ['Sample Bkg.','Container']
     4790        if data['Container']['Name']:
     4791            select.append('Container Bkg.')
     4792        for key in select:
     4793            FillFileSizer(fileSizer,key)
     4794        PDFfileSizer.Add(fileSizer,0)
     4795        return PDFfileSizer
     4796       
     4797    def SampleSizer():
     4798   
     4799        def FillElemSizer(elemSizer,ElData):
     4800           
     4801            def AfterChange(invalid,value,tc):
     4802                if invalid: return
     4803                data['Form Vol'] = max(10.0,SumElementVolumes())
     4804                wx.CallAfter(UpdatePDFGrid,G2frame,data)
     4805                wx.CallAfter(OnComputePDF,None)
     4806                   
     4807            elemSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,
     4808                label=' Element: '+'%2s'%(ElData['Symbol'])+' * '),0,WACV)
     4809            num = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,ElData,'FormulaNo',nDig=(10,3),min=0.0,
     4810                typeHint=float,OnLeave=AfterChange)
     4811            elemSizer.Add(num,0,WACV)
     4812            elemSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,
     4813                label="f': %.3f"%(ElData['fp'])+' f": %.3f'%(ElData['fpp'])+' mu: %.2f barns'%(ElData['mu']) ),
     4814                0,WACV)
     4815           
     4816        def AfterChange(invalid,value,tc):
     4817            if invalid: return
     4818            wx.CallAfter(UpdatePDFGrid,G2frame,data)
     4819            wx.CallAfter(OnComputePDF,None)
     4820       
     4821        def OnGeometry(event):
     4822            data['Geometry'] = geometry.GetValue()
     4823            wx.CallAfter(UpdatePDFGrid,G2frame,data)
     4824            #UpdatePDFGrid(G2frame,data)
     4825            wx.CallAfter(OnComputePDF,None)
     4826       
     4827        sampleSizer = wx.BoxSizer(wx.VERTICAL)
     4828        if not ElList:
     4829            sampleSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Sample information: fill in this 1st'),0,WACV)
     4830        else:
     4831            sampleSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Sample information: '),0,WACV)
     4832        sampleSizer.Add((5,5),0)   
     4833        Abs = G2lat.CellAbsorption(ElList,data['Form Vol'])
     4834        Trans = G2pwd.Transmission(data['Geometry'],Abs*data['Pack'],data['Diam'])
     4835        elemSizer = wx.FlexGridSizer(0,3,5,1)
     4836        for El in ElList:
     4837            FillElemSizer(elemSizer,ElList[El])
     4838        sampleSizer.Add(elemSizer,0)
     4839        sampleSizer.Add((5,5),0)   
     4840        midSizer = wx.BoxSizer(wx.HORIZONTAL)
     4841        midSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Formula volume: '),0,WACV)
     4842        formVol = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Form Vol',nDig=(10,3),min=10.0,
     4843            typeHint=float,OnLeave=AfterChange)
     4844        midSizer.Add(formVol,0)
     4845        midSizer.Add(wx.StaticText(G2frame.dataDisplay,
     4846            label=' Theoretical absorption: %.4f cm-1 Sample absorption: %.4f cm-1'%(Abs,Abs*data['Pack'])),
     4847            0,WACV)
     4848        sampleSizer.Add(midSizer,0)
     4849        sampleSizer.Add((5,5),0)
     4850        geoBox = wx.BoxSizer(wx.HORIZONTAL)
     4851        geoBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Sample geometry: '),0,WACV)
     4852        choice = ['Cylinder','Bragg-Brentano','Tilting flat plate in transmission','Fixed flat plate']
     4853        geometry = wx.ComboBox(G2frame.dataDisplay,value=data['Geometry'],choices=choice,
     4854                style=wx.CB_READONLY|wx.CB_DROPDOWN)
     4855        geometry.Bind(wx.EVT_COMBOBOX, OnGeometry)
     4856        geoBox.Add(geometry,0)
     4857        geoBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Sample diameter/thickness, mm: '),0,WACV)
     4858        diam = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Diam',nDig=(10,3),min=0.01,
     4859            typeHint=float,OnLeave=AfterChange)
     4860        geoBox.Add(diam,0)
     4861        sampleSizer.Add(geoBox,0)
     4862        sampleSizer.Add((5,5),0)   
     4863        geoBox = wx.BoxSizer(wx.HORIZONTAL)
     4864        geoBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Packing: '),0,WACV)
     4865        pack = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Pack',nDig=(10,2),min=0.01,
     4866            typeHint=float,OnLeave=AfterChange)
     4867        geoBox.Add(pack,0)
     4868        geoBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Sample transmission: %.3f %%'%(Trans)),0,WACV)   
     4869        sampleSizer.Add(geoBox,0)
     4870        return sampleSizer
     4871       
     4872    def SFGctrlSizer():
     4873       
     4874        def OnOptimizePDF(event):
     4875            '''Optimize Flat Bkg, BackRatio & Ruland corrections to remove spurious
     4876            "intensity" from portion of G(r) with r<Rmin.
     4877            Invoked by Optimize PDF button and from menu command.
     4878            '''
     4879            if not data['ElList']:
     4880                G2frame.ErrorDialog('PDF error','Chemical formula not defined')
     4881                return
     4882            wx.BeginBusyCursor()
     4883            try:
     4884                OptimizePDF(G2frame,data)
     4885            finally:
     4886                wx.EndBusyCursor()
     4887            wx.CallAfter(UpdatePDFGrid,G2frame,data)
     4888            OnComputePDF(event)       
     4889                       
     4890        def AfterChangeNoRefresh(invalid,value,tc):
     4891            if invalid: return
     4892            wx.CallAfter(OnComputePDF,None)
     4893       
     4894        def OnDetType(event):
     4895            data['DetType'] = detType.GetValue()
     4896            wx.CallAfter(UpdatePDFGrid,G2frame,data)
     4897            wx.CallAfter(OnComputePDF,None)
     4898       
     4899        def OnFlatSpin(event):
     4900            data['Flat Bkg'] += flatSpin.GetValue()*0.01*data['IofQmin']
     4901            flatBkg.SetValue(data['Flat Bkg'])
     4902            flatSpin.SetValue(0)       
     4903            wx.CallAfter(OnComputePDF,None)
     4904               
     4905        def OnBackSlider(event):
     4906            value = int(backSldr.GetValue())/100.
     4907            data['BackRatio'] = value
     4908            backVal.SetValue(data['BackRatio'])
     4909            wx.CallAfter(OnComputePDF,None)
     4910       
     4911        def OnRulSlider(event):
     4912            value = int(rulandSldr.GetValue())/1000.
     4913            data['Ruland'] = max(0.001,value)
     4914            rulandWdt.SetValue(data['Ruland'])
     4915            wx.CallAfter(OnComputePDF,None)
     4916       
     4917        def NewQmax(invalid,value,tc):
     4918            if invalid: return
     4919            data['QScaleLim'][0] = 0.9*value
     4920            SQmin.SetValue(data['QScaleLim'][0])
     4921            wx.CallAfter(OnComputePDF,None)
     4922       
     4923        def OnResetQ(event):
     4924            data['QScaleLim'][1] = qLimits[1]
     4925            SQmax.SetValue(data['QScaleLim'][1])
     4926            data['QScaleLim'][0] = 0.9*qLimits[1]
     4927            SQmin.SetValue(data['QScaleLim'][0])
    47464928            wx.CallAfter(OnComputePDF,None)
    47474929           
    4748         def OnMoveMult(event):
    4749             data[key]['Mult'] += multSpin.GetValue()*0.01
    4750             mult.SetValue(data[key]['Mult'])
    4751             multSpin.SetValue(0)
     4930        def OnLorch(event):
     4931            data['Lorch'] = lorch.GetValue()
    47524932            wx.CallAfter(OnComputePDF,None)
    4753                        
    4754         def AfterChange(invalid,value,tc):
    4755             if invalid: return
     4933                           
     4934        def OnNoRing(event):
     4935            data['noRing'] = not data['noRing']
    47564936            wx.CallAfter(OnComputePDF,None)
    4757        
    4758         item = data[key]
    4759         fileList = [''] + GetFileList(G2frame,'PWDR')
    4760         fileSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' '+key+' file:'),0,WACV)
    4761         fileName = wx.ComboBox(G2frame.dataDisplay,value=item['Name'],choices=fileList,
    4762             style=wx.CB_READONLY|wx.CB_DROPDOWN)
    4763         itemDict[fileName.GetId()] = [key,'Name','%s']
    4764         fileName.Bind(wx.EVT_COMBOBOX,OnSelectFile)       
    4765         fileSizer.Add(fileName,0,)
    4766         fileSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label='Multiplier:'),0,WACV)
    4767         mulBox = wx.BoxSizer(wx.HORIZONTAL)
    4768         mult = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,item,'Mult',nDig=(10,3),
    4769             typeHint=float,OnLeave=AfterChange)
    4770         mulBox.Add(mult,0,)
    4771         multSpin = wx.SpinButton(G2frame.dataDisplay,style=wx.SP_VERTICAL,size=wx.Size(20,25))
    4772         multSpin.SetRange(-1,1)
    4773         multSpin.SetValue(0)
    4774         multSpin.Bind(wx.EVT_SPIN, OnMoveMult)
    4775         mulBox.Add(multSpin,0,WACV)
    4776         fileSizer.Add(mulBox,0,WACV)
    4777        
     4937
     4938        sfgSizer = wx.BoxSizer(wx.VERTICAL)         
     4939        sqBox = wx.BoxSizer(wx.HORIZONTAL)
     4940        sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' S(Q)->F(Q)->G(r) controls: '),0,WACV)
     4941        sqBox.Add((1,1),1,wx.EXPAND,1)
     4942        optB = wx.Button(G2frame.dataDisplay,label='Optimize PDF',style=wx.BU_EXACTFIT)
     4943        optB.Bind(wx.EVT_BUTTON, OnOptimizePDF)
     4944        sqBox.Add(optB,0,WACV|wx.ALIGN_RIGHT)
     4945        sfgSizer.Add(sqBox,0,wx.EXPAND)
     4946       
     4947        sfgSizer.Add((5,5),0)
     4948        sqBox = wx.BoxSizer(wx.HORIZONTAL)
     4949        sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Detector type: '),0,WACV)
     4950        choice = ['Image plate','Point detector']
     4951        detType = wx.ComboBox(G2frame.dataDisplay,value=data['DetType'],choices=choice,
     4952                style=wx.CB_READONLY|wx.CB_DROPDOWN)
     4953        detType.Bind(wx.EVT_COMBOBOX, OnDetType)
     4954        sqBox.Add(detType,0)
     4955        if data['DetType'] == 'Image plate':
     4956            sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' IP transmission coeff.: '),0,WACV)
     4957            obliqCoeff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'ObliqCoeff',nDig=(10,3),min=0.0,max=1.0,
     4958                typeHint=float,OnLeave=AfterChangeNoRefresh)
     4959            sqBox.Add(obliqCoeff,0)
     4960        sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Flat Bkg.: '),0,WACV)
     4961        flatBkg = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Flat Bkg',nDig=(10,0),
     4962                typeHint=float,OnLeave=AfterChangeNoRefresh)
     4963        sqBox.Add(flatBkg,0)
     4964        flatSpin = wx.SpinButton(G2frame.dataDisplay,style=wx.SP_VERTICAL,size=wx.Size(20,25))
     4965        flatSpin.SetRange(-1,1)
     4966        flatSpin.SetValue(0)
     4967        flatSpin.Bind(wx.EVT_SPIN, OnFlatSpin)
     4968        sqBox.Add(flatSpin,0,WACV)
     4969        sqBox.Add((1,1),1,wx.EXPAND,1)
     4970        sqBox.Add(wx.StaticText(G2frame.dataDisplay,label='Rmin: '),0,WACV|wx.ALIGN_RIGHT)
     4971        rmin = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Rmin',nDig=(5,1),
     4972                typeHint=float,size=wx.Size(50,20))
     4973        sqBox.Add(rmin,0,WACV|wx.ALIGN_RIGHT)
     4974        sfgSizer.Add(sqBox,0,wx.EXPAND)
     4975           
     4976        bkBox = wx.BoxSizer(wx.HORIZONTAL)
     4977        bkBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Background ratio: '),0,WACV)   
     4978        backSldr = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,
     4979            value=int(100*data['BackRatio']))
     4980        bkBox.Add(backSldr,1,wx.EXPAND)
     4981        backSldr.Bind(wx.EVT_SLIDER, OnBackSlider)
     4982        backVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'BackRatio',nDig=(10,3),min=0.0,max=1.0,
     4983            typeHint=float,OnLeave=AfterChangeNoRefresh)
     4984        bkBox.Add(backVal,0,WACV)   
     4985        sfgSizer.Add(bkBox,0,wx.ALIGN_LEFT|wx.EXPAND)
     4986   
     4987        sqBox = wx.BoxSizer(wx.HORIZONTAL)
     4988        sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Ruland width: '),0,WACV)   
     4989        rulandSldr = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,
     4990            value=int(1000*data['Ruland']))
     4991        sqBox.Add(rulandSldr,1,wx.EXPAND)
     4992        rulandSldr.Bind(wx.EVT_SLIDER, OnRulSlider)
     4993        rulandWdt = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Ruland',nDig=(10,3),min=0.001,max=1.0,
     4994            typeHint=float,OnLeave=AfterChangeNoRefresh)
     4995        sqBox.Add(rulandWdt,0,WACV)   
     4996        sfgSizer.Add(sqBox,0,wx.ALIGN_LEFT|wx.EXPAND)
     4997       
     4998        sqBox = wx.BoxSizer(wx.HORIZONTAL)
     4999        sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Scaling Q-range: '),0,WACV)
     5000        SQmin = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['QScaleLim'],0,nDig=(10,3),
     5001            min=qLimits[0],max=.95*data['QScaleLim'][1],
     5002            typeHint=float,OnLeave=AfterChangeNoRefresh)
     5003        sqBox.Add(SQmin,0,WACV)
     5004        sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' to Qmax '),0,WACV)
     5005        SQmax = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['QScaleLim'],1,nDig=(10,3),
     5006                                     min=qLimits[0],max=qLimits[1],
     5007                                     typeHint=float,OnLeave=NewQmax)
     5008        sqBox.Add(SQmax,0,WACV)
     5009        resetQ = wx.Button(G2frame.dataDisplay,label='Reset?',style=wx.BU_EXACTFIT)
     5010        sqBox.Add(resetQ,0,WACV)
     5011        resetQ.Bind(wx.EVT_BUTTON, OnResetQ)
     5012        sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Rmax: '),0,WACV)
     5013        rmax = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Rmax',nDig=(10,1),min=10.,max=200.,
     5014            typeHint=float,OnLeave=AfterChangeNoRefresh,size=wx.Size(50,20))
     5015        sqBox.Add(rmax,0,WACV)
     5016        lorch = wx.CheckBox(parent=G2frame.dataDisplay,label='Lorch damping?')
     5017        lorch.SetValue(data['Lorch'])
     5018        lorch.Bind(wx.EVT_CHECKBOX, OnLorch)
     5019        sqBox.Add(lorch,0,WACV)
     5020        noRing = wx.CheckBox(parent=G2frame.dataDisplay,label='Suppress G(0) ringing?')
     5021        noRing.SetValue(data['noRing'])
     5022        noRing.Bind(wx.EVT_CHECKBOX, OnNoRing)
     5023        sqBox.Add(noRing,0,WACV)
     5024        sfgSizer.Add(sqBox,0)
     5025        return sfgSizer
     5026           
    47785027    def SumElementVolumes():
    47795028        sumVol = 0.
     
    47855034        wx.CallAfter(OnComputePDF,None)
    47865035       
    4787     def FillElemSizer(elemSizer,ElData):
    4788        
    4789         def AfterChange(invalid,value,tc):
    4790             if invalid: return
    4791             data['Form Vol'] = max(10.0,SumElementVolumes())
    4792             wx.CallAfter(UpdatePDFGrid,G2frame,data)
    4793             wx.CallAfter(OnComputePDF,None)
    4794                
    4795         elemSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,
    4796             label=' Element: '+'%2s'%(ElData['Symbol'])+' * '),0,WACV)
    4797         num = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,ElData,'FormulaNo',nDig=(10,3),min=0.0,
    4798             typeHint=float,OnLeave=AfterChange)
    4799         elemSizer.Add(num,0,WACV)
    4800         elemSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,
    4801             label="f': %.3f"%(ElData['fp'])+' f": %.3f'%(ElData['fpp'])+' mu: %.2f barns'%(ElData['mu']) ),
    4802             0,WACV)
    4803            
    4804     def OnGeometry(event):
    4805         data['Geometry'] = geometry.GetValue()
    4806         wx.CallAfter(UpdatePDFGrid,G2frame,data)
    4807         #UpdatePDFGrid(G2frame,data)
    4808         wx.CallAfter(OnComputePDF,None)
    4809        
    4810     def OnDetType(event):
    4811         data['DetType'] = detType.GetValue()
    4812         wx.CallAfter(UpdatePDFGrid,G2frame,data)
    4813         #UpdatePDFGrid(G2frame,data)
    4814         wx.CallAfter(OnComputePDF,None)
    4815        
    4816     def OnFlatSpin(event):
    4817         data['Flat Bkg'] += flatSpin.GetValue()*0.01*data['IofQmin']
    4818         flatBkg.SetValue(data['Flat Bkg'])
    4819         flatSpin.SetValue(0)       
    4820         wx.CallAfter(OnComputePDF,None)
    4821        
    4822     def AfterChange(invalid,value,tc):
    4823         if invalid: return
    4824         wx.CallAfter(UpdatePDFGrid,G2frame,data)
    4825         wx.CallAfter(OnComputePDF,None)
    4826        
    4827     def AfterChangeNoRefresh(invalid,value,tc):
    4828         if invalid: return
    4829         wx.CallAfter(OnComputePDF,None)
    4830        
    4831     def NewQmax(invalid,value,tc):
    4832         if invalid: return
    4833         data['QScaleLim'][0] = 0.9*value
    4834         SQmin.SetValue(data['QScaleLim'][0])
    4835         wx.CallAfter(OnComputePDF,None)
    4836        
    4837     def OnBackSlider(event):
    4838         value = int(backSldr.GetValue())/100.
    4839         data['BackRatio'] = value
    4840         backVal.SetValue(data['BackRatio'])
    4841         wx.CallAfter(OnComputePDF,None)
    4842        
    4843     def OnRulSlider(event):
    4844         value = int(rulandSldr.GetValue())/1000.
    4845         data['Ruland'] = max(0.001,value)
    4846         rulandWdt.SetValue(data['Ruland'])
    4847         wx.CallAfter(OnComputePDF,None)
    4848        
    4849     def OnLorch(event):
    4850         data['Lorch'] = lorch.GetValue()
    4851         wx.CallAfter(OnComputePDF,None)
    4852                        
    4853     def OnResetQ(event):
    4854         data['QScaleLim'][1] = qLimits[1]
    4855         SQmax.SetValue(data['QScaleLim'][1])
    4856         data['QScaleLim'][0] = 0.9*qLimits[1]
    4857         SQmin.SetValue(data['QScaleLim'][0])
    4858         wx.CallAfter(OnComputePDF,None)
    4859        
    4860     def OnNoRing(event):
    4861         data['noRing'] = not data['noRing']
    4862         wx.CallAfter(OnComputePDF,None)
    4863 
    48645036    def OnCopyPDFControls(event):
    48655037        import copy
     
    49565128        wx.CallAfter(UpdatePDFGrid,G2frame,data)
    49575129
    4958     def OnOptimizePDF(event):
    4959         '''Optimize Flat Bkg, BackRatio & Ruland corrections to remove spurious
    4960         "intensity" from portion of G(r) with r<Rmin.
    4961         Invoked by Optimize PDF button and from menu command.
    4962         '''
    4963         if not data['ElList']:
    4964             G2frame.ErrorDialog('PDF error','Chemical formula not defined')
    4965             return
    4966         wx.BeginBusyCursor()
    4967         try:
    4968             OptimizePDF(G2frame,data)
    4969         finally:
    4970             wx.EndBusyCursor()
    4971         wx.CallAfter(UpdatePDFGrid,G2frame,data)
    4972         OnComputePDF(event)       
    4973                        
    49745130    def OnComputePDF(event):
    49755131        '''Compute and plot PDF, in response to a menu command or a change to a
     
    51095265    G2frame.dataFrame.Bind(wx.EVT_MENU, OnComputePDF, id=G2gd.wxID_PDFCOMPUTE)
    51105266    G2frame.dataFrame.Bind(wx.EVT_MENU, OnComputeAllPDF, id=G2gd.wxID_PDFCOMPUTEALL)
     5267
     5268    ElList = data['ElList']
    51115269    mainSizer = wx.BoxSizer(wx.VERTICAL)
    5112 
    5113     ElList = data['ElList']
    5114     mainSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=' PDF data files: '),0,WACV)
    5115     mainSizer.Add((5,5),0)   
    5116     if 'C' in inst['Type'][0]:
    5117         str = ' Sample file: PWDR %s   Wavelength, A: %.5f  Energy, keV: %.3f  Polariz.: %.2f '%(dataFile[3:],wave,keV,polariz)
    5118         mainSizer.Add(wx.StaticText(parent=G2frame.dataDisplay,label=str),0,WACV)
    5119     mainSizer.Add((5,5),0)
    5120     fileSizer = wx.FlexGridSizer(0,4,5,1)
    5121     select = ['Sample Bkg.','Container']
    5122     if data['Container']['Name']:
    5123         select.append('Container Bkg.')
    5124     for key in select:
    5125         FillFileSizer(fileSizer,key)
    5126     mainSizer.Add(fileSizer,0)
     5270    mainSizer.Add(PDFFileSizer(),0,WACV)
    51275271    G2G.HorizontalLine(mainSizer,G2frame.dataDisplay)
    5128     if not ElList:
    5129         mainSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Sample information: fill in this 1st'),0,WACV)
    5130     else:
    5131         mainSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Sample information: '),0,WACV)
    5132     mainSizer.Add((5,5),0)   
    5133     Abs = G2lat.CellAbsorption(ElList,data['Form Vol'])
    5134     Trans = G2pwd.Transmission(data['Geometry'],Abs*data['Pack'],data['Diam'])
    5135     elemSizer = wx.FlexGridSizer(0,3,5,1)
    5136     for El in ElList:
    5137         FillElemSizer(elemSizer,ElList[El])
    5138     mainSizer.Add(elemSizer,0)
    5139     mainSizer.Add((5,5),0)   
    5140     midSizer = wx.BoxSizer(wx.HORIZONTAL)
    5141     midSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Formula volume: '),0,WACV)
    5142     formVol = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Form Vol',nDig=(10,3),min=10.0,
    5143         typeHint=float,OnLeave=AfterChange)
    5144     midSizer.Add(formVol,0)
    5145     midSizer.Add(wx.StaticText(G2frame.dataDisplay,
    5146         label=' Theoretical absorption: %.4f cm-1 Sample absorption: %.4f cm-1'%(Abs,Abs*data['Pack'])),
    5147         0,WACV)
    5148     mainSizer.Add(midSizer,0)
    5149     mainSizer.Add((5,5),0)
    5150     geoBox = wx.BoxSizer(wx.HORIZONTAL)
    5151     geoBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Sample geometry: '),0,WACV)
    5152     choice = ['Cylinder','Bragg-Brentano','Tilting flat plate in transmission','Fixed flat plate']
    5153     geometry = wx.ComboBox(G2frame.dataDisplay,value=data['Geometry'],choices=choice,
    5154             style=wx.CB_READONLY|wx.CB_DROPDOWN)
    5155     geometry.Bind(wx.EVT_COMBOBOX, OnGeometry)
    5156     geoBox.Add(geometry,0)
    5157     geoBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Sample diameter/thickness, mm: '),0,WACV)
    5158     diam = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Diam',nDig=(10,3),min=0.01,
    5159         typeHint=float,OnLeave=AfterChange)
    5160     geoBox.Add(diam,0)
    5161     mainSizer.Add(geoBox,0)
    5162     mainSizer.Add((5,5),0)   
    5163     geoBox = wx.BoxSizer(wx.HORIZONTAL)
    5164     geoBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Packing: '),0,WACV)
    5165     pack = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Pack',nDig=(10,2),min=0.01,
    5166         typeHint=float,OnLeave=AfterChange)
    5167     geoBox.Add(pack,0)
    5168     geoBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Sample transmission: %.3f %%'%(Trans)),0,WACV)   
    5169     mainSizer.Add(geoBox,0)
    5170        
     5272    mainSizer.Add(SampleSizer(),0,WACV)
    51715273    G2G.HorizontalLine(mainSizer,G2frame.dataDisplay)
    5172     sqBox = wx.BoxSizer(wx.HORIZONTAL)
    5173     sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' S(Q)->F(Q)->G(r) controls: '),0,WACV)
    5174     sqBox.Add((1,1),1,wx.EXPAND,1)
    5175     optB = wx.Button(G2frame.dataDisplay,label='Optimize PDF',style=wx.BU_EXACTFIT)
    5176     optB.Bind(wx.EVT_BUTTON, OnOptimizePDF)
    5177     sqBox.Add(optB,0,WACV|wx.ALIGN_RIGHT)
    5178     mainSizer.Add(sqBox,0,wx.EXPAND)
    5179    
    5180     mainSizer.Add((5,5),0)
    5181     sqBox = wx.BoxSizer(wx.HORIZONTAL)
    5182     sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Detector type: '),0,WACV)
    5183     choice = ['Image plate','Point detector']
    5184     detType = wx.ComboBox(G2frame.dataDisplay,value=data['DetType'],choices=choice,
    5185             style=wx.CB_READONLY|wx.CB_DROPDOWN)
    5186     detType.Bind(wx.EVT_COMBOBOX, OnDetType)
    5187     sqBox.Add(detType,0)
    5188     if data['DetType'] == 'Image plate':
    5189         sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' IP transmission coeff.: '),0,WACV)
    5190         obliqCoeff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'ObliqCoeff',nDig=(10,3),min=0.0,max=1.0,
    5191             typeHint=float,OnLeave=AfterChangeNoRefresh)
    5192         sqBox.Add(obliqCoeff,0)
    5193     sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Flat Bkg.: '),0,WACV)
    5194     flatBkg = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Flat Bkg',nDig=(10,0),
    5195             typeHint=float,OnLeave=AfterChangeNoRefresh)
    5196     sqBox.Add(flatBkg,0)
    5197     flatSpin = wx.SpinButton(G2frame.dataDisplay,style=wx.SP_VERTICAL,size=wx.Size(20,25))
    5198     flatSpin.SetRange(-1,1)
    5199     flatSpin.SetValue(0)
    5200     flatSpin.Bind(wx.EVT_SPIN, OnFlatSpin)
    5201     sqBox.Add(flatSpin,0,WACV)
    5202     sqBox.Add((1,1),1,wx.EXPAND,1)
    5203     sqBox.Add(wx.StaticText(G2frame.dataDisplay,label='Rmin: '),0,WACV|wx.ALIGN_RIGHT)
    5204     rmin = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Rmin',nDig=(5,1),
    5205             typeHint=float,size=wx.Size(50,20))
    5206     sqBox.Add(rmin,0,WACV|wx.ALIGN_RIGHT)
    5207     mainSizer.Add(sqBox,0,wx.EXPAND)
    5208        
    5209     bkBox = wx.BoxSizer(wx.HORIZONTAL)
    5210     bkBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Background ratio: '),0,WACV)   
    5211     backSldr = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,
    5212         value=int(100*data['BackRatio']))
    5213     bkBox.Add(backSldr,1,wx.EXPAND)
    5214     backSldr.Bind(wx.EVT_SLIDER, OnBackSlider)
    5215     backVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'BackRatio',nDig=(10,3),min=0.0,max=1.0,
    5216         typeHint=float,OnLeave=AfterChangeNoRefresh)
    5217     bkBox.Add(backVal,0,WACV)   
    5218     mainSizer.Add(bkBox,0,wx.ALIGN_LEFT|wx.EXPAND)
    5219 
    5220     sqBox = wx.BoxSizer(wx.HORIZONTAL)
    5221     sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Ruland width: '),0,WACV)   
    5222     rulandSldr = wx.Slider(parent=G2frame.dataDisplay,style=wx.SL_HORIZONTAL,
    5223         value=int(1000*data['Ruland']))
    5224     sqBox.Add(rulandSldr,1,wx.EXPAND)
    5225     rulandSldr.Bind(wx.EVT_SLIDER, OnRulSlider)
    5226     rulandWdt = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Ruland',nDig=(10,3),min=0.001,max=1.0,
    5227         typeHint=float,OnLeave=AfterChangeNoRefresh)
    5228     sqBox.Add(rulandWdt,0,WACV)   
    5229     mainSizer.Add(sqBox,0,wx.ALIGN_LEFT|wx.EXPAND)
    5230    
    5231     sqBox = wx.BoxSizer(wx.HORIZONTAL)
    5232     sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Scaling Q-range: '),0,WACV)
    5233     SQmin = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['QScaleLim'],0,nDig=(10,3),
    5234                                  min=qLimits[0],max=.95*data['QScaleLim'][1],
    5235                                  typeHint=float,OnLeave=AfterChangeNoRefresh)
    5236     sqBox.Add(SQmin,0,WACV)
    5237     sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' to Qmax '),0,WACV)
    5238     SQmax = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data['QScaleLim'],1,nDig=(10,3),
    5239                                  min=qLimits[0],max=qLimits[1],
    5240                                  typeHint=float,OnLeave=NewQmax)
    5241     sqBox.Add(SQmax,0,WACV)
    5242     resetQ = wx.Button(G2frame.dataDisplay,label='Reset?',style=wx.BU_EXACTFIT)
    5243     sqBox.Add(resetQ,0,WACV)
    5244     resetQ.Bind(wx.EVT_BUTTON, OnResetQ)
    5245     sqBox.Add(wx.StaticText(G2frame.dataDisplay,label=' Rmax: '),0,WACV)
    5246     rmax = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'Rmax',nDig=(10,1),min=10.,max=200.,
    5247         typeHint=float,OnLeave=AfterChangeNoRefresh,size=wx.Size(50,20))
    5248     sqBox.Add(rmax,0,WACV)
    5249     lorch = wx.CheckBox(parent=G2frame.dataDisplay,label='Lorch damping?')
    5250     lorch.SetValue(data['Lorch'])
    5251     lorch.Bind(wx.EVT_CHECKBOX, OnLorch)
    5252     sqBox.Add(lorch,0,WACV)
    5253     noRing = wx.CheckBox(parent=G2frame.dataDisplay,label='Suppress G(0) ringing?')
    5254     noRing.SetValue(data['noRing'])
    5255     noRing.Bind(wx.EVT_CHECKBOX, OnNoRing)
    5256     sqBox.Add(noRing,0,WACV)
    5257     mainSizer.Add(sqBox,0)
    5258 
     5274    mainSizer.Add(SFGctrlSizer(),0,WACV)
    52595275    mainSizer.Layout()   
    52605276    G2frame.dataDisplay.SetSizer(mainSizer)
Note: See TracChangeset for help on using the changeset viewer.