Source code for testSytSym

#testMagSym
import sys
import wx
import numpy as np
import GSASIIpath
GSASIIpath.SetBinaryPath()
import GSASIIspc as G2spc
import GSASIIlattice as G2lat
import GSASIIctrlGUI as G2G
import GSASIIphsGUI as G2phsGUI

try:
    wx.NewId
except AttributeError:
    wx.NewId = wx.NewIdRef
    
[wxID_FILEEXIT, 
] = [wx.NewId() for _init_coll_File_Items in range(1)]
WACV = wx.ALIGN_CENTER_VERTICAL

[docs] class testSytSym(wx.Frame): def _init_ctrls(self, parent): wx.Frame.__init__(self, name='testSytSym', parent=parent, size=[800,300],style=wx.DEFAULT_FRAME_STYLE, title='Test space group site symmetry') self.testSSMenu = wx.MenuBar() self.File = wx.Menu(title='') self.File.Append(wxID_FILEEXIT,'Exit') self.Bind(wx.EVT_MENU, self.OnFileExit, id=wxID_FILEEXIT) self.testSSMenu.Append(menu=self.File, title='Run') self.SetMenuBar(self.testSSMenu) self.testSSPanel = wx.Window(self) def __init__(self, parent): self._init_ctrls(parent) self.Bind(wx.EVT_CLOSE, self.ExitMain) self.dataFrame = None Data = {'SGData':G2spc.SpcGroup('P 1')[1],} self.RBsym = '1' self.propVec = '0,0,0' self.XYZ = '0,0,0' self.UpdateData(Data) def ExitMain(self, event): sys.exit() def OnFileExit(self,event): if self.dataFrame: self.dataFrame.Clear() self.dataFrame.Destroy() self.Close() def UpdateData(self,Data): def OnSpaceGroup(event): SpGrp = 'P 1' SpcGp = G2phsGUI.GetSpGrpfromUser(self,SpGrp) SGErr,SGData = G2spc.SpcGroup(SpcGp) if SGErr: text = [G2spc.SGErrors(SGErr)+'\nSpace Group set to previous'] SGTxt.SetLabel(Data['SGData']['SpGrp']) msg = 'Space Group Error' Style = wx.ICON_EXCLAMATION Text = '\n'.join(text) wx.MessageBox(Text,caption=msg,style=Style) else: text,table = G2spc.SGPrint(SGData,AddInv=True) Data['SGData'] = SGData SGTxt.SetLabel(Data['SGData']['SpGrp']) msg = 'Space Group Information' SgNo = G2spc.SpaceGroupNumber(SpcGp) if SgNo+1: text[0] += ', No. '+str(SgNo) G2G.SGMessageBox(self,msg,text,table).Show() self.UpdateData(Data) def OnXYZ(event): Obj = event.GetEventObject() self.XYZ = Obj.GetValue() try: XYZ= np.array(eval('['+self.XYZ+']'),dtype=float) print('for:',XYZ) SytSym,Mul,Nop,dupDir = G2spc.SytSym(XYZ,SGData) print('dupDir',dupDir.keys()) CSIX = G2spc.GetCSxinel(SytSym) CSIU = G2spc.GetCSuinel(SytSym) StrXYZ = [str(sxyz) for sxyz in CSIX[0]] ValXYZ = [str(val) for val in CSIX[1]] CSIXtxt.SetLabel(' site sym: %6s, mult: %3d, CSI-X: %s %s'%(SytSym,Mul,StrXYZ,ValXYZ)) StrUIJ = [str(suij) for suij in CSIU[0]] ValUIJ = [str(val) for val in CSIU[1]] CSIUtxt.SetLabel(' site sym: %6s, mult: %3d, CSI-U: %s %s'%(SytSym,Mul,StrUIJ,ValUIJ)) ShTerms,ShSigns = G2lat.GenRBCoeff(SytSym,'1',21) ShRBTerms,ShRBSigns = G2lat.GenRBCoeff(SytSym,self.RBsym,21) if len(ShTerms) > 12: StrSh = [sh for sh in ShTerms[:12]] else: StrSh = [sh for sh in ShTerms] Shtxt.SetLabel(' Sp. Harm coeff: %s'%StrSh) if len(ShRBTerms) > 12: StrRBSh = [sh for sh in ShRBTerms[:12]] else: StrRBSh = [sh for sh in ShRBTerms] ShRBtxt.SetLabel(' Sp. Harm coeff: %s'%StrRBSh) except: print('Bad X,Y,Z entry: ',Obj.GetValue()) self.XYZ = '0,0,0' Obj.SetValue(self.XYZ) def OnShowOps(event): text,table = G2spc.SGPrint(SGData) msg = 'Space Group Information' SgNo = G2spc.SpaceGroupNumber(SGData['SpGrp']) if SgNo+1: text[0] += ', No. '+str(SgNo) G2G.SGMessageBox(self,msg,text,table).Show() def OnShowGen(event): GenText = G2spc.TextGen(SGData,reverse=True) print(' Symmetry generators for %s:'%text[0].split(':')[1]) for item in GenText: print(item) def OnTestHKL(event): print('Extinctions for '+Data['SGData']['MagSpGrp']) hkls = np.mgrid[-6:6,-6:6,-6:6] HKLs = hkls.reshape((3,-1)).T for hkl in HKLs[1:]: #skip 0,0,0 ext = G2spc.checkMagextc(hkl,SGData) if ext: print(hkl) def OnRBSymSel(event): self.RBsym = simsel.GetStringSelection() ShRBTerms,ShRBSigns = G2lat.GenRBCoeff(SytSym,self.RBsym,21) if len(ShRBTerms) > 12: StrRBSh = [sh for sh in ShRBTerms[:12]] else: StrRBSh = [sh for sh in ShRBTerms] ShRBtxt.SetLabel(' Sp. Harm coeff: %s'%StrRBSh) SGData = Data['SGData'] self.testSSPanel.DestroyChildren() mainSizer = wx.BoxSizer(wx.VERTICAL) topSizer = wx.FlexGridSizer(0,2,5,5) topSizer.Add(wx.StaticText(self.testSSPanel,-1,' Space group: '),0,WACV) SpGrp = Data['SGData']['SpGrp'] SGTxt = wx.Button(self.testSSPanel,wx.ID_ANY,SpGrp,size=(100,-1)) SGTxt.Bind(wx.EVT_BUTTON,OnSpaceGroup) topSizer.Add(SGTxt,0,WACV) text,table = G2spc.SGPrint(SGData,AddInv=True) topSizer.Add(wx.StaticText(self.testSSPanel,label=' Special position test:'),0,WACV) SpPos = wx.BoxSizer(wx.HORIZONTAL) SpPos.Add(wx.StaticText(self.testSSPanel,label=' X,Y,Z:'),0,WACV) xyz = wx.TextCtrl(self.testSSPanel,value=self.XYZ,style=wx.TE_PROCESS_ENTER) xyz.Bind(wx.EVT_TEXT_ENTER,OnXYZ) SpPos.Add(xyz,0,WACV) topSizer.Add(SpPos,0,WACV) mainSizer.Add(topSizer) XYZ= np.array(eval('['+self.XYZ+']'),dtype=float) SytSym,Mul,Nop,dupDir = G2spc.SytSym(XYZ,SGData) ShTerms,ShSigns = G2lat.GenRBCoeff(SytSym,'1',21) ShRBTerms,ShRBSigns = G2lat.GenRBCoeff(SytSym,self.RBsym,21) CSIX = G2spc.GetCSxinel(SytSym) CSIU = G2spc.GetCSuinel(SytSym) StrXYZ = [str(sxyz) for sxyz in CSIX[0]] ValXYZ = [str(val) for val in CSIX[1]] StrUIJ = [str(suij) for suij in CSIU[0]] ValUIJ = [str(val) for val in CSIU[1]] if len(ShTerms) > 12: StrSh = [sh for sh in ShTerms[:12]] else: StrSh = [sh for sh in ShTerms] if len(ShRBTerms) > 12: StrRBSh = [sh for sh in ShRBTerms[:12]] else: StrRBSh = [sh for sh in ShRBTerms] CSIXtxt = wx.StaticText(self.testSSPanel,label=' site sym: %6s, mult: %3d, CSI-X: %s %s'%(SytSym,Mul,StrXYZ,ValXYZ)) mainSizer.Add(CSIXtxt) mainSizer.Add((5,5),0) CSIUtxt = wx.StaticText(self.testSSPanel,label=' site sym: %6s, mult: %3d, CSI-U: %s %s'%(SytSym,Mul,StrUIJ,ValUIJ)) mainSizer.Add(CSIUtxt) Shtxt = wx.StaticText(self.testSSPanel,label=' Sp. Harm coeff: %s'%StrSh) mainSizer.Add(Shtxt) RBsizer = wx.BoxSizer(wx.HORIZONTAL) RBsizer.Add(wx.StaticText(self.testSSPanel,label=' Spinning RB symmetry: ')) symchoice = ['53m','m3m','-43m','6/mmm','-6m2','-3m','4/mmm','-42m','mmm','2/m','-1','1'] simsel = wx.ComboBox(self.testSSPanel,choices=symchoice,value=self.RBsym,style=wx.CB_READONLY|wx.CB_DROPDOWN) simsel.Bind(wx.EVT_COMBOBOX,OnRBSymSel) RBsizer.Add(simsel,0,WACV) mainSizer.Add(RBsizer) ShRBtxt = wx.StaticText(self.testSSPanel,label=' Sp. Harm coeff: %s'%StrRBSh) mainSizer.Add(ShRBtxt) testHKL = wx.Button(self.testSSPanel,-1,'Extinction test') testHKL.Bind(wx.EVT_BUTTON,OnTestHKL) mainSizer.Add(testHKL) printSizer = wx.BoxSizer(wx.HORIZONTAL) showOps = wx.Button(self.testSSPanel,-1,'Show sym. ops') showOps.Bind(wx.EVT_BUTTON,OnShowOps) printSizer.Add(showOps,0,WACV) showGen = wx.Button(self.testSSPanel,-1,'Print generators') showGen.Bind(wx.EVT_BUTTON,OnShowGen) printSizer.Add(showGen,0,WACV) mainSizer.Add(printSizer) self.testSSPanel.SetSizer(mainSizer) Size = mainSizer.Fit(self.testSSPanel) Size[0] = 800 Size[1] = max(Size[1],350) self.testSSPanel.SetSize(Size)
[docs] class testSytSmain(wx.App):
[docs] def OnInit(self): self.main = testSytSym(None) self.main.Show() self.SetTopWindow(self.main) return True
[docs] def main(): 'Starts main application to compute and plot derivatives' GSASIIpath.InvokeDebugOpts() application = testSytSmain(0) application.MainLoop()
if __name__ == '__main__': main()