source: trunk/testSSymbols.py @ 1873

Last change on this file since 1873 was 1873, checked in by vondreele, 8 years ago

add remaining ortho super space group symbols & check all - all done!

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