source: trunk/testSSymbols.py @ 2875

Last change on this file since 2875 was 2875, checked in by toby, 4 years ago

Allow space group entry by number; move SGMessageBox to GSASIIctrls

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