source: trunk/testSSymbols.py @ 1869

Last change on this file since 1869 was 1869, checked in by vondreele, 6 years ago

test super space group symbols

File size: 6.2 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'.join(text)
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            else:
102                text = [E+'\nSuperspace Group set to previous']
103                superGp.SetValue(Data['SuperSg'])
104                msg = 'Superspace Group Error'
105                Style = wx.ICON_EXCLAMATION
106                Text = '\n'.join(text)
107                wx.MessageBox(Text,caption=msg,style=Style)
108            self.UpdateData(Data)
109       
110        SGData = G2spc.SpcGroup(Data['SGData']['SpGrp'])[1]
111        SSGData = G2spc.SSpcGroup(SGData,Data['SuperSg'])[1]
112       
113        self.testSSPanel.DestroyChildren()
114        mainSizer = wx.FlexGridSizer(0,2,5,5)
115        mainSizer.Add(wx.StaticText(self.testSSPanel,-1,'  Space group: '),0,WACV)
116        SGTxt = wx.TextCtrl(self.testSSPanel,-1,value=Data['SGData']['SpGrp'],style=wx.TE_PROCESS_ENTER)
117        SGTxt.Bind(wx.EVT_TEXT_ENTER,OnSpaceGroup)
118        mainSizer.Add(SGTxt,0,WACV)
119        mainSizer.Add(wx.StaticText(self.testSSPanel,label=' Superspace group: '+Data['SGData']['SpGrp']),0,WACV)
120        SSChoice = G2spc.ssdict.get(Data['SGData']['SpGrp'],[])
121        if SSChoice:
122            superGp = wx.ComboBox(self.testSSPanel,value=Data['SuperSg'],choices=SSChoice,style=wx.CB_DROPDOWN)   #wx.CB_READONLY|
123            superGp.Bind(wx.EVT_COMBOBOX,OnSuperGp)
124            superGp.Bind(wx.EVT_TEXT_ENTER,OnSuperGp)
125        else:   #nonstandard space group symbol not in my dictionary
126            superGp = wx.TextCtrl(self.testSSPanel,value=Data['SuperSg'],style=wx.TE_PROCESS_ENTER)
127            superGp.Bind(wx.EVT_TEXT_ENTER,OnSuperGp)                       
128        mainSizer.Add(superGp,0,WACV)
129        mainSizer.Add(wx.StaticText(self.testSSPanel,-1,' Try all SS symbols: '),0,WACV)
130        SStry = wx.Button(self.testSSPanel,-1,'OK') 
131        SStry.Bind(wx.EVT_BUTTON,OnTryAll)
132        mainSizer.Add(SStry,0,WACV)
133        self.testSSPanel.SetSizer(mainSizer)
134        Size = mainSizer.Fit(self.testSSPanel)
135        Size[0] = 800
136        Size[1] = max(Size[1],350)
137        self.testSSPanel.SetSize(Size)
138           
139class testSSmain(wx.App):
140    def OnInit(self):
141        self.main = testSSymbols(None)
142        self.main.Show()
143        self.SetTopWindow(self.main)
144        return True
145
146def main():
147    'Starts main application to compute and plot derivatives'
148    application = testSSmain(0)
149    application.MainLoop()
150   
151if __name__ == '__main__':
152    main()
153           
154       
Note: See TracBrowser for help on using the repository browser.