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