Changeset 551


Ignore:
Timestamp:
Apr 18, 2012 2:51:58 PM (10 years ago)
Author:
vondreele
Message:

charge flipping

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r537 r551  
    247247        generalData['AtomTypes'] = []
    248248        generalData['Isotopes'] = {}
     249# various patches
    249250        if 'Isotope' not in generalData:
    250251            generalData['Isotope'] = {}
     
    258259        if 'Flip' not in generalData:
    259260            generalData['Flip'] = {'RefList':'','Resolution':1.0,'Norm element':'C',
    260                 'k-factor':1.1,'rhoSig':0.0,'rho':[],'rhoMax':0.,'mapSize':10.0,'cutOff':50.} #???
     261                'k-factor':1.1}
     262        if 'doPawley' not in generalData:
     263            generalData['doPawley'] = False
     264        if 'Pawley dmin' not in generalData:
     265            generalData['Pawley dmin'] = 1.0
    261266           
    262267#        if 'SH Texture' not in generalData:
     
    322327        '''
    323328       
    324         phaseTypes = ['nuclear','modulated','magnetic','macromolecular','Pawley']
     329        phaseTypes = ['nuclear','modulated','magnetic','macromolecular']
    325330        SetupGeneral()
    326331        generalData = data['General']
    327         Map = generalData['Map'] 
    328             # {'MapType':'','RefList':'','Resolution':1.0,'rho':[],'rhoMax':0.,'mapSize':10.0,'cutOff':50.}
     332        Map = generalData['Map']
     333        Flip = generalData['Flip'] 
    329334       
    330335        def NameSizer():
     
    343348                    dataDisplay.DestroyChildren()           #needed to clear away bad cellSizer, etc.
    344349                    UpdateGeneral()         #must use this way!
    345                     if generalData['Type'] == 'Pawley':
    346                         if G2frame.dataDisplay.FindPage('Atoms'):
    347                             G2frame.dataDisplay.DeletePage(G2frame.dataDisplay.FindPage('Atoms'))
    348                             G2frame.dataDisplay.DeletePage(G2frame.dataDisplay.FindPage('Draw Options'))
    349                             G2frame.dataDisplay.DeletePage(G2frame.dataDisplay.FindPage('Draw Atoms'))
    350                         if not G2frame.dataDisplay.FindPage('Pawley reflections'):
    351                             G2frame.PawleyRefl = G2gd.GSGrid(G2frame.dataDisplay)     
    352                             G2frame.dataDisplay.AddPage(G2frame.PawleyRefl,'Pawley reflections')
    353350                else:
    354351                    TypeTxt.SetValue(generalData['Type'])               
     
    580577           
    581578        def DenSizer():
     579           
    582580            mass = 0.
    583581            for i,elem in enumerate(generalData['AtomTypes']):
     
    598596            return denSizer
    599597           
    600         def PawlSizer():
    601                        
     598        def PawleySizer():
     599           
     600            def OnPawleyRef(event):
     601                generalData['doPawley'] = pawlRef.GetValue()
     602           
    602603            def OnPawleyVal(event):
    603604                try:
     
    607608                except ValueError:
    608609                    pass
    609                 pawlVal.SetValue("%.3f"%(generalData['Pawley dmin']))          #reset in case of error
    610            
    611             pawlSizer = wx.BoxSizer(wx.HORIZONTAL)
    612             pawlSizer.Add(wx.StaticText(dataDisplay,label=' Pawley dmin: '),0,wx.ALIGN_CENTER_VERTICAL)
     610                pawlVal.SetValue("%.3f"%(generalData['Pawley dmin']))          #reset in case of error               
     611           
     612            pawleySizer = wx.BoxSizer(wx.HORIZONTAL)
     613            pawleySizer.Add(wx.StaticText(dataDisplay,label=' Pawley controls: '),0,wx.ALIGN_CENTER_VERTICAL)
     614            pawlRef = wx.CheckBox(dataDisplay,-1,label=' Do Pawley refinement?')
     615            pawlRef.SetValue(generalData['doPawley'])
     616            pawlRef.Bind(wx.EVT_CHECKBOX,OnPawleyRef)
     617            pawleySizer.Add(pawlRef,0,wx.ALIGN_CENTER_VERTICAL)
     618            pawleySizer.Add(wx.StaticText(dataDisplay,label=' Pawley dmin: '),0,wx.ALIGN_CENTER_VERTICAL)
    613619            pawlVal = wx.TextCtrl(dataDisplay,value='%.3f'%(generalData['Pawley dmin']),style=wx.TE_PROCESS_ENTER)
    614620            pawlVal.Bind(wx.EVT_TEXT_ENTER,OnPawleyVal)       
    615621            pawlVal.Bind(wx.EVT_KILL_FOCUS,OnPawleyVal)
    616             pawlSizer.Add(pawlVal,0,wx.ALIGN_CENTER_VERTICAL)
    617             return pawlSizer
     622            pawleySizer.Add(pawlVal,0,wx.ALIGN_CENTER_VERTICAL)
     623            return pawleySizer
    618624           
    619625        def MapSizer():
     
    648654            mapTypes = ['Fobs','Fcalc','delt-F','2*Fo-Fc','Patterson']
    649655            refList = data['Histograms'].keys()
    650             if generalData['Type'] == 'Pawley':
     656            if not generalData['AtomTypes']:
    651657                 mapTypes = ['Patterson',]
    652658                 Map['MapType'] = 'Patterson'
     
    680686        def FlipSizer():
    681687           
    682             def OnMapType(event):
    683                 Map['MapType'] = mapType.GetValue()
    684                
    685688            def OnRefList(event):
    686689                Flip['RefList'] = refList.GetValue()
    687690               
     691            def OnNormElem(event):
     692                PE = G2elemGUI.PickElement(G2frame)
     693                if PE.ShowModal() == wx.ID_OK:
     694                    Flip['Norm element'] = PE.Elem.strip()
     695                    normElem.SetLabel(Flip['Norm element'])
     696                PE.Destroy()               
     697               
    688698            def OnResVal(event):
    689699                try:
    690                     res = float(mapRes.GetValue())
     700                    res = float(flipRes.GetValue())
    691701                    if 0.25 <= res <= 20.:
    692702                        Flip['Resolution'] = res
     
    695705                flipRes.SetValue("%.2f"%(Flip['Resolution']))          #reset in case of error
    696706           
    697             def OnCutOff(event):
     707            def OnkFactor(event):
    698708                try:
    699                     res = float(cutOff.GetValue())
    700                     if 1.0 <= res <= 100.:
    701                         Map['cutOff'] = res
     709                    res = float(kFactor.GetValue())
     710                    if 0.2 <= res <= 1.2:
     711                        Flip['k-factor'] = res
    702712                except ValueError:
    703713                    pass
    704                 cutOff.SetValue("%.1f"%(Map['cutOff']))          #reset in case of error
     714                kFactor.SetValue("%.3f"%(Flip['k-factor']))          #reset in case of error
    705715           
    706716            refList = data['Histograms'].keys()
     
    708718            lineSizer = wx.BoxSizer(wx.HORIZONTAL)
    709719            lineSizer.Add(wx.StaticText(dataDisplay,label=' Charge flip controls: Reflection set from: '),0,wx.ALIGN_CENTER_VERTICAL)
    710             refList = wx.ComboBox(dataDisplay,-1,value=Map['RefList'],choices=refList,
     720            refList = wx.ComboBox(dataDisplay,-1,value=Flip['RefList'],choices=refList,
    711721                style=wx.CB_READONLY|wx.CB_DROPDOWN)
    712722            refList.Bind(wx.EVT_COMBOBOX,OnRefList)
     
    714724            flipSizer.Add(lineSizer,0,wx.ALIGN_CENTER_VERTICAL)
    715725            line2Sizer = wx.BoxSizer(wx.HORIZONTAL)
     726            line2Sizer.Add(wx.StaticText(dataDisplay,label=' Normalizing element: '),0,wx.ALIGN_CENTER_VERTICAL)
     727            normElem = wx.Button(dataDisplay,label=Flip['Norm element'],style=wx.TE_READONLY)
     728            normElem.Bind(wx.EVT_BUTTON,OnNormElem)
     729            line2Sizer.Add(normElem,0,wx.ALIGN_CENTER_VERTICAL)
    716730            line2Sizer.Add(wx.StaticText(dataDisplay,label=' Resolution: '),0,wx.ALIGN_CENTER_VERTICAL)
    717             mapRes =  wx.TextCtrl(dataDisplay,value='%.2f'%(Map['Resolution']),style=wx.TE_PROCESS_ENTER)
    718             mapRes.Bind(wx.EVT_TEXT_ENTER,OnResVal)       
    719             mapRes.Bind(wx.EVT_KILL_FOCUS,OnResVal)
    720             line2Sizer.Add(mapRes,0,wx.ALIGN_CENTER_VERTICAL)
    721             line2Sizer.Add(wx.StaticText(dataDisplay,label=' Peak cutoff %: '),0,wx.ALIGN_CENTER_VERTICAL)
    722             cutOff =  wx.TextCtrl(dataDisplay,value='%.1f'%(Map['cutOff']),style=wx.TE_PROCESS_ENTER)
    723             cutOff.Bind(wx.EVT_TEXT_ENTER,OnCutOff)       
    724             cutOff.Bind(wx.EVT_KILL_FOCUS,OnCutOff)
    725             line2Sizer.Add(cutOff,0,wx.ALIGN_CENTER_VERTICAL)
     731            flipRes =  wx.TextCtrl(dataDisplay,value='%.2f'%(Flip['Resolution']),style=wx.TE_PROCESS_ENTER)
     732            flipRes.Bind(wx.EVT_TEXT_ENTER,OnResVal)       
     733            flipRes.Bind(wx.EVT_KILL_FOCUS,OnResVal)
     734            line2Sizer.Add(flipRes,0,wx.ALIGN_CENTER_VERTICAL)
     735            line2Sizer.Add(wx.StaticText(dataDisplay,label=' k-Factor (0.2-1.2) %: '),0,wx.ALIGN_CENTER_VERTICAL)
     736            kFactor =  wx.TextCtrl(dataDisplay,value='%.3f'%(Flip['k-factor']),style=wx.TE_PROCESS_ENTER)
     737            kFactor.Bind(wx.EVT_TEXT_ENTER,OnkFactor)       
     738            kFactor.Bind(wx.EVT_KILL_FOCUS,OnkFactor)
     739            line2Sizer.Add(kFactor,0,wx.ALIGN_CENTER_VERTICAL)
    726740            flipSizer.Add(line2Sizer,0,wx.ALIGN_CENTER_VERTICAL)
    727741            return flipSizer
     
    742756            mainSizer.Add(ElemSizer())
    743757           
    744         elif generalData['Type'] == 'Pawley':
    745             mainSizer.Add(PawlSizer())
    746            
     758        mainSizer.Add((5,5),0)
     759        mainSizer.Add(PawleySizer())
     760
    747761        mainSizer.Add((5,5),0)
    748762        mainSizer.Add(MapSizer())
     
    23002314        shModels = ['cylindrical','none','shear - 2/m','rolling - mmm']
    23012315        SamSym = dict(zip(shModels,['0','-1','2/m','mmm']))
    2302         if generalData['Type'] == 'Pawley' and G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Sequental results'):
     2316        if generalData['doPawley'] and G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Sequental results'):
    23032317            G2frame.dataFrame.RefineTexture.Enable(True)
    23042318        shAngles = ['omega','chi','phi']
     
    35473561        FillMapPeaksGrid()
    35483562        G2plt.PlotStructure(G2frame,data)
     3563       
     3564    def OnChargeFlip(event):
     3565        generalData = data['General']
     3566        mapData = generalData['Map']
     3567        flipData = generalData['Flip']
     3568        reflName = flipData['RefList']
     3569        phaseName = generalData['Name']
     3570        if 'PWDR' in reflName:
     3571            PatternId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root, reflName)
     3572            reflSets = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId,'Reflection Lists'))
     3573            reflData = reflSets[phaseName]
     3574        elif 'HKLF' in reflName:
     3575            print 'single crystal reflections'
     3576            return
     3577        else:
     3578            print '**** ERROR - No data defined for charge flipping'
     3579            return
     3580        pgbar = wx.ProgressDialog('Charge flipping','Residual Rcf =',101.0,
     3581            style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_CAN_ABORT)
     3582        screenSize = wx.ClientDisplayRect()
     3583        Size = pgbar.GetSize()
     3584        Size = (int(Size[0]*1.2),Size[1]) # increase size a bit along x
     3585        pgbar.SetPosition(wx.Point(screenSize[2]-Size[0]-305,screenSize[1]+5))
     3586        pgbar.SetSize(Size)
     3587        try:
     3588            mapData.update(G2mth.ChargeFlip(data,reflData,pgbar))
     3589        finally:
     3590            pgbar.Destroy()       
     3591        mapSig = np.std(mapData['rho'])
     3592        data['Drawing']['contourLevel'] = 1.
     3593        data['Drawing']['mapSize'] = 10.
     3594        print ' Charge flip map computed: rhomax = %.3f rhomin = %.3f sigma = %.3f'%(np.max(mapData['rho']),np.min(mapData['rho']),mapSig)
     3595        OnSearchMaps(event)             #does a plot structure at end
    35493596               
    35503597    def OnTextureRefine(event):
     
    35763623            G2frame.dataFrame.Bind(wx.EVT_MENU, OnFourierMaps, id=G2gd.wxID_FOURCALC)
    35773624            G2frame.dataFrame.Bind(wx.EVT_MENU, OnSearchMaps, id=G2gd.wxID_FOURSEARCH)
     3625            G2frame.dataFrame.Bind(wx.EVT_MENU, OnChargeFlip, id=G2gd.wxID_CHARGEFLIP)
    35783626            UpdateGeneral()
    35793627        elif text == 'Data':
     
    36323680    G2frame.dataFrame.Bind(wx.EVT_MENU, OnFourierMaps, id=G2gd.wxID_FOURCALC)
    36333681    G2frame.dataFrame.Bind(wx.EVT_MENU, OnSearchMaps, id=G2gd.wxID_FOURSEARCH)
     3682    G2frame.dataFrame.Bind(wx.EVT_MENU, OnChargeFlip, id=G2gd.wxID_CHARGEFLIP)
    36343683    SetupGeneral()
    36353684    GeneralData = data['General']
    36363685    UpdateGeneral()
    36373686
    3638     if GeneralData['Type'] == 'Pawley':
    3639         DData = wx.ScrolledWindow(G2frame.dataDisplay)
    3640         G2frame.dataDisplay.AddPage(DData,'Data')
    3641         G2frame.PawleyRefl = G2gd.GSGrid(G2frame.dataDisplay)
    3642         G2frame.dataDisplay.AddPage(G2frame.PawleyRefl,'Pawley reflections')
    3643 #        Texture = wx.ScrolledWindow(G2frame.dataDisplay)
    3644 #        G2frame.dataDisplay.AddPage(Texture,'Texture')
    3645     else:
    3646         DData = wx.ScrolledWindow(G2frame.dataDisplay)
    3647         G2frame.dataDisplay.AddPage(DData,'Data')
    3648         Atoms = G2gd.GSGrid(G2frame.dataDisplay)
    3649         G2frame.dataDisplay.AddPage(Atoms,'Atoms')
    3650         drawOptions = wx.Window(G2frame.dataDisplay)
    3651         G2frame.dataDisplay.AddPage(drawOptions,'Draw Options')
    3652         drawAtoms = G2gd.GSGrid(G2frame.dataDisplay)
    3653         G2frame.dataDisplay.AddPage(drawAtoms,'Draw Atoms')
    3654         Texture = wx.ScrolledWindow(G2frame.dataDisplay)
    3655         G2frame.dataDisplay.AddPage(Texture,'Texture')
    3656         MapPeaks = G2gd.GSGrid(G2frame.dataDisplay)
    3657         G2frame.dataDisplay.AddPage(MapPeaks,'Map peaks')
     3687    DData = wx.ScrolledWindow(G2frame.dataDisplay)
     3688    G2frame.dataDisplay.AddPage(DData,'Data')
     3689    Atoms = G2gd.GSGrid(G2frame.dataDisplay)
     3690    G2frame.dataDisplay.AddPage(Atoms,'Atoms')
     3691    drawOptions = wx.Window(G2frame.dataDisplay)
     3692    G2frame.dataDisplay.AddPage(drawOptions,'Draw Options')
     3693    drawAtoms = G2gd.GSGrid(G2frame.dataDisplay)
     3694    G2frame.dataDisplay.AddPage(drawAtoms,'Draw Atoms')
     3695    Texture = wx.ScrolledWindow(G2frame.dataDisplay)
     3696    G2frame.dataDisplay.AddPage(Texture,'Texture')
     3697    MapPeaks = G2gd.GSGrid(G2frame.dataDisplay)
     3698    G2frame.dataDisplay.AddPage(MapPeaks,'Map peaks')
     3699    G2frame.PawleyRefl = G2gd.GSGrid(G2frame.dataDisplay)
     3700    G2frame.dataDisplay.AddPage(G2frame.PawleyRefl,'Pawley reflections')
    36583701           
    36593702    G2frame.dataDisplay.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, OnPageChanged)
Note: See TracChangeset for help on using the changeset viewer.