Changeset 4264 for trunk/GSASIIphsGUI.py


Ignore:
Timestamp:
Jan 23, 2020 10:09:25 AM (22 months ago)
Author:
vondreele
Message:

Add swap atoms to RMCProfile stuff
Handle vacancies

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r4263 r4264  
    11621162        parent.Raise()
    11631163        self.EndModal(wx.ID_OK)
    1164        
    1165            
    11661164
    11671165################################################################################
    11681166#### Phase editing routines
    11691167################################################################################
     1168def SetPhaseWindow(phasePage,mainSizer=None,Scroll=0):
     1169    if mainSizer is not None:
     1170        phasePage.SetSizer(mainSizer)
     1171    phasePage.SetAutoLayout(True)
     1172    phasePage.SetScrollRate(10,10)
     1173    phasePage.SendSizeEvent()
     1174    phasePage.Scroll(0,Scroll)
     1175   
    11701176def GetSpGrpfromUser(parent,SpGrp):
    11711177    helptext = '''\t\t\tGSAS-II space group information
     
    12201226    return SpcGp
    12211227   
    1222    
    1223 def SetPhaseWindow(phasePage,mainSizer=None,Scroll=0):
    1224     if mainSizer is not None:
    1225         phasePage.SetSizer(mainSizer)
    1226     phasePage.SetAutoLayout(True)
    1227     phasePage.SetScrollRate(10,10)
    1228     phasePage.SendSizeEvent()
    1229     phasePage.Scroll(0,Scroll)
    12301228   
    12311229def FindBondsDraw(data):
     
    29572955                return Uij
    29582956
     2957            SGData = generalData['SGData']
    29592958            r,c =  event.GetRow(),event.GetCol()
    29602959            replot = True
     
    29622961                ci = colLabels.index('I/A')
    29632962                ID = atomData[r][ci+8]
    2964                 SGData = generalData['SGData']
    29652963                if Atoms.GetColLabelValue(c) in ['x','y','z']:
    29662964                    ci = colLabels.index('x')
     
    30343032                    DrawAtomsReplaceByID(data['Drawing'],ci+8,atomData[r],ID)
    30353033                    G2plt.PlotStructure(G2frame,data)
    3036                 wx.CallAfter(Paint)
     3034                if SGData['SpGrp'] != 'P 1':    #no need to update P 1 structures!
     3035                    wx.CallAfter(Paint)
    30373036
    30383037        def AtomTypeSelect(event):
     
    31593158            for i in range(colU11-1,colU11+6):
    31603159                Atoms.SetColSize(i,50)           
     3160                attr = wx.grid.GridCellAttr()
     3161                attr.IncRef()               #fix from Jim Hester
     3162                attr.SetBackgroundColour(VERY_LIGHT_GREY)
     3163                attr.SetTextColour(VERY_LIGHT_GREY)
     3164                attr.SetReadOnly(True)
     3165                Atoms.SetColAttr(i, attr)
    31613166            for row in range(Atoms.GetNumberRows()):    #this is slow for large numbers of atoms
    31623167                atId = atomData[row][colIA+8]
     
    31833188                    if 'U' in rbExcl:
    31843189                        Atoms.SetCellStyle(row,colUiso,VERY_LIGHT_GREY,True)
    3185                     for i in range(6):
    3186                         cj = colU11+i
    3187                         Atoms.SetCellStyle(row,cj,VERY_LIGHT_GREY,True)
    3188                         Atoms.SetCellTextColour(row,cj,VERY_LIGHT_GREY)
    31893190                if colM:
    31903191                    SytSym,Mul,Nop,dupDir = G2spc.SytSym(atomData[row][colX:colX+3],SGData)
     
    44654466                    'material':'nothing','phase':'vacuum','comment':'none ','source':'nowhere'}
    44664467                data['RMC']['RMCProfile'] = {'SuperCell':[1,1,1],'UseSampBrd':[True,True],'aTypes':aTypes,
    4467                      'atSeq':atSeq,'Pairs':Pairs,'histogram':['',1.0],'files':files,'metadata':metadata,
    4468                      'runTimes':runTimes,'ReStart':[False,False],'BVS':BVS,'Oxid':atOxid,'useBVS':False,
    4469                      'AveCN':[],'FxCN':[],'Potentials':{'Angles':[],'Angle search':10.,'Stretch':[],'Stretch search':10.}}
     4468                    'atSeq':atSeq,'Pairs':Pairs,'histogram':['',1.0],'files':files,'metadata':metadata,
     4469                    'runTimes':runTimes,'ReStart':[False,False],'BVS':BVS,'Oxid':atOxid,'useBVS':False,'Swaps':[],
     4470                    'AveCN':[],'FxCN':[],'Potentials':{'Angles':[],'Angle search':10.,'Stretch':[],'Stretch search':10.,
     4471                    }}
    44704472            RMCPdict = data['RMC']['RMCProfile']
    44714473#patches
     
    44914493            if 'Potentials' not in RMCPdict:
    44924494                RMCPdict.update({'Potentials':{'Angles':[],'Angle search':10.,'Stretch':[],'Stretch search':10.}})
     4495            if 'Swaps' not in RMCPdict:
     4496                RMCPdict['Swaps'] = []
    44934497#end patches
    44944498               
     
    45274531            def OnUseBVS(event):
    45284532                RMCPdict['useBVS'] = not RMCPdict['useBVS']
     4533                wx.CallAfter(UpdateRMC)
     4534               
     4535            def OnAddSwap(event):
     4536                RMCPdict['Swaps'].append(['','',0.0,])
    45294537                wx.CallAfter(UpdateRMC)
    45304538               
     
    48154823                return bondSizer
    48164824
     4825            def GetSwapSizer():
     4826   
     4827                def OnDelSwap(event):
     4828                    Obj = event.GetEventObject()
     4829                    swap = Indx[Obj.GetId()]
     4830                    del RMCPdict['Swaps'][swap]
     4831                    wx.CallAfter(UpdateRMC)
     4832                   
     4833                def OnSwapAtSel(event):
     4834                    Obj = event.GetEventObject()
     4835                    swap,i = Indx[Obj.GetId()]
     4836                    RMCPdict['Swaps'][swap][i] = Obj.GetStringSelection()
     4837                                           
     4838                atChoice = RMCPdict['atSeq']
     4839                swapSizer = wx.FlexGridSizer(4,5,5)
     4840                swapLabels = [' ','Atom-A','Atom-B',' Swap prob.']
     4841                for lab in swapLabels:
     4842                    swapSizer.Add(wx.StaticText(G2frame.FRMC,label=lab),0,WACV)
     4843                for ifx,swap in enumerate(RMCPdict['Swaps']):
     4844                    delBtn = wx.Button(G2frame.FRMC,label='Delete')
     4845                    delBtn.Bind(wx.EVT_BUTTON,OnDelSwap)
     4846                    Indx[delBtn.GetId()] = ifx
     4847                    swapSizer.Add(delBtn,0,WACV)
     4848                    for i in [0,1]:
     4849                        atmSel = wx.ComboBox(G2frame.FRMC,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY)
     4850                        atmSel.SetStringSelection(swap[i])
     4851                        atmSel.Bind(wx.EVT_COMBOBOX,OnSwapAtSel)
     4852                        Indx[atmSel.GetId()] = [ifx,i]
     4853                        swapSizer.Add(atmSel,0,WACV)
     4854                    swapSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,swap,2,min=0.,max=1.,size=(50,25)),0,WACV)
     4855                return swapSizer
     4856           
    48174857            Indx = {}
    48184858
     
    48284868            mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' NB: be sure to set cations first && anions last in atom ordering'),0,WACV)
    48294869            mainSizer.Add(GetAtmChoice(),0,WACV)
     4870           
     4871            G2G.HorizontalLine(mainSizer,G2frame.FRMC)
     4872            swapBox = wx.BoxSizer(wx.HORIZONTAL)
     4873            swapAdd = wx.Button(G2frame.FRMC,label='Add')
     4874            swapAdd.Bind(wx.EVT_BUTTON,OnAddSwap)
     4875            swapBox.Add(swapAdd,0,WACV)
     4876            swapBox.Add(wx.StaticText(G2frame.FRMC,label=' Atom swap probabiities: '),0,WACV)
     4877            mainSizer.Add(swapBox,0,WACV)       
     4878            if len(RMCPdict['Swaps']):
     4879                mainSizer.Add(GetSwapSizer(),0,WACV)           
    48304880           
    48314881            G2G.HorizontalLine(mainSizer,G2frame.FRMC)
     
    49965046            PWId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,RMCPdict['histogram'][0])
    49975047            if PWId:
     5048                reset = False
    49985049                print(G2pwd.MakeInst(G2frame,pName,data,RMCPdict['UseSampBrd'],PWId)+ ' written')
    49995050                backfile = G2pwd.MakeBack(G2frame,pName,PWId)
     
    50105061                    if os.path.isfile(pName+'.his6f'):
    50115062                        os.remove(pName+'.his6f')
    5012                     print(G2pwd.MakeRMC6f(G2frame,pName,data,RMCPdict,PWId)+ ' written')
     5063                    RMC6f,reset = G2pwd.MakeRMC6f(G2frame,pName,data,RMCPdict,PWId)
     5064                    print(RMC6f+ ' written')
    50135065                print(G2pwd.MakeRMCPdat(G2frame,pName,data,RMCPdict,PWId)+ ' written')
    50145066                print('RMCProfile file build completed')
    50155067                RMCPdict['ReStart'] = [False,False]
     5068                if reset:
     5069                    wx.MessageDialog(G2frame,' Vacancies found & "Va" atoms added to list. '+ \
     5070                        'You may need to revise RMCProfile setup parameters.','Repeat Setup RMC',wx.OK).ShowModal()
     5071                    wx.CallAfter(UpdateRMC)
    50165072            else:
    50175073                print('RMCProfile file build failed - no histogram selected')
     
    1058110637        print ('clear texture? - does nothing')
    1058210638
     10639###############################################################################
     10640##### Phase page routines
     10641###############################################################################
     10642       
    1058310643    def FillSelectPageMenu(TabSelectionIdDict, menuBar):
    1058410644        '''Fill "Select tab" menu with menu items for each tab and assign
Note: See TracChangeset for help on using the changeset viewer.