Changeset 163
- Timestamp:
- Oct 13, 2010 10:17:22 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r161 r163 17 17 import GSASIIplot as G2plt 18 18 import GSASIIpwdGUI as G2pdG 19 import GSASIIspc as G2spc 19 20 import OpenGL as ogl 20 21 … … 807 808 dlg.Destroy() 808 809 sub = self.PatternTree.AppendItem(parent=sub,text=PhaseName) 809 SGData = {'SpGrp':'P 1'}810 E,SGData = G2spc.SpcGroup('P 1') 810 811 self.PatternTree.SetItemPyData(sub, \ 811 {'General':{'Name':PhaseName,'Type':'nuclear','SGData':SGData, 'Cell':[False,10.,10.,10.,90.,90.,90,1000.],812 ' Scale':[False,1.0],'Pawley dmin':0.25},'Atoms':[],'Drawing':{}})813 812 {'General':{'Name':PhaseName,'Type':'nuclear','SGData':SGData, 813 'Cell':[False,10.,10.,10.,90.,90.,90,1000.], 814 'Pawley dmin':1.0},'Atoms':[],'Drawing':{},'Histograms':{}}) 814 815 815 816 def OnDeletePhase(self,event): -
trunk/GSASIIIO.py
r155 r163 928 928 Atoms.append(Atom) 929 929 Volume = G2lat.calc_V(G2lat.cell2A(abc+angles)) 930 Phase['General'] = {'Name':PhaseName,'Type':Ptype,'SGData':SGData,'Cell':[False,]+abc+angles+[Volume,],'Scale':[False,1.0]} 930 Phase['General'] = {'Name':PhaseName,'Type':Ptype,'SGData':SGData, 931 'Cell':[False,]+abc+angles+[Volume,]} 931 932 Phase['Atoms'] = Atoms 932 933 Phase['Drawing'] = {} 934 Phase['Histograms'] = {} 933 935 return Phase 934 936 … … 996 998 else: 997 999 PhaseName = 'None' 998 Phase['General'] = {'Name':PhaseName,'Type':'macromolecular','SGData':SGData,'Cell':[False,]+cell+[Volume,],'Scale':[False,1.0]} 1000 Phase['General'] = {'Name':PhaseName,'Type':'macromolecular','SGData':SGData, 1001 'Cell':[False,]+cell+[Volume,]} 999 1002 Phase['Atoms'] = Atoms 1000 1003 Phase['Drawing'] = {} 1004 Phase['Histograms'] = {} 1001 1005 1002 1006 return Phase -
trunk/GSASIIgrid.py
r158 r163 14 14 ] = [wx.NewId() for _init_coll_Atom_Items in range(8)] 15 15 16 [ wxID_DRAWATOMSTYLE, wxID_DRAWATOMLABEL, wxID_DRAWVIEWPOINT, wxID_DRAWTRANSFORM, 17 wxID_DRAWDELETE, wxID_DRAWFILLCELL, wxID_DRAWADDEQUIV, wxID_DRAWFILLCOORD, 18 ] = [wx.NewId() for _init_coll_DrawAtom_Items in range(8)] 16 [ wxID_PWDRADD, wxID_HKLFADD, wxID_DATADELETE, 17 ] = [wx.NewId() for _init_coll_Data_Items in range(3)] 18 19 [ wxID_DRAWATOMSTYLE, wxID_DRAWATOMLABEL, wxID_DRAWATOMCOLOR, wxID_DRAWATOMRESETCOLOR, 20 wxID_DRAWVIEWPOINT, wxID_DRAWTRANSFORM, wxID_DRAWDELETE, wxID_DRAWFILLCELL, 21 wxID_DRAWADDEQUIV, wxID_DRAWFILLCOORD, 22 ] = [wx.NewId() for _init_coll_DrawAtom_Items in range(10)] 19 23 20 24 [ wxID_IMCALIBRATE, wxID_IMINTEGRATE, wxID_IMCLEARCALIB, wxID_SAVEINTG, … … 45 49 def _init_coll_AtomsMenu(self,parent): 46 50 parent.Append(menu=self.AtomEdit, title='Edit') 51 52 def _init_coll_DataMenu(self,parent): 53 parent.Append(menu=self.DataEdit, title='Edit') 47 54 48 55 def _init_coll_DrawAtomsMenu(self,parent): … … 85 92 help='Select atoms to transform first') 86 93 94 def _init_coll_Data_Items(self,parent): 95 parent.Append(id=wxID_PWDRADD, kind=wx.ITEM_NORMAL,text='Add powder histograms', 96 help='Select new powder histograms to be used for this phase') 97 parent.Append(id=wxID_HKLFADD, kind=wx.ITEM_NORMAL,text='Add single crystal histograms', 98 help='Select new single crystal histograms to be used for this phase') 99 parent.Append(id=wxID_DATADELETE, kind=wx.ITEM_NORMAL,text='Delete histograms', 100 help='Delete histograms from use for this phase') 101 87 102 def _init_coll_DrawAtom_Items(self,parent): 88 103 parent.Append(id=wxID_DRAWATOMSTYLE, kind=wx.ITEM_NORMAL,text='Atom style', … … 90 105 parent.Append(id=wxID_DRAWATOMLABEL, kind=wx.ITEM_NORMAL,text='Atom label', 91 106 help='Select atoms first') 107 parent.Append(id=wxID_DRAWATOMCOLOR, kind=wx.ITEM_NORMAL,text='Atom color', 108 help='Select atoms first') 109 parent.Append(id=wxID_DRAWATOMRESETCOLOR, kind=wx.ITEM_NORMAL,text='Reset atom colors', 110 help='Resets all atom colors to defaults') 92 111 parent.Append(id=wxID_DRAWVIEWPOINT, kind=wx.ITEM_NORMAL,text='View point', 93 112 help='View point is 1st atom selected') … … 151 170 152 171 self.AtomsMenu = wx.MenuBar() 172 self.DataMenu = wx.MenuBar() 153 173 self.DrawAtomsMenu = wx.MenuBar() 154 174 self.ImageMenu = wx.MenuBar() … … 159 179 self.IndexMenu = wx.MenuBar() 160 180 self.AtomEdit = wx.Menu(title='') 181 self.DataEdit = wx.Menu(title='') 161 182 self.DrawAtomEdit = wx.Menu(title='') 162 183 self.ImageEdit = wx.Menu(title='') … … 168 189 self._init_coll_AtomsMenu(self.AtomsMenu) 169 190 self._init_coll_Atom_Items(self.AtomEdit) 191 self._init_coll_DataMenu(self.DataMenu) 192 self._init_coll_Data_Items(self.DataEdit) 170 193 self._init_coll_DrawAtomsMenu(self.DrawAtomsMenu) 171 194 self._init_coll_DrawAtom_Items(self.DrawAtomEdit) … … 218 241 self.DestroyChildren() 219 242 220 class GSGrid(wg.Grid):221 def __init__(self, parent, name=''):222 wg.Grid.__init__(self,parent,-1,name=name)223 self.SetSize(parent.GetClientSize())224 225 def Clear(self):226 wg.Grid.ClearGrid(self)227 228 def SetCellStyle(self,r,c,color="white",readonly=True):229 self.SetCellBackgroundColour(r,c,color)230 self.SetReadOnly(r,c,isReadOnly=readonly)231 232 243 class GSNoteBook(wx.Notebook): 233 244 def __init__(self, parent, name='',size = None): … … 238 249 GSNoteBook.DeleteAllPages(self) 239 250 251 def FindPage(self,name): 252 numPage = self.GetPageCount() 253 for page in range(numPage): 254 if self.GetPageText(page) == name: 255 return page 256 257 class GSGrid(wg.Grid): 258 def __init__(self, parent, name=''): 259 wg.Grid.__init__(self,parent,-1,name=name) 260 self.SetSize(parent.GetClientSize()) 261 262 def Clear(self): 263 wg.Grid.ClearGrid(self) 264 265 def SetCellStyle(self,r,c,color="white",readonly=True): 266 self.SetCellBackgroundColour(r,c,color) 267 self.SetReadOnly(r,c,isReadOnly=readonly) 268 240 269 class Table(wg.PyGridTableBase): 241 270 def __init__(self, data=[], rowLabels=None, colLabels=None, types = None): -
trunk/GSASIIphsGUI.py
r161 r163 125 125 126 126 Atoms = [] 127 self.SelectedRow = 0 128 129 # def BookResize(event): 130 # w,h = self.GetSize() 131 # self.dataDisplay.SetSize(wx.Size(w,h)) 132 # 133 def UpdateGeneral(): 127 if self.dataDisplay: 128 self.dataDisplay.Destroy() 129 PhaseName = self.PatternTree.GetItemText(item) 130 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu) 131 self.dataFrame.SetLabel('Phase Data for '+PhaseName) 132 self.dataFrame.CreateStatusBar() 133 self.dataDisplay = G2gd.GSNoteBook(parent=self.dataFrame,size=self.dataFrame.GetClientSize()) 134 135 def SetupGeneral(): 134 136 generalData = data['General'] 135 137 atomData = data['Atoms'] … … 141 143 generalData['AtomMass'] = [] 142 144 generalData['Color'] = [] 143 generalData['My self'] = self145 generalData['Mydir'] = self.dirname 144 146 colType = 1 145 147 colSS = 7 … … 161 163 generalData['Color'].append(Info['Color']) 162 164 163 def FillGeneralGrid(): 164 rowLabels = ['Phase name','Phase type','Space group', 165 'Lattice ',' parameters','Scale factor','Density','Elements','No. per cell', 166 'Atom weight','Bond radii','Angle radii','vdw radii','Color'] 167 def SetLatticeParametersStyle(SGData,table): 168 clist = [1,2,3,4,5,6] 169 if SGData['SGLaue'] in ['m3','m3m']: 170 table[4][2] = table[4][3] = table[4][1] 171 table[4][4] = table[4][5] = table[4][6] = 90. 172 clist = [2,3,4,5,6] 173 elif SGData['SGLaue'] in ['3R','3mR']: 174 table[4][2] = table[4][3] = table[4][1] 175 table[4][5] = table[4][6] = table[4][4] 176 clist = [2,3,5,6] 177 elif SGData['SGLaue'] in ['3','3m1','31m','6/m','6/mmm']: 178 table[4][2] = table[4][1] 179 table[4][4] = table[4][5] = 90. 180 table[4][6] = 120. 181 clist = [2,4,5,6] 182 elif SGData['SGLaue'] in ['4/m','4/mmm']: 183 table[4][2] = table[4][1] 184 table[4][4] = table[4][5] = table[4][6] = 90. 185 clist = [2,4,5,6] 186 elif SGData['SGLaue'] in ['mmm']: 187 table[4][4] = table[4][5] = table[4][6] = 90. 188 clist = [4,5,6] 189 elif SGData['SGLaue'] in ['2/m']: 190 if SGData['SGUniq'] == 'a': 191 table[4][5]= table[4][6] = 90. 192 clist = [5,6] 193 if SGData['SGUniq'] == 'b': 194 table[4][4]= table[4][6] = 90. 195 clist = [4,6] 196 if SGData['SGUniq'] == 'c': 197 table[4][4]= table[4][5] = 90. 198 clist = [4,5] 199 for c in clist: 200 General.SetCellStyle(4,c,VERY_LIGHT_GREY,True) 201 202 def RefreshGeneralGrid(event): 203 204 r,c = event.GetRow(),event.GetCol() 205 generalData['Name'] = table[0][0] 165 def UpdateGeneral(): 166 167 ''' default dictionary structure for "General" phase item: (taken from GSASII.py) 168 'General':{ 169 'Name':PhaseName 170 'Type':'nuclear' 171 'SGData':SGData 172 'Cell':[False,10.,10.,10.,90.,90.,90,1000.] 173 'Histogram list':['',] 174 'Pawley dmin':1.0} 175 'Atoms':[] 176 'Drawing':{} 177 }) 178 ''' 179 phaseTypes = ['nuclear','modulated','magnetic','macromolecular','Pawley'] 180 SetupGeneral() 181 generalData = data['General'] 182 183 def OnPhaseName(event): 184 oldName = generalData['Name'] 185 generalData['Name'] = NameTxt.GetValue() 186 self.G2plotNB.Rename(oldName,generalData['Name']) 187 self.dataFrame.SetLabel('Phase Data for '+generalData['Name']) 206 188 self.PatternTree.SetItemText(item,generalData['Name']) 207 generalData['Type'] = table[1][0] 208 SpcGp = table[2][0] 189 190 def OnPhaseType(event): 191 if not generalData['AtomTypes']: #can change only if no atoms! 192 generalData['Type'] = TypeTxt.GetValue() 193 dataDisplay.Destroy() #needed to clear away bad cellSizer, etc. 194 UpdateGeneral() 195 if generalData['Type'] == 'Pawley': 196 if self.dataDisplay.FindPage('Atoms'): 197 self.dataDisplay.DeletePage(self.dataDisplay.FindPage('Atoms')) 198 self.dataDisplay.DeletePage(self.dataDisplay.FindPage('Draw Options')) 199 self.dataDisplay.DeletePage(self.dataDisplay.FindPage('Draw Atoms')) 200 self.dataDisplay.AdvanceSelection() 201 if not self.dataDisplay.FindPage('Pawley reflections'): 202 self.dataDisplay.AddPage(G2gd.GSGrid(self.dataDisplay),'Pawley reflections') 203 else: 204 TypeTxt.SetValue(generalData['Type']) 205 206 207 def OnSpaceGroup(event): 208 SpcGp = SGTxt.GetValue() 209 209 SGErr,SGData = G2spc.SpcGroup(SpcGp) 210 if r == 0: 211 self.G2plotNB.Rename(oldName,generalData['Name']) 212 elif r == 2 and c == 0: 213 if SGErr: 214 text = [G2spc.SGErrors(SGErr)+'\nSpace Group set to previous'] 215 table[2][0] = generalData['SGData']['SpGrp'] 216 msg = 'Space Group Error' 217 Style = wx.ICON_EXCLAMATION 210 if SGErr: 211 text = [G2spc.SGErrors(SGErr)+'\nSpace Group set to previous'] 212 SGTxt.SetValue(generalData['SGData']['SpGrp']) 213 msg = 'Space Group Error' 214 Style = wx.ICON_EXCLAMATION 215 else: 216 text = G2spc.SGPrint(SGData) 217 generalData['SGData'] = SGData 218 msg = 'Space Group Information' 219 Style = wx.ICON_INFORMATION 220 Text = '' 221 for line in text: 222 Text += line+'\n' 223 wx.MessageBox(Text,caption=msg,style=Style) 224 dataDisplay.Destroy() #needed to clear away bad cellSizer, etc. 225 UpdateGeneral() 226 227 def OnCellRef(event): 228 generalData['Cell'][0] = cellRef.GetValue() 229 230 def OnCellChange(event): 231 SGData = generalData['SGData'] 232 laue = SGData['SGLaue'] 233 if laue == '2/m': 234 laue += SGData['SGUniq'] 235 cell = generalData['Cell'] 236 Obj = event.GetEventObject() 237 ObjId = cellList.index(Obj.GetId()) 238 try: 239 value = max(1.0,float(Obj.GetValue())) 240 except ValueError: 241 if ObjId < 3: #bad cell edge - reset 242 value = controls[6+ObjId] 243 else: #bad angle 244 value = 90. 245 if laue in ['m3','m3m']: 246 cell[1] = cell[2] = cell[3] = value 247 cell[4] = cell[5] = cell[6] = 90.0 248 Obj.SetValue("%.5f"%(cell[1])) 249 elif laue in ['3R','3mR']: 250 if ObjId == 0: 251 cell[1] = cell[2] = cell[3] = value 252 Obj.SetValue("%.5f"%(cell[1])) 218 253 else: 219 text = G2spc.SGPrint(SGData) 220 generalData['SGData'] = SGData 221 msg = 'Space Group Information' 222 Style = wx.ICON_INFORMATION 223 Text = '' 224 for line in text: 225 Text += line+'\n' 226 wx.MessageBox(Text,caption=msg,style=Style) 227 General.SetCellValue(4,0,str(generalData['Cell'][0])) 228 for c in range(1,7): 229 General.SetCellStyle(4,c,"white",False) 230 generalData['Cell'][c] = float(General.GetCellValue(4,c)) 231 generalData['Cell'][7] = G2lat.calc_V(G2lat.cell2A(generalData['Cell'][1:7])) 232 SetLatticeParametersStyle(SGData,table) 233 generalData['Scale'][1] = float(General.GetCellValue(5,1)) 234 General.ForceRefresh() 235 236 UpdateGeneral() 237 generalData = data['General'] 238 self.dataFrame.setSizePosLeft([750,340]) 239 colLabels = [] 240 colLabels += ['' for i in range(max(8,len(generalData['AtomTypes'])))] 241 table = [] 242 table.append([generalData['Name'],'','','','','','','','']) #phase name 243 table.append([generalData['Type'],'','','','','','','','']) #phase type 244 E,SGData = G2spc.SpcGroup(generalData['SGData']['SpGrp']) 245 table.append([SGData['SpGrp'],'','','','','','','','']) #space group symbol 246 table.append(['refine','a ','b ','c ','alpha ','beta ','gamma','volume ']) 247 table.append(generalData['Cell']) #lattice parameters 248 table.append([generalData['Scale'][0],generalData['Scale'][1],'','','','','','']) #scale factor 249 line = [] 250 if generalData['Type'] == 'Pawley': 251 table.append(max(0.25,generalData['Pawley dmin'])) 252 rowLabels[6] = 'd min' 253 else: 254 cell[4] = cell[5] = cell[6] = value 255 Obj.SetValue("%.5f"%(cell[4])) 256 elif laue in ['3','3m1','31m','6/m','6/mmm','4/m','4/mmm']: 257 if ObjId == 0: 258 cell[1] = cell[2] = value 259 Obj.SetValue("%.5f"%(cell[1])) 260 else: 261 cell[3] = value 262 Obj.SetValue("%.5f"%(cell[3])) 263 elif laue in ['mmm']: 264 cell[ObjId+1] = value 265 Obj.SetValue("%.5f"%(cell[ObjId+1])) 266 elif laue in ['2/m'+'a']: 267 if ObjId != 3: 268 cell[ObjId+1] = value 269 Obj.SetValue("%.5f"%(cell[ObjId+1])) 270 else: 271 cell[4] = value 272 Obj.SetValue("%.3f"%(cell[4])) 273 elif laue in ['2/m'+'b']: 274 if ObjId != 3: 275 cell[ObjId+1] = value 276 Obj.SetValue("%.5f"%(cell[ObjId+1])) 277 else: 278 cell[5] = value 279 Obj.SetValue("%.3f"%(cell[5])) 280 elif laue in ['2/m'+'c']: 281 if ObjId != 3: 282 cell[ObjId+1] = value 283 Obj.SetValue("%.5f"%(cell[ObjId+1])) 284 else: 285 cell[6] = value 286 Obj.SetValue("%.3f"%(cell[6])) 287 else: 288 cell[ObjId+1] = value 289 if ObjId < 3: 290 Obj.SetValue("%.5f"%(cell[1+ObjId])) 291 else: 292 Obj.SetValue("%.3f"%(cell[1+ObjId])) 293 cell[7] = G2lat.calc_V(G2lat.cell2A(cell[1:7])) 294 volVal.SetValue("%.3f"%(cell[7])) 295 generalData['Cell'] = cell 296 dataDisplay.Destroy() #needed to clear away bad cellSizer, etc. 297 UpdateGeneral() 298 299 def OnPawleyVal(event): 300 try: 301 dmin = float(pawlVal.GetValue()) 302 if 0.25 <= dmin <= 10.: 303 generalData['Pawley dmin'] = dmin 304 except ValueError: 305 pass 306 pawlVal.SetValue("%.2f"%(generalData['Pawley dmin'])) #reset in case of error 307 308 cellGUIlist = [[['m3','m3m'],4,zip([" Unit cell: a = "," Vol = "],["%.5f","%.3f"],[True,False],[0,0])], 309 [['3R','3mR'],6,zip([" a = "," alpha = "," Vol = "],["%.5f","%.3f","%.3f"],[True,True,False],[0,2,0])], 310 [['3','3m1','31m','6/m','6/mmm','4/m','4/mmm'],6,zip([" a = "," c = "," Vol = "],["%.5f","%.5f","%.3f"],[True,True,False],[0,2,0])], 311 [['mmm'],8,zip([" a = "," b = "," c = "," Vol = "],["%.5f","%.5f","%.5f","%.3f"], 312 [True,True,True,False],[0,1,2,0])], 313 [['2/m'+'a'],10,zip([" a = "," b = "," c = "," alpha = "," Vol = "], 314 ["%.5f","%.5f","%.5f","%.3f","%.3f"],[True,True,True,True,False],[0,1,2,4,0])], 315 [['2/m'+'b'],10,zip([" a = "," b = "," c = "," beta = "," Vol = "], 316 ["%.5f","%.5f","%.5f","%.3f","%.3f"],[True,True,True,True,False],[0,1,2,4,0])], 317 [['2/m'+'c'],10,zip([" a = "," b = "," c = "," gamma = "," Vol = "], 318 ["%.5f","%.5f","%.5f","%.3f","%.3f"],[True,True,True,True,False],[0,1,2,4,0])], 319 [['-1'],8,zip([" a = "," b = "," c = "," Vol = "," alpha = "," beta = "," gamma = "], 320 ["%.5f","%.5f","%.5f","%.3f","%.3f","%.3f","%.3f"], 321 [True,True,True,False,True,True,True],[0,1,2,0,3,4,5])]] 322 323 General.DestroyChildren() 324 dataDisplay = wx.Panel(General) 325 mainSizer = wx.BoxSizer(wx.VERTICAL) 326 mainSizer.Add((5,5),0) 327 mainSizer.Add(wx.StaticText(dataDisplay,-1,'General phase data:'),0,wx.ALIGN_CENTER_VERTICAL) 328 mainSizer.Add((5,5),0) 329 nameSizer = wx.BoxSizer(wx.HORIZONTAL) 330 nameSizer.Add(wx.StaticText(dataDisplay,-1,' Phase name: '),0,wx.ALIGN_CENTER_VERTICAL) 331 NameTxt = wx.TextCtrl(dataDisplay,-1,value=generalData['Name'],style=wx.TE_PROCESS_ENTER) 332 NameTxt.Bind(wx.EVT_TEXT_ENTER,OnPhaseName) 333 NameTxt.Bind(wx.EVT_KILL_FOCUS,OnPhaseName) 334 nameSizer.Add(NameTxt,0,wx.ALIGN_CENTER_VERTICAL) 335 nameSizer.Add(wx.StaticText(dataDisplay,-1,' Phase type: '),0,wx.ALIGN_CENTER_VERTICAL) 336 TypeTxt = wx.ComboBox(dataDisplay,-1,value=generalData['Type'],choices=phaseTypes, 337 style=wx.CB_READONLY|wx.CB_DROPDOWN) 338 TypeTxt.Bind(wx.EVT_COMBOBOX, OnPhaseType) 339 nameSizer.Add(TypeTxt,0,wx.ALIGN_CENTER_VERTICAL) 340 nameSizer.Add(wx.StaticText(dataDisplay,-1,' Space group: '),0,wx.ALIGN_CENTER_VERTICAL) 341 SGTxt = wx.TextCtrl(dataDisplay,-1,value=generalData['SGData']['SpGrp'],style=wx.TE_PROCESS_ENTER) 342 SGTxt.Bind(wx.EVT_TEXT_ENTER,OnSpaceGroup) 343 nameSizer.Add(SGTxt,0,wx.ALIGN_CENTER_VERTICAL) 344 mainSizer.Add(nameSizer,0) 345 mainSizer.Add((5,5),0) 346 cell = generalData['Cell'] 347 laue = generalData['SGData']['SGLaue'] 348 if laue == '2/m': 349 laue += generalData['SGData']['SGUniq'] 350 for cellGUI in cellGUIlist: 351 if laue in cellGUI[0]: 352 useGUI = cellGUI 353 cellList = [] 354 cellSizer = wx.FlexGridSizer(2,useGUI[1]+1,5,5) 355 cellRef = wx.CheckBox(dataDisplay,label='Refine unit cell:') 356 cellSizer.Add(cellRef,0,wx.ALIGN_CENTER_VERTICAL) 357 cellRef.Bind(wx.EVT_CHECKBOX, OnCellRef) 358 cellRef.SetValue(cell[0]) 359 for txt,fmt,ifEdit,Id in useGUI[2]: 360 cellSizer.Add(wx.StaticText(dataDisplay,label=txt),0,wx.ALIGN_CENTER_VERTICAL) 361 if ifEdit: #a,b,c,etc. 362 cellVal = wx.TextCtrl(dataDisplay,value=(fmt%(cell[Id+1])), 363 style=wx.TE_PROCESS_ENTER) 364 cellVal.Bind(wx.EVT_TEXT_ENTER,OnCellChange) 365 cellVal.Bind(wx.EVT_KILL_FOCUS,OnCellChange) 366 cellSizer.Add(cellVal,0,wx.ALIGN_CENTER_VERTICAL) 367 cellList.append(cellVal.GetId()) 368 else: #volume 369 volVal = wx.TextCtrl(dataDisplay,value=(fmt%(cell[7])),style=wx.TE_READONLY) 370 volVal.SetBackgroundColour(VERY_LIGHT_GREY) 371 cellSizer.Add(volVal,0,wx.ALIGN_CENTER_VERTICAL) 372 mainSizer.Add(cellSizer,0) 373 mainSizer.Add((5,5),0) 374 375 if len(generalData['AtomTypes']): 254 376 mass = 0. 255 377 for i,elem in enumerate(generalData['AtomTypes']): 256 378 mass += generalData['NoAtoms'][elem]*generalData['AtomMass'][i] 379 denSizer = wx.BoxSizer(wx.HORIZONTAL) 380 denSizer.Add(wx.StaticText(dataDisplay,-1,' Density: '),0,wx.ALIGN_CENTER_VERTICAL) 257 381 Volume = generalData['Cell'][7] 382 density = mass/(0.6022137*Volume) 383 denTxt = wx.TextCtrl(dataDisplay,-1,'%.3f'%(density),style=wx.TE_READONLY) 384 denTxt.SetBackgroundColour(VERY_LIGHT_GREY) 385 denSizer.Add(denTxt,0,wx.ALIGN_CENTER_VERTICAL) 258 386 if generalData['Type'] == 'macromolecular' and mass > 0.0: 259 table.append([mass/(0.6022137*Volume),'Matthews coeff.',Volume/mass,'','','','','','']) 260 else: 261 table.append([mass/(0.6022137*Volume),'','','','','','','','']) 262 for i,elem in enumerate(generalData['AtomTypes']): 263 line.append(generalData['NoAtoms'][elem]) 264 table.append(generalData['AtomTypes']+['' for i in range(max(8,len(generalData['AtomTypes'])))]) #element list 265 table.append(line+['' for i in range(max(8,len(generalData['AtomTypes'])))]) #No. per cell 266 table.append(generalData['AtomMass']+['' for i in range(max(8,len(generalData['AtomTypes'])))]) #At. wt. 267 table.append(generalData['BondRadii']+['' for i in range(max(8,len(generalData['AtomTypes'])))]) 268 table.append(generalData['AngleRadii']+['' for i in range(max(8,len(generalData['AtomTypes'])))]) 269 table.append(generalData['vdWRadii']+['' for i in range(max(8,len(generalData['AtomTypes'])))]) 270 table.append(['','','','','','','','']) #contains colors 271 Types = [wg.GRID_VALUE_STRING for i in range(max(8,len(generalData['AtomTypes'])))] 272 generalTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types) 273 General.SetTable(generalTable, True) 274 General.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshGeneralGrid) 275 General.SetMargins(0,0) 276 General.SetColSize(0,100) 277 General.SetColLabelSize(0) 278 attr = wg.GridCellAttr() 279 for c in range(max(8,len(generalData['AtomTypes']))): 280 if c > 0: 281 General.SetReadOnly(0,c,isReadOnly=True) 282 General.SetReadOnly(1,c,isReadOnly=True) 283 General.SetReadOnly(2,c,isReadOnly=True) 284 General.SetReadOnly(3,c,isReadOnly=True) #unit cell labels 285 General.SetCellAlignment(3,c,wx.ALIGN_RIGHT, wx.ALIGN_CENTRE) 286 if c < 4: 287 General.SetCellRenderer(4,c,wg.GridCellFloatRenderer(10,5)) 288 General.SetCellEditor(4,c,wg.GridCellFloatEditor(10,5)) 289 else: 290 General.SetCellRenderer(4,c,wg.GridCellFloatRenderer(10,3)) 291 General.SetCellEditor(4,c,wg.GridCellFloatEditor(10,3)) 292 for r in range(6,13): 293 General.SetReadOnly(r,c,isReadOnly=True) 294 r = rowLabels.index('Color') 295 for c in range(len(generalData['AtomTypes'])): 296 General.SetCellBackgroundColour(r,c,generalData['Color'][c]) 297 298 General.SetReadOnly(4,7,isReadOnly=True) #cell volume - no edit 299 General.SetCellEditor(1,0,wg.GridCellChoiceEditor(['nuclear','modulated', #phase type 300 'magnetic','macromolecular','Pawley'],False)) #- change only if no atoms 301 if line: #no.of atoms not zero! 302 General.SetReadOnly(1,0,isReadOnly=True) #can't change phase type 303 General.SetCellRenderer(4,0,wg.GridCellBoolRenderer()) #lattice parameters 304 General.SetCellEditor(4,0,wg.GridCellBoolEditor()) 305 SetLatticeParametersStyle(SGData,table) 306 General.SetCellRenderer(5,1,wg.GridCellFloatRenderer(10,4)) #scale factor 307 General.SetCellEditor(5,1,wg.GridCellFloatEditor(10,4)) 308 General.SetCellRenderer(5,0,wg.GridCellBoolRenderer()) 309 General.SetCellEditor(5,0,wg.GridCellBoolEditor()) 310 General.SetCellRenderer(6,0,wg.GridCellFloatRenderer(8,3)) 311 General.SetCellRenderer(6,2,wg.GridCellFloatRenderer(8,3)) 387 denSizer.Add(wx.StaticText(dataDisplay,-1,' Matthews coeff.: '), 388 0,wx.ALIGN_CENTER_VERTICAL) 389 mattTxt = wx.TextCtrl(dataDisplay,-1,'%.3f'%(Volume/mass),style=wx.TE_READONLY) 390 mattTxt.SetBackgroundColour(VERY_LIGHT_GREY) 391 denSizer.Add(mattTxt,0,wx.ALIGN_CENTER_VERTICAL) 392 mainSizer.Add(denSizer) 393 mainSizer.Add((5,5),0) 394 395 elemSizer = wx.FlexGridSizer(7,len(generalData['AtomTypes'])+1,1,1) 396 elemSizer.Add(wx.StaticText(dataDisplay,label='Elements'),0,wx.ALIGN_CENTER_VERTICAL) 397 for elem in generalData['AtomTypes']: 398 typTxt = wx.TextCtrl(dataDisplay,value=elem,style=wx.TE_READONLY) 399 typTxt.SetBackgroundColour(VERY_LIGHT_GREY) 400 elemSizer.Add(typTxt,0,wx.ALIGN_CENTER_VERTICAL) 401 elemSizer.Add(wx.StaticText(dataDisplay,label='No. per cell'),0,wx.ALIGN_CENTER_VERTICAL) 402 for elem in generalData['AtomTypes']: 403 numbTxt = wx.TextCtrl(dataDisplay,value='%.1f'%(generalData['NoAtoms'][elem]), 404 style=wx.TE_READONLY) 405 numbTxt.SetBackgroundColour(VERY_LIGHT_GREY) 406 elemSizer.Add(numbTxt,0,wx.ALIGN_CENTER_VERTICAL) 407 elemSizer.Add(wx.StaticText(dataDisplay,label='Atom weight'),0,wx.ALIGN_CENTER_VERTICAL) 408 for wt in generalData['AtomMass']: 409 wtTxt = wx.TextCtrl(dataDisplay,value='%.3f'%(wt),style=wx.TE_READONLY) 410 wtTxt.SetBackgroundColour(VERY_LIGHT_GREY) 411 elemSizer.Add(wtTxt,0,wx.ALIGN_CENTER_VERTICAL) 412 elemSizer.Add(wx.StaticText(dataDisplay,label='Bond radii'),0,wx.ALIGN_CENTER_VERTICAL) 413 for rad in generalData['BondRadii']: 414 bondRadii = wx.TextCtrl(dataDisplay,value='%.2f'%(rad),style=wx.TE_READONLY) 415 bondRadii.SetBackgroundColour(VERY_LIGHT_GREY) 416 elemSizer.Add(bondRadii,0,wx.ALIGN_CENTER_VERTICAL) 417 elemSizer.Add(wx.StaticText(dataDisplay,label='Angle radii'),0,wx.ALIGN_CENTER_VERTICAL) 418 for rad in generalData['AngleRadii']: 419 elemTxt = wx.TextCtrl(dataDisplay,value='%.2f'%(rad),style=wx.TE_READONLY) 420 elemTxt.SetBackgroundColour(VERY_LIGHT_GREY) 421 elemSizer.Add(elemTxt,0,wx.ALIGN_CENTER_VERTICAL) 422 elemSizer.Add(wx.StaticText(dataDisplay,label='van der Waals radii'),0,wx.ALIGN_CENTER_VERTICAL) 423 for rad in generalData['vdWRadii']: 424 elemTxt = wx.TextCtrl(dataDisplay,value='%.2f'%(rad),style=wx.TE_READONLY) 425 elemTxt.SetBackgroundColour(VERY_LIGHT_GREY) 426 elemSizer.Add(elemTxt,0,wx.ALIGN_CENTER_VERTICAL) 427 elemSizer.Add(wx.StaticText(dataDisplay,label='Default color'),0,wx.ALIGN_CENTER_VERTICAL) 428 for color in generalData['Color']: 429 colorTxt = wx.TextCtrl(dataDisplay,value='',style=wx.TE_READONLY) 430 colorTxt.SetBackgroundColour(color) 431 elemSizer.Add(colorTxt,0,wx.ALIGN_CENTER_VERTICAL) 432 mainSizer.Add(elemSizer) 433 434 elif generalData['Type'] == 'Pawley': 435 pawlSizer = wx.BoxSizer(wx.HORIZONTAL) 436 pawlSizer.Add(wx.StaticText(dataDisplay,label=' Pawley dmin: '),0,wx.ALIGN_CENTER_VERTICAL) 437 pawlVal = wx.TextCtrl(dataDisplay,value='%.2f'%(generalData['Pawley dmin']),style=wx.TE_PROCESS_ENTER) 438 pawlVal.Bind(wx.EVT_TEXT_ENTER,OnPawleyVal) 439 pawlVal.Bind(wx.EVT_KILL_FOCUS,OnPawleyVal) 440 pawlSizer.Add(pawlVal,0,wx.ALIGN_CENTER_VERTICAL) 441 mainSizer.Add(pawlSizer) 442 443 dataDisplay.SetSizer(mainSizer) 444 Size = mainSizer.Fit(self.dataFrame) 445 Size[1] += 26 #compensate for status bar 446 dataDisplay.SetSize(Size) 447 self.dataFrame.setSizePosLeft(Size) 312 448 313 449 def FillAtomsGrid(): … … 484 620 if CSI[2][i]: 485 621 Atoms.SetCellStyle(r,ci,WHITE,False) 486 UpdateGeneral()622 SetupGeneral() 487 623 elif Atoms.GetColLabelValue(c) == 'I/A': 488 624 atomData[r][c] = Atoms.GetCellValue(r,c) … … 567 703 atomData[r][c-1] = name[:1]+'(%d)'%(r+1) 568 704 PE.Destroy() 569 UpdateGeneral()705 SetupGeneral() 570 706 FillAtomsGrid() 571 707 else: … … 640 776 elif generalData['Type'] == 'magnetic': 641 777 atomData.append(['UNK','H','',x,y,z,1,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,0,0,0]) 642 UpdateGeneral()778 SetupGeneral() 643 779 644 780 def OnAtomInsert(event): … … 672 808 elif generalData['Type'] == 'magnetic': 673 809 atomData.insert(indx,['UNK','UNK','',x,y,z,1,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,0,0,0]) 674 UpdateGeneral()810 SetupGeneral() 675 811 676 812 def AtomDelete(event): … … 769 905 'L','K','M','F','P','S','T','W','Y','V','M',' ',' ',' '] 770 906 defaultDrawing = {'viewPoint':[[0.5,0.5,0.5],[]],'showHydrogen':True,'backColor':[0,0,0],'depthFog':False, 771 'Zclip':50.0,'cameraPos':50.,' pickItem':'Atoms','showBadContacts':False,907 'Zclip':50.0,'cameraPos':50.,'radiusFactor':0.85,'showBadContacts':False, 772 908 'bondRadius':0.1,'ballScale':0.33,'vdwScale':0.67,'ellipseProb':50,'sizeH':0.50, 773 909 'unitCellBox':False,'showABC':True,'showSymElem':False,'selectedAtoms':[], … … 784 920 for atom in atomData: 785 921 if generalData['Type'] == 'nuclear': 786 drawingData['Atoms'].append(atom[:2]+atom[3:6]+['1',]+['lines',]+787 ['',]+ atom[9:17]+[[]])788 drawingData['atomPtrs']= [2,1,6] #x, type & style922 atomInfo = [atom[:2]+atom[3:6]+['1',]+['vdW balls',]+ 923 ['',]+[[255,255,255],]+atom[9:17]+[[]]][0] 924 cx,ct,cs = [2,1,6] #x, type & style 789 925 elif generalData['Type'] == 'macromolecular': 790 926 try: … … 792 928 except ValueError: 793 929 oneLetter = -1 794 drawingData['Atoms'].append([atom[1].strip()+atom[0],]+930 atomInfo = [[atom[1].strip()+atom[0],]+ 795 931 [AA1letter[oneLetter]+atom[0],]+atom[2:5]+ 796 atom[6:9]+['1',]+[' lines',]+['',]+atom[12:20]+[[]])797 drawingData['atomPtrs']= [5,4,9] #x, type & style932 atom[6:9]+['1',]+['sticks',]+['',]+[[255,255,255],]+atom[12:20]+[[]]][0] 933 cx,ct,cs = [5,4,9] #x, type & style 798 934 elif generalData['Type'] == 'magnetic': 799 drawingData['Atoms'].append(atom[:2]+atom[3:6]+['lines',]+['',]+atom[9:20]+[[]]) 800 # elif generalData['Type'] == 'modulated': 801 # ????? for future 935 atomData = [atom[:2]+atom[3:6]+['vdW balls',]+['',]+atom[9:20]+[[]]][0] 936 cx,ct,cs = [2,1,6] #x, type & style 937 # elif generalData['Type'] == 'modulated': 938 # ????? for future 939 atNum = generalData['AtomTypes'].index(atom[ct]) 940 atomInfo[cs+2] = list(generalData['Color'][atNum]) 941 drawingData['Atoms'].append(atomInfo) 942 drawingData['atomPtrs'] = [cx,ct,cs] 802 943 data['Drawing'] = drawingData 803 944 … … 806 947 SetupDrawingData() 807 948 drawingData = data['Drawing'] 949 cx,ct,cs = drawingData['atomPtrs'] 808 950 atomData = drawingData['Atoms'] 809 951 Types = [wg.GRID_VALUE_STRING,wg.GRID_VALUE_STRING, 810 952 wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_FLOAT+':10,5', #x,y,z 811 953 wg.GRID_VALUE_STRING,wg.GRID_VALUE_CHOICE+": ,lines,vdW balls,sticks,balls & sticks,ellipsoids,polyhedra", 812 wg.GRID_VALUE_CHOICE+": ,type,name,number",wg.GRID_VALUE_STRING, ]954 wg.GRID_VALUE_CHOICE+": ,type,name,number",wg.GRID_VALUE_STRING,wg.GRID_VALUE_STRING,] 813 955 styleChoice = [' ','lines','vdW balls','sticks','balls & sticks','ellipsoids','polyhedra'] 814 956 labelChoice = [' ','type','name','number'] 815 colLabels = ['Name','Type','x','y','z','Sym Op','Style','Label',' I/A']957 colLabels = ['Name','Type','x','y','z','Sym Op','Style','Label','Color','I/A'] 816 958 if generalData['Type'] == 'macromolecular': 817 959 colLabels = ['Residue','1-letter','Chain'] + colLabels … … 889 1031 drawAtoms.SetCellValue(r,c,parms) 890 1032 dlg.Destroy() 1033 elif drawAtoms.GetColLabelValue(c) == 'Color': 1034 dlg = wx.ColourDialog(self) 1035 if dlg.ShowModal() == wx.ID_OK: 1036 color = dlg.GetColourData().GetColour() 1037 attr = wg.GridCellAttr() #needs to be here - gets lost if outside loop! 1038 attr.SetReadOnly(True) 1039 attr.SetBackgroundColour(color) 1040 for r in range(len(atomData)): 1041 atomData[r][c] = color 1042 drawingData['Atoms'][r][c] = color 1043 drawAtoms.SetAttr(r,c,attr) 1044 UpdateDrawAtoms() 1045 dlg.Destroy() 891 1046 elif drawAtoms.GetColLabelValue(c) == 'Residue': 892 1047 SetChoice('Residue',c,3) … … 907 1062 atomData[r][c] = drawAtoms.GetCellValue(r,c) 908 1063 FindBonds() 1064 elif drawAtoms.GetColLabelValue(c) == 'Color': 1065 dlg = wx.ColourDialog(self) 1066 if dlg.ShowModal() == wx.ID_OK: 1067 color = dlg.GetColourData().GetColour() 1068 attr = wg.GridCellAttr() #needs to be here - gets lost if outside loop! 1069 attr.SetReadOnly(True) 1070 attr.SetBackgroundColour(color) 1071 atomData[r][c] = color 1072 drawingData['Atoms'][r][c] = color 1073 drawAtoms.SetAttr(i,cs+2,attr) 1074 dlg.Destroy() 1075 event.StopPropagation() 1076 UpdateDrawAtoms() 909 1077 G2plt.PlotStructure(self,data) 910 1078 … … 941 1109 drawAtoms.AutoSizeColumns(True) 942 1110 drawAtoms.SetColSize(colLabels.index('Style'),80) 1111 drawAtoms.SetColSize(colLabels.index('Color'),50) 943 1112 drawAtoms.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshAtomGrid) 944 1113 drawAtoms.Bind(wg.EVT_GRID_LABEL_LEFT_DCLICK, RefreshAtomGrid) 1114 drawAtoms.Bind(wg.EVT_GRID_CELL_LEFT_DCLICK, RefreshAtomGrid) 945 1115 drawAtoms.Bind(wg.EVT_GRID_LABEL_LEFT_CLICK, RowSelect) 1116 for i,atom in enumerate(drawingData['Atoms']): 1117 attr = wg.GridCellAttr() #needs to be here - gets lost if outside loop! 1118 attr.SetReadOnly(True) 1119 attr.SetBackgroundColour(atom[cs+2]) 1120 drawAtoms.SetAttr(i,cs+2,attr) 1121 drawAtoms.SetCellValue(i,cs+2,'') 946 1122 indx = drawingData['selectedAtoms'] 947 1123 if indx: … … 950 1126 drawAtoms.SelectRow(r) 951 1127 for c in range(len(colLabels)): 952 if colLabels[c] not in ['Style','Label']:953 attr = wg.GridCellAttr() #needs to be here - gets lost if outside loop!954 attr.SetReadOnly(True)955 attr.SetBackgroundColour(VERY_LIGHT_GREY)1128 attr = wg.GridCellAttr() #needs to be here - gets lost if outside loop! 1129 attr.SetReadOnly(True) 1130 attr.SetBackgroundColour(VERY_LIGHT_GREY) 1131 if colLabels[c] not in ['Style','Label','Color']: 956 1132 drawAtoms.SetColAttr(c,attr) 957 1133 self.dataFrame.setSizePosLeft([600,300]) … … 998 1174 dlg.Destroy() 999 1175 G2plt.PlotStructure(self,data) 1000 1176 1177 def DrawAtomColor(event): 1178 indx = drawAtoms.GetSelectedRows() 1179 if indx: 1180 generalData = data['General'] 1181 atomData = data['Drawing']['Atoms'] 1182 cx,ct,cs = data['Drawing']['atomPtrs'] 1183 dlg = wx.ColourDialog(self) 1184 if dlg.ShowModal() == wx.ID_OK: 1185 color = dlg.GetColourData().GetColour() 1186 for r in indx: 1187 atomData[r][cs+2] = color 1188 attr = wg.GridCellAttr() #needs to be here - gets lost if outside loop! 1189 attr.SetBackgroundColour(color) 1190 drawAtoms.SetAttr(r,cs+2,attr) 1191 data['Drawing']['Atoms'][r][cs+2] = color 1192 dlg.Destroy() 1193 1194 def ResetAtomColors(event): 1195 generalData = data['General'] 1196 atomData = data['Drawing']['Atoms'] 1197 cx,ct,cs = data['Drawing']['atomPtrs'] 1198 for atom in atomData: 1199 atNum = generalData['AtomTypes'].index(atom[ct]) 1200 atom[cs+2] = list(generalData['Color'][atNum]) 1201 UpdateDrawAtoms() 1202 G2plt.PlotStructure(self,data) 1203 1001 1204 def SetViewPoint(event): 1002 1205 indx = drawAtoms.GetSelectedRows() … … 1126 1329 for xyz in cellArray+xyzB: 1127 1330 dist = np.sqrt(np.sum(np.inner(Amat,xyz-xyzA)**2)) 1128 if 0 < dist <= 0.85*sumR:1331 if 0 < dist <= data['Drawing']['radiusFactor']*sumR: 1129 1332 if noDuplicate(xyz,atomData): 1130 1333 newAtom = atomB[:] … … 1243 1446 dist = ma.masked_less(np.sqrt(np.sum(np.inner(Amat,Dx)**2,axis=0)),0.5) #gets rid of self & disorder "bonds" < 0.5A 1244 1447 sumR = atomA[3]+Radii 1245 IndB = ma.nonzero(ma.masked_greater(dist- 0.85*sumR,0.)) #get indices of bonded atoms1448 IndB = ma.nonzero(ma.masked_greater(dist-data['Drawing']['radiusFactor']*sumR,0.)) #get indices of bonded atoms 1246 1449 i = atomA[0] 1247 1450 for j in IndB[0]: … … 1269 1472 import copy 1270 1473 import wx.lib.colourselect as wcs 1271 self.dataFrame.setSizePosLeft([300,430])1272 1474 generalData = data['General'] 1273 1475 SetupDrawingData() … … 1293 1495 G2plt.PlotStructure(self,data) 1294 1496 1295 1296 1497 def OnBallScale(event): 1297 1498 drawingData['ballScale'] = ballScale.GetValue()/100. … … 1340 1541 sizeH.SetValue("%.2f"%(value)) 1341 1542 G2plt.PlotStructure(self,data) 1342 1343 def OnPickItem(event): 1344 drawingData['pickItem'] = pickChoice[pickItem.GetSelection()] 1543 1544 def OnRadFactor(event): 1545 try: 1546 value = max(0.1,min(1.2,float(radFactor.GetValue()))) 1547 except ValueError: 1548 value = 0.85 1549 drawingData['radiusFactor'] = value 1550 radFactor.SetValue("%.2f"%(value)) 1551 FindBonds() 1552 G2plt.PlotStructure(self,data) 1553 1554 1555 1345 1556 1346 1557 dataDisplay = wx.Panel(drawOptions) … … 1351 1562 1352 1563 slopSizer = wx.BoxSizer(wx.HORIZONTAL) 1353 slideSizer = wx.FlexGridSizer(6,2 ,5,0)1564 slideSizer = wx.FlexGridSizer(6,2) 1354 1565 slideSizer.AddGrowableCol(1,1) 1355 1566 … … 1397 1608 slopSizer.Add(slideSizer,1,wx.EXPAND|wx.RIGHT) 1398 1609 slopSizer.Add((10,5),0) 1399 slopSizer.SetMinSize(wx.Size(300,180)) 1400 mainSizer.Add(slopSizer,1,wx.EXPAND) 1610 slopSizer.SetMinSize(wx.Size(300,10)) 1611 mainSizer.Add(slopSizer,0) 1612 mainSizer.Add((5,5),0) 1401 1613 1402 1614 flexSizer = wx.FlexGridSizer(6,2,5,0) … … 1408 1620 flexSizer.Add(viewPoint,0,wx.ALIGN_CENTER_VERTICAL) 1409 1621 1622 showABC = wx.CheckBox(dataDisplay,-1,label='Show test point?') 1623 showABC.Bind(wx.EVT_CHECKBOX, OnShowABC) 1624 showABC.SetValue(drawingData['showABC']) 1625 flexSizer.Add(showABC,0,wx.ALIGN_CENTER_VERTICAL) 1626 1627 unitCellBox = wx.CheckBox(dataDisplay,-1,label='Show unit cell?') 1628 unitCellBox.Bind(wx.EVT_CHECKBOX, OnShowUnitCell) 1629 unitCellBox.SetValue(drawingData['unitCellBox']) 1630 flexSizer.Add(unitCellBox,0,wx.ALIGN_CENTER_VERTICAL) 1631 1632 showBadContacts = wx.CheckBox(dataDisplay,-1,label='Show bad contacts?') 1633 showBadContacts.Bind(wx.EVT_CHECKBOX, OnShowBadContacts) 1634 showBadContacts.SetValue(drawingData['showBadContacts']) 1635 flexSizer.Add(showBadContacts,0,wx.ALIGN_CENTER_VERTICAL) 1636 1637 showSymElem = wx.CheckBox(dataDisplay,-1,label='Show sym. elem.?') 1638 showSymElem.Bind(wx.EVT_CHECKBOX, OnShowSymElem) 1639 showSymElem.SetValue(drawingData['showSymElem']) 1640 flexSizer.Add(showSymElem,0,wx.ALIGN_CENTER_VERTICAL) 1641 1642 showHydrogen = wx.CheckBox(dataDisplay,-1,label='Show hydrogens?') 1643 showHydrogen.Bind(wx.EVT_CHECKBOX, OnShowHyd) 1644 showHydrogen.SetValue(drawingData['showHydrogen']) 1645 flexSizer.Add(showHydrogen,0,wx.ALIGN_CENTER_VERTICAL) 1646 1410 1647 lineSizer = wx.BoxSizer(wx.HORIZONTAL) 1411 1648 lineSizer.Add(wx.StaticText(dataDisplay,-1,'Background color:'),0,wx.ALIGN_CENTER_VERTICAL) … … 1415 1652 flexSizer.Add(lineSizer,0,) 1416 1653 1417 showABC = wx.CheckBox(dataDisplay,-1,label='Show test point?')1418 showABC.Bind(wx.EVT_CHECKBOX, OnShowABC)1419 showABC.SetValue(drawingData['showABC'])1420 flexSizer.Add(showABC,0,wx.ALIGN_CENTER_VERTICAL)1421 1422 unitCellBox = wx.CheckBox(dataDisplay,-1,label='Show unit cell?')1423 unitCellBox.Bind(wx.EVT_CHECKBOX, OnShowUnitCell)1424 unitCellBox.SetValue(drawingData['unitCellBox'])1425 flexSizer.Add(unitCellBox,0,wx.ALIGN_CENTER_VERTICAL)1426 1427 showBadContacts = wx.CheckBox(dataDisplay,-1,label='Show bad contacts?')1428 showBadContacts.Bind(wx.EVT_CHECKBOX, OnShowBadContacts)1429 showBadContacts.SetValue(drawingData['showBadContacts'])1430 flexSizer.Add(showBadContacts,0,wx.ALIGN_CENTER_VERTICAL)1431 1432 showSymElem = wx.CheckBox(dataDisplay,-1,label='Show sym. elem.?')1433 showSymElem.Bind(wx.EVT_CHECKBOX, OnShowSymElem)1434 showSymElem.SetValue(drawingData['showSymElem'])1435 flexSizer.Add(showSymElem,0,wx.ALIGN_CENTER_VERTICAL)1436 1437 showHydrogen = wx.CheckBox(dataDisplay,-1,label='Show hydrogens?')1438 showHydrogen.Bind(wx.EVT_CHECKBOX, OnShowHyd)1439 showHydrogen.SetValue(drawingData['showHydrogen'])1440 flexSizer.Add(showHydrogen,0,wx.ALIGN_CENTER_VERTICAL)1441 1442 1654 flexSizer.Add(wx.StaticText(dataDisplay,-1,'Hydrogen radius, A: '),0,wx.ALIGN_CENTER_VERTICAL) 1443 1655 sizeH = wx.TextCtrl(dataDisplay,-1,value='%.2f'%(drawingData['sizeH']),style=wx.TE_PROCESS_ENTER) … … 1446 1658 flexSizer.Add(sizeH,0,wx.ALIGN_CENTER_VERTICAL) 1447 1659 1448 flexSizer.Add(wx.StaticText(dataDisplay,-1,' Pick items on drawing by: '),0,wx.ALIGN_CENTER_VERTICAL)1449 pickItem = wx.Choice(dataDisplay,-1,choices=pickChoice)1450 pickItem.Bind(wx.EVT_CHOICE, OnPickItem)1451 pickItem.SetSelection(pickChoice.index(drawingData['pickItem']))1452 flexSizer.Add( pickItem,0,wx.ALIGN_CENTER_VERTICAL)1660 flexSizer.Add(wx.StaticText(dataDisplay,-1,'Bond search factor: '),0,wx.ALIGN_CENTER_VERTICAL) 1661 radFactor = wx.TextCtrl(dataDisplay,value='%.2f'%(drawingData['radiusFactor']),style=wx.TE_PROCESS_ENTER) 1662 radFactor.Bind(wx.EVT_TEXT_ENTER,OnRadFactor) 1663 radFactor.Bind(wx.EVT_KILL_FOCUS,OnRadFactor) 1664 flexSizer.Add(radFactor,0,wx.ALIGN_CENTER_VERTICAL) 1453 1665 mainSizer.Add(flexSizer,0,) 1454 # mainSizer.SetMinSize(wx.Size(300,340)) #to get sliders long enough1455 1666 1456 1667 dataDisplay.SetSizer(mainSizer) 1457 self.dataFrame.SetSize(dataDisplay.Fit()) 1668 Size = mainSizer.Fit(self.dataFrame) 1669 Size[1] += 26 #compensate for status bar 1670 dataDisplay.SetSize(Size) 1671 self.dataFrame.setSizePosLeft(Size) 1672 1673 def UpdateDData(): 1674 UseList = data['Histograms'] 1675 generalData = data['General'] 1676 SGData = generalData['SGData'] 1677 keyList = UseList.keys() 1678 keyList.sort() 1679 Indx = {} 1680 1681 def OnScaleRef(event): 1682 Obj = event.GetEventObject() 1683 UseList[Indx[Obj.GetId()]]['Scale'][1] = Obj.GetValue() 1684 1685 def OnScaleVal(event): 1686 Obj = event.GetEventObject() 1687 try: 1688 scale = float(Obj.GetValue()) 1689 if scale > 0: 1690 UseList[Indx[Obj.GetId()]]['Scale'][0] = scale 1691 except ValueError: 1692 pass 1693 Obj.SetValue("%.4f"%(UseList[Indx[Obj.GetId()]]['Scale'][0])) #reset in case of error 1694 1695 def OnSizeType(event): 1696 Obj = event.GetEventObject() 1697 UseList[Indx[Obj.GetId()]]['Size'][0] = Obj.GetValue() 1698 dataDisplay.Destroy() 1699 UpdateDData() 1700 1701 def OnSizeRef(event): 1702 Obj = event.GetEventObject() 1703 hist,pid = Indx[Obj.GetId()] 1704 UseList[hist]['Size'][2][pid] = Obj.GetValue() 1705 1706 def OnSizeVal(event): 1707 Obj = event.GetEventObject() 1708 hist,pid = Indx[Obj.GetId()] 1709 try: 1710 size = float(Obj.GetValue()) 1711 if size > 0: 1712 UseList[hist]['Size'][1][pid] = size 1713 except ValueError: 1714 pass 1715 Obj.SetValue("%.1f"%(UseList[hist]['Size'][1][pid])) #reset in case of error 1716 1717 def OnSizeAxis(event): 1718 Obj = event.GetEventObject() 1719 hist,pid = Indx[Obj.GetId()] 1720 UseList[hist]['Size'][3][pid] = Obj.GetValue() 1721 1722 def OnStrainType(event): 1723 Obj = event.GetEventObject() 1724 UseList[Indx[Obj.GetId()]]['Mustrain'][0] = Obj.GetValue() 1725 dataDisplay.Destroy() 1726 UpdateDData() 1727 1728 def OnStrainRef(event): 1729 Obj = event.GetEventObject() 1730 hist,pid = Indx[Obj.GetId()] 1731 UseList[hist]['Mustrain'][2][pid] = Obj.GetValue() 1732 1733 def OnStrainVal(event): 1734 Obj = event.GetEventObject() 1735 hist,pid = Indx[Obj.GetId()] 1736 try: 1737 strain = float(Obj.GetValue()) 1738 if strain > 0: 1739 UseList[hist]['Mustrain'][1][pid] = strain 1740 except ValueError: 1741 pass 1742 Obj.SetValue("%.1f"%(UseList[hist]['Mustrain'][1][pid])) #reset in case of error 1743 1744 def OnStrainAxis(event): 1745 Obj = event.GetEventObject() 1746 hist,pid = Indx[Obj.GetId()] 1747 UseList[hist]['Mustrain'][3][pid] = Obj.GetValue() 1748 1749 DData.DestroyChildren() 1750 dataDisplay = wx.Panel(DData) 1751 mainSizer = wx.BoxSizer(wx.VERTICAL) 1752 mainSizer.Add(wx.StaticText(dataDisplay,-1,'Histogram data for '+PhaseName+':'),0,wx.ALIGN_CENTER_VERTICAL) 1753 for item in keyList: 1754 histData = UseList[item] 1755 mainSizer.Add(wx.StaticText(dataDisplay,-1,50*'_')) 1756 mainSizer.Add((5,5),0) 1757 mainSizer.Add(wx.StaticText(dataDisplay,-1,' '+item),0,wx.ALIGN_CENTER_VERTICAL) 1758 mainSizer.Add((0,5),0) 1759 scaleSizer = wx.BoxSizer(wx.HORIZONTAL) 1760 scaleRef = wx.CheckBox(dataDisplay,label=' Scale factor: ') 1761 scaleRef.SetValue(UseList[item]['Scale'][1]) 1762 Indx[scaleRef.GetId()] = item 1763 scaleRef.Bind(wx.EVT_CHECKBOX, OnScaleRef) 1764 scaleSizer.Add(scaleRef,0,wx.ALIGN_CENTER_VERTICAL) 1765 scaleVal = wx.TextCtrl(dataDisplay,wx.ID_ANY, 1766 '%.4f'%(UseList[item]['Scale'][0]),style=wx.TE_PROCESS_ENTER) 1767 Indx[scaleVal.GetId()] = item 1768 scaleVal.Bind(wx.EVT_TEXT_ENTER,OnScaleVal) 1769 scaleVal.Bind(wx.EVT_KILL_FOCUS,OnScaleVal) 1770 scaleSizer.Add(scaleVal,0,wx.ALIGN_CENTER_VERTICAL) 1771 mainSizer.Add(scaleSizer) 1772 mainSizer.Add((0,5),0) 1773 1774 if item[:4] == 'PWDR': 1775 sizeSizer = wx.BoxSizer(wx.HORIZONTAL) 1776 choices = ['isotropic','uniaxial',] 1777 sizeType = wx.ComboBox(dataDisplay,wx.ID_ANY,value=UseList[item]['Size'][0],choices=choices, 1778 style=wx.CB_READONLY|wx.CB_DROPDOWN) 1779 sizeType.Bind(wx.EVT_COMBOBOX, OnSizeType) 1780 Indx[sizeType.GetId()] = item 1781 sizeSizer.Add(sizeType) 1782 sizeSizer.Add((5,0),0) 1783 if UseList[item]['Size'][0] == 'isotropic': 1784 sizeRef = wx.CheckBox(dataDisplay,label=' Cryst. size: ') 1785 sizeRef.SetValue(UseList[item]['Size'][2][0]) 1786 Indx[sizeRef.GetId()] = [item,0] 1787 sizeRef.Bind(wx.EVT_CHECKBOX, OnSizeRef) 1788 sizeSizer.Add(sizeRef,0,wx.ALIGN_CENTER_VERTICAL) 1789 sizeVal = wx.TextCtrl(dataDisplay,wx.ID_ANY, 1790 '%.1f'%(UseList[item]['Size'][1][0]),style=wx.TE_PROCESS_ENTER) 1791 Indx[sizeVal.GetId()] = [item,0] 1792 sizeVal.Bind(wx.EVT_TEXT_ENTER,OnSizeVal) 1793 sizeVal.Bind(wx.EVT_KILL_FOCUS,OnSizeVal) 1794 sizeSizer.Add(sizeVal,0,wx.ALIGN_CENTER_VERTICAL) 1795 mainSizer.Add(sizeSizer) 1796 mainSizer.Add((0,5),0) 1797 elif UseList[item]['Size'][0] == 'uniaxial': 1798 sizeSizer.Add(wx.StaticText(dataDisplay,-1,' Unique axis: '),0,wx.ALIGN_CENTER_VERTICAL) 1799 axes = zip(['H:','K:','L:'],UseList[item]['Size'][3],range(3)) 1800 for ax,H,i in axes: 1801 Axis = wx.SpinCtrl(dataDisplay,wx.ID_ANY,ax,min=-3,max=3,size=wx.Size(40,20)) 1802 Axis.SetValue(H) 1803 Indx[Axis.GetId()] = [item,i] 1804 sizeSizer.Add(Axis) 1805 Axis.Bind(wx.EVT_SPINCTRL, OnSizeAxis) 1806 mainSizer.Add(sizeSizer) 1807 mainSizer.Add((0,5),0) 1808 sizeSizer = wx.BoxSizer(wx.HORIZONTAL) 1809 parms = zip([' Equatorial size: ',' Axial size: '],UseList[item]['Size'][1], 1810 UseList[item]['Size'][2],range(2)) 1811 for Pa,val,ref,id in parms: 1812 sizeRef = wx.CheckBox(dataDisplay,label=Pa) 1813 sizeRef.SetValue(ref) 1814 Indx[sizeRef.GetId()] = [item,id] 1815 sizeRef.Bind(wx.EVT_CHECKBOX, OnSizeRef) 1816 sizeSizer.Add(sizeRef,0,wx.ALIGN_CENTER_VERTICAL) 1817 sizeVal = wx.TextCtrl(dataDisplay,wx.ID_ANY,'%.1f'%(val),style=wx.TE_PROCESS_ENTER) 1818 Indx[sizeVal.GetId()] = [item,id] 1819 sizeVal.Bind(wx.EVT_TEXT_ENTER,OnSizeVal) 1820 sizeVal.Bind(wx.EVT_KILL_FOCUS,OnSizeVal) 1821 sizeSizer.Add(sizeVal,0,wx.ALIGN_CENTER_VERTICAL) 1822 sizeSizer.Add((5,0),0) 1823 sizeSizer.Add((5,0),0) 1824 mainSizer.Add(sizeSizer) 1825 1826 strainSizer = wx.BoxSizer(wx.HORIZONTAL) 1827 choices = ['isotropic','uniaxial','generalized',] 1828 strainType = wx.ComboBox(dataDisplay,wx.ID_ANY,value=UseList[item]['Mustrain'][0],choices=choices, 1829 style=wx.CB_READONLY|wx.CB_DROPDOWN) 1830 strainType.Bind(wx.EVT_COMBOBOX, OnStrainType) 1831 Indx[strainType.GetId()] = item 1832 strainSizer.Add(strainType) 1833 strainSizer.Add((5,0),0) 1834 if UseList[item]['Mustrain'][0] == 'isotropic': 1835 strainRef = wx.CheckBox(dataDisplay,label=' microstrain: ') 1836 strainRef.SetValue(UseList[item]['Mustrain'][2][0]) 1837 Indx[strainRef.GetId()] = [item,0] 1838 strainRef.Bind(wx.EVT_CHECKBOX, OnStrainRef) 1839 strainSizer.Add(strainRef,0,wx.ALIGN_CENTER_VERTICAL) 1840 strainVal = wx.TextCtrl(dataDisplay,wx.ID_ANY, 1841 '%.4f'%(UseList[item]['Mustrain'][1][0]),style=wx.TE_PROCESS_ENTER) 1842 Indx[strainVal.GetId()] = [item,0] 1843 strainVal.Bind(wx.EVT_TEXT_ENTER,OnStrainVal) 1844 strainVal.Bind(wx.EVT_KILL_FOCUS,OnStrainVal) 1845 strainSizer.Add(strainVal,0,wx.ALIGN_CENTER_VERTICAL) 1846 mainSizer.Add(strainSizer) 1847 mainSizer.Add((0,5),0) 1848 elif UseList[item]['Mustrain'][0] == 'uniaxial': 1849 strainSizer.Add(wx.StaticText(dataDisplay,-1,' Unique axis: '),0,wx.ALIGN_CENTER_VERTICAL) 1850 axes = zip(['H:','K:','L:'],UseList[item]['Mustrain'][3],range(3)) 1851 for ax,H,i in axes: 1852 Axis = wx.SpinCtrl(dataDisplay,wx.ID_ANY,ax,min=-3,max=3,size=wx.Size(40,20)) 1853 Axis.SetValue(H) 1854 Indx[Axis.GetId()] = [item,i] 1855 strainSizer.Add(Axis) 1856 Axis.Bind(wx.EVT_SPINCTRL, OnStrainAxis) 1857 mainSizer.Add(strainSizer) 1858 mainSizer.Add((0,5),0) 1859 strainSizer = wx.BoxSizer(wx.HORIZONTAL) 1860 parms = zip([' Equatorial mustrain: ',' Axial mustrain: '], 1861 UseList[item]['Mustrain'][1],UseList[item]['Mustrain'][2],range(2)) 1862 for Pa,val,ref,id in parms: 1863 strainRef = wx.CheckBox(dataDisplay,label=Pa) 1864 strainRef.SetValue(ref) 1865 Indx[strainRef.GetId()] = [item,id] 1866 strainRef.Bind(wx.EVT_CHECKBOX, OnStrainRef) 1867 strainSizer.Add(strainRef,0,wx.ALIGN_CENTER_VERTICAL) 1868 strainVal = wx.TextCtrl(dataDisplay,wx.ID_ANY,'%.4f'%(val),style=wx.TE_PROCESS_ENTER) 1869 Indx[strainVal.GetId()] = [item,id] 1870 strainVal.Bind(wx.EVT_TEXT_ENTER,OnStrainVal) 1871 strainVal.Bind(wx.EVT_KILL_FOCUS,OnStrainVal) 1872 strainSizer.Add(strainVal,0,wx.ALIGN_CENTER_VERTICAL) 1873 strainSizer.Add((5,0),0) 1874 strainSizer.Add((5,0),0) 1875 mainSizer.Add(strainSizer) 1876 elif UseList[item]['Mustrain'][0] == 'generalized': 1877 strainSizer.Add(wx.StaticText(dataDisplay,-1,' Coefficients: '),0,wx.ALIGN_CENTER_VERTICAL) 1878 mainSizer.Add(strainSizer) 1879 mainSizer.Add((0,5),0) 1880 Snames = G2spc.MustrainNames(SGData) 1881 numb = len(Snames) 1882 if len(UseList[item]['Mustrain'][1]) < numb: 1883 UseList[item]['Mustrain'][1] = numb*[0.0,] 1884 UseList[item]['Mustrain'][2] = numb*[False,] 1885 parms = zip(Snames,UseList[item]['Mustrain'][1],UseList[item]['Mustrain'][2],range(numb)) 1886 strainSizer = wx.FlexGridSizer(numb%3+1,6,5,5) 1887 for Pa,val,ref,id in parms: 1888 strainRef = wx.CheckBox(dataDisplay,label=Pa) 1889 strainRef.SetValue(ref) 1890 Indx[strainRef.GetId()] = [item,id] 1891 strainRef.Bind(wx.EVT_CHECKBOX, OnStrainRef) 1892 strainSizer.Add(strainRef,0,wx.ALIGN_CENTER_VERTICAL) 1893 strainVal = wx.TextCtrl(dataDisplay,wx.ID_ANY,'%.4f'%(val),style=wx.TE_PROCESS_ENTER) 1894 Indx[strainVal.GetId()] = [item,id] 1895 strainVal.Bind(wx.EVT_TEXT_ENTER,OnStrainVal) 1896 strainVal.Bind(wx.EVT_KILL_FOCUS,OnStrainVal) 1897 strainSizer.Add(strainVal,0,wx.ALIGN_CENTER_VERTICAL) 1898 mainSizer.Add(strainSizer) 1899 elif item[:4] == 'HKLF': 1900 pass 1901 else: 1902 print 'error - unknown histogram type' #place holder - never invoked 1903 mainSizer.Add((5,5),0) 1904 1905 1906 dataDisplay.SetSizer(mainSizer) 1907 Size = mainSizer.Fit(self.dataFrame) 1908 Size[0] = max(Size[0],300) 1909 Size[1] += 26 #compensate for status bar 1910 DData.Fit() 1911 dataDisplay.SetSize(Size) 1912 self.dataFrame.setSizePosLeft(Size) 1913 1914 def OnHklfAdd(event): 1915 UseList = data['Histograms'] 1916 keyList = UseList.keys() 1917 TextList = [] 1918 if self.PatternTree.GetCount(): 1919 item, cookie = self.PatternTree.GetFirstChild(self.root) 1920 while item: 1921 name = self.PatternTree.GetItemText(item) 1922 if name not in keyList and 'HKLF' in name: 1923 TextList.append(name) 1924 item, cookie = self.PatternTree.GetNextChild(self.root, cookie) 1925 dlg = wx.MultiChoiceDialog(self, 'Which new data to use?', 'Use data', TextList, wx.CHOICEDLG_STYLE) 1926 try: 1927 if dlg.ShowModal() == wx.ID_OK: 1928 result = dlg.GetSelections() 1929 for i in result: 1930 histoName = TextList[i] 1931 UseList[histoName] = {'Histogram':histoName,'Scale':[1.0,True], 1932 'Extinction':['Lorentzian','Secondary Type I',{'Eg':[0.0,False]},]} 1933 data['Histograms'] = UseList 1934 UpdateDData() 1935 finally: 1936 dlg.Destroy() 1937 1938 def OnPwdrAdd(event): 1939 UseList = data['Histograms'] 1940 keyList = UseList.keys() 1941 TextList = [] 1942 if self.PatternTree.GetCount(): 1943 item, cookie = self.PatternTree.GetFirstChild(self.root) 1944 while item: 1945 name = self.PatternTree.GetItemText(item) 1946 if name not in keyList and 'PWDR' in name: 1947 TextList.append(name) 1948 item, cookie = self.PatternTree.GetNextChild(self.root, cookie) 1949 dlg = wx.MultiChoiceDialog(self, 'Which new data to use?', 'Use data', TextList, wx.CHOICEDLG_STYLE) 1950 try: 1951 if dlg.ShowModal() == wx.ID_OK: 1952 result = dlg.GetSelections() 1953 for i in result: 1954 histoName = TextList[i] 1955 UseList[histoName] = {'Histogram':histoName,'Scale':[1.0,False], 1956 'Size':['isotropic',[10000.,0,],[False,False],[0,0,1]], 1957 'Mustrain':['isotropic',[0.0,0,],[False,False],[0,0,1]], 1958 'MDtexture':[[0,0,1],1.0,False], 1959 'Extinction':[0.0,False]} 1960 data['Histograms'] = UseList 1961 UpdateDData() 1962 finally: 1963 dlg.Destroy() 1964 1965 def OnDataDelete(event): 1966 UseList = data['Histograms'] 1967 keyList = UseList.keys() 1968 keyList.sort() 1969 DelList = [] 1970 if UseList: 1971 DelList = [] 1972 dlg = wx.MultiChoiceDialog(self, 1973 'Which histogram to delete from this phase?', 'Delete histogram', 1974 keyList, wx.CHOICEDLG_STYLE) 1975 try: 1976 if dlg.ShowModal() == wx.ID_OK: 1977 result = dlg.GetSelections() 1978 for i in result: DelList.append(keyList[i]) 1979 for i in DelList: 1980 del UseList[i] 1981 UpdateDData() 1982 finally: 1983 dlg.Destroy() 1458 1984 1459 1985 def FillPawleyReflectionsGrid(): 1460 1986 generalData = data['General'] 1461 1462 1987 print 'Pawley reflections' 1463 1988 … … 1477 2002 FillAtomsGrid() 1478 2003 elif text == 'General': 1479 FillGeneralGrid()2004 UpdateGeneral() 1480 2005 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu) 2006 elif text == 'Data': 2007 self.dataFrame.SetMenuBar(self.dataFrame.DataMenu) 2008 self.dataFrame.Bind(wx.EVT_MENU, OnPwdrAdd, id=G2gd.wxID_PWDRADD) 2009 self.dataFrame.Bind(wx.EVT_MENU, OnHklfAdd, id=G2gd.wxID_HKLFADD) 2010 self.dataFrame.Bind(wx.EVT_MENU, OnDataDelete, id=G2gd.wxID_DATADELETE) 2011 UpdateDData() 1481 2012 elif text == 'Draw Options': 1482 2013 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu) … … 1487 2018 self.dataFrame.Bind(wx.EVT_MENU, DrawAtomStyle, id=G2gd.wxID_DRAWATOMSTYLE) 1488 2019 self.dataFrame.Bind(wx.EVT_MENU, DrawAtomLabel, id=G2gd.wxID_DRAWATOMLABEL) 2020 self.dataFrame.Bind(wx.EVT_MENU, DrawAtomColor, id=G2gd.wxID_DRAWATOMCOLOR) 2021 self.dataFrame.Bind(wx.EVT_MENU, ResetAtomColors, id=G2gd.wxID_DRAWATOMRESETCOLOR) 1489 2022 self.dataFrame.Bind(wx.EVT_MENU, SetViewPoint, id=G2gd.wxID_DRAWVIEWPOINT) 1490 2023 self.dataFrame.Bind(wx.EVT_MENU, AddSymEquiv, id=G2gd.wxID_DRAWADDEQUIV) … … 1498 2031 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu) 1499 2032 event.Skip() 1500 1501 if self.dataDisplay: 1502 self.dataDisplay.Destroy() 1503 PhaseName = self.PatternTree.GetItemText(item) 1504 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu) 1505 self.dataFrame.SetLabel('Phase Data for '+PhaseName) 1506 self.dataFrame.CreateStatusBar() 1507 self.dataDisplay = G2gd.GSNoteBook(parent=self.dataFrame,size=self.dataFrame.GetClientSize()) 1508 1509 General = G2gd.GSGrid(self.dataDisplay) 1510 FillGeneralGrid() 2033 2034 General = wx.Window(self.dataDisplay) 1511 2035 self.dataDisplay.AddPage(General,'General') 1512 2036 SetupGeneral() 1513 2037 GeneralData = data['General'] 2038 UpdateGeneral() 2039 1514 2040 if GeneralData['Type'] == 'Pawley': 1515 2041 PawleyRefl = G2gd.GSGrid(self.dataDisplay) 1516 2042 self.dataDisplay.AddPage(PawleyRefl,'Pawley reflections') 1517 2043 else: 2044 DData = wx.Window(self.dataDisplay) 2045 self.dataDisplay.AddPage(DData,'Data') 1518 2046 Atoms = G2gd.GSGrid(self.dataDisplay) 1519 2047 self.dataDisplay.AddPage(Atoms,'Atoms') -
trunk/GSASIIplot.py
r161 r163 1122 1122 def PlotStructure(self,data): 1123 1123 generalData = data['General'] 1124 My self = generalData['Myself']1124 Mydir = generalData['Mydir'] 1125 1125 atomData = data['Atoms'] 1126 1126 drawingData = data['Drawing'] … … 1139 1139 def OnKeyBox(event): 1140 1140 import Image 1141 Draw() 1141 Draw() #make sure plot is fresh!! 1142 1142 mode = cb.GetValue() 1143 dirname = Myself.dirname 1144 Fname = dirname+'\\'+generalData['Name']+'.'+mode 1143 Fname = Mydir+'\\'+generalData['Name']+'.'+mode 1145 1144 size = Page.canvas.GetSize() 1146 1145 glPixelStorei(GL_UNPACK_ALIGNMENT, 1) … … 1153 1152 im.fromstring(Pix) 1154 1153 im.save(Fname,mode) 1155 cb.SetValue(' save as:')1156 Draw()1154 cb.SetValue(' Save as:') 1155 self.G2plotNB.status.SetStatusText('Drawing saved to: '+Fname,1) 1157 1156 1158 1157 def OnMouseDown(event): … … 1314 1313 anglex,angley,anglez,oldxy = drawingData['Rotation'] 1315 1314 dxy = newxy-oldxy 1316 anglez += dxy[0]+dxy[1]1315 anglez += (dxy[0]+dxy[1])*.25 1317 1316 oldxy = newxy 1318 1317 drawingData['Rotation'] = [anglex,angley,anglez,oldxy] … … 1476 1475 glMatrixMode(GL_MODELVIEW) 1477 1476 glLoadIdentity() 1477 glRotate(anglez,0,0,1) 1478 1478 glRotate(anglex,cosd(anglez),-sind(anglez),0) 1479 1479 glRotate(angley,sind(anglez),cosd(anglez),0) 1480 glRotate(anglez,0,0,1)1481 1480 glMultMatrixf(A4mat.T) 1482 1481 glTranslate(-Tx,-Ty,-Tz) … … 1493 1492 Bonds = atom[-1] 1494 1493 atNum = generalData['AtomTypes'].index(atom[ct]) 1495 CL = list(generalData['Color'][atNum]) 1496 CL.extend([255,]) 1494 CL = atom[cs+2] 1495 # CL = list(generalData['Color'][atNum]) 1496 # CL.extend([255,]) 1497 1497 color = np.array(CL)/255. 1498 1498 if iat in Ind: -
trunk/GSASIIspc.py
r160 r163 518 518 indx = GetNXUPQsym(siteSym) 519 519 return CSuinel[indx[1]] 520 521 def MustrainNames(SGData): 522 laue = SGData['SGLaue'] 523 uniq = SGData['SGUniq'] 524 if laue in ['m3','m3m']: 525 return ['S400','S220'] 526 elif laue in ['6/m','6/mmm','3m1']: 527 return ['S400','S004','S202'] 528 elif laue in ['31m','3']: 529 return ['S400','S004','S202','S211'] 530 elif laue in ['3R','3mR']: 531 return ['S400','S220','S310','S211'] 532 elif laue in ['4/m','4/mmm']: 533 return ['S400','S004','S220','S022'] 534 elif laue in ['mmm']: 535 return ['S400','S040','S004','S220','S202','S022'] 536 elif laue in ['2/m']: 537 SHKL = ['S400','S040','S004','S220','S202','S022'] 538 if uniq == 'a': 539 SHKL += ['S013','S031','S211'] 540 elif uniq == 'b': 541 SHKL += ['S301','S103','S121'] 542 elif uniq == 'c': 543 SHKL += ['S130','S310','S112'] 544 return SHKL 545 else: 546 SHKL = ['S400','S040','S004','S220','S202','S022'] 547 SHKL += ['S310','S103','S031','S130','S301','S013'] 548 SHKL += ['S211','S121','S112'] 549 return SHKL 520 550 521 551 def SytSym(XYZ,SGData):
Note: See TracChangeset
for help on using the changeset viewer.