source: trunk/testSSymbols.py @ 3227

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

incommensurate ndexing changes & fixes

  • 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
13laueSS = {'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       
18laueTS = {'2/m':['','s','s0','0s','ss'],
19          'mmm':['000','s00','0s0','00s','ss0','s0s','0ss','q00','0q0','00q','0qq','q0q','qq0'],
20          }
21
22class 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           
169class 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
176def main():
177    'Starts main application to compute and plot derivatives'
178    application = testSSmain(0)
179    application.MainLoop()
180   
181if __name__ == '__main__':
182    main()
183           
184       
Note: See TracBrowser for help on using the repository browser.