source: trunk/testSSymbols.py @ 3172

Last change on this file since 3172 was 3172, checked in by vondreele, 4 years ago

change from wx.DefaultSize? to our defaults if window size is 'None'
A TODO in Integrate for saving the x,y --> 2th,azm map between images
complete fix to allowed super symmetries by lattice + pt. grp lookup
also fix operator check for complete super symmetry
finish cif import of super symmetry cases

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Author Revision URL Id
File size: 7.6 KB
Line 
1#test
2import sys
3import wx
4import GSASIIpath
5GSASIIpath.SetBinaryPath()
6import GSASIIspc as G2spc
7import GSASIIctrlGUI as G2G
8
9   
10[wxID_FILEEXIT, 
11] = [wx.NewId() for _init_coll_File_Items in range(1)]
12WACV = wx.ALIGN_CENTER_VERTICAL
13
14class testSSymbols(wx.Frame):
15
16    def _init_ctrls(self, parent):
17        wx.Frame.__init__(self, name='testSSymbols', parent=parent,
18            size=wx.DefaultSize,style=wx.DEFAULT_FRAME_STYLE, title='Test SS symbols')
19        self.testSSMenu = wx.MenuBar()
20        self.File = wx.Menu(title='')
21        self.File.Append(help='Exit from testSS', id=wxID_FILEEXIT, kind=wx.ITEM_NORMAL,
22            text='Exit')
23        self.Bind(wx.EVT_MENU, self.OnFileExit, id=wxID_FILEEXIT)
24        self.testSSMenu.Append(menu=self.File, title='Run')
25        self.SetMenuBar(self.testSSMenu)
26        self.testSSPanel = wx.Window(self)       
27       
28    def __init__(self, parent):
29        self._init_ctrls(parent)
30        self.Bind(wx.EVT_CLOSE, self.ExitMain)   
31        self.dataFrame = None
32        Data = {'SGData':G2spc.SpcGroup('P 1')[1],'SuperSg':'(abg)',}
33        self.UpdateData(Data)
34
35    def ExitMain(self, event):
36        sys.exit()
37       
38    def OnFileExit(self,event):
39        if self.dataFrame:
40            self.dataFrame.Clear() 
41            self.dataFrame.Destroy()
42        self.Close()
43       
44    def UpdateData(self,Data):
45       
46        def OnTryAll(event):
47            SSList = G2spc.ssdict.get(Data['SGData']['SpGrp'],['',])
48            for SSymbol in SSList:
49                E,SSGData = G2spc.SSpcGroup(Data['SGData'],SSymbol)
50                if SSGData:
51                    text,table = G2spc.SSGPrint(Data['SGData'],SSGData)
52                    Data['SSGData'] = SSGData
53                    Data['SuperSg'] = SSymbol
54                    msg = 'Superspace Group Information'
55                    G2G.SGMessageBox(self,msg,text,table).Show()
56                else:
57                    msg = 'Superspace Group Error for'+SSymbol
58                    Style = wx.ICON_EXCLAMATION
59                    Text = '\n'+E
60                    wx.MessageBox(Text,caption=msg,style=Style)
61                   
62        def OnExhaustive(event):
63            latt = Data['SGData']['SGLatt']+Data['SGData']['SGPtGrp']
64            SSList = G2spc.ptssdict.get(latt,['',])
65            for SSymbol in SSList:
66                E,SSGData = G2spc.SSpcGroup(Data['SGData'],SSymbol)
67                if SSGData:
68                    text,table = G2spc.SSGPrint(Data['SGData'],SSGData)
69                    Data['SSGData'] = SSGData
70                    Data['SuperSg'] = SSymbol
71                    msg = 'Superspace Group Information'
72                    G2G.SGMessageBox(self,msg,text,table).Show()
73                else:
74                    msg = 'Superspace Group Error for'+SSymbol
75                    Style = wx.ICON_EXCLAMATION
76                    Text = '\n'+E
77                    wx.MessageBox(Text,caption=msg,style=Style)           
78       
79        def OnSpaceGroup(event):
80            Flds = SGTxt.GetValue().split()
81            #get rid of extra spaces between fields first
82            for fld in Flds: fld = fld.strip()
83            SpcGp = ' '.join(Flds)
84            # try a lookup on the user-supplied name
85            SpGrpNorm = G2spc.StandardizeSpcName(SpcGp)
86            if SpGrpNorm:
87                SGErr,SGData = G2spc.SpcGroup(SpGrpNorm)
88            else:
89                SGErr,SGData = G2spc.SpcGroup(SpcGp)
90            if SGErr:
91                text = [G2spc.SGErrors(SGErr)+'\nSpace Group set to previous']
92                SGTxt.SetValue(Data['SGData']['SpGrp'])
93                msg = 'Space Group Error'
94                Style = wx.ICON_EXCLAMATION
95                Text = '\n'.join(text)
96                wx.MessageBox(Text,caption=msg,style=Style)
97            else:
98                text,table = G2spc.SGPrint(SGData)
99                Data['SGData'] = SGData
100                SGTxt.SetValue(Data['SGData']['SpGrp'])
101                msg = 'Space Group Information'
102                G2G.SGMessageBox(self,msg,text,table).Show()
103            latt = Data['SGData']['SGLatt']+Data['SGData']['SGPtGrp']
104            SSChoice = G2spc.ptssdict.get(latt,['',])
105            Data['SuperSg'] = SSChoice[0]
106            self.UpdateData(Data)
107
108        def OnSuperGp(event):
109            SSymbol = superGp.GetValue()
110            print('Try: %s%s'%(Data['SGData']['SpGrp'],SSymbol))
111            E,SSGData = G2spc.SSpcGroup(Data['SGData'],SSymbol)
112            if SSGData:
113                text,table = G2spc.SSGPrint(Data['SGData'],SSGData)
114                Data['SSGData'] = SSGData
115                Data['SuperSg'] = SSymbol
116                msg = 'Superspace Group Information'
117                G2G.SGMessageBox(self,msg,text,table).Show()
118                print('Super spacegroup operators for '+SSGData['SSpGrp'])
119                for Op in SSGData['SSGOps']:
120                    print(G2spc.SSMT2text(Op).replace(' ',''))
121                if SGData['SGInv']:                                 
122                    for Op in SSGData['SSGOps']:
123                        Op = [-Op[0],-Op[1]%1.]
124                        print(G2spc.SSMT2text(Op).replace(' ',''))
125            else:
126                text = [E+'\nSuperspace Group set to previous']
127                superGp.SetValue(Data['SuperSg'])
128                msg = 'Superspace Group Error'
129                Style = wx.ICON_EXCLAMATION
130                Text = '\n'.join(text)
131                wx.MessageBox(Text,caption=msg,style=Style)
132            wx.CallAfter(self.UpdateData,Data)
133       
134        SGData = G2spc.SpcGroup(Data['SGData']['SpGrp'])[1]
135       
136        self.testSSPanel.DestroyChildren()
137        mainSizer = wx.FlexGridSizer(0,2,5,5)
138        mainSizer.Add(wx.StaticText(self.testSSPanel,-1,'  Space group: '),0,WACV)
139        SGTxt = wx.TextCtrl(self.testSSPanel,-1,value=Data['SGData']['SpGrp'],style=wx.TE_PROCESS_ENTER)
140        SGTxt.Bind(wx.EVT_TEXT_ENTER,OnSpaceGroup)
141        mainSizer.Add(SGTxt,0,WACV)
142        mainSizer.Add(wx.StaticText(self.testSSPanel,label=' Superspace group: '+Data['SGData']['SpGrp']),0,WACV)
143        latt = Data['SGData']['SGLatt']+Data['SGData']['SGPtGrp']
144        SSChoice = G2spc.ptssdict.get(latt,['',])
145        if SSChoice:
146            superGp = wx.ComboBox(self.testSSPanel,value=Data['SuperSg'],choices=SSChoice,style=wx.CB_DROPDOWN)   #wx.CB_READONLY|
147            superGp.Bind(wx.EVT_COMBOBOX,OnSuperGp)
148            superGp.Bind(wx.EVT_TEXT_ENTER,OnSuperGp)
149        else:   #nonstandard space group symbol not in my dictionary
150            superGp = wx.TextCtrl(self.testSSPanel,value=Data['SuperSg'],style=wx.TE_PROCESS_ENTER)
151            superGp.Bind(wx.EVT_TEXT_ENTER,OnSuperGp)                       
152        mainSizer.Add(superGp,0,WACV)
153        mainSizer.Add(wx.StaticText(self.testSSPanel,-1,' Try all SS symbols: '),0,WACV)
154        SStry = wx.Button(self.testSSPanel,-1,'OK') 
155        SStry.Bind(wx.EVT_BUTTON,OnTryAll)
156        mainSizer.Add(SStry,0,WACV)
157        mainSizer.Add(wx.StaticText(self.testSSPanel,-1,' Exhaustive try: '),0,WACV)
158        ESStry = wx.Button(self.testSSPanel,-1,'OK') 
159        ESStry.Bind(wx.EVT_BUTTON,OnExhaustive)
160        mainSizer.Add(ESStry,0,WACV)
161        self.testSSPanel.SetSizer(mainSizer)
162        Size = mainSizer.Fit(self.testSSPanel)
163        Size[0] = 800
164        Size[1] = max(Size[1],350)
165        self.testSSPanel.SetSize(Size)
166           
167class testSSmain(wx.App):
168    def OnInit(self):
169        self.main = testSSymbols(None)
170        self.main.Show()
171        self.SetTopWindow(self.main)
172        return True
173
174def main():
175    'Starts main application to compute and plot derivatives'
176    application = testSSmain(0)
177    application.MainLoop()
178   
179if __name__ == '__main__':
180    main()
181           
182       
Note: See TracBrowser for help on using the repository browser.