Changeset 3000 for trunk/GSASIIphsGUI.py
- Timestamp:
- Aug 11, 2017 5:34:54 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
Property
svn:mergeinfo
set to
/branch/2frame merged eligible
-
Property
svn:mergeinfo
set to
-
trunk/GSASIIphsGUI.py
r2880 r3000 39 39 import GSASIIddataGUI as G2ddG 40 40 import GSASIIplot as G2plt 41 import GSASII gridas G2gd41 import GSASIIdataGUI as G2gd 42 42 import GSASIIIO as G2IO 43 43 import GSASIIstrMain as G2stMn … … 47 47 import GSASIIpy3 as G2py3 48 48 import GSASIIobj as G2obj 49 import GSASIIctrl sas G2G49 import GSASIIctrlGUI as G2G 50 50 import GSASIIconstrGUI as G2cnstG 51 51 import numpy as np … … 67 67 atan2d = lambda x,y: 180.*np.arctan2(y,x)/np.pi 68 68 69 def SetPhaseWindow(mainFrame,phasePage,mainSizer=None,size=None,Scroll=0): 70 if not mainSizer is None: 69 ################################################################################ 70 #### phase class definitions 71 ################################################################################ 72 class SGMagSpinBox(wx.Dialog): 73 ''' Special version of MessageBox that displays magnetic spin text 74 ''' 75 def __init__(self,parent,title,text,table,names,spins,): 76 wx.Dialog.__init__(self,parent,wx.ID_ANY,title,pos=wx.DefaultPosition, 77 style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,size=wx.Size(420,350)) 78 self.text = text 79 self.table = table 80 self.names = names 81 self.spins = spins 82 self.panel = wxscroll.ScrolledPanel(self) 83 mainSizer = wx.BoxSizer(wx.VERTICAL) 84 mainSizer.Add((0,10)) 85 first = text[0].split(':')[-1].strip() 86 cents = [0,] 87 if 'P' != first[0]: 88 cents = text[-1].split(';') 89 for line in text: 90 mainSizer.Add(wx.StaticText(self.panel,label=' %s '%(line)),0,WACV) 91 ncol = self.table[0].count(',')+2 92 for ic,cent in enumerate(cents): 93 if cent: 94 cent = cent.strip(' (').strip(')+\n') 95 mainSizer.Add(wx.StaticText(self.panel,label=' for (%s)+'%(cent)),0,WACV) 96 tableSizer = wx.FlexGridSizer(0,2*ncol+3,0,0) 97 for j,item in enumerate(self.table): 98 flds = item.split(')')[1] 99 tableSizer.Add(wx.StaticText(self.panel,label=' (%2d) '%(j+1)),0,WACV|wx.ALIGN_LEFT) 100 flds = flds.replace(' ','').split(',') 101 for i,fld in enumerate(flds): 102 if i < ncol-1: 103 text = wx.StaticText(self.panel,label='%s, '%(fld)) 104 tableSizer.Add(text,0,WACV|wx.ALIGN_RIGHT) 105 else: 106 text = wx.StaticText(self.panel,label='%s '%(fld)) 107 tableSizer.Add(text,0,WACV|wx.ALIGN_RIGHT) 108 text = wx.StaticText(self.panel,label=' (%s) '%(self.names[j])) 109 if self.spins[j+ic*len(self.table)] < 0: 110 text.SetForegroundColour('Red') 111 tableSizer.Add(text,0,WACV|wx.ALIGN_RIGHT) 112 if not j%2: 113 tableSizer.Add((20,0)) 114 mainSizer.Add(tableSizer,0,wx.ALIGN_CENTER) 115 116 btnsizer = wx.StdDialogButtonSizer() 117 OKbtn = wx.Button(self.panel, wx.ID_OK) 118 OKbtn.SetDefault() 119 btnsizer.AddButton(OKbtn) 120 btnsizer.Realize() 121 mainSizer.Add((0,10)) 122 mainSizer.Add(btnsizer,0,wx.ALIGN_CENTER) 123 self.panel.SetSizer(mainSizer) 124 size = np.array(self.GetSize()) 125 self.panel.SetupScrolling() 126 size = [size[0]-5,size[1]-20] #this fiddling is needed for older wx! 127 self.panel.SetSize(size) 128 self.panel.SetAutoLayout(1) 129 130 def Show(self): 131 '''Use this method after creating the dialog to post it 132 ''' 133 self.ShowModal() 134 return 135 136 ################################################################################ 137 class SymOpDialog(wx.Dialog): 138 '''Class to select a symmetry operator 139 ''' 140 def __init__(self,parent,SGData,New=True,ForceUnit=False): 141 wx.Dialog.__init__(self,parent,-1,'Select symmetry operator', 142 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 143 panel = wx.Panel(self) 144 self.SGData = SGData 145 self.New = New 146 self.Force = ForceUnit 147 self.OpSelected = [0,0,0,[0,0,0],False,False] 148 mainSizer = wx.BoxSizer(wx.VERTICAL) 149 if ForceUnit: 150 choice = ['No','Yes'] 151 self.force = wx.RadioBox(panel,-1,'Force to unit cell?',choices=choice) 152 self.force.Bind(wx.EVT_RADIOBOX, self.OnOpSelect) 153 mainSizer.Add(self.force,0,WACV|wx.TOP,5) 154 # if SGData['SGInv']: 155 choice = ['No','Yes'] 156 self.inv = wx.RadioBox(panel,-1,'Choose inversion?',choices=choice) 157 self.inv.Bind(wx.EVT_RADIOBOX, self.OnOpSelect) 158 mainSizer.Add(self.inv,0,WACV) 159 if SGData['SGLatt'] != 'P': 160 LattOp = G2spc.Latt2text(SGData['SGLatt']).split(';') 161 self.latt = wx.RadioBox(panel,-1,'Choose cell centering?',choices=LattOp) 162 self.latt.Bind(wx.EVT_RADIOBOX, self.OnOpSelect) 163 mainSizer.Add(self.latt,0,WACV) 164 if SGData['SGLaue'] in ['-1','2/m','mmm','4/m','4/mmm']: 165 Ncol = 2 166 else: 167 Ncol = 3 168 OpList = [] 169 for Opr in SGData['SGOps']: 170 OpList.append(G2spc.MT2text(Opr)) 171 self.oprs = wx.RadioBox(panel,-1,'Choose space group operator?',choices=OpList, 172 majorDimension=Ncol) 173 self.oprs.Bind(wx.EVT_RADIOBOX, self.OnOpSelect) 174 mainSizer.Add(self.oprs,0,WACV|wx.BOTTOM,5) 175 mainSizer.Add(wx.StaticText(panel,-1," Choose unit cell?"),0,WACV) 176 cellSizer = wx.BoxSizer(wx.HORIZONTAL) 177 cellName = ['X','Y','Z'] 178 self.cell = [] 179 for i in range(3): 180 self.cell.append(wx.SpinCtrl(panel,-1,cellName[i],size=wx.Size(50,20))) 181 self.cell[-1].SetRange(-3,3) 182 self.cell[-1].SetValue(0) 183 self.cell[-1].Bind(wx.EVT_SPINCTRL, self.OnOpSelect) 184 cellSizer.Add(self.cell[-1],0,WACV) 185 mainSizer.Add(cellSizer,0,WACV|wx.BOTTOM,5) 186 if self.New: 187 choice = ['No','Yes'] 188 self.new = wx.RadioBox(panel,-1,'Generate new positions?',choices=choice) 189 self.new.Bind(wx.EVT_RADIOBOX, self.OnOpSelect) 190 mainSizer.Add(self.new,0,WACV) 191 192 OkBtn = wx.Button(panel,-1,"Ok") 193 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 194 cancelBtn = wx.Button(panel,-1,"Cancel") 195 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 196 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 197 btnSizer.Add((20,20),1) 198 btnSizer.Add(OkBtn) 199 btnSizer.Add((20,20),1) 200 btnSizer.Add(cancelBtn) 201 btnSizer.Add((20,20),1) 202 203 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 204 panel.SetSizer(mainSizer) 205 panel.Fit() 206 self.Fit() 207 208 def OnOpSelect(self,event): 209 # if self.SGData['SGInv']: 210 self.OpSelected[0] = self.inv.GetSelection() 211 if self.SGData['SGLatt'] != 'P': 212 self.OpSelected[1] = self.latt.GetSelection() 213 self.OpSelected[2] = self.oprs.GetSelection() 214 for i in range(3): 215 self.OpSelected[3][i] = float(self.cell[i].GetValue()) 216 if self.New: 217 self.OpSelected[4] = self.new.GetSelection() 218 if self.Force: 219 self.OpSelected[5] = self.force.GetSelection() 220 221 def GetSelection(self): 222 return self.OpSelected 223 224 def OnOk(self,event): 225 parent = self.GetParent() 226 parent.Raise() 227 self.EndModal(wx.ID_OK) 228 229 def OnCancel(self,event): 230 parent = self.GetParent() 231 parent.Raise() 232 self.EndModal(wx.ID_CANCEL) 233 ################################################################################ 234 class SphereEnclosure(wx.Dialog): 235 ''' Add atoms within sphere of enclosure to drawing 236 237 :param wx.Frame parent: reference to parent frame (or None) 238 :param general: general data (includes drawing data) 239 :param atoms: drawing atoms data 240 :param indx: list of selected atoms (may be empty) 241 242 ''' 243 def __init__(self,parent,general,drawing,indx): 244 wx.Dialog.__init__(self,parent,wx.ID_ANY,'Setup phase transformation', 245 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 246 self.panel = wx.Panel(self) #just a dummy - gets destroyed in Draw! 247 self.General = general 248 self.Drawing = drawing 249 self.indx = indx 250 self.Sphere = [1.0,] 251 self.centers = [] 252 self.atomTypes = [[item,True] for item in self.General['AtomTypes']] 253 254 self.Draw() 255 256 def Draw(self): 257 258 def OnAtomType(event): 259 Obj = event.GetEventObject() 260 id = Ind[Obj.GetId()] 261 self.atomTypes[id][1] = Obj.GetValue() 262 263 self.panel.Destroy() 264 self.panel = wx.Panel(self) 265 mainSizer = wx.BoxSizer(wx.VERTICAL) 266 mainSizer.Add(wx.StaticText(self.panel,label=' Sphere of enclosure controls:'),0,WACV) 267 topSizer = wx.BoxSizer(wx.HORIZONTAL) 268 atoms = [] 269 if len(self.indx): 270 topSizer.Add(wx.StaticText(self.panel,label=' Sphere centered at atoms: '),0,WACV) 271 cx,ct,cs = self.Drawing['atomPtrs'][:3] 272 for id in self.indx: 273 atom = self.Drawing['Atoms'][id] 274 self.centers.append(atom[cx:cx+3]) 275 atoms.append('%s(%s)'%(atom[ct-1],atom[cs-1])) 276 topSizer.Add(wx.ComboBox(self.panel,choices=atoms,value=atoms[0], 277 style=wx.CB_READONLY|wx.CB_DROPDOWN),0,WACV) 278 else: 279 topSizer.Add(wx.StaticText(self.panel,label=' Sphere centered at drawing view point'),0,WACV) 280 self.centers.append(self.Drawing['viewPoint'][0]) 281 mainSizer.Add(topSizer,0,WACV) 282 sphereSizer = wx.BoxSizer(wx.HORIZONTAL) 283 sphereSizer.Add(wx.StaticText(self.panel,label=' Sphere radius: '),0,WACV) 284 radius = G2G.ValidatedTxtCtrl(self.panel,self.Sphere,0,nDig=(10,3),size=(65,25)) 285 sphereSizer.Add(radius,0,WACV) 286 mainSizer.Add(sphereSizer,0,WACV) 287 mainSizer.Add(wx.StaticText(self.panel,label=' Target selected atoms:'),0,WACV) 288 atSizer = wx.BoxSizer(wx.HORIZONTAL) 289 Ind = {} 290 for i,item in enumerate(self.atomTypes): 291 atm = wx.CheckBox(self.panel,label=item[0]) 292 atm.SetValue(item[1]) 293 atm.Bind(wx.EVT_CHECKBOX, OnAtomType) 294 Ind[atm.GetId()] = i 295 atSizer.Add(atm,0,WACV) 296 mainSizer.Add(atSizer,0,WACV) 297 298 OkBtn = wx.Button(self.panel,-1,"Ok") 299 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 300 cancelBtn = wx.Button(self.panel,-1,"Cancel") 301 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 302 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 303 btnSizer.Add((20,20),1) 304 btnSizer.Add(OkBtn) 305 btnSizer.Add((20,20),1) 306 btnSizer.Add(cancelBtn) 307 btnSizer.Add((20,20),1) 308 309 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 310 self.panel.SetSizer(mainSizer) 311 self.panel.Fit() 312 self.Fit() 313 314 def GetSelection(self): 315 used = [] 316 for atm in self.atomTypes: 317 if atm[1]: 318 used.append(str(atm[0])) 319 return self.centers,self.Sphere[0],used 320 321 def OnOk(self,event): 322 parent = self.GetParent() 323 parent.Raise() 324 self.EndModal(wx.ID_OK) 325 326 def OnCancel(self,event): 327 parent = self.GetParent() 328 parent.Raise() 329 self.EndModal(wx.ID_CANCEL) 330 331 ################################################################################ 332 class TransformDialog(wx.Dialog): 333 ''' Phase transformation 334 335 :param wx.Frame parent: reference to parent frame (or None) 336 :param phase: phase data 337 338 #NB: commonNames & commonTrans defined in GSASIIdataGUI = G2gd 339 ''' 340 def __init__(self,parent,phase): 341 wx.Dialog.__init__(self,parent,wx.ID_ANY,'Setup phase transformation', 342 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 343 self.panel = wx.Panel(self) #just a dummy - gets destroyed in Draw! 344 self.Phase = copy.deepcopy(phase) #will be a new phase! 345 # self.Super = phase['General']['Super'] 346 # if self.Super: 347 # self.Trans = np.eye(4) 348 # self.Vec = np.zeros(4) 349 # else: 350 self.Trans = np.eye(3) 351 self.Vec = np.zeros(3) 352 self.oldSpGrp = phase['General']['SGData']['SpGrp'] 353 self.oldSGdata = phase['General']['SGData'] 354 self.newSpGrp = self.Phase['General']['SGData']['SpGrp'] 355 self.oldCell = phase['General']['Cell'][1:8] 356 self.newCell = self.Phase['General']['Cell'][1:8] 357 self.Common = 'abc' 358 self.ifMag = False 359 self.ifConstr = True 360 self.Draw() 361 362 def Draw(self): 363 364 def OnCommon(event): 365 Obj = event.GetEventObject() 366 self.Common = Obj.GetValue() 367 if '*' in self.Common: 368 A,B = G2lat.cell2AB(self.oldCell[:6]) 369 self.newCell[2:5] = [A[2,2],90.,90.] 370 a,b = G2lat.cell2AB(self.newCell[:6]) 371 self.Trans = np.inner(a.T,B) #correct! 372 self.ifConstr = False 373 self.newSpGrp = 'P 1' 374 SGErr,SGData = G2spc.SpcGroup(self.newSpGrp) 375 self.Phase['General']['SGData'] = SGData 376 else: 377 if self.Common == G2gd.commonNames[-1]: #change setting 378 self.Vec = G2spc.spg2origins[self.oldSpGrp] 379 self.newSpGrp = self.oldSpGrp 380 else: 381 self.Trans = G2gd.commonTrans[self.Common] 382 if 'R' == self.Common[-1]: 383 self.newSpGrp += ' r' 384 SGErr,SGData = G2spc.SpcGroup(self.newSpGrp) 385 self.Phase['General']['SGData'] = SGData 386 SGTxt.SetValue(self.newSpGrp) 387 OnTest(event) 388 389 def OnSpaceGroup(event): 390 event.Skip() 391 Flds = SGTxt.GetValue().split() 392 Flds[0] = Flds[0].upper() 393 #get rid of extra spaces between fields first 394 for fld in Flds: fld = fld.strip() 395 SpcGp = ' '.join(Flds) 396 if SpcGp == self.newSpGrp: #didn't change it! 397 return 398 # try a lookup on the user-supplied name 399 SpGrpNorm = G2spc.StandardizeSpcName(SpcGp) 400 if SpGrpNorm: 401 SGErr,SGData = G2spc.SpcGroup(SpGrpNorm) 402 else: 403 SGErr,SGData = G2spc.SpcGroup(SpcGp) 404 if SGErr: 405 text = [G2spc.SGErrors(SGErr)+'\nSpace Group set to previous'] 406 SGTxt.SetValue(self.newSpGrp) 407 msg = 'Space Group Error' 408 Style = wx.ICON_EXCLAMATION 409 Text = '\n'.join(text) 410 wx.MessageBox(Text,caption=msg,style=Style) 411 else: 412 text,table = G2spc.SGPrint(SGData) 413 self.Phase['General']['SGData'] = SGData 414 self.newSpGrp = SpcGp 415 SGTxt.SetValue(self.Phase['General']['SGData']['SpGrp']) 416 msg = 'Space Group Information' 417 G2G.SGMessageBox(self.panel,msg,text,table).Show() 418 if self.Phase['General']['Type'] == 'magnetic': 419 Nops = len(SGData['SGOps'])*len(SGData['SGCen']) 420 if SGData['SGInv']: 421 Nops *= 2 422 SGData['SpnFlp'] = Nops*[1,] 423 # if self.Phase['General']['Type'] in ['modulated',]: 424 # self.Phase['General']['SuperSg'] = SetDefaultSSsymbol() 425 # self.Phase['General']['SSGData'] = G2spc.SSpcGroup(generalData['SGData'],generalData['SuperSg'])[1] 426 427 def OnTest(event): 428 self.newCell = G2lat.TransformCell(self.oldCell[:6],self.Trans) 429 wx.CallAfter(self.Draw) 430 431 def OnMag(event): 432 self.ifMag = mag.GetValue() 433 434 def OnConstr(event): 435 self.ifConstr = constr.GetValue() 436 437 self.panel.Destroy() 438 self.panel = wx.Panel(self) 439 mainSizer = wx.BoxSizer(wx.VERTICAL) 440 MatSizer = wx.BoxSizer(wx.HORIZONTAL) 441 transSizer = wx.BoxSizer(wx.VERTICAL) 442 transSizer.Add(wx.StaticText(self.panel,label=" XYZ Transformation matrix & vector: M*X+V = X'")) 443 # if self.Super: 444 # Trmat = wx.FlexGridSizer(4,4,0,0) 445 # else: 446 commonSizer = wx.BoxSizer(wx.HORIZONTAL) 447 commonSizer.Add(wx.StaticText(self.panel,label=' Common transformations: '),0,WACV) 448 if self.oldSpGrp not in G2spc.spg2origins: 449 common = wx.ComboBox(self.panel,value=self.Common,choices=G2gd.commonNames[:-1], 450 style=wx.CB_READONLY|wx.CB_DROPDOWN) 451 else: 452 common = wx.ComboBox(self.panel,value=self.Common,choices=G2gd.commonNames, 453 style=wx.CB_READONLY|wx.CB_DROPDOWN) 454 common.Bind(wx.EVT_COMBOBOX,OnCommon) 455 commonSizer.Add(common,0,WACV) 456 transSizer.Add(commonSizer) 457 Trmat = wx.FlexGridSizer(3,5,0,0) 458 for iy,line in enumerate(self.Trans): 459 for ix,val in enumerate(line): 460 item = G2G.ValidatedTxtCtrl(self.panel,self.Trans[iy],ix,nDig=(10,3),size=(65,25)) 461 Trmat.Add(item) 462 Trmat.Add((25,0),0) 463 vec = G2G.ValidatedTxtCtrl(self.panel,self.Vec,iy,nDig=(10,3),size=(65,25)) 464 Trmat.Add(vec) 465 transSizer.Add(Trmat) 466 MatSizer.Add((10,0),0) 467 MatSizer.Add(transSizer) 468 mainSizer.Add(MatSizer) 469 mainSizer.Add(wx.StaticText(self.panel,label=' Old lattice parameters:'),0,WACV) 470 mainSizer.Add(wx.StaticText(self.panel,label= 471 ' a = %.5f b = %.5f c = %.5f'%(self.oldCell[0],self.oldCell[1],self.oldCell[2])),0,WACV) 472 mainSizer.Add(wx.StaticText(self.panel,label=' alpha = %.3f beta = %.3f gamma = %.3f'% 473 (self.oldCell[3],self.oldCell[4],self.oldCell[5])),0,WACV) 474 mainSizer.Add(wx.StaticText(self.panel,label=' volume = %.3f'%(self.oldCell[6])),0,WACV) 475 mainSizer.Add(wx.StaticText(self.panel,label=' New lattice parameters:'),0,WACV) 476 mainSizer.Add(wx.StaticText(self.panel,label= 477 ' a = %.5f b = %.5f c = %.5f'%(self.newCell[0],self.newCell[1],self.newCell[2])),0,WACV) 478 mainSizer.Add(wx.StaticText(self.panel,label=' alpha = %.3f beta = %.3f gamma = %.3f'% 479 (self.newCell[3],self.newCell[4],self.newCell[5])),0,WACV) 480 mainSizer.Add(wx.StaticText(self.panel,label=' volume = %.3f'%(self.newCell[6])),0,WACV) 481 sgSizer = wx.BoxSizer(wx.HORIZONTAL) 482 sgSizer.Add(wx.StaticText(self.panel,label=' Space group: '),0,WACV) 483 SGTxt = wx.TextCtrl(self.panel,value=self.newSpGrp,style=wx.TE_PROCESS_ENTER) 484 SGTxt.Bind(wx.EVT_TEXT_ENTER,OnSpaceGroup) 485 SGTxt.Bind(wx.EVT_KILL_FOCUS,OnSpaceGroup) 486 sgSizer.Add(SGTxt,0,WACV) 487 mainSizer.Add(sgSizer,0,WACV) 488 if 'magnetic' not in self.Phase['General']['Type']: 489 mag = wx.CheckBox(self.panel,label=' Make new phase magnetic?') 490 mag.Bind(wx.EVT_CHECKBOX,OnMag) 491 mainSizer.Add(mag,0,WACV) 492 mainSizer.Add(wx.StaticText(self.panel, \ 493 label=' NB: Nonmagnetic atoms will be deleted from new phase'),0,WACV) 494 constr = wx.CheckBox(self.panel,label=' Make constraints between phases?') 495 mainSizer.Add(wx.StaticText(self.panel, \ 496 label=' Constraints not correct for non-diagonal transforms'),0,WACV) 497 constr.SetValue(self.ifConstr) 498 constr.Bind(wx.EVT_CHECKBOX,OnConstr) 499 mainSizer.Add(constr,0,WACV) 500 501 TestBtn = wx.Button(self.panel,-1,"Test") 502 TestBtn.Bind(wx.EVT_BUTTON, OnTest) 503 OkBtn = wx.Button(self.panel,-1,"Ok") 504 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 505 cancelBtn = wx.Button(self.panel,-1,"Cancel") 506 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 507 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 508 btnSizer.Add((20,20),1) 509 btnSizer.Add(TestBtn) 510 btnSizer.Add((20,20),1) 511 btnSizer.Add(OkBtn) 512 btnSizer.Add((20,20),1) 513 btnSizer.Add(cancelBtn) 514 btnSizer.Add((20,20),1) 515 516 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 517 self.panel.SetSizer(mainSizer) 518 self.panel.Fit() 519 self.Fit() 520 521 def GetSelection(self): 522 if self.ifMag: 523 self.Phase['General']['Name'] += ' mag' 524 else: 525 self.Phase['General']['Name'] += ' %s'%(self.Common) 526 self.Phase['General']['Cell'][1:] = G2lat.TransformCell(self.oldCell[:6],self.Trans) 527 return self.Phase,self.Trans,self.Vec,self.ifMag,self.ifConstr,self.Common 528 529 def OnOk(self,event): 530 parent = self.GetParent() 531 parent.Raise() 532 self.EndModal(wx.ID_OK) 533 534 def OnCancel(self,event): 535 parent = self.GetParent() 536 parent.Raise() 537 self.EndModal(wx.ID_CANCEL) 538 539 ################################################################################ 540 class UseMagAtomDialog(wx.Dialog): 541 '''Get user selected magnetic atoms after cell transformation 542 ''' 543 def __init__(self,parent,Atoms,atCodes): 544 wx.Dialog.__init__(self,parent,wx.ID_ANY,'Magnetic atom selection', 545 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 546 self.panel = wx.Panel(self) #just a dummy - gets destroyed in Draw! 547 self.Atoms = Atoms 548 self.atCodes = atCodes 549 self.Use = len(self.Atoms)*[True,] 550 self.Draw() 551 552 def Draw(self): 553 554 def OnUseChk(event): 555 Obj = event.GetEventObject() 556 iuse = Indx[Obj.GetId()] 557 self.Use[iuse] = not self.Use[iuse] 558 Obj.SetValue(self.Use[iuse]) 559 560 self.panel.Destroy() 561 self.panel = wx.Panel(self) 562 Indx = {} 563 mainSizer = wx.BoxSizer(wx.VERTICAL) 564 565 mainSizer.Add(wx.StaticText(self.panel,label=' Name, x, y, z:'),0,WACV) 566 atmSizer = wx.FlexGridSizer(0,2,5,5) 567 for iuse,[use,atom] in enumerate(zip(self.Use,self.Atoms)): 568 useChk = wx.CheckBox(self.panel,label='Use?') 569 Indx[useChk.GetId()] = iuse 570 useChk.SetValue(use) 571 useChk.Bind(wx.EVT_CHECKBOX, OnUseChk) 572 atmSizer.Add(useChk,0,WACV) 573 text = ' %s %10.5f %10.5f %10.5f'%(atom[0],atom[3],atom[4],atom[5]) 574 atmSizer.Add(wx.StaticText(self.panel,label=text),0,WACV) 575 mainSizer.Add(atmSizer) 576 577 OkBtn = wx.Button(self.panel,-1,"Ok") 578 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 579 cancelBtn = wx.Button(self.panel,-1,"Use All") 580 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 581 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 582 btnSizer.Add((20,20),1) 583 btnSizer.Add(OkBtn) 584 btnSizer.Add((20,20),1) 585 btnSizer.Add(cancelBtn) 586 btnSizer.Add((20,20),1) 587 588 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 589 self.panel.SetSizer(mainSizer) 590 self.panel.Fit() 591 self.Fit() 592 593 def GetSelection(self): 594 useAtoms = [] 595 useatCodes = [] 596 for use,atom,code in zip(self.Use,self.Atoms,self.atCodes): 597 if use: 598 useAtoms.append(atom) 599 useatCodes.append(code) 600 return useAtoms,useatCodes 601 602 def OnOk(self,event): 603 parent = self.GetParent() 604 parent.Raise() 605 self.EndModal(wx.ID_OK) 606 607 def OnCancel(self,event): 608 parent = self.GetParent() 609 parent.Raise() 610 self.EndModal(wx.ID_CANCEL) 611 612 613 ################################################################################ 614 class RotationDialog(wx.Dialog): 615 ''' Get Rotate & translate matrix & vector - currently not used 616 needs rethinking - possible use to rotate a group of atoms about some 617 vector/origin + translation 618 619 ''' 620 def __init__(self,parent): 621 wx.Dialog.__init__(self,parent,wx.ID_ANY,'Atom group rotation/translation', 622 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 623 self.panel = wx.Panel(self) #just a dummy - gets destroyed in Draw! 624 self.Trans = np.eye(3) 625 self.Vec = np.zeros(3) 626 self.rotAngle = 0. 627 self.rotVec = np.array([0.,0.,1.]) 628 self.Expand = '' 629 self.Draw() 630 631 def Draw(self): 632 633 def OnExpand(event): 634 self.Expand = expand.GetValue() 635 636 def OnRotAngle(event): 637 event.Skip() 638 self.rotAngle = float(rotangle.GetValue()) 639 rotangle.SetValue('%5.3f'%(self.rotAngle)) 640 Q = G2mth.AVdeg2Q(self.rotAngle,self.rotVec) 641 self.Trans = G2mth.Q2Mat(Q) 642 self.Draw() 643 644 def OnRotVec(event): 645 event.Skip() 646 vals = rotvec.GetValue() 647 vals = vals.split() 648 self.rotVec = np.array([float(val) for val in vals]) 649 rotvec.SetValue('%5.3f %5.3f %5.3f'%(self.rotVec[0],self.rotVec[1],self.rotVec[2])) 650 Q = G2mth.AVdeg2Q(self.rotAngle,self.rotVec) 651 self.Trans = G2mth.Q2Mat(Q) 652 self.Draw() 653 654 self.panel.Destroy() 655 self.panel = wx.Panel(self) 656 mainSizer = wx.BoxSizer(wx.VERTICAL) 657 MatSizer = wx.BoxSizer(wx.HORIZONTAL) 658 transSizer = wx.BoxSizer(wx.VERTICAL) 659 transSizer.Add(wx.StaticText(self.panel,label=" XYZ Transformation matrix && vector: "+ \ 660 "\n B*M*A*(X-V)+V = X'\n A,B: Cartesian transformation matrices")) 661 Trmat = wx.FlexGridSizer(3,5,0,0) 662 for iy,line in enumerate(self.Trans): 663 for ix,val in enumerate(line): 664 item = G2G.ValidatedTxtCtrl(self.panel,self.Trans[iy],ix,nDig=(10,3),size=(65,25)) 665 Trmat.Add(item) 666 Trmat.Add((25,0),0) 667 vec = G2G.ValidatedTxtCtrl(self.panel,self.Vec,iy,nDig=(10,3),size=(65,25)) 668 Trmat.Add(vec) 669 transSizer.Add(Trmat) 670 MatSizer.Add((10,0),0) 671 MatSizer.Add(transSizer) 672 mainSizer.Add(MatSizer) 673 rotationBox = wx.BoxSizer(wx.HORIZONTAL) 674 rotationBox.Add(wx.StaticText(self.panel,label=' Rotation angle: '),0,WACV) 675 rotangle = wx.TextCtrl(self.panel,value='%5.3f'%(self.rotAngle), 676 size=(50,25),style=wx.TE_PROCESS_ENTER) 677 rotangle.Bind(wx.EVT_TEXT_ENTER,OnRotAngle) 678 rotangle.Bind(wx.EVT_KILL_FOCUS,OnRotAngle) 679 rotationBox.Add(rotangle,0,WACV) 680 rotationBox.Add(wx.StaticText(self.panel,label=' about vector: '),0,WACV) 681 rotvec = wx.TextCtrl(self.panel,value='%5.3f %5.3f %5.3f'%(self.rotVec[0],self.rotVec[1],self.rotVec[2]), 682 size=(100,25),style=wx.TE_PROCESS_ENTER) 683 rotvec.Bind(wx.EVT_TEXT_ENTER,OnRotVec) 684 rotvec.Bind(wx.EVT_KILL_FOCUS,OnRotVec) 685 rotationBox.Add(rotvec,0,WACV) 686 mainSizer.Add(rotationBox,0,WACV) 687 expandChoice = ['','xy','xz','yz','xyz'] 688 expandBox = wx.BoxSizer(wx.HORIZONTAL) 689 expandBox.Add(wx.StaticText(self.panel,label=' Expand -1 to +1 on: '),0,WACV) 690 expand = wx.ComboBox(self.panel,value=self.Expand,choices=expandChoice, 691 style=wx.CB_READONLY|wx.CB_DROPDOWN) 692 expand.Bind(wx.EVT_COMBOBOX,OnExpand) 693 expandBox.Add(expand,0,WACV) 694 expandBox.Add(wx.StaticText(self.panel,label=' and find unique atoms '),0,WACV) 695 mainSizer.Add(expandBox) 696 697 OkBtn = wx.Button(self.panel,-1,"Ok") 698 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 699 cancelBtn = wx.Button(self.panel,-1,"Cancel") 700 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 701 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 702 btnSizer.Add((20,20),1) 703 btnSizer.Add(OkBtn) 704 btnSizer.Add((20,20),1) 705 btnSizer.Add(cancelBtn) 706 btnSizer.Add((20,20),1) 707 708 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 709 self.panel.SetSizer(mainSizer) 710 self.panel.Fit() 711 self.Fit() 712 713 def GetSelection(self): 714 return self.Trans,self.Vec,self.Expand 715 716 def OnOk(self,event): 717 parent = self.GetParent() 718 parent.Raise() 719 self.EndModal(wx.ID_OK) 720 721 def OnCancel(self,event): 722 parent = self.GetParent() 723 parent.Raise() 724 self.EndModal(wx.ID_CANCEL) 725 726 ################################################################################ 727 class DIFFaXcontrols(wx.Dialog): 728 ''' Solicit items needed to prepare DIFFaX control.dif file 729 ''' 730 def __init__(self,parent,ctrls,parms=None): 731 wx.Dialog.__init__(self,parent,wx.ID_ANY,'DIFFaX controls', 732 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 733 self.panel = wx.Panel(self) #just a dummy - gets destroyed in Draw! 734 self.ctrls = ctrls 735 self.calcType = 'powder pattern' 736 self.plane = 'h0l' 737 self.planeChoice = ['h0l','0kl','hhl','h-hl',] 738 self.lmax = '2' 739 self.lmaxChoice = [str(i+1) for i in range(6)] 740 self.Parms = parms 741 self.Parm = None 742 if self.Parms != None: 743 self.Parm = self.Parms[0] 744 self.parmRange = [0.,1.] 745 self.parmStep = 2 746 self.Inst = 'Gaussian' 747 self.Draw() 748 749 def Draw(self): 750 751 def OnCalcType(event): 752 self.calcType = calcType.GetValue() 753 wx.CallAfter(self.Draw) 754 755 def OnPlane(event): 756 self.plane = plane.GetValue() 757 758 def OnMaxL(event): 759 self.lmax = lmax.GetValue() 760 761 def OnParmSel(event): 762 self.Parm = parmsel.GetValue() 763 764 def OnNumStep(event): 765 self.parmStep = int(numStep.GetValue()) 766 767 def OnParmRange(event): 768 event.Skip() 769 vals = parmrange.GetValue().split() 770 try: 771 vals = [float(vals[0]),float(vals[1])] 772 except ValueError: 773 vals = self.parmRange 774 parmrange.SetValue('%.3f %.3f'%(vals[0],vals[1])) 775 self.parmRange = vals 776 777 def OnInstSel(event): 778 self.Inst = instsel.GetValue() 779 780 self.panel.Destroy() 781 self.panel = wx.Panel(self) 782 mainSizer = wx.BoxSizer(wx.VERTICAL) 783 mainSizer.Add(wx.StaticText(self.panel,label=' Controls for DIFFaX'),0,WACV) 784 if self.Parms: 785 mainSizer.Add(wx.StaticText(self.panel,label=' Sequential powder pattern simulation'),0,WACV) 786 else: 787 calcChoice = ['powder pattern','selected area'] 788 calcSizer = wx.BoxSizer(wx.HORIZONTAL) 789 calcSizer.Add(wx.StaticText(self.panel,label=' Select calculation type: '),0,WACV) 790 calcType = wx.ComboBox(self.panel,value=self.calcType,choices=calcChoice, 791 style=wx.CB_READONLY|wx.CB_DROPDOWN) 792 calcType.Bind(wx.EVT_COMBOBOX,OnCalcType) 793 calcSizer.Add(calcType,0,WACV) 794 mainSizer.Add(calcSizer) 795 if self.Parms: 796 parmSel = wx.BoxSizer(wx.HORIZONTAL) 797 parmSel.Add(wx.StaticText(self.panel,label=' Select parameter to vary: '),0,WACV) 798 parmsel = wx.ComboBox(self.panel,value=self.Parm,choices=self.Parms, 799 style=wx.CB_READONLY|wx.CB_DROPDOWN) 800 parmsel.Bind(wx.EVT_COMBOBOX,OnParmSel) 801 parmSel.Add(parmsel,0,WACV) 802 mainSizer.Add(parmSel) 803 mainSizer.Add(wx.StaticText(self.panel,label=' Enter parameter range & no. steps: '),0,WACV) 804 parmRange = wx.BoxSizer(wx.HORIZONTAL) 805 numChoice = [str(i+1) for i in range(10)] 806 parmrange = wx.TextCtrl(self.panel,value='%.3f %.3f'%(self.parmRange[0],self.parmRange[1]), 807 style=wx.TE_PROCESS_ENTER) 808 parmrange.Bind(wx.EVT_TEXT_ENTER,OnParmRange) 809 parmrange.Bind(wx.EVT_KILL_FOCUS,OnParmRange) 810 parmRange.Add(parmrange,0,WACV) 811 numStep = wx.ComboBox(self.panel,value=str(self.parmStep),choices=numChoice, 812 style=wx.CB_READONLY|wx.CB_DROPDOWN) 813 numStep.Bind(wx.EVT_COMBOBOX,OnNumStep) 814 parmRange.Add(numStep,0,WACV) 815 mainSizer.Add(parmRange) 816 if 'selected' in self.calcType: 817 planeSizer = wx.BoxSizer(wx.HORIZONTAL) 818 planeSizer.Add(wx.StaticText(self.panel,label=' Select plane: '),0,WACV) 819 plane = wx.ComboBox(self.panel,value=self.plane,choices=self.planeChoice, 820 style=wx.CB_READONLY|wx.CB_DROPDOWN) 821 plane.Bind(wx.EVT_COMBOBOX,OnPlane) 822 planeSizer.Add(plane,0,WACV) 823 planeSizer.Add(wx.StaticText(self.panel,label=' Max. l index: '),0,WACV) 824 lmax = wx.ComboBox(self.panel,value=self.lmax,choices=self.lmaxChoice, 825 style=wx.CB_READONLY|wx.CB_DROPDOWN) 826 lmax.Bind(wx.EVT_COMBOBOX,OnMaxL) 827 planeSizer.Add(lmax,0,WACV) 828 mainSizer.Add(planeSizer) 829 else: 830 instChoice = ['None','Mean Gaussian','Gaussian',] 831 instSizer = wx.BoxSizer(wx.HORIZONTAL) 832 instSizer.Add(wx.StaticText(self.panel,label=' Select instrument broadening: '),0,WACV) 833 instsel = wx.ComboBox(self.panel,value=self.Inst,choices=instChoice, 834 style=wx.CB_READONLY|wx.CB_DROPDOWN) 835 instsel.Bind(wx.EVT_COMBOBOX,OnInstSel) 836 instSizer.Add(instsel,0,WACV) 837 mainSizer.Add(instSizer) 838 OkBtn = wx.Button(self.panel,-1,"Ok") 839 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 840 cancelBtn = wx.Button(self.panel,-1,"Cancel") 841 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 842 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 843 btnSizer.Add((20,20),1) 844 btnSizer.Add(OkBtn) 845 btnSizer.Add((20,20),1) 846 btnSizer.Add(cancelBtn) 847 btnSizer.Add((20,20),1) 848 849 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 850 self.panel.SetSizer(mainSizer) 851 self.panel.Fit() 852 self.Fit() 853 854 def GetSelection(self): 855 if 'powder' in self.calcType: 856 return 'PWDR',self.Inst,self.Parm,self.parmRange,self.parmStep 857 elif 'selected' in self.calcType: 858 return 'SADP',self.plane,self.lmax 859 860 def OnOk(self,event): 861 parent = self.GetParent() 862 parent.Raise() 863 self.EndModal(wx.ID_OK) 864 865 def OnCancel(self,event): 866 parent = self.GetParent() 867 parent.Raise() 868 self.EndModal(wx.ID_CANCEL) 869 870 ################################################################################ 871 class AddHatomDialog(wx.Dialog): 872 '''H atom addition dialog. After :meth:`ShowModal` returns, the results 873 are found in dict :attr:`self.data`, which is accessed using :meth:`GetData`. 874 875 :param wx.Frame parent: reference to parent frame (or None) 876 :param dict Neigh: a dict of atom names with list of atom name, dist pairs for neighboring atoms 877 :param dict phase: a dict containing the phase as defined by 878 :ref:`Phase Tree Item <Phase_table>` 879 ''' 880 def __init__(self,parent,Neigh,phase): 881 wx.Dialog.__init__(self,parent,wx.ID_ANY,'H atom add', 882 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 883 self.panel = wxscroll.ScrolledPanel(self) #just a dummy - gets destroyed in Draw! 884 self.Neigh = Neigh 885 self.phase = phase 886 self.Hatoms = [] 887 self.Draw(self.Neigh,self.phase) 888 889 def Draw(self,Neigh,phase): 890 '''Creates the contents of the dialog. Normally called 891 by :meth:`__init__`. 892 ''' 893 def OnHSelect(event): 894 Obj = event.GetEventObject() 895 item,i = Indx[Obj.GetId()] 896 for obj in Indx[item]: 897 obj.SetValue(False) 898 Obj.SetValue(True) 899 self.Neigh[item][2] = i 900 901 def OnBond(event): 902 Obj = event.GetEventObject() 903 inei,ibond = Indx[Obj.GetId()] 904 self.Neigh[inei][1][0][ibond][2] = Obj.GetValue() 905 906 self.panel.Destroy() 907 self.panel = wxscroll.ScrolledPanel(self,style = wx.DEFAULT_DIALOG_STYLE) 908 mainSizer = wx.BoxSizer(wx.VERTICAL) 909 mainSizer.Add(wx.StaticText(self.panel,-1,'H atom add controls for phase %s:'%(phase['General']['Name'])), 910 0,wx.LEFT|wx.TOP,10) 911 mainSizer.Add(wx.StaticText(self.panel,-1,'NB: Check selections as they may not be correct'),0,WACV|wx.LEFT,10) 912 mainSizer.Add(wx.StaticText(self.panel,-1," Atom: Add # H's Use: Neighbors, dist"),0,wx.TOP|wx.LEFT,5) 913 nHatms = ['0','1','2','3'] 914 dataSizer = wx.FlexGridSizer(0,3,0,0) 915 Indx = {} 916 for inei,neigh in enumerate(Neigh): 917 dataSizer.Add(wx.StaticText(self.panel,-1,' %s: '%(neigh[0])),0,WACV) 918 nH = 1 #for O atom 919 if 'C' in neigh[0] or 'N' in neigh[0]: 920 nH = 4-len(neigh[1][0]) 921 checks = wx.BoxSizer(wx.HORIZONTAL) 922 Ids = [] 923 for i in range(nH+1): 924 nHs = wx.CheckBox(self.panel,-1,label=nHatms[i]) 925 if i == neigh[2]: 926 nHs.SetValue(True) 927 Indx[nHs.GetId()] = [inei,i] 928 Ids.append(nHs) 929 nHs.Bind(wx.EVT_CHECKBOX, OnHSelect) 930 checks.Add(nHs,0,WACV) 931 Indx[inei] = Ids 932 dataSizer.Add(checks,0,WACV) 933 lineSizer = wx.BoxSizer(wx.HORIZONTAL) 934 for ib,bond in enumerate(neigh[1][0]): 935 Bond = wx.CheckBox(self.panel,-1,label=': %s, %.3f'%(bond[0],bond[1])) 936 Bond.SetValue(bond[2]) 937 Indx[Bond.GetId()] = [inei,ib] 938 Bond.Bind(wx.EVT_CHECKBOX,OnBond) 939 lineSizer.Add(Bond,0,WACV) 940 dataSizer.Add(lineSizer,0,WACV|wx.RIGHT,10) 941 mainSizer.Add(dataSizer,0,wx.LEFT,5) 942 943 CancelBtn = wx.Button(self.panel,-1,'Cancel') 944 CancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 945 OkBtn = wx.Button(self.panel,-1,'Ok') 946 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 947 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 948 btnSizer.Add((20,20),1) 949 btnSizer.Add(OkBtn) 950 btnSizer.Add((20,20),1) 951 btnSizer.Add(CancelBtn) 952 btnSizer.Add((20,20),1) 953 mainSizer.Add(btnSizer,0,wx.BOTTOM|wx.TOP, 10) 954 self.panel.SetSizer(mainSizer) 955 size = np.array(self.GetSize()) 956 self.panel.SetupScrolling() 957 self.panel.SetAutoLayout(1) 958 size = [size[0]-5,size[1]-20] #this fiddling is needed for older wx! 959 self.panel.SetSize(size) 960 961 def GetData(self): 962 'Returns the values from the dialog' 963 for neigh in self.Neigh: 964 for ibond,bond in enumerate(neigh[1][0]): 965 if not bond[2]: 966 neigh[1][1][1][ibond] = 0 #deselected bond 967 neigh[1][1][1] = [a for a in neigh[1][1][1] if a] 968 return self.Neigh #has #Hs to add for each entry 969 970 def OnOk(self,event): 971 'Called when the OK button is pressed' 972 parent = self.GetParent() 973 parent.Raise() 974 self.EndModal(wx.ID_OK) 975 976 def OnCancel(self,event): 977 parent = self.GetParent() 978 parent.Raise() 979 self.EndModal(wx.ID_CANCEL) 980 981 ################################################################################ 982 ################################################################################ 983 ################################################################################ 984 985 986 def SetPhaseWindow(phasePage,mainSizer=None,Scroll=0): 987 if mainSizer is not None: 71 988 phasePage.SetSizer(mainSizer) 72 Size = mainSizer.GetMinSize() 73 else: 74 Size = phasePage.GetBestSize() 75 Size[0] += 40 76 phasePage.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1) 989 phasePage.SetAutoLayout(True) 990 phasePage.SetScrollRate(1,1) 991 phasePage.SendSizeEvent() 77 992 phasePage.Scroll(0,Scroll) 78 if size is None: 79 Size[1] = min(Size[1]+ 150,500) 80 # Size[1] = min(500,Size[1]) 81 mainFrame.setSizePosLeft(Size) 82 else: 83 size[1] = min(500,size[1]) 84 mainFrame.setSizePosLeft(size) 993 85 994 86 995 def FindBondsDraw(data): … … 155 1064 '''Create the data display window contents when a phase is clicked on 156 1065 in the main (data tree) window. 157 Called only from :meth:`GSASII grid.SelectDataTreeItem`,158 which in turn is called from :meth:`GSASII .GSASII.OnDataTreeSelChanged`1066 Called only from :meth:`GSASIIdataGUI.SelectDataTreeItem`, 1067 which in turn is called from :meth:`GSASIIdataGUI.GSASII.OnDataTreeSelChanged` 159 1068 when a Phase tree item is selected. This creates all tabs on the page and fills 160 1069 their contents. Routine OnPageChanged is called each time a tab is pressed … … 177 1086 for reflName in reflNames: 178 1087 if 'PWDR' in reflName: 179 PatternId = G2gd.Get PatternTreeItemId(G2frame,G2frame.root, reflName)180 reflSets = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId,'Reflection Lists'))1088 PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root, reflName) 1089 reflSets = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId,'Reflection Lists')) 181 1090 reflData = reflSets[phaseName] 182 1091 elif 'HKLF' in reflName: 183 PatternId = G2gd.Get PatternTreeItemId(G2frame,G2frame.root, reflName)184 reflData = G2frame. PatternTree.GetItemPyData(PatternId)[1]1092 PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root, reflName) 1093 reflData = G2frame.GPXtree.GetItemPyData(PatternId)[1] 185 1094 if 'Type' not in reflData: 186 1095 reflData['Type'] = 'SXC' … … 220 1129 if 'Algolrithm' in generalData.get('MCSA controls',{}) or \ 221 1130 'MCSA controls' not in generalData: 222 generalData['MCSA controls'] = {'Data source':'','Annealing':[ 50.,0.001,50],223 'dmin':2. 0,'Algorithm':'log','Jump coeff':[0.95,0.5],'boltzmann':1.0,224 ' fast parms':[1.0,1.0,1.0],'log slope':0.9,'Cycles':1,'Results':[],'newDmin':True}1131 generalData['MCSA controls'] = {'Data source':'','Annealing':[0.7,0.1,250], 1132 'dmin':2.8,'Algorithm':'log','fast parms':[0.8,0.6],'log slope':0.9, 1133 'Cycles':1,'Results':[],'newDmin':True} 225 1134 if 'AtomPtrs' not in generalData: 226 1135 generalData['AtomPtrs'] = [3,1,7,9] … … 334 1243 """ 335 1244 # UpdateGeneral execution starts here 336 #General.DestroyChildren() # bad, deletes scrollbars on Mac! 337 if General.GetSizer(): 338 General.GetSizer().Clear(True) 1245 if General.GetSizer(): General.GetSizer().Clear(True) 339 1246 phaseTypes = ['nuclear','magnetic','macromolecular','faulted'] 340 1247 SetupGeneral() … … 371 1278 generalData['Name'] = newName 372 1279 G2frame.G2plotNB.Rename(oldName,generalData['Name']) 373 G2frame.dataFrame.SetLabel('Phase Data for '+generalData['Name']) 374 G2frame.PatternTree.SetItemText(Item,generalData['Name']) 1280 #G2frame.SetLabel(G2frame.GetLabel().split('||')[0]+' || '+'Phase Data for '+generalData['Name']) 1281 G2frame.SetTitle('Phase Data for '+generalData['Name']) 1282 G2frame.GPXtree.SetItemText(Item,generalData['Name']) 375 1283 # change phase name key in Reflection Lists for each histogram 376 1284 for hist in data['Histograms']: 377 ht = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,hist)378 rt = G2gd.Get PatternTreeItemId(G2frame,ht,'Reflection Lists')1285 ht = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,hist) 1286 rt = G2gd.GetGPXtreeItemId(G2frame,ht,'Reflection Lists') 379 1287 if not rt: continue 380 RfList = G2frame. PatternTree.GetItemPyData(rt)1288 RfList = G2frame.GPXtree.GetItemPyData(rt) 381 1289 if oldName not in RfList: 382 1290 print('Warning: '+oldName+' not in Reflection List for '+ … … 390 1298 if not len(generalData['AtomTypes']): #can change only if no atoms! 391 1299 generalData['Type'] = TypeTxt.GetValue() 392 pages = [G2frame. dataDisplay.GetPageText(PageNum) for PageNum in range(G2frame.dataDisplay.GetPageCount())]1300 pages = [G2frame.phaseDisplay.GetPageText(PageNum) for PageNum in range(G2frame.phaseDisplay.GetPageCount())] 393 1301 if generalData['Type'] == 'faulted': 394 G2frame. dataFrame.Bind(wx.EVT_MENU, OnLoadDIFFaX, id=G2gd.wxID_LOADDIFFAX)395 G2frame. dataFrame.Bind(wx.EVT_MENU, OnSimulate, id=G2gd.wxID_LAYERSIMULATE)396 G2frame. dataFrame.Bind(wx.EVT_MENU, OnSeqSimulate, id=G2gd.wxID_SEQUENCESIMULATE)397 G2frame. dataFrame.Bind(wx.EVT_MENU, OnFitLayers, id=G2gd.wxID_LAYERSFIT)1302 G2frame.Bind(wx.EVT_MENU, OnLoadDIFFaX, id=G2G.wxID_LOADDIFFAX) 1303 G2frame.Bind(wx.EVT_MENU, OnSimulate, id=G2G.wxID_LAYERSIMULATE) 1304 G2frame.Bind(wx.EVT_MENU, OnSeqSimulate, id=G2G.wxID_SEQUENCESIMULATE) 1305 G2frame.Bind(wx.EVT_MENU, OnFitLayers, id=G2G.wxID_LAYERSFIT) 398 1306 if 'Wave Data' in pages: 399 1307 pass 400 # G2frame. dataDisplay.DeletePage(pages.index('Wave Data'))1308 # G2frame.phaseDisplay.DeletePage(pages.index('Wave Data')) 401 1309 if 'MC/SA' in pages: 402 1310 pass 403 # G2frame. dataDisplay.DeletePage(pages.index('MC/SA'))1311 # G2frame.phaseDisplay.DeletePage(pages.index('MC/SA')) 404 1312 if 'RB Models' in pages: 405 1313 pass 406 # G2frame. dataDisplay.DeletePage(pages.index('RB Models'))1314 # G2frame.phaseDisplay.DeletePage(pages.index('RB Models')) 407 1315 if 'Layers' not in pages: 408 1316 if 'Layers' not in data: … … 410 1318 'Width':[[1.,1.],[False,False]],'Toler':0.01,'AtInfo':{}, 411 1319 'Layers':[],'Stacking':[],'Transitions':[]} 412 G2frame.layerData = wx.ScrolledWindow(G2frame. dataDisplay)413 G2frame. dataDisplay.InsertPage(3,G2frame.layerData,'Layers')1320 G2frame.layerData = wx.ScrolledWindow(G2frame.phaseDisplay) 1321 G2frame.phaseDisplay.InsertPage(3,G2frame.layerData,'Layers') 414 1322 Id = wx.NewId() 415 1323 TabSelectionIdDict[Id] = 'Layers' … … 423 1331 else: 424 1332 if 'Wave Data' in pages: 425 G2frame. dataDisplay.DeletePage(pages.index('Wave Data'))1333 G2frame.phaseDisplay.DeletePage(pages.index('Wave Data')) 426 1334 if 'MC/SA' not in pages: 427 G2frame.MCSA = wx.ScrolledWindow(G2frame. dataDisplay)428 G2frame. dataDisplay.InsertPage(7,G2frame.MCSA,'MC/SA')1335 G2frame.MCSA = wx.ScrolledWindow(G2frame.phaseDisplay) 1336 G2frame.phaseDisplay.InsertPage(7,G2frame.MCSA,'MC/SA') 429 1337 Id = wx.NewId() 430 1338 TabSelectionIdDict[Id] = 'MC/SA' … … 528 1436 def OnModulated(event): 529 1437 if not len(generalData['AtomTypes']): #can change only if no atoms! 530 pages = [G2frame. dataDisplay.GetPageText(PageNum) for PageNum in range(G2frame.dataDisplay.GetPageCount())]1438 pages = [G2frame.phaseDisplay.GetPageText(PageNum) for PageNum in range(G2frame.phaseDisplay.GetPageCount())] 531 1439 if generalData['Type'] in ['nuclear','magnetic']: 532 1440 generalData['Modulated'] = modulated.GetValue() … … 544 1452 if 'MC/SA' in pages: 545 1453 pass 546 # G2frame. dataDisplay.DeletePage(pages.index('MC/SA')) #this crashes!!1454 # G2frame.phaseDisplay.DeletePage(pages.index('MC/SA')) #this crashes!! 547 1455 if 'Layers' in pages: 548 1456 pass 549 # G2frame. dataDisplay.DeletePage(pages.index('Layers'))1457 # G2frame.phaseDisplay.DeletePage(pages.index('Layers')) 550 1458 if 'Wave Data' not in pages: 551 G2frame.waveData = wx.ScrolledWindow(G2frame. dataDisplay)552 G2frame. dataDisplay.InsertPage(3,G2frame.waveData,'Wave Data')1459 G2frame.waveData = wx.ScrolledWindow(G2frame.phaseDisplay) 1460 G2frame.phaseDisplay.InsertPage(3,G2frame.waveData,'Wave Data') 553 1461 Id = wx.NewId() 554 1462 TabSelectionIdDict[Id] = 'Wave Data' 555 1463 else: 556 1464 if 'Wave Data' in pages: 557 G2frame. dataDisplay.DeletePage(pages.index('Wave Data'))1465 G2frame.phaseDisplay.DeletePage(pages.index('Wave Data')) 558 1466 wx.CallAfter(UpdateGeneral) 559 1467 else: … … 700 1608 cellSizer.Add(wx.StaticText(General,label=txt),0,WACV) 701 1609 if ifEdit: #a,b,c,etc. 702 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff)703 1610 cellVal = wx.TextCtrl(General,value=(fmt%(cell[Id+1])), 704 1611 style=wx.TE_PROCESS_ENTER) … … 783 1690 else: 784 1691 gfacTxt = G2G.ValidatedTxtCtrl(General,generalData['Lande g'],ig, 785 min=0.5,max=3.0,nDig=(10,2) ,typeHint=float)1692 min=0.5,max=3.0,nDig=(10,2)) 786 1693 elemSizer.Add(gfacTxt,0,WACV) 787 1694 return elemSizer … … 821 1728 text[0] = ' Magnetic Space Group: '+SGData['MagSpGrp'] 822 1729 text[3] = ' The magnetic lattice point group is '+SGData['MagPtGp'] 823 G2gd.SGMagSpinBox(General,msg,text,table,OprNames,SpnFlp).Show() 824 825 def OnDminVal(event): 826 event.Skip() 827 try: 828 val = float(dminVal.GetValue()) 829 if val > 0.7: 830 generalData['MagDmin'] = val 831 except ValueError: 832 pass 833 dminVal.SetValue("%.4f"%(generalData['MagDmin'])) 834 1730 SGMagSpinBox(General,msg,text,table,OprNames,SpnFlp).Show() 1731 835 1732 SGData = generalData['SGData'] 836 1733 Indx = {} … … 863 1760 dminSizer = wx.BoxSizer(wx.HORIZONTAL) 864 1761 dminSizer.Add(wx.StaticText(General,label=' Magnetic reflection d-min: '),0,WACV) 865 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 866 dminVal = wx.TextCtrl(General,value='%.4f'%(generalData['MagDmin']),style=wx.TE_PROCESS_ENTER) 867 dminVal.Bind(wx.EVT_TEXT_ENTER,OnDminVal) 868 dminVal.Bind(wx.EVT_KILL_FOCUS,OnDminVal) 1762 dminVal = G2G.ValidatedTxtCtrl(General,generalData,'MagDmin',nDig=(10,4),min=0.7) 869 1763 dminSizer.Add(dminVal,0,WACV) 870 1764 magSizer.Add(dminSizer,0,WACV) … … 884 1778 pawleySizer.Add(wx.StaticText(General,label=' Pawley dmin: '),0,WACV) 885 1779 pawlVal = G2G.ValidatedTxtCtrl(General,generalData,'Pawley dmin', 886 min=0.25,max=20.,nDig=(10,5) ,typeHint=float)1780 min=0.25,max=20.,nDig=(10,5)) 887 1781 pawleySizer.Add(pawlVal,0,WACV) 888 1782 pawleySizer.Add(wx.StaticText(General,label=' Pawley neg. wt.: '),0,WACV) 889 1783 pawlNegWt = G2G.ValidatedTxtCtrl(General,generalData,'Pawley neg wt', 890 min=0.,max=1.,nDig=(10,4) ,typeHint=float)1784 min=0.,max=1.,nDig=(10,4)) 891 1785 pawleySizer.Add(pawlNegWt,0,WACV) 892 1786 return pawleySizer … … 915 1809 wx.MessageBox(Text,caption=msg,style=Style) 916 1810 wx.CallAfter(UpdateGeneral) 917 918 def OnVec(event): 919 event.Skip() 920 Obj = event.GetEventObject() 921 ind = Indx[Obj.GetId()] 922 val = Obj.GetValue() 923 try: 924 val = min(2.0,max(-1.0,float(val))) 925 except ValueError: 926 val = generalData['SuperVec'][0][ind] 927 generalData['SuperVec'][0][ind] = val 928 Obj.SetValue('%.4f'%(generalData['SuperVec'][0][ind])) 929 1811 930 1812 def OnVecRef(event): 931 1813 generalData['SuperVec'][1] = Ref.GetValue() … … 962 1844 for i,[val,show] in enumerate(zip(generalData['SuperVec'][0],ifShow)): 963 1845 if show: 964 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 965 modVal = wx.TextCtrl(General,value=('%.4f'%(val)), 966 size=wx.Size(50,20),style=wx.TE_PROCESS_ENTER) 967 modVal.Bind(wx.EVT_TEXT_ENTER,OnVec) 968 modVal.Bind(wx.EVT_KILL_FOCUS,OnVec) 1846 modVal = G2G.ValidatedTxtCtrl(General,generalData['SuperVec'][0],i,nDig=(10,4),min=-1.,max=2.) 969 1847 vecSizer.Add(modVal,0,WACV) 970 1848 Indx[modVal.GetId()] = i … … 989 1867 def OnRefList(event): 990 1868 if not refsList: 991 G2G.G2MessageBox(G2frame .dataFrame,'No reflections')1869 G2G.G2MessageBox(G2frame,'No reflections') 992 1870 return 993 1871 dlg = G2G.G2MultiChoiceDialog(G2frame, 'Select reflection sets to use', … … 1005 1883 dlg.Destroy() 1006 1884 wx.CallAfter(UpdateGeneral,General.GetScrollPos(wx.VERTICAL)) 1007 1008 def OnResVal(event): 1009 event.Skip() 1010 try: 1011 res = float(mapRes.GetValue()) 1012 if 0.25 <= res <= 20.: 1013 Map['Resolution'] = res 1014 except ValueError: 1015 pass 1016 mapRes.SetValue("%.2f"%(Map['Resolution'])) #reset in case of error 1017 1018 def OnCutOff(event): 1019 event.Skip() 1020 try: 1021 res = float(cutOff.GetValue()) 1022 if 1.0 <= res <= 100.: 1023 Map['cutOff'] = res 1024 except ValueError: 1025 pass 1026 cutOff.SetValue("%.1f"%(Map['cutOff'])) #reset in case of error 1027 1885 1028 1886 #patch 1029 1887 if 'cutOff' not in Map: … … 1052 1910 line2Sizer = wx.BoxSizer(wx.HORIZONTAL) 1053 1911 line2Sizer.Add(wx.StaticText(General,label=' Resolution: '),0,WACV) 1054 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 1055 mapRes = wx.TextCtrl(General,value='%.2f'%(Map['Resolution']),style=wx.TE_PROCESS_ENTER) 1056 mapRes.Bind(wx.EVT_TEXT_ENTER,OnResVal) 1057 mapRes.Bind(wx.EVT_KILL_FOCUS,OnResVal) 1912 mapRes = G2G.ValidatedTxtCtrl(General,Map,'Resolution',nDig=(10,2),min=0.25,max=20.) 1058 1913 line2Sizer.Add(mapRes,0,WACV) 1059 1914 line2Sizer.Add(wx.StaticText(General,label=' Peak cutoff %: '),0,WACV) 1060 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 1061 cutOff = wx.TextCtrl(General,value='%.1f'%(Map['cutOff']),style=wx.TE_PROCESS_ENTER) 1062 cutOff.Bind(wx.EVT_TEXT_ENTER,OnCutOff) 1063 cutOff.Bind(wx.EVT_KILL_FOCUS,OnCutOff) 1915 cutOff = G2G.ValidatedTxtCtrl(General,Map,'cutOff',nDig=(10,1),min=1.0,max=100.) 1064 1916 line2Sizer.Add(cutOff,0,WACV) 1065 1917 mapSizer.Add(line2Sizer,0,WACV) … … 1091 1943 normElem.SetLabel(Flip['Norm element']) 1092 1944 PE.Destroy() 1093 1094 def OnResVal(event): 1095 event.Skip() 1096 try: 1097 res = float(flipRes.GetValue()) 1098 if 0.25 <= res <= 20.: 1099 Flip['Resolution'] = res 1100 except ValueError: 1101 pass 1102 flipRes.SetValue("%.2f"%(Flip['Resolution'])) #reset in case of error 1103 1104 def OnkFactor(event): 1105 event.Skip() 1106 try: 1107 res = float(kFactor.GetValue()) 1108 if 0.1 <= res <= 1.2: 1109 Flip['k-factor'] = res 1110 except ValueError: 1111 pass 1112 kFactor.SetValue("%.3f"%(Flip['k-factor'])) #reset in case of error 1113 1114 def OnkMax(event): 1115 event.Skip() 1116 try: 1117 res = float(kMax.GetValue()) 1118 if res >= 10.: 1119 Flip['k-Max'] = res 1120 except ValueError: 1121 pass 1122 kMax.SetValue("%.1f"%(Flip['k-Max'])) #reset in case of error 1123 1945 1124 1946 def OnTestHKL(event): 1125 1947 event.Skip() … … 1153 1975 line2Sizer = wx.BoxSizer(wx.HORIZONTAL) 1154 1976 line2Sizer.Add(wx.StaticText(General,label=' Resolution: '),0,WACV) 1155 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 1156 flipRes = wx.TextCtrl(General,value='%.2f'%(Flip['Resolution']),style=wx.TE_PROCESS_ENTER) 1157 flipRes.Bind(wx.EVT_TEXT_ENTER,OnResVal) 1158 flipRes.Bind(wx.EVT_KILL_FOCUS,OnResVal) 1977 flipRes = G2G.ValidatedTxtCtrl(General,Flip,'Resolution',nDig=(10,2),min=0.25,max=2.) 1159 1978 line2Sizer.Add(flipRes,0,WACV) 1160 1979 line2Sizer.Add(wx.StaticText(General,label=' k-Factor (0.1-1.2): '),0,WACV) 1161 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 1162 kFactor = wx.TextCtrl(General,value='%.3f'%(Flip['k-factor']),style=wx.TE_PROCESS_ENTER) 1163 kFactor.Bind(wx.EVT_TEXT_ENTER,OnkFactor) 1164 kFactor.Bind(wx.EVT_KILL_FOCUS,OnkFactor) 1980 kFactor = G2G.ValidatedTxtCtrl(General,Flip,'k-factor',nDig=(10,3),min=0.1,max=1.2) 1165 1981 line2Sizer.Add(kFactor,0,WACV) 1166 1982 line2Sizer.Add(wx.StaticText(General,label=' k-Max (>=10.0): '),0,WACV) 1167 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 1168 kMax = wx.TextCtrl(General,value='%.1f'%(Flip['k-Max']),style=wx.TE_PROCESS_ENTER) 1169 kMax.Bind(wx.EVT_TEXT_ENTER,OnkMax) 1170 kMax.Bind(wx.EVT_KILL_FOCUS,OnkMax) 1983 kMax = G2G.ValidatedTxtCtrl(General,Flip,'k-Max',nDig=(10,1),min=10.) 1171 1984 line2Sizer.Add(kMax,0,WACV) 1172 1985 flipSizer.Add(line2Sizer,0,WACV) … … 1190 2003 MCSAdata['Data source'] = refList.GetValue() 1191 2004 1192 def OnDmin(event):1193 event.Skip()1194 try:1195 val = float(dmin.GetValue())1196 if 1.0 <= val < 5.0:1197 MCSAdata['dmin'] = val1198 except ValueError:1199 pass1200 dmin.SetValue("%.3f"%(MCSAdata['dmin'])) #reset in case of error1201 MCSAdata['newDmin'] = True1202 1203 2005 def OnCycles(event): 1204 2006 MCSAdata['Cycles'] = int(cycles.GetValue()) … … 1206 2008 def OnAlist(event): 1207 2009 MCSAdata['Algorithm'] = Alist.GetValue() 2010 OnShowTsched() 1208 2011 wx.CallAfter(UpdateGeneral,General.GetScrollPos(wx.VERTICAL)) 1209 1210 def OnSlope(event):1211 event.Skip()1212 try:1213 val = float(slope.GetValue())1214 if .25 <= val < 1.0:1215 MCSAdata['log slope'] = val1216 except ValueError:1217 pass1218 slope.SetValue("%.3f"%(MCSAdata['log slope'])) #reset in case of error1219 1220 def OnAjump(event):1221 event.Skip()1222 Obj = event.GetEventObject()1223 name,ind = Indx[Obj.GetId()]1224 try:1225 val = float(Obj.GetValue())1226 if .0 <= val <= 1.0:1227 MCSAdata[name][ind] = val1228 except ValueError:1229 pass1230 Obj.SetValue("%.3f"%(MCSAdata[name][ind]))1231 2012 1232 2013 def OnRanStart(event): … … 1236 2017 # MCSAdata['autoRan'] = autoRan.GetValue() 1237 2018 1238 def OnRanRange(event):1239 event.Skip()1240 try:1241 val = float(ranRange.GetValue())/1001242 if 0.01 <= val <= 0.99:1243 MCSAdata['ranRange'] = val1244 except ValueError:1245 pass1246 ranRange.SetValue('%.1f'%(MCSAdata['ranRange']*100.))1247 1248 2019 def OnAnneal(event): 1249 2020 event.Skip() … … 1266 2037 MCSAdata['Annealing'][ind] = None 1267 2038 Obj.SetValue(str(MCSAdata['Annealing'][ind])) 2039 2040 def ShowTsched(invalid,value,tc): 2041 OnShowTsched() 2042 2043 def OnShowTsched(): 2044 if MCSAdata['Algorithm'] in ['fast','log']: 2045 Y = G2mth.makeTsched(MCSAdata) 2046 XY = [np.arange(len(Y)),np.log10(Y)] 2047 G2plt.PlotXY(G2frame,[XY,],labelX='T-step',labelY='log(T)',newPlot=True,lines=True,Title='Annealing schedule') 1268 2048 2049 # OnShowTsched() 1269 2050 refList = [] 1270 2051 if len(data['Pawley ref']): … … 1281 2062 lineSizer.Add(refList,0,WACV) 1282 2063 lineSizer.Add(wx.StaticText(General,label=' d-min: '),0,WACV) 1283 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 1284 dmin = wx.TextCtrl(General,-1,value='%.3f'%(MCSAdata['dmin']),style=wx.TE_PROCESS_ENTER) 1285 dmin.Bind(wx.EVT_TEXT_ENTER,OnDmin) 1286 dmin.Bind(wx.EVT_KILL_FOCUS,OnDmin) 2064 dmin = G2G.ValidatedTxtCtrl(General,MCSAdata,'dmin',nDig=(10,3),min=1.,max=5.) 1287 2065 lineSizer.Add(dmin,0,WACV) 1288 2066 mcsaSizer.Add(lineSizer) … … 1290 2068 line2Sizer = wx.BoxSizer(wx.HORIZONTAL) 1291 2069 line2Sizer.Add(wx.StaticText(General,label=' MC/SA runs: '),0,WACV) 1292 Cchoice = [ '1','2','4','8','16','32','64','128','256']2070 Cchoice = [str(2**i) for i in range(13)] 1293 2071 cycles = wx.ComboBox(General,-1,value=str(MCSAdata.get('Cycles',1)),choices=Cchoice, 1294 2072 style=wx.CB_READONLY|wx.CB_DROPDOWN) … … 1300 2078 ranStart.SetValue(MCSAdata.get('ranStart',False)) 1301 2079 line2Sizer.Add(ranStart,0,WACV) 1302 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 1303 ranRange = wx.TextCtrl(General,-1,value='%.1f'%(MCSAdata.get('ranRange',0.10)*100),style=wx.TE_PROCESS_ENTER) 1304 ranRange.Bind(wx.EVT_TEXT_ENTER,OnRanRange) 1305 ranRange.Bind(wx.EVT_KILL_FOCUS,OnRanRange) 2080 MCSAdata['ranRange'] = MCSAdata.get('ranRange',10.) #patch for old gpx files 2081 ranRange = G2G.ValidatedTxtCtrl(General,MCSAdata,'ranRange',nDig=(10,1),min=1.,max=99.) 1306 2082 line2Sizer.Add(ranRange,0,WACV) 1307 2083 line2Sizer.Add(wx.StaticText(General,label='% of ranges. '),0,WACV) 1308 # autoRan = wx.CheckBox(General,-1,label=' Do auto range reduction? ')1309 # autoRan.Bind(wx.EVT_CHECKBOX, OnAutoRan)1310 # autoRan.SetValue(MCSAdata.get('autoRan',False))1311 # line2Sizer.Add(autoRan,0,WACV)1312 2084 mcsaSizer.Add(line2Sizer) 1313 2085 mcsaSizer.Add((5,5),) 1314 2086 line3Sizer = wx.BoxSizer(wx.HORIZONTAL) 1315 Achoice = ['log','fast'] #these work 1316 # Achoice = ['log','fast','cauchy','boltzmann'] 2087 Achoice = ['log','fast','Basin Hopping'] #these work not 'boltzmann','cauchy', 1317 2088 line3Sizer.Add(wx.StaticText(General,label=' MC/SA schedule: '),0,WACV) 1318 2089 Alist = wx.ComboBox(General,-1,value=MCSAdata['Algorithm'],choices=Achoice, … … 1320 2091 Alist.Bind(wx.EVT_COMBOBOX,OnAlist) 1321 2092 line3Sizer.Add(Alist,0,WACV) 1322 if MCSAdata['Algorithm'] in ['fast','boltzmann','cauchy']: 1323 Names = [' A-jump: ',' B-jump: '] 1324 parms = 'Jump coeff' 1325 if MCSAdata['Algorithm'] in ['boltzmann','cauchy']: 1326 Names = [' A-jump: '] 1327 elif 'fast' in MCSAdata['Algorithm']: 1328 Names = [' quench: ',' m-factor: ',' n-factor: '] 1329 parms = 'fast parms' 2093 if MCSAdata['Algorithm'] in ['fast',]: 2094 Names = [' quench: ',' c-factor: '] 2095 parms = 'fast parms' 1330 2096 for i,name in enumerate(Names): 1331 2097 line3Sizer.Add(wx.StaticText(General,label=name),0,WACV) 1332 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 1333 Ajump = wx.TextCtrl(General,-1,value='%.3f'%(MCSAdata[parms][i]),style=wx.TE_PROCESS_ENTER) 1334 Ajump.Bind(wx.EVT_TEXT_ENTER,OnAjump) 1335 Ajump.Bind(wx.EVT_KILL_FOCUS,OnAjump) 1336 Indx[Ajump.GetId()] = [parms,i] 2098 Ajump = G2G.ValidatedTxtCtrl(General,MCSAdata[parms],i,nDig=(10,2),min=0.1,max=1.,OnLeave=ShowTsched) 1337 2099 line3Sizer.Add(Ajump,0,WACV) 1338 2100 elif 'log' in MCSAdata['Algorithm']: 1339 2101 line3Sizer.Add(wx.StaticText(General,label=' slope: '),0,WACV) 1340 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 1341 slope = wx.TextCtrl(General,-1,value='%.3f'%(MCSAdata['log slope']),style=wx.TE_PROCESS_ENTER) 1342 slope.Bind(wx.EVT_TEXT_ENTER,OnSlope) 1343 slope.Bind(wx.EVT_KILL_FOCUS,OnSlope) 2102 slope = G2G.ValidatedTxtCtrl(General,MCSAdata,'log slope',nDig=(10,3),min=0.25,max=1.0,OnLeave=ShowTsched) 1344 2103 line3Sizer.Add(slope,0,WACV) 2104 elif 'Basin Hopping' in MCSAdata['Algorithm']: 2105 pass #TODO basinhopping controls here? 1345 2106 mcsaSizer.Add(line3Sizer) 1346 2107 mcsaSizer.Add((5,5),) 1347 2108 line3Sizer = wx.BoxSizer(wx.HORIZONTAL) 1348 2109 line3Sizer.Add(wx.StaticText(General,label=' Annealing schedule: '),0,WACV) 1349 names = [' Start temp: ',' Final temp: ',' No. trials: '] 1350 fmts = ['%.1f','%.5f','%d'] 1351 for i,[name,fmt] in enumerate(zip(names,fmts)): 1352 if MCSAdata['Annealing'][i]: 1353 text = fmt%(MCSAdata['Annealing'][i]) 1354 else: 1355 text = 'None' 1356 line3Sizer.Add(wx.StaticText(General,label=name),0,WACV) 1357 anneal = wx.TextCtrl(General,-1,value=text,style=wx.TE_PROCESS_ENTER) 1358 anneal.Bind(wx.EVT_TEXT_ENTER,OnAnneal) 1359 anneal.Bind(wx.EVT_KILL_FOCUS,OnAnneal) 1360 Indx[anneal.GetId()] = [i,fmt] 1361 line3Sizer.Add(anneal,0,WACV) 2110 if 'Basin Hopping' in MCSAdata['Algorithm']: 2111 line3Sizer.Add(wx.StaticText(General,label=' Test temp: '),0,WACV) 2112 line3Sizer.Add(G2G.ValidatedTxtCtrl(General,MCSAdata['Annealing'],0,nDig=(10,5)),0,WACV) 2113 else: 2114 line3Sizer.Add(wx.StaticText(General,label=' Start temp: '),0,WACV) 2115 line3Sizer.Add(G2G.ValidatedTxtCtrl(General,MCSAdata['Annealing'],0,nDig=(10,5),OnLeave=ShowTsched),0,WACV) 2116 line3Sizer.Add(wx.StaticText(General,label=' Final temp: '),0,WACV) 2117 line3Sizer.Add(G2G.ValidatedTxtCtrl(General,MCSAdata['Annealing'],1,nDig=(10,5),OnLeave=ShowTsched),0,WACV) 2118 line3Sizer.Add(wx.StaticText(General,label=' No. trials: '),0,WACV) 2119 line3Sizer.Add(G2G.ValidatedTxtCtrl(General,MCSAdata['Annealing'],2),0,WACV) 1362 2120 mcsaSizer.Add(line3Sizer) 1363 2121 return mcsaSizer … … 1390 2148 1391 2149 if generalData['Modulated']: 1392 G2frame.data Frame.GeneralCalc.Enable(G2gd.wxID_SINGLEMCSA,False)1393 G2frame.data Frame.GeneralCalc.Enable(G2gd.wxID_MULTIMCSA,False)1394 G2frame.data Frame.GeneralCalc.Enable(G2gd.wxID_4DCHARGEFLIP,True)2150 G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_SINGLEMCSA,False) 2151 G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_MULTIMCSA,False) 2152 G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_4DCHARGEFLIP,True) 1395 2153 mainSizer.Add(ModulatedSizer(generalData['Type'])) 1396 2154 G2G.HorizontalLine(mainSizer,General) 1397 2155 else: 1398 G2frame.data Frame.GeneralCalc.Enable(G2gd.wxID_SINGLEMCSA,True)1399 G2frame.data Frame.GeneralCalc.Enable(G2gd.wxID_MULTIMCSA,True)1400 G2frame.data Frame.GeneralCalc.Enable(G2gd.wxID_4DCHARGEFLIP,False)2156 G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_SINGLEMCSA,True) 2157 G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_MULTIMCSA,True) 2158 G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_4DCHARGEFLIP,False) 1401 2159 1402 2160 mainSizer.Add(PawleySizer()) … … 1410 2168 G2G.HorizontalLine(mainSizer,General) 1411 2169 mainSizer.Add(MCSASizer()) 1412 G2frame. dataFrame.SetStatusText('')1413 SetPhaseWindow(G 2frame.dataFrame,General,mainSizer,Scroll=Scroll)2170 G2frame.GetStatusBar().SetStatusText('',1) 2171 SetPhaseWindow(General,mainSizer,Scroll=Scroll) 1414 2172 1415 2173 def OnTransform(event): 1416 dlg = G2gd.TransformDialog(G2frame,data)2174 dlg = TransformDialog(G2frame,data) 1417 2175 try: 1418 2176 if dlg.ShowModal() == wx.ID_OK: … … 1442 2200 Atoms = newPhase['Atoms'] 1443 2201 if ifMag: 1444 dlg = G2gd.UseMagAtomDialog(G2frame,Atoms,atCodes)2202 dlg = UseMagAtomDialog(G2frame,Atoms,atCodes) 1445 2203 try: 1446 2204 if dlg.ShowModal() == wx.ID_OK: … … 1461 2219 UseList[hist]['HStrain'] = [NDij*[0.0,],NDij*[False,]] 1462 2220 newPhase['General']['Map'] = mapDefault.copy() 1463 sub = G2frame. PatternTree.AppendItem(parent=1464 G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Phases'),text=phaseName)1465 G2frame. PatternTree.SetItemPyData(sub,newPhase)2221 sub = G2frame.GPXtree.AppendItem(parent= 2222 G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Phases'),text=phaseName) 2223 G2frame.GPXtree.SetItemPyData(sub,newPhase) 1466 2224 newPhase['Drawing'] = [] 1467 2225 … … 1469 2227 G2frame.GetUsedHistogramsAndPhasesfromTree() 1470 2228 G2cnstG.MagConstraints(G2frame,data,newPhase,Trans,Vec,atCodes) #data is old phase 1471 G2frame. PatternTree.SelectItem(sub)2229 G2frame.GPXtree.SelectItem(sub) 1472 2230 1473 2231 ################################################################################ … … 1710 2468 if not (event.AltDown() or (event.ShiftDown() and event.ControlDown())): 1711 2469 Atoms.frm = -1 1712 G2frame. dataFrame.SetStatusText('')2470 G2frame.GetStatusBar().SetStatusText('',1) 1713 2471 if r < 0 and c < 0: 1714 2472 if Atoms.IsSelection(): … … 1739 2497 Atoms.SelectRow(r,True) 1740 2498 n = colLabels.index('Name') 1741 G2frame. dataFrame.SetStatusText('Atom '+atomData[r][n]+' is to be moved')2499 G2frame.GetStatusBar().SetStatusText('Atom '+atomData[r][n]+' is to be moved',1) 1742 2500 else: #move it 1743 2501 item = atomData.pop(Atoms.frm) 1744 2502 atomData.insert(r,item) 1745 2503 Atoms.frm = -1 1746 G2frame.dataFrame.SetStatusText('') 2504 G2frame.GetStatusBar().SetStatusText('',1) 2505 data['Drawing']['Atoms'] = [] #clear & rebuild Draw atoms table 2506 UpdateDrawAtoms() 1747 2507 wx.CallAfter(Paint) 1748 2508 else: … … 1848 2608 Atoms.SetCellStyle(row,c,VERY_LIGHT_GREY,True) 1849 2609 Atoms.AutoSizeColumns(False) 1850 SetPhaseWindow( G2frame.dataFrame,Atoms,size=[700,300])2610 SetPhaseWindow(Atoms) 1851 2611 1852 2612 # FillAtomsGrid executable code starts here … … 1870 2630 rbAtmDict[id] += 'U' 1871 2631 # exclList will be 'x' or 'xu' if TLS used in RB 1872 Items = [G2 gd.wxID_ATOMSEDITINSERT,G2gd.wxID_ATOMSEDITDELETE,1873 G2 gd.wxID_ATOMSMODIFY,G2gd.wxID_ATOMSTRANSFORM,G2gd.wxID_MAKEMOLECULE,1874 G2 gd.wxID_ATOMVIEWINSERT,G2gd.wxID_ATOMMOVE,G2gd.wxID_ADDHATOM]2632 Items = [G2G.wxID_ATOMSEDITINSERT,G2G.wxID_ATOMSEDITDELETE, 2633 G2G.wxID_ATOMSMODIFY,G2G.wxID_ATOMSTRANSFORM,G2G.wxID_MAKEMOLECULE, 2634 G2G.wxID_ATOMVIEWINSERT,G2G.wxID_ATOMMOVE,G2G.wxID_ADDHATOM] 1875 2635 if atomData: 1876 2636 for item in Items: 1877 G2frame.data Frame.AtomsMenu.Enable(item,True)2637 G2frame.dataWindow.AtomsMenu.Enable(item,True) 1878 2638 else: 1879 2639 for item in Items: 1880 G2frame.data Frame.AtomsMenu.Enable(item,False)1881 Items = [G2 gd.wxID_ATOMVIEWINSERT, G2gd.wxID_ATOMSVIEWADD,G2gd.wxID_ATOMMOVE]2640 G2frame.dataWindow.AtomsMenu.Enable(item,False) 2641 Items = [G2G.wxID_ATOMVIEWINSERT, G2G.wxID_ATOMSVIEWADD,G2G.wxID_ATOMMOVE] 1882 2642 if 'showABC' in data['Drawing']: 1883 2643 for item in Items: 1884 G2frame.data Frame.AtomsMenu.Enable(item,True)2644 G2frame.dataWindow.AtomsMenu.Enable(item,True) 1885 2645 else: 1886 2646 for item in Items: 1887 G2frame.data Frame.AtomsMenu.Enable(item,False)2647 G2frame.dataWindow.AtomsMenu.Enable(item,False) 1888 2648 parmChoice = ': ,X,XU,U,F,FX,FXU,FU' 1889 2649 if generalData['Type'] == 'magnetic': … … 1906 2666 Types = Types[:7]+3*[wg.GRID_VALUE_FLOAT+':10,4',]+Types[7:] 1907 2667 SGData = data['General']['SGData'] 1908 G2frame. dataFrame.SetStatusText('')2668 G2frame.GetStatusBar().SetStatusText('',1) 1909 2669 if SGData['SGPolax']: 1910 G2frame. dataFrame.SetStatusText('Warning: The location of the origin is arbitrary in '+SGData['SGPolax'])2670 G2frame.GetStatusBar().SetStatusText('Warning: The location of the origin is arbitrary in '+SGData['SGPolax'],1) 1911 2671 Atoms.Bind(wg.EVT_GRID_CELL_CHANGE, ChangeAtomCell) 1912 2672 Atoms.Bind(wg.EVT_GRID_CELL_LEFT_DCLICK, AtomTypeSelect) … … 2001 2761 if 'DisAglCtls' in generalData: 2002 2762 DisAglCtls = generalData['DisAglCtls'] 2763 dlg = G2G.DisAglDialog(G2frame,DisAglCtls,generalData,Reset=False) 2764 if dlg.ShowModal() == wx.ID_OK: 2765 DisAglCtls = dlg.GetData() 2003 2766 if 'H' not in DisAglCtls['AtomTypes']: 2004 2767 DisAglCtls['AtomTypes'].append('H') 2005 2768 DisAglCtls['AngleRadii'].append(0.5) 2006 2769 DisAglCtls['BondRadii'].append(0.5) 2007 dlg = G2gd.DisAglDialog(G2frame,DisAglCtls,generalData,Reset=False)2008 if dlg.ShowModal() == wx.ID_OK:2009 DisAglCtls = dlg.GetData()2010 2770 else: 2011 2771 dlg.Destroy() … … 2057 2817 HydIds = {} 2058 2818 mapError = False 2059 dlg = G2gd.AddHatomDialog(G2frame,Neigh,data)2819 dlg = AddHatomDialog(G2frame,Neigh,data) 2060 2820 if dlg.ShowModal() == wx.ID_OK: 2061 2821 Nat = len(atomData) … … 2080 2840 SetupGeneral() 2081 2841 data['General']['HydIds'].update(HydIds) 2082 G2frame.data Frame.AtomEdit.Enable(G2gd.wxID_UPDATEHATOM,True)2842 G2frame.dataWindow.AtomEdit.Enable(G2G.wxID_UPDATEHATOM,True) 2083 2843 data['Drawing']['Atoms'] = [] 2084 2844 UpdateDrawAtoms() … … 2088 2848 else: 2089 2849 wx.MessageBox('No candidates found',caption='Add H atom Error',style=wx.ICON_EXCLAMATION) 2090 2850 2091 2851 def OnHydAtomUpdate(event): 2092 2852 generalData = data['General'] … … 2111 2871 del HydIds[HId] 2112 2872 if not len(HydIds): 2113 G2frame.data Frame.AtomEdit.Enable(G2gd.wxID_UPDATEHATOM,False)2873 G2frame.dataWindow.AtomEdit.Enable(G2G.wxID_UPDATEHATOM,False) 2114 2874 data['Drawing']['Atoms'] = [] 2115 2875 UpdateDrawAtoms() … … 2219 2979 atom = atomData[ind] 2220 2980 if atom[ci+8] in rbAtmDict: 2221 G2frame. dataFrame.SetStatusText('**** ERROR - atom is in a rigid body and can not be deleted ****')2981 G2frame.GetStatusBar().SetStatusText('**** ERROR - atom is in a rigid body and can not be deleted ****',1) 2222 2982 else: 2223 2983 if atom[ci+8] in HydIds: #remove Hs from Hatom update dict … … 2234 2994 SetupGeneral() 2235 2995 if not len(HydIds): 2236 G2frame.data Frame.AtomEdit.Enable(G2gd.wxID_UPDATEHATOM,False)2996 G2frame.dataWindow.AtomEdit.Enable(G2G.wxID_UPDATEHATOM,False) 2237 2997 event.StopPropagation() 2238 2998 … … 2395 3155 atomData = data['Atoms'] 2396 3156 SGData = generalData['SGData'] 2397 dlg = G2gd.SymOpDialog(G2frame,SGData,True,True)3157 dlg = SymOpDialog(G2frame,SGData,True,True) 2398 3158 New = False 2399 3159 try: … … 2500 3260 if 'DisAglCtls' in generalData: 2501 3261 DisAglCtls = generalData['DisAglCtls'] 2502 dlg = G2 gd.DisAglDialog(G2frame,DisAglCtls,generalData)3262 dlg = G2G.DisAglDialog(G2frame,DisAglCtls,generalData) 2503 3263 if dlg.ShowModal() == wx.ID_OK: 2504 3264 DisAglCtls = dlg.GetData() … … 2528 3288 msg = 'Density of phase {:s} = {:.3f} g/cc'.format(data['General']['Name'],density) 2529 3289 print(msg) 2530 G2G.G2MessageBox(G2frame .dataFrame,msg,'Density')3290 G2G.G2MessageBox(G2frame,msg,'Density') 2531 3291 2532 3292 def OnValidProtein(event): 2533 G2mth.validProtein(data) 3293 resNames,Probs = G2mth.validProtein(data) 3294 G2plt.PlotAAProb(G2frame,resNames,Probs,Title='Error score for %s'%(data['General']['Name']), 3295 thresh=[17.190823041860433,11.526684477428809]) 2534 3296 2535 3297 def OnSetAll(event): … … 2556 3318 if 'DisAglCtls' in generalData: 2557 3319 DisAglCtls = generalData['DisAglCtls'] 2558 dlg = G2 gd.DisAglDialog(G2frame,DisAglCtls,generalData)3320 dlg = G2G.DisAglDialog(G2frame,DisAglCtls,generalData) 2559 3321 if dlg.ShowModal() == wx.ID_OK: 2560 3322 DisAglCtls = dlg.GetData() … … 2579 3341 if 'pId' in data: 2580 3342 DisAglData['pId'] = data['pId'] 2581 DisAglData['covData'] = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.root, 'Covariance'))3343 DisAglData['covData'] = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,G2frame.root, 'Covariance')) 2582 3344 try: 2583 3345 if fp: … … 2634 3396 Histograms,Phases = G2frame.GetUsedHistogramsAndPhasesfromTree() # init for constraint 2635 3397 # make a lookup table for constraints 2636 sub = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Constraints')2637 Constraints = G2frame. PatternTree.GetItemPyData(sub)3398 sub = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Constraints') 3399 Constraints = G2frame.GPXtree.GetItemPyData(sub) 2638 3400 constDict = {} 2639 3401 for item in Constraints: … … 2770 3532 generalData = data['General'] 2771 3533 cx,ct,cs,cia = generalData['AtomPtrs'] 2772 reqrdr = G2frame.data Frame.ReImportMenuId.get(event.GetId())3534 reqrdr = G2frame.dataWindow.ReImportMenuId.get(event.GetId()) 2773 3535 rdlist = G2frame.OnImportGeneric(reqrdr, 2774 3536 G2frame.ImportPhaseReaderlist,'phase') … … 2857 3619 wx.CallAfter(UpdateLayerData) 2858 3620 2859 def OnToler(event): #used when Laue = unknown2860 event.Skip()2861 try:2862 val = float(toler.GetValue())2863 except ValueError:2864 val = Layers['Toler']2865 Layers['Toler'] = val2866 toler.SetValue('%.3f'%(Layers['Toler']))2867 2868 3621 def OnSadpPlot(event): 2869 3622 sadpPlot.SetValue(False) … … 2946 3699 for txt,fmt,ifEdit,Id in useGUI[2]: 2947 3700 cellSizer.Add(wx.StaticText(layerData,label=txt),0,WACV) 2948 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff)2949 3701 cellVal = wx.TextCtrl(layerData,value=(fmt%(cell[Id+1])), 2950 3702 style=wx.TE_PROCESS_ENTER) … … 2959 3711 def WidthSizer(): 2960 3712 2961 def OnWidthChange(event):2962 event.Skip()2963 Obj = event.GetEventObject()2964 id = Indx[Obj]2965 try:2966 Layers['Width'][0][id] = max(0.005,min(1.0,float(Obj.GetValue())))2967 except ValueError:2968 pass2969 Obj.SetValue('%.3f'%(Layers['Width'][0][id]))2970 2971 3713 def OnRefWidth(event): 2972 3714 id = Indx[event.GetEventObject()] … … 2974 3716 2975 3717 Labels = ['a','b'] 2976 widths = Layers['Width'][0]2977 3718 flags = Layers['Width'][1] 2978 3719 widthSizer = wx.BoxSizer(wx.HORIZONTAL) 2979 3720 for i in range(2): 2980 3721 widthSizer.Add(wx.StaticText(layerData,label=u' layer width(%s) (<= 1\xb5m): '%(Labels[i])),0,WACV) 2981 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 2982 widthVal = wx.TextCtrl(layerData,value='%.3f'%(widths[i]),style=wx.TE_PROCESS_ENTER) 2983 widthVal.Bind(wx.EVT_TEXT_ENTER,OnWidthChange) 2984 widthVal.Bind(wx.EVT_KILL_FOCUS,OnWidthChange) 2985 Indx[widthVal] = i 3722 widthVal = G2G.ValidatedTxtCtrl(layerData,Layers['Width'][0],i,nDig=(10,3),min=0.005,max=1.0) 2986 3723 widthSizer.Add(widthVal,0,WACV) 2987 3724 widthRef = wx.CheckBox(layerData,label='Refine?') … … 3134 3871 atomGrid = G2G.GSGrid(layerData) 3135 3872 atomGrid.SetTable(atomTable,True) 3136 atomGrid.SetScrollRate(0,0) #get rid of automatic scroll bars3873 # atomGrid.SetScrollRate(0,0) #get rid of automatic scroll bars 3137 3874 for c in range(2,5): 3138 3875 attr = wx.grid.GridCellAttr() … … 3220 3957 transGrid = G2G.GSGrid(layerData) 3221 3958 transGrid.SetTable(transTable,True) 3222 transGrid.SetScrollRate(0,0) #get rid of automatic scroll bars3959 # transGrid.SetScrollRate(0,0) #get rid of automatic scroll bars 3223 3960 Indx[transGrid.GetId()] = Yi 3224 3961 for c in range(0,4): … … 3365 4102 if Layers['Stacking'][0] == 'recursive': 3366 4103 topLine.Add(wx.StaticText(layerData,label=' number of layers (<1022 or "infinite"): '),0,WACV) 3367 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff)3368 4104 numLayers = wx.TextCtrl(layerData,value=data['Layers']['Stacking'][1],style=wx.TE_PROCESS_ENTER) 3369 4105 numLayers.Bind(wx.EVT_TEXT_ENTER,OnNumLayers) … … 3405 4141 if len(Layers['Layers']): 3406 4142 layerNames = [layer['Name'] for layer in Layers['Layers']] 3407 G2frame. dataFrame.SetStatusText('')4143 G2frame.GetStatusBar().SetStatusText('',1) 3408 4144 layerData = G2frame.layerData 3409 4145 if layerData.GetSizer(): … … 3431 4167 if Layers['Laue'] == 'unknown': 3432 4168 laueSizer.Add(wx.StaticText(layerData,label=' Diffraction symmetry tolerance: '),0,WACV) 3433 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 3434 toler = wx.TextCtrl(layerData,value='%.3f'%(Layers['Toler']),style=wx.TE_PROCESS_ENTER) 3435 toler.Bind(wx.EVT_TEXT_ENTER,OnToler) 3436 toler.Bind(wx.EVT_KILL_FOCUS,OnToler) 4169 toler = G2G.ValidatedTxtCtrl(layerData,Layers,'Toler',nDig=(10,3)) 3437 4170 laueSizer.Add(toler,0,WACV) 3438 4171 topSizer.Add(laueSizer,0,WACV) … … 3464 4197 bottomSizer.Add(StackSizer()) 3465 4198 mainSizer.Add(bottomSizer) 3466 SetPhaseWindow(G2frame. dataFrame,G2frame.layerData,mainSizer,Scroll=Scroll)4199 SetPhaseWindow(G2frame.layerData,mainSizer,Scroll=Scroll) 3467 4200 3468 4201 def OnCopyPhase(event): … … 3512 4245 if debug: idebug = 1 3513 4246 ctrls = '' 3514 dlg = G2gd.DIFFaXcontrols(G2frame,ctrls)4247 dlg = DIFFaXcontrols(G2frame,ctrls) 3515 4248 if dlg.ShowModal() == wx.ID_OK: 3516 4249 simCodes = dlg.GetSelection() … … 3533 4266 return 3534 4267 dlg.Destroy() 3535 G2frame.PatternId = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,HistName)3536 sample = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(4268 G2frame.PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,HistName) 4269 sample = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId( 3537 4270 G2frame,G2frame.PatternId, 'Sample Parameters')) 3538 4271 scale = sample['Scale'][0] 3539 background = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(4272 background = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId( 3540 4273 G2frame,G2frame.PatternId, 'Background')) 3541 limits = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(4274 limits = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId( 3542 4275 G2frame,G2frame.PatternId, 'Limits'))[1] 3543 inst = G2frame. PatternTree.GetItemPyData(3544 G2gd.Get PatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))[0]4276 inst = G2frame.GPXtree.GetItemPyData( 4277 G2gd.GetGPXtreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))[0] 3545 4278 if 'T' in inst['Type'][0]: 3546 4279 wx.MessageBox("Can't simulate neutron TOF patterns yet",caption='Data error',style=wx.ICON_EXCLAMATION) 3547 4280 return 3548 profile = G2frame. PatternTree.GetItemPyData(G2frame.PatternId)[1]4281 profile = G2frame.GPXtree.GetItemPyData(G2frame.PatternId)[1] 3549 4282 G2pwd.CalcStackingPWDR(data['Layers'],scale,background,limits,inst,profile,debug) 3550 4283 if debug: … … 3604 4337 data['Layers']['seqCodes'] = [] 3605 4338 Parms = G2pwd.GetStackParms(data['Layers']) 3606 dlg = G2gd.DIFFaXcontrols(G2frame,ctrls,Parms)4339 dlg = DIFFaXcontrols(G2frame,ctrls,Parms) 3607 4340 if dlg.ShowModal() == wx.ID_OK: 3608 4341 simCodes = dlg.GetSelection() … … 3623 4356 return 3624 4357 dlg.Destroy() 3625 G2frame.PatternId = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,HistName)3626 sample = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(4358 G2frame.PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,HistName) 4359 sample = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId( 3627 4360 G2frame,G2frame.PatternId, 'Sample Parameters')) 3628 4361 scale = sample['Scale'][0] 3629 background = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(4362 background = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId( 3630 4363 G2frame,G2frame.PatternId, 'Background')) 3631 limits = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(4364 limits = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId( 3632 4365 G2frame,G2frame.PatternId, 'Limits'))[1] 3633 inst = G2frame. PatternTree.GetItemPyData(3634 G2gd.Get PatternTreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))[0]4366 inst = G2frame.GPXtree.GetItemPyData( 4367 G2gd.GetGPXtreeItemId(G2frame,G2frame.PatternId, 'Instrument Parameters'))[0] 3635 4368 if 'T' in inst['Type'][0]: 3636 4369 wx.MessageBox("Can't simulate neutron TOF patterns yet",caption='Data error',style=wx.ICON_EXCLAMATION) 3637 4370 return 3638 profile = np.copy(G2frame. PatternTree.GetItemPyData(G2frame.PatternId)[1])4371 profile = np.copy(G2frame.GPXtree.GetItemPyData(G2frame.PatternId)[1]) 3639 4372 resultXY2 = [] 3640 4373 resultXY = [np.vstack((profile[0],profile[1])),] #observed data … … 3708 4441 Indx = {} 3709 4442 waveData = G2frame.waveData 3710 G2frame. dataFrame.SetStatusText('')4443 G2frame.GetStatusBar().SetStatusText('',1) 3711 4444 generalData = data['General'] 3712 4445 SGData = generalData['SGData'] … … 3739 4472 mainSizer.Add(G2frame.bottomSizer) 3740 4473 mainSizer.Layout() 3741 G2frame.data Frame.Refresh()4474 G2frame.dataWindow.Refresh() 3742 4475 waveData.SetVirtualSize(mainSizer.GetMinSize()) 3743 4476 waveData.Scroll(0,Scroll) 3744 G2frame.data Frame.SendSizeEvent()4477 G2frame.dataWindow.SendSizeEvent() 3745 4478 3746 4479 def ShowAtomInfo(): … … 3751 4484 atom[-1]['SS1']['waveType'] = waveType.GetValue() 3752 4485 atom[-1]['SS1']['Spos'] = [] 3753 RepaintAtomInfo(G2frame.waveData.GetScrollPos(wx.VERTICAL))4486 wx.CallAfter(RepaintAtomInfo,G2frame.waveData.GetScrollPos(wx.VERTICAL)) 3754 4487 3755 4488 def OnShowWave(event): … … 3785 4518 nt = numVals[waveType] 3786 4519 atomData[iatm][-1]['SS1'][item].append([[0.0 for i in range(nt)],False]) 3787 RepaintAtomInfo(G2frame.waveData.GetScrollPos(wx.VERTICAL))4520 wx.CallAfter(RepaintAtomInfo,G2frame.waveData.GetScrollPos(wx.VERTICAL)) 3788 4521 3789 4522 def OnWaveVal(event): … … 3812 4545 iatm,item,iwave = Indx[Obj.GetId()] 3813 4546 del atomData[iatm][-1]['SS1'][item][iwave] 3814 RepaintAtomInfo(G2frame.waveData.GetScrollPos(wx.VERTICAL))4547 wx.CallAfter(RepaintAtomInfo,G2frame.waveData.GetScrollPos(wx.VERTICAL)) 3815 4548 3816 4549 waveSizer = wx.BoxSizer(wx.VERTICAL) … … 3853 4586 for ival,val in enumerate(wave[0]): 3854 4587 if np.any(CSI[Stype][0][ival]): 3855 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff)3856 4588 waveVal = wx.TextCtrl(waveData,value='%.5f'%(val),style=wx.TE_PROCESS_ENTER) 3857 4589 waveVal.Bind(wx.EVT_TEXT_ENTER,OnWaveVal) … … 3901 4633 G2frame.bottomSizer = ShowAtomInfo() 3902 4634 mainSizer.Add(G2frame.bottomSizer) 3903 SetPhaseWindow(G2frame. dataFrame,G2frame.waveData,mainSizer,Scroll=Scroll)4635 SetPhaseWindow(G2frame.waveData,mainSizer,Scroll=Scroll) 3904 4636 3905 4637 def OnWaveVary(event): … … 3988 4720 def OnRestraint(event): 3989 4721 indx = drawAtoms.GetSelectedRows() 3990 restData = G2frame. PatternTree.GetItemPyData(3991 G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Restraints'))4722 restData = G2frame.GPXtree.GetItemPyData( 4723 G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Restraints')) 3992 4724 drawingData = data['Drawing'] 3993 4725 generalData = data['General'] … … 4002 4734 atSymOp.append(atomData[item][cs-1]) 4003 4735 atIndx.append(atomData[item][ci]) 4004 if event.GetId() == G2 gd.wxID_DRAWRESTRBOND and len(indx) == 2:4736 if event.GetId() == G2G.wxID_DRAWRESTRBOND and len(indx) == 2: 4005 4737 try: 4006 4738 bondData = restData[PhaseName]['Bond'] … … 4010 4742 restData[PhaseName]['Bond'] = bondData 4011 4743 bondData['Bonds'].append([atIndx,atSymOp,1.54,0.01]) 4012 elif event.GetId() == G2 gd.wxID_DRAWRESTRANGLE and len(indx) == 3:4744 elif event.GetId() == G2G.wxID_DRAWRESTRANGLE and len(indx) == 3: 4013 4745 try: 4014 4746 angleData = restData[PhaseName]['Angle'] … … 4018 4750 restData[PhaseName]['Angle'] = angleData 4019 4751 angleData['Angles'].append([atIndx,atSymOp,109.5,1.0]) 4020 elif event.GetId() == G2 gd.wxID_DRAWRESTRPLANE and len(indx) > 3:4752 elif event.GetId() == G2G.wxID_DRAWRESTRPLANE and len(indx) > 3: 4021 4753 try: 4022 4754 planeData = restData[PhaseName]['Plane'] … … 4026 4758 restData[PhaseName]['Plane'] = planeData 4027 4759 planeData['Planes'].append([atIndx,atSymOp,0.0,0.01]) 4028 elif event.GetId() == G2 gd.wxID_DRAWRESTRCHIRAL and len(indx) == 4:4760 elif event.GetId() == G2G.wxID_DRAWRESTRCHIRAL and len(indx) == 4: 4029 4761 try: 4030 4762 chiralData = restData[PhaseName]['Chiral'] … … 4037 4769 print '**** ERROR wrong number of atoms selected for this restraint' 4038 4770 return 4039 G2frame. PatternTree.SetItemPyData(4040 G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Restraints'),restData)4771 G2frame.GPXtree.SetItemPyData( 4772 G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Restraints'),restData) 4041 4773 4042 4774 def OnDefineRB(event): 4043 4775 indx = drawAtoms.GetSelectedRows() 4044 4776 indx.sort() 4045 RBData = G2frame. PatternTree.GetItemPyData(4046 G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Rigid bodies'))4777 RBData = G2frame.GPXtree.GetItemPyData( 4778 G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Rigid bodies')) 4047 4779 drawingData = data['Drawing'] 4048 4780 generalData = data['General'] … … 4074 4806 'atNames':atNames,'rbRef':[0,1,2,False],'rbSeq':[],'SelSeq':[0,0],'useCount':0} 4075 4807 RBData['RBIds']['Residue'].append(rbId) 4076 G2frame. dataFrame.SetStatusText('New rigid body UNKRB added to set of Residue rigid bodies')4808 G2frame.GetStatusBar().SetStatusText('New rigid body UNKRB added to set of Residue rigid bodies',1) 4077 4809 4078 4810 ################################################################################ … … 4213 4945 4214 4946 # UpdateDrawAtoms executable code starts here 4215 G2frame. dataFrame.SetStatusText('')4947 G2frame.GetStatusBar().SetStatusText('',1) 4216 4948 generalData = data['General'] 4217 4949 SetupDrawingData() … … 4271 5003 if colLabels[c] not in ['Style','Label','Color']: 4272 5004 drawAtoms.SetColAttr(c,attr) 4273 SetPhaseWindow( G2frame.dataFrame,drawAtoms,size=[600,300])5005 SetPhaseWindow(drawAtoms) 4274 5006 4275 5007 FindBondsDraw(data) … … 4324 5056 if indx: 4325 5057 if len(indx) > 1: 4326 G2frame. dataFrame.SetStatusText('Select Custom Color, change color, Add to Custom Colors, then OK')5058 G2frame.GetStatusBar().SetStatusText('Select Custom Color, change color, Add to Custom Colors, then OK',1) 4327 5059 else: 4328 G2frame. dataFrame.SetStatusText('Change color, Add to Custom Colors, then OK')5060 G2frame.GetStatusBar().SetStatusText('Change color, Add to Custom Colors, then OK',1) 4329 5061 atomData = data['Drawing']['Atoms'] 4330 5062 cx,ct,cs,ci = data['Drawing']['atomPtrs'] … … 4353 5085 drawAtoms.ClearSelection() 4354 5086 dlg.Destroy() 4355 G2frame. dataFrame.SetStatusText('')5087 G2frame.GetStatusBar().SetStatusText('',1) 4356 5088 G2plt.PlotStructure(G2frame,data) 4357 5089 … … 4372 5104 if 'DisAglCtls' in generalData: 4373 5105 DisAglCtls = generalData['DisAglCtls'] 4374 dlg = G2 gd.DisAglDialog(G2frame,DisAglCtls,generalData,Angle=False)5106 dlg = G2G.DisAglDialog(G2frame,DisAglCtls,generalData,Angle=False) 4375 5107 if dlg.ShowModal() == wx.ID_OK: 4376 5108 DisAglCtls = dlg.GetData() … … 4411 5143 SGData = generalData['SGData'] 4412 5144 SpnFlp = SGData.get('SpnFlp',[]) 4413 dlg = G2gd.SymOpDialog(G2frame,SGData,False,True)5145 dlg = SymOpDialog(G2frame,SGData,False,True) 4414 5146 try: 4415 5147 if dlg.ShowModal() == wx.ID_OK: … … 4467 5199 indx = drawAtoms.GetSelectedRows() 4468 5200 indx.sort() 4469 dlg = G2gd.SphereEnclosure(G2frame,data['General'],data['Drawing'],indx)5201 dlg = SphereEnclosure(G2frame,data['General'],data['Drawing'],indx) 4470 5202 try: 4471 5203 if dlg.ShowModal() == wx.ID_OK: … … 4522 5254 SGData = generalData['SGData'] 4523 5255 SpnFlp = SGData.get('SpnFlp',[]) 4524 dlg = G2gd.SymOpDialog(G2frame,SGData,False,True)5256 dlg = SymOpDialog(G2frame,SGData,False,True) 4525 5257 try: 4526 5258 if dlg.ShowModal() == wx.ID_OK: … … 4779 5511 if 'pId' in data: 4780 5512 DATData['pId'] = data['pId'] 4781 DATData['covData'] = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.root, 'Covariance'))5513 DATData['covData'] = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,G2frame.root, 'Covariance')) 4782 5514 G2stMn.DisAglTor(DATData) 4783 5515 … … 4799 5531 ZclipTxt.SetLabel(' Z clipping: '+'%.2fA'%(drawingData['Zclip']*drawingData['cameraPos']/100.)) 4800 5532 G2plt.PlotStructure(G2frame,data) 4801 4802 def OnZstep(event):4803 event.Skip()4804 try:4805 step = float(Zstep.GetValue())4806 if not (0.01 <= step <= 1.0):4807 raise ValueError4808 except ValueError:4809 step = drawingData['Zstep']4810 drawingData['Zstep'] = step4811 Zstep.SetValue('%.2fA'%(drawingData['Zstep']))4812 5533 4813 5534 def OnMoveZ(event): … … 4862 5583 cameraPosTxt = wx.StaticText(drawOptions,-1, 4863 5584 ' Camera Distance: '+'%.2f'%(drawingData['cameraPos']),name='cameraPos') 4864 G2frame. dataDisplay.cameraPosTxt = cameraPosTxt5585 G2frame.phaseDisplay.cameraPosTxt = cameraPosTxt 4865 5586 slideSizer.Add(cameraPosTxt,0,WACV) 4866 5587 cameraPos = wx.Slider(drawOptions,style=wx.SL_HORIZONTAL,value=drawingData['cameraPos'],name='cameraSlider') 4867 5588 cameraPos.SetRange(10,500) 4868 5589 cameraPos.Bind(wx.EVT_SLIDER, OnCameraPos) 4869 G2frame. dataDisplay.cameraSlider = cameraPos5590 G2frame.phaseDisplay.cameraSlider = cameraPos 4870 5591 slideSizer.Add(cameraPos,1,wx.EXPAND|wx.RIGHT) 4871 5592 … … 4879 5600 ZstepSizer = wx.BoxSizer(wx.HORIZONTAL) 4880 5601 ZstepSizer.Add(wx.StaticText(drawOptions,-1,' Z step:'),0,WACV) 4881 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 4882 Zstep = wx.TextCtrl(drawOptions,value='%.2f'%(drawingData['Zstep']), 4883 style=wx.TE_PROCESS_ENTER) 4884 Zstep.Bind(wx.EVT_TEXT_ENTER,OnZstep) 4885 Zstep.Bind(wx.EVT_KILL_FOCUS,OnZstep) 5602 Zstep = G2G.ValidatedTxtCtrl(drawOptions,drawingData,'Zstep',nDig=(10,2),min=0.01,max=1.0) 4886 5603 ZstepSizer.Add(Zstep,0,WACV) 4887 5604 slideSizer.Add(ZstepSizer) … … 5011 5728 viewDir.Bind(wx.EVT_TEXT_ENTER,OnViewDir) 5012 5729 viewDir.Bind(wx.EVT_KILL_FOCUS,OnViewDir) 5013 G2frame. dataDisplay.viewDir = viewDir5730 G2frame.phaseDisplay.viewDir = viewDir 5014 5731 lineSizer.Add(viewDir,0,WACV) 5015 5732 showSizer.Add(lineSizer) … … 5025 5742 viewPoint = wx.TextCtrl(drawOptions,value='%.3f %.3f %.3f'%(VP[0],VP[1],VP[2]), 5026 5743 style=wx.TE_PROCESS_ENTER,size=wx.Size(140,20),name='viewPoint') 5027 G2frame. dataDisplay.viewPoint = viewPoint5744 G2frame.phaseDisplay.viewPoint = viewPoint 5028 5745 viewPoint.Bind(wx.EVT_TEXT_ENTER,OnViewPoint) 5029 5746 viewPoint.Bind(wx.EVT_KILL_FOCUS,OnViewPoint) … … 5054 5771 def RadSizer(): 5055 5772 5056 def OnSizeHatoms(event): 5057 event.Skip() 5058 try: 5059 value = max(0.1,min(1.2,float(sizeH.GetValue()))) 5060 except ValueError: 5061 value = 0.5 5062 drawingData['sizeH'] = value 5063 sizeH.SetValue("%.2f"%(value)) 5773 def OnSizeHatoms(invalid,value,tc): 5064 5774 G2plt.PlotStructure(G2frame,data) 5065 5775 5066 def OnRadFactor(event): 5067 event.Skip() 5068 try: 5069 value = max(0.1,min(1.2,float(radFactor.GetValue()))) 5070 except ValueError: 5071 value = 0.85 5072 drawingData['radiusFactor'] = value 5073 radFactor.SetValue("%.2f"%(value)) 5776 def OnRadFactor(invalid,value,tc): 5074 5777 FindBondsDraw(data) 5075 5778 G2plt.PlotStructure(G2frame,data) … … 5077 5780 radSizer = wx.BoxSizer(wx.HORIZONTAL) 5078 5781 radSizer.Add(wx.StaticText(drawOptions,-1,' Hydrogen radius, A: '),0,WACV) 5079 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 5080 sizeH = wx.TextCtrl(drawOptions,-1,value='%.2f'%(drawingData['sizeH']),size=wx.Size(60,20),style=wx.TE_PROCESS_ENTER) 5081 sizeH.Bind(wx.EVT_TEXT_ENTER,OnSizeHatoms) 5082 sizeH.Bind(wx.EVT_KILL_FOCUS,OnSizeHatoms) 5782 sizeH = G2G.ValidatedTxtCtrl(drawOptions,drawingData,'sizeH',nDig=(10,2),min=0.1,max=1.2,size=wx.Size(60,20),OnLeave=OnSizeHatoms) 5083 5783 radSizer.Add(sizeH,0,WACV) 5084 5784 5085 5785 radSizer.Add(wx.StaticText(drawOptions,-1,' Bond search factor: '),0,WACV) 5086 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 5087 radFactor = wx.TextCtrl(drawOptions,value='%.2f'%(drawingData['radiusFactor']),size=wx.Size(60,20),style=wx.TE_PROCESS_ENTER) 5088 radFactor.Bind(wx.EVT_TEXT_ENTER,OnRadFactor) 5089 radFactor.Bind(wx.EVT_KILL_FOCUS,OnRadFactor) 5786 radFactor = G2G.ValidatedTxtCtrl(drawOptions,drawingData,'radiusFactor',nDig=(10,2),min=0.1,max=1.2,size=wx.Size(60,20),OnLeave=OnRadFactor) 5090 5787 radSizer.Add(radFactor,0,WACV) 5091 5788 return radSizer … … 5114 5811 G2plt.PlotStructure(G2frame,data) 5115 5812 5116 def OnPhase(event): 5117 event.Skip() 5118 try: 5119 val = float(phase.GetValue()) 5120 except ValueError: 5121 val = drawingData['Plane'][3] 5122 drawingData['Plane'][3] = val 5123 phase.SetValue('%.2f'%(val)) 5813 def OnPhase(invalid,value,tc): 5124 5814 G2plt.PlotStructure(G2frame,data) 5125 5815 … … 5147 5837 planeSizer2 = wx.BoxSizer(wx.HORIZONTAL) 5148 5838 planeSizer2.Add(wx.StaticText(drawOptions,label=' Phase shift (deg): '),0,WACV) 5149 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 5150 phase = wx.TextCtrl(drawOptions,value='%.2f'%(drawingData['Plane'][3]), 5151 style=wx.TE_PROCESS_ENTER) 5152 phase.Bind(wx.EVT_TEXT_ENTER,OnPhase) 5153 phase.Bind(wx.EVT_KILL_FOCUS,OnPhase) 5839 phase = G2G.ValidatedTxtCtrl(drawOptions,drawingData['Plane'],3,nDig=(10,2),OnLeave=OnPhase) 5154 5840 planeSizer2.Add(phase,0,WACV) 5155 5841 planeSizer2.Add(wx.StaticText(drawOptions,-1,' Plane color: '),0,WACV) … … 5168 5854 drawingData = data['Drawing'] 5169 5855 5170 G2frame. dataFrame.SetStatusText('')5856 G2frame.GetStatusBar().SetStatusText('',1) 5171 5857 if drawOptions.GetSizer(): 5172 5858 drawOptions.GetSizer().Clear(True) … … 5182 5868 mainSizer.Add((5,5),0) 5183 5869 mainSizer.Add(PlaneSizer(),0,) 5184 SetPhaseWindow( G2frame.dataFrame,drawOptions,mainSizer)5870 SetPhaseWindow(drawOptions,mainSizer) 5185 5871 5186 5872 ################################################################################ … … 5236 5922 textureData[angIndx[Obj.GetId()]][0] = Obj.GetValue() 5237 5923 5238 def OnAngValue(event): 5239 event.Skip() 5240 Obj = event.GetEventObject() 5241 try: 5242 value = float(Obj.GetValue()) 5243 except ValueError: 5244 value = textureData[valIndx[Obj.GetId()]][1] 5245 Obj.SetValue('%8.2f'%(value)) 5246 textureData[valIndx[Obj.GetId()]][1] = value 5247 5248 def OnODFValue(event): 5249 event.Skip() 5250 Obj = event.GetEventObject() 5251 try: 5252 value = float(Obj.GetValue()) 5253 except ValueError: 5254 value = textureData['SH Coeff'][1][ODFIndx[Obj.GetId()]] 5255 Obj.SetValue('%8.3f'%(value)) 5256 textureData['SH Coeff'][1][ODFIndx[Obj.GetId()]] = value 5924 def OnODFValue(invalid,value,tc): 5257 5925 wx.CallAfter(G2plt.PlotTexture,G2frame,data) 5258 5926 … … 5407 6075 wx.CallLater(100,UpdateTexture) 5408 6076 5409 def OnshToler(event):5410 event.Skip()5411 try:5412 value = float(shToler.GetValue())5413 Penalty[1] = value5414 except ValueError:5415 pass5416 shToler.SetValue('%.2f'%(Penalty[1]))5417 5418 6077 A = G2lat.cell2A(generalData['Cell'][1:7]) 5419 6078 hkls = G2lat.GenPfHKLs(10,SGData,A) … … 5426 6085 shPenalty.Add(hklList,0,WACV) 5427 6086 shPenalty.Add(wx.StaticText(Texture,wx.ID_ANY,' Zero MRD tolerance: '),0,WACV) 5428 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 5429 shToler = wx.TextCtrl(Texture,wx.ID_ANY,'%.2f'%(Penalty[1]),style=wx.TE_PROCESS_ENTER) 5430 shToler.Bind(wx.EVT_TEXT_ENTER,OnshToler) 5431 shToler.Bind(wx.EVT_KILL_FOCUS,OnshToler) 6087 shToler = G2G.ValidatedTxtCtrl(Texture,Penalty,1,nDig=(10,2),min=0.001) 5432 6088 shPenalty.Add(shToler,0,WACV) 5433 6089 return shPenalty 5434 6090 5435 6091 # UpdateTexture executable starts here 5436 #Texture.DestroyChildren() # bad, deletes scrollbars on Mac! 5437 if Texture.GetSizer(): 5438 Texture.GetSizer().Clear(True) 5439 G2frame.dataFrame.SetStatusText('') 6092 if Texture.GetSizer(): Texture.GetSizer().Clear(True) 6093 G2frame.GetStatusBar().SetStatusText('',1) 5440 6094 generalData = data['General'] 5441 6095 SGData = generalData['SGData'] … … 5507 6161 PTSizer.Add(wx.StaticText(Texture,-1,' Inverse pole figure XYZ: '),0,WACV) 5508 6162 PX = textureData['PFxyz'] 5509 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff)5510 6163 pfVal = wx.TextCtrl(Texture,-1,'%3.1f %3.1f %3.1f'%(PX[0],PX[1],PX[2]),style=wx.TE_PROCESS_ENTER) 5511 6164 pfVal.Bind(wx.EVT_TEXT_ENTER,OnPFValue) … … 5530 6183 mainSizer.Add((0,5),0) 5531 6184 ODFSizer = wx.FlexGridSizer(0,8,2,2) 5532 ODFIndx = {}5533 6185 ODFkeys = textureData['SH Coeff'][1].keys() 5534 6186 ODFkeys.sort() 5535 6187 for item in ODFkeys: 5536 6188 ODFSizer.Add(wx.StaticText(Texture,-1,item),0,WACV) 5537 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 5538 ODFval = wx.TextCtrl(Texture,wx.ID_ANY,'%8.3f'%(textureData['SH Coeff'][1][item]),style=wx.TE_PROCESS_ENTER) 5539 ODFIndx[ODFval.GetId()] = item 5540 ODFval.Bind(wx.EVT_TEXT_ENTER,OnODFValue) 5541 ODFval.Bind(wx.EVT_KILL_FOCUS,OnODFValue) 6189 ODFval = G2G.ValidatedTxtCtrl(Texture,textureData['SH Coeff'][1],item,nDig=(8,3),OnLeave=OnODFValue) 5542 6190 ODFSizer.Add(ODFval,0,WACV) 5543 6191 mainSizer.Add(ODFSizer,0,WACV) … … 5548 6196 angSizer = wx.BoxSizer(wx.HORIZONTAL) 5549 6197 angIndx = {} 5550 valIndx = {}5551 6198 for item in ['Sample omega','Sample chi','Sample phi']: 5552 6199 angRef = wx.CheckBox(Texture,-1,label=item+': ') … … 5555 6202 angRef.Bind(wx.EVT_CHECKBOX, OnAngRef) 5556 6203 angSizer.Add(angRef,0,WACV) 5557 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 5558 angVal = wx.TextCtrl(Texture,wx.ID_ANY,'%8.2f'%(textureData[item][1]),style=wx.TE_PROCESS_ENTER) 5559 valIndx[angVal.GetId()] = item 5560 angVal.Bind(wx.EVT_TEXT_ENTER,OnAngValue) 5561 angVal.Bind(wx.EVT_KILL_FOCUS,OnAngValue) 6204 angVal = G2G.ValidatedTxtCtrl(Texture,textureData[item],1,nDig=(8,2)) 5562 6205 angSizer.Add(angVal,0,WACV|wx.LEFT,5) 5563 6206 mainSizer.Add(angSizer,0,WACV|wx.LEFT,5) 5564 6207 # mainSizer.Add(SHPenalty(textureData['Penalty']),0,WACV|wx.LEFT,5) for future 5565 SetPhaseWindow( G2frame.dataFrame,Texture,mainSizer)6208 SetPhaseWindow(Texture,mainSizer) 5566 6209 5567 6210 ################################################################################ … … 5572 6215 keyList = data['Histograms'].keys() 5573 6216 TextList = [] 5574 if not G2frame. PatternTree.GetCount():6217 if not G2frame.GPXtree.GetCount(): 5575 6218 return 5576 6219 5577 item, cookie = G2frame. PatternTree.GetFirstChild(G2frame.root)6220 item, cookie = G2frame.GPXtree.GetFirstChild(G2frame.root) 5578 6221 while item: 5579 name = G2frame. PatternTree.GetItemText(item)6222 name = G2frame.GPXtree.GetItemText(item) 5580 6223 if name not in keyList and 'HKLF' in name: 5581 6224 TextList.append(name) 5582 item, cookie = G2frame. PatternTree.GetNextChild(G2frame.root, cookie)6225 item, cookie = G2frame.GPXtree.GetNextChild(G2frame.root, cookie) 5583 6226 if not TextList: 5584 G2G.G2MessageBox(G2frame .dataFrame,'No reflections')6227 G2G.G2MessageBox(G2frame,'No reflections') 5585 6228 return 5586 6229 dlg = G2G.G2MultiChoiceDialog(G2frame, 'Select reflection sets to use', … … 5616 6259 for i in result: 5617 6260 histoName = TextList[i] 5618 Id = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,histoName)5619 refDict,reflData = G2frame. PatternTree.GetItemPyData(Id)6261 Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,histoName) 6262 refDict,reflData = G2frame.GPXtree.GetItemPyData(Id) 5620 6263 data['Histograms'][histoName] = {'Histogram':histoName,'Show':False,'Scale':[1.0,True], 5621 6264 'Babinet':{'BabA':[0.0,False],'BabU':[0.0,False]}, … … 5637 6280 5638 6281 def OnDataUse(event): 5639 hist = G2frame.hist6282 # hist = G2frame.hist 5640 6283 if data['Histograms']: 5641 dlg = G2G.G2MultiChoiceDialog(G2frame .dataFrame, 'Use histograms',5642 'Use which histograms?',G2frame.data Frame.HistsInPhase)6284 dlg = G2G.G2MultiChoiceDialog(G2frame, 'Use histograms', 6285 'Use which histograms?',G2frame.dataWindow.HistsInPhase) 5643 6286 try: 5644 6287 if dlg.ShowModal() == wx.ID_OK: 5645 6288 sel = dlg.GetSelections() 5646 for id,item in enumerate(G2frame.data Frame.HistsInPhase):6289 for id,item in enumerate(G2frame.dataWindow.HistsInPhase): 5647 6290 if id in sel: 5648 6291 data['Histograms'][item]['Use'] = True … … 5656 6299 # def UpdateHKLFdata(histoName): 5657 6300 # generalData = data['General'] 5658 # Id = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,histoName)5659 # refDict,reflData = G2frame. PatternTree.GetItemPyData(Id)6301 # Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,histoName) 6302 # refDict,reflData = G2frame.GPXtree.GetItemPyData(Id) 5660 6303 # SGData = generalData['SGData'] 5661 6304 # Cell = generalData['Cell'][1:7] … … 5675 6318 def UpdateHKLFdata(histoName): 5676 6319 generalData = data['General'] 5677 Id = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,histoName)5678 refDict,reflData = G2frame. PatternTree.GetItemPyData(Id)6320 Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,histoName) 6321 refDict,reflData = G2frame.GPXtree.GetItemPyData(Id) 5679 6322 SGData = generalData['SGData'] 5680 6323 Cell = generalData['Cell'][1:7] … … 5687 6330 def OnDataCopy(event): 5688 6331 hist = G2frame.hist 5689 keyList = G2frame.data Frame.HistsInPhase[:]6332 keyList = G2frame.dataWindow.HistsInPhase[:] 5690 6333 if hist in keyList: keyList.remove(hist) 5691 6334 if not keyList: 5692 G2G.G2MessageBox(G2frame .dataFrame,'No histograms to copy to')6335 G2G.G2MessageBox(G2frame,'No histograms to copy to') 5693 6336 return 5694 6337 sourceDict = data['Histograms'][hist] … … 5700 6343 for name in copyNames: 5701 6344 copyDict[name] = copy.deepcopy(sourceDict[name]) #force copy 5702 dlg = G2G.G2MultiChoiceDialog(G2frame.dataFrame, 5703 u'Copy phase/histogram parameters\nfrom '+hist[5:][:35], 6345 dlg = G2G.G2MultiChoiceDialog(G2frame,u'Copy phase/histogram parameters\nfrom '+hist[5:][:35], 5704 6346 'Copy phase/hist parameters', keyList) 5705 6347 try: … … 5743 6385 for bab in babNames: 5744 6386 copyDict[name][bab] = sourceDict[name][bab][1] 5745 keyList = G2frame.data Frame.HistsInPhase[:]6387 keyList = G2frame.dataWindow.HistsInPhase[:] 5746 6388 if hist in keyList: keyList.remove(hist) 5747 6389 if not keyList: 5748 G2G.G2MessageBox(G2frame .dataFrame,'No histograms to copy to')6390 G2G.G2MessageBox(G2frame,'No histograms to copy to') 5749 6391 return 5750 dlg = G2G.G2MultiChoiceDialog(G2frame.dataFrame, 5751 u'Copy phase/histogram flags\nfrom '+hist[5:][:35], 6392 dlg = G2G.G2MultiChoiceDialog(G2frame,u'Copy phase/histogram flags\nfrom '+hist[5:][:35], 5752 6393 'Copy phase/hist flags', keyList) 5753 6394 try: … … 5789 6430 hist = G2frame.hist 5790 6431 sourceDict = data['Histograms'][hist] 5791 keyList = G2frame.data Frame.HistsInPhase[:]6432 keyList = G2frame.dataWindow.HistsInPhase[:] 5792 6433 if hist in keyList: keyList.remove(hist) 5793 6434 if not keyList: 5794 G2G.G2MessageBox(G2frame .dataFrame,'No histograms to copy to')6435 G2G.G2MessageBox(G2frame,'No histograms to copy to') 5795 6436 return 5796 6437 copyDict = {} … … 5799 6440 else: #PWDR 5800 6441 copyNames = ['Scale','Pref.Ori.','Size','Mustrain','HStrain','Extinction','Babinet','LeBail'] 5801 dlg = G2G.G2MultiChoiceDialog(G2frame .dataFrame,'Select which parameters to copy',6442 dlg = G2G.G2MultiChoiceDialog(G2frame,'Select which parameters to copy', 5802 6443 'Select phase data parameters', copyNames) 5803 6444 selectedItems = [] … … 5811 6452 for parm in selectedItems: 5812 6453 copyDict[parm] = copy.deepcopy(sourceDict[parm]) 5813 dlg = G2G.G2MultiChoiceDialog(G2frame.dataFrame, 5814 u'Copy selected phase/histogram parameters\nfrom '+hist[5:][:35], 5815 'Copy selected phase/hist parameters', keyList) 6454 dlg = G2G.G2MultiChoiceDialog(G2frame,u'Copy selected phase/histogram parameters\nfrom '+hist[5:][:35], 6455 'Copy selected phase/hist parameters', keyList) 5816 6456 try: 5817 6457 if dlg.ShowModal() == wx.ID_OK: … … 5829 6469 keyList = data['Histograms'].keys() 5830 6470 TextList = [] 5831 if G2frame. PatternTree.GetCount():5832 item, cookie = G2frame. PatternTree.GetFirstChild(G2frame.root)6471 if G2frame.GPXtree.GetCount(): 6472 item, cookie = G2frame.GPXtree.GetFirstChild(G2frame.root) 5833 6473 while item: 5834 name = G2frame. PatternTree.GetItemText(item)6474 name = G2frame.GPXtree.GetItemText(item) 5835 6475 if name not in keyList and 'PWDR' in name: 5836 6476 TextList.append(name) 5837 item, cookie = G2frame. PatternTree.GetNextChild(G2frame.root, cookie)6477 item, cookie = G2frame.GPXtree.GetNextChild(G2frame.root, cookie) 5838 6478 if not TextList: 5839 G2G.G2MessageBox(G2frame .dataFrame,'No histograms')6479 G2G.G2MessageBox(G2frame,'No histograms') 5840 6480 return 5841 6481 dlg = G2G.G2MultiChoiceDialog(G2frame, 'Select powder histograms to use', 5842 6482 'Use data',TextList) 5843 6483 try: 5844 6484 if dlg.ShowModal() == wx.ID_OK: … … 5848 6488 newList = TextList[1:] 5849 6489 for histoName in newList: 5850 Id = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,histoName)6490 Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,histoName) 5851 6491 data['Histograms'][histoName] = {'Histogram':histoName,'Show':False,'LeBail':False,'newLeBail':True, 5852 6492 'Scale':[1.0,False],'Pref.Ori.':['MD',1.0,False,[0,0,1],0,{},['',],0.1], … … 5857 6497 'HStrain':[NDij*[0.0,],NDij*[False,]], 5858 6498 'Extinction':[0.0,False],'Babinet':{'BabA':[0.0,False],'BabU':[0.0,False]}} 5859 refList = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Reflection Lists'))6499 refList = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,Id,'Reflection Lists')) 5860 6500 refList[generalData['Name']] = {} 5861 6501 wx.CallAfter(G2ddG.UpdateDData,G2frame,DData,data) … … 5864 6504 5865 6505 def OnDataDelete(event): 5866 if G2frame.data Frame.HistsInPhase:6506 if G2frame.dataWindow.HistsInPhase: 5867 6507 DelList = [] 5868 dlg = G2G.G2MultiChoiceDialog(G2frame .dataFrame, 'Delete histogram',5869 'Which histogram to delete from this phase?',G2frame.data Frame.HistsInPhase)6508 dlg = G2G.G2MultiChoiceDialog(G2frame, 'Delete histogram', 6509 'Which histogram to delete from this phase?',G2frame.dataWindow.HistsInPhase) 5870 6510 try: 5871 6511 if dlg.ShowModal() == wx.ID_OK: 5872 DelList = [G2frame.data Frame.HistsInPhase[i] for i in dlg.GetSelections()]6512 DelList = [G2frame.dataWindow.HistsInPhase[i] for i in dlg.GetSelections()] 5873 6513 for i in DelList: 5874 6514 del data['Histograms'][i] … … 5908 6548 def ThermDataSizer(RBObj,rbType): 5909 6549 5910 def OnThermval(event): 5911 event.Skip() 5912 Obj = event.GetEventObject() 5913 item = Indx[Obj.GetId()] 5914 try: 5915 val = float(Obj.GetValue()) 5916 RBObj['ThermalMotion'][1][item] = val 5917 except ValueError: 5918 pass 5919 Obj.SetValue('%8.4f'%(RBObj['ThermalMotion'][1][item])) 6550 def OnThermval(invalid,value,tc): 5920 6551 Cart = G2mth.UpdateRBXYZ(Bmat,RBObj,RBData,rbType)[1] 5921 6552 Uout = G2mth.UpdateRBUIJ(Bmat,Cart,RBObj) … … 5945 6576 for i,name in enumerate(names): 5946 6577 thermSizer.Add(wx.StaticText(RigidBodies,-1,name+': '),0,WACV) 5947 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 5948 thermVal = wx.TextCtrl(RigidBodies,-1,value='%8.4f'%(model[1][i]), 5949 style=wx.TE_PROCESS_ENTER) 5950 thermVal.Bind(wx.EVT_TEXT_ENTER,OnThermval) 5951 thermVal.Bind(wx.EVT_KILL_FOCUS,OnThermval) 5952 Indx[thermVal.GetId()] = i 6578 thermVal = G2G.ValidatedTxtCtrl(RigidBodies,model[1],i,nDig=(8,4),OnLeave=OnThermval) 5953 6579 thermSizer.Add(thermVal) 5954 6580 Tcheck = wx.CheckBox(RigidBodies,-1,'Refine?') … … 5967 6593 RBObj['Orient'][1] = Qcheck.GetValue() 5968 6594 5969 def OnOrigX(event): 5970 event.Skip() 5971 Obj = event.GetEventObject() 5972 item = Indx[Obj.GetId()] 5973 try: 5974 val = float(Obj.GetValue()) 5975 RBObj['Orig'][0][item] = val 5976 Obj.SetValue('%8.5f'%(val)) 5977 newXYZ = G2mth.UpdateRBXYZ(Bmat,RBObj,RBData,rbType)[0] 5978 for i,id in enumerate(RBObj['Ids']): 5979 data['Atoms'][AtLookUp[id]][cx:cx+3] = newXYZ[i] 5980 data['Drawing']['Atoms'] = [] 5981 UpdateDrawAtoms(atomStyle) 5982 G2plt.PlotStructure(G2frame,data) 5983 except ValueError: 5984 pass 6595 def OnOrigX(invalid,value,tc): 6596 newXYZ = G2mth.UpdateRBXYZ(Bmat,RBObj,RBData,rbType)[0] 6597 for i,id in enumerate(RBObj['Ids']): 6598 data['Atoms'][AtLookUp[id]][cx:cx+3] = newXYZ[i] 6599 data['Drawing']['Atoms'] = [] 6600 UpdateDrawAtoms(atomStyle) 6601 G2plt.PlotStructure(G2frame,data) 5985 6602 5986 6603 def OnOrien(event): … … 6018 6635 topSizer.Add(wx.StaticText(RigidBodies,-1,'Origin x,y,z:'),0,WACV) 6019 6636 for ix,x in enumerate(Orig): 6020 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 6021 origX = wx.TextCtrl(RigidBodies,-1,value='%8.5f'%(x),style=wx.TE_PROCESS_ENTER) 6022 origX.Bind(wx.EVT_TEXT_ENTER,OnOrigX) 6023 origX.Bind(wx.EVT_KILL_FOCUS,OnOrigX) 6024 Indx[origX.GetId()] = ix 6637 origX = G2G.ValidatedTxtCtrl(RigidBodies,Orig,ix,nDig=(8,5),OnLeave=OnOrigX) 6025 6638 topSizer.Add(origX,0,WACV) 6026 6639 topSizer.Add((5,0),) … … 6031 6644 topSizer.Add(wx.StaticText(RigidBodies,-1,'Rotation angle, vector:'),0,WACV) 6032 6645 for ix,x in enumerate(Orien): 6033 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff)6034 6646 orien = wx.TextCtrl(RigidBodies,-1,value='%8.4f'%(x),style=wx.TE_PROCESS_ENTER) 6035 6647 orien.Bind(wx.EVT_TEXT_ENTER,OnOrien) … … 6051 6663 RBObj['Torsions'][item][1] = Obj.GetValue() 6052 6664 6053 def OnTorsion(event): 6054 event.Skip() 6055 Obj = event.GetEventObject() 6056 item = Indx[Obj.GetId()] 6057 try: 6058 val = float(Obj.GetValue()) 6059 RBObj['Torsions'][item][0] = val 6060 newXYZ = G2mth.UpdateRBXYZ(Bmat,RBObj,RBData,'Residue')[0] 6061 for i,id in enumerate(RBObj['Ids']): 6062 data['Atoms'][AtLookUp[id]][cx:cx+3] = newXYZ[i] 6063 except ValueError: 6064 pass 6065 Obj.SetValue("%10.3f"%(RBObj['Torsions'][item][0])) 6665 def OnTorsion(invalid,value,tc): 6666 newXYZ = G2mth.UpdateRBXYZ(Bmat,RBObj,RBData,'Residue')[0] 6667 for i,id in enumerate(RBObj['Ids']): 6668 data['Atoms'][AtLookUp[id]][cx:cx+3] = newXYZ[i] 6066 6669 data['Drawing']['Atoms'] = [] 6067 6670 UpdateDrawAtoms(atomStyle) … … 6096 6699 for itors,tors in enumerate(RBObj['Torsions']): 6097 6700 torSizer.Add(wx.StaticText(RigidBodies,-1,'Torsion '+'%d'%(itors)),0,WACV) 6098 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 6099 torsTxt = wx.TextCtrl(RigidBodies,-1,value='%.3f'%(tors[0]),style=wx.TE_PROCESS_ENTER) 6100 torsTxt.Bind(wx.EVT_TEXT_ENTER,OnTorsion) 6101 torsTxt.Bind(wx.EVT_KILL_FOCUS,OnTorsion) 6102 Indx[torsTxt.GetId()] = itors 6701 torsTxt = G2G.ValidatedTxtCtrl(RigidBodies,RBObj['Torsions'][itors],0,nDig=(10,3),OnLeave=OnTorsion) 6103 6702 torSizer.Add(torsTxt) 6104 6703 torCheck = wx.CheckBox(RigidBodies,-1,'Refine?') … … 6123 6722 6124 6723 def VecrbSizer(RBObj): 6125 G2frame. dataFrame.SetStatusText('NB: Rotation vector is in crystallographic space')6724 G2frame.GetStatusBar().SetStatusText('NB: Rotation vector is in crystallographic space',1) 6126 6725 6127 6726 def OnDelVecRB(event): … … 6177 6776 mainSizer.Add(G2frame.bottomSizer) 6178 6777 mainSizer.Layout() 6179 G2frame.data Frame.Refresh()6778 G2frame.dataWindow.Refresh() 6180 6779 RigidBodies.SetVirtualSize(mainSizer.GetMinSize()) 6181 6780 RigidBodies.Scroll(0,Scroll) 6182 G2frame.data Frame.SendSizeEvent()6781 G2frame.dataWindow.SendSizeEvent() 6183 6782 G2plt.PlotStructure(G2frame,data) 6184 6783 wx.CallAfter(oldFocus.SetFocus) … … 6186 6785 # FillRigidBodyGrid executable code starts here 6187 6786 if refresh: 6188 #RigidBodies.DestroyChildren() # bad, deletes scrollbars on Mac! 6189 if RigidBodies.GetSizer(): 6190 RigidBodies.GetSizer().Clear(True) 6787 if RigidBodies.GetSizer(): RigidBodies.GetSizer().Clear(True) 6191 6788 general = data['General'] 6192 6789 cx,ct,cs,cia = general['AtomPtrs'] 6193 6790 AtLookUp = G2mth.FillAtomLookUp(data['Atoms'],cia+8) 6194 6791 Amat,Bmat = G2lat.cell2AB(general['Cell'][1:7]) 6195 Id = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Rigid bodies')6792 Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Rigid bodies') 6196 6793 if not Id: 6197 6794 return 6198 RBData = G2frame. PatternTree.GetItemPyData(Id)6795 RBData = G2frame.GPXtree.GetItemPyData(Id) 6199 6796 Indx = {} 6200 6797 atomStyle = 'balls & sticks' 6201 6798 if 'macro' in general['Type']: 6202 6799 atomStyle = 'sticks' 6203 G2frame. dataFrame.SetStatusText('')6800 G2frame.GetStatusBar().SetStatusText('',1) 6204 6801 mainSizer = wx.BoxSizer(wx.VERTICAL) 6205 6802 if not data['RBModels']: … … 6226 6823 G2frame.bottomSizer.Add(ResrbSizer(rbObj)) 6227 6824 mainSizer.Add(G2frame.bottomSizer) 6228 G2frame. dataFrame.SetStatusText('NB: Rotation vector is in crystallographic space')6825 G2frame.GetStatusBar().SetStatusText('NB: Rotation vector is in crystallographic space',1) 6229 6826 G2plt.PlotStructure(G2frame,data) 6230 6827 if 'Vector' in data['RBModels'] and len(data['RBModels']['Vector']): … … 6235 6832 mainSizer.Add(VecrbSizer(RBObj)) 6236 6833 6237 SetPhaseWindow( G2frame.dataFrame,RigidBodies,mainSizer)6834 SetPhaseWindow(RigidBodies,mainSizer) 6238 6835 6239 6836 def OnRBCopyParms(event): … … 6269 6866 def OnRBAssign(event): 6270 6867 6271 G2frame. dataFrame.SetStatusText('')6272 RBData = G2frame. PatternTree.GetItemPyData(6273 G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Rigid bodies'))6868 G2frame.GetStatusBar().SetStatusText('',1) 6869 RBData = G2frame.GPXtree.GetItemPyData( 6870 G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Rigid bodies')) 6274 6871 rbNames = {} 6275 6872 for rbVec in RBData['Vector']: … … 6456 7053 val = float(Obj.GetValue())/10. 6457 7054 Tors[0] = val 6458 ang.SetValue( '%8.3f'%(val))7055 ang.SetValue(val) 6459 7056 G2plt.PlotStructure(G2frame,data) 6460 7057 … … 6462 7059 G2plt.PlotStructure(G2frame,data) 6463 7060 6464 #RigidBodies.DestroyChildren() # bad, deletes scrollbars on Mac! 6465 if RigidBodies.GetSizer(): 6466 RigidBodies.GetSizer().Clear(True) 7061 if RigidBodies.GetSizer(): RigidBodies.GetSizer().Clear(True) 6467 7062 mainSizer = wx.BoxSizer(wx.VERTICAL) 6468 7063 mainSizer.Add((5,5),0) … … 6565 7160 btnSizer.Add((20,20),1) 6566 7161 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 6567 SetPhaseWindow( G2frame.dataFrame,RigidBodies,mainSizer)7162 SetPhaseWindow(RigidBodies,mainSizer) 6568 7163 wx.CallAfter(Draw) 6569 7164 6570 7165 def OnAutoFindResRB(event): 6571 RBData = G2frame. PatternTree.GetItemPyData(6572 G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Rigid bodies'))7166 RBData = G2frame.GPXtree.GetItemPyData( 7167 G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Rigid bodies')) 6573 7168 rbKeys = RBData['Residue'].keys() 6574 7169 rbKeys.remove('AtInfo') … … 6657 7252 data['RBModels']['Residue'] = [] 6658 7253 data['RBModels']['Vector'] = [] 6659 RBData = G2frame. PatternTree.GetItemPyData(6660 G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Rigid bodies'))7254 RBData = G2frame.GPXtree.GetItemPyData( 7255 G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Rigid bodies')) 6661 7256 for RBType in ['Vector','Residue']: 6662 7257 for rbId in RBData[RBType]: … … 6768 7363 model[item][1][ix] = Obj.GetValue() 6769 7364 6770 def OnPosVal(event): 6771 event.Skip() 6772 Obj = event.GetEventObject() 6773 model,item,ix = Indx[Obj.GetId()] 6774 try: 6775 model[item][0][ix] = float(Obj.GetValue()) 6776 except ValueError: 6777 pass 6778 Obj.SetValue("%.4f"%(model[item][0][ix])) 7365 def OnPosVal(invalid,value,tc): 6779 7366 G2plt.PlotStructure(G2frame,data) 6780 7367 … … 6803 7390 Indx[posRef.GetId()] = [model,'Pos',ix] 6804 7391 atomsizer.Add(posRef,0,WACV) 6805 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 6806 posVal = wx.TextCtrl(G2frame.MCSA,-1,'%.4f'%(model['Pos'][0][ix]),style=wx.TE_PROCESS_ENTER) 6807 posVal.Bind(wx.EVT_TEXT_ENTER,OnPosVal) 6808 posVal.Bind(wx.EVT_KILL_FOCUS,OnPosVal) 6809 Indx[posVal.GetId()] = [model,'Pos',ix] 7392 posVal = G2G.ValidatedTxtCtrl(G2frame.MCSA,model['Pos'][0],ix,nDig=(10,4),OnLeave=OnPosVal) 6810 7393 atomsizer.Add(posVal,0,WACV) 6811 7394 atomsizer.Add((5,5),0) … … 6858 7441 ObjV.SetValue('%.3f %.3f %.3f'%(V[0],V[1],V[2])) 6859 7442 G2plt.PlotStructure(G2frame,data) 6860 # UpdateMCSA()6861 7443 6862 7444 def OnMolCent(event): … … 6877 7459 Indx[posRef.GetId()] = [model,'Pos',ix] 6878 7460 rbsizer1.Add(posRef,0,WACV) 6879 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 6880 posVal = wx.TextCtrl(G2frame.MCSA,-1,'%.4f'%(model['Pos'][0][ix]),style=wx.TE_PROCESS_ENTER) 6881 posVal.Bind(wx.EVT_TEXT_ENTER,OnPosVal) 6882 posVal.Bind(wx.EVT_KILL_FOCUS,OnPosVal) 6883 Indx[posVal.GetId()] = [model,'Pos',ix] 7461 posVal = G2G.ValidatedTxtCtrl(G2frame.MCSA,model['Pos'][0],ix,nDig=(10,4),OnLeave=OnPosVal) 6884 7462 rbsizer1.Add(posVal,0,WACV) 6885 7463 molcent = wx.CheckBox(G2frame.MCSA,-1,label=' Use mol. center? ') … … 6900 7478 Ori = model['Ori'][0] 6901 7479 rbsizer2.Add(wx.StaticText(G2frame.MCSA,-1,'Oa: '),0,WACV) 6902 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff)6903 7480 angVal = wx.TextCtrl(G2frame.MCSA,-1,'%.5f'%(Ori[0]),style=wx.TE_PROCESS_ENTER) 6904 7481 angVal.Bind(wx.EVT_TEXT_ENTER,OnOriVal) … … 6948 7525 Indx[torRef.GetId()] = [model,'Tor',it] 6949 7526 rbsizer3.Add(torRef,0,WACV) 6950 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 6951 torVal = wx.TextCtrl(G2frame.MCSA,-1,'%.4f'%(tor),style=wx.TE_PROCESS_ENTER) 6952 torVal.Bind(wx.EVT_TEXT_ENTER,OnPosVal) 6953 torVal.Bind(wx.EVT_KILL_FOCUS,OnPosVal) 6954 Indx[torVal.GetId()] = [model,'Tor',it] 7527 torVal = G2G.ValidatedTxtCtrl(G2frame.MCSA,model['Tor'][0],it,nDig=(10,4),OnLeave=OnPosVal) 6955 7528 rbsizer3.Add(torVal,0,WACV) 6956 7529 rbsizer3.Add(wx.StaticText(G2frame.MCSA,-1,' Range: '),0,WACV) … … 6969 7542 def OnPORef(event): 6970 7543 POData['Coef'][1] = poRef.GetValue() 6971 6972 def OnPOVal(event):6973 event.Skip()6974 try:6975 mdVal = float(poVal.GetValue())6976 if mdVal > 0:6977 POData['Coef'][0] = mdVal6978 except ValueError:6979 pass6980 poVal.SetValue("%.3f"%(POData['Coef'][0]))6981 7544 6982 7545 def OnPORange(event): … … 7012 7575 poRef.Bind(wx.EVT_CHECKBOX,OnPORef) 7013 7576 poSizer.Add(poRef,0,WACV) 7014 # azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff) 7015 poVal = wx.TextCtrl(G2frame.MCSA,-1,'%.3f'%(POData['Coef'][0]),style=wx.TE_PROCESS_ENTER) 7016 poVal.Bind(wx.EVT_TEXT_ENTER,OnPOVal) 7017 poVal.Bind(wx.EVT_KILL_FOCUS,OnPOVal) 7577 poVal = G2G.ValidatedTxtCtrl(G2frame.MCSA,POData['Coef'],0,nDig=(10,3),min=0.) 7018 7578 poSizer.Add(poVal,0,WACV) 7019 7579 poSizer.Add(wx.StaticText(G2frame.MCSA,-1,' Range: '),0,WACV) … … 7044 7604 Results[r][0] = True 7045 7605 resultsTable.SetValue(r,0,True) 7606 # resultsGrid.ForceRefresh() 7046 7607 G2plt.PlotStructure(G2frame,data) 7047 7608 wx.CallAfter(UpdateMCSA,G2frame.MCSA.GetScrollPos(wx.VERTICAL)) 7048 resultsGrid.ForceRefresh()7049 7609 elif c == 1: 7050 7610 if Results[r][1]: … … 7072 7632 resultsGrid.Bind(wg.EVT_GRID_CELL_LEFT_CLICK, OnCellChange) 7073 7633 resultsGrid.AutoSizeColumns(True) 7634 resultsGrid.SetMargins(0,0) 7074 7635 for r in range(resultsGrid.GetNumberRows()): 7075 7636 for c in range(resultsGrid.GetNumberCols()): … … 7078 7639 else: 7079 7640 resultsGrid.SetCellStyle(r,c,VERY_LIGHT_GREY,True) 7080 resultsSizer.Add(resultsGrid) 7641 # resultsGrid.SetScrollRate(0,0) 7642 resultsSizer.Add(resultsGrid,0,wx.EXPAND) 7081 7643 return resultsSizer 7082 7644 7083 7645 # UpdateMCSA executable code starts here 7084 #G2frame.MCSA.DestroyChildren() # bad, deletes scrollbars on Mac! 7085 if G2frame.MCSA.GetSizer(): 7086 G2frame.MCSA.GetSizer().Clear(True) 7646 if G2frame.MCSA.GetSizer(): G2frame.MCSA.GetSizer().Clear(True) 7087 7647 if not data['Drawing']: #if new drawing - no drawing data! 7088 7648 SetupDrawingData() 7089 7649 general = data['General'] 7090 7650 Amat,Bmat = G2lat.cell2AB(general['Cell'][1:7]) 7091 Id = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Rigid bodies')7651 Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Rigid bodies') 7092 7652 if not Id: 7093 7653 return 7094 RBData = G2frame. PatternTree.GetItemPyData(Id)7654 RBData = G2frame.GPXtree.GetItemPyData(Id) 7095 7655 Indx = {} 7096 7656 # atomStyle = 'balls & sticks' 7097 7657 # if 'macro' in general['Type']: 7098 7658 # atomStyle = 'sticks' 7099 G2frame. dataFrame.SetStatusText('')7659 G2frame.GetStatusBar().SetStatusText('',1) 7100 7660 mainSizer = wx.BoxSizer(wx.VERTICAL) 7101 7661 if not data['MCSA']['Models']: … … 7130 7690 mainSizer.Add((5,5),0) 7131 7691 Results = data['MCSA']['Results'] 7132 mainSizer.Add(ResultsSizer(Results) )7133 7134 SetPhaseWindow(G2frame. dataFrame,G2frame.MCSA,mainSizer)7692 mainSizer.Add(ResultsSizer(Results),0,wx.EXPAND) 7693 7694 SetPhaseWindow(G2frame.MCSA,mainSizer) 7135 7695 7136 7696 def SetSolution(result,Models): … … 7172 7732 covData = {} 7173 7733 if 'PWDR' in reflName: 7174 PatternId = G2gd.Get PatternTreeItemId(G2frame,G2frame.root, reflName)7175 reflSets = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId,'Reflection Lists'))7734 PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root, reflName) 7735 reflSets = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId,'Reflection Lists')) 7176 7736 try: #patch for old reflection data 7177 7737 reflData = reflSets[phaseName]['RefList'] … … 7180 7740 reflType = 'PWDR' 7181 7741 elif 'HKLF' in reflName: 7182 PatternId = G2gd.Get PatternTreeItemId(G2frame,G2frame.root, reflName)7742 PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root, reflName) 7183 7743 try: 7184 reflData = G2frame. PatternTree.GetItemPyData(PatternId)[1]['RefList']7744 reflData = G2frame.GPXtree.GetItemPyData(PatternId)[1]['RefList'] 7185 7745 except TypeError: 7186 reflData = G2frame. PatternTree.GetItemPyData(PatternId)[1]7746 reflData = G2frame.GPXtree.GetItemPyData(PatternId)[1] 7187 7747 reflType = 'HKLF' 7188 7748 elif reflName == 'Pawley reflections': 7189 7749 reflData = data['Pawley ref'] 7190 covData = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.root, 'Covariance'))7750 covData = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,G2frame.root, 'Covariance')) 7191 7751 reflType = 'Pawley' 7192 7752 else: … … 7195 7755 print 'MC/SA run:' 7196 7756 print 'Reflection type:',reflType,' Total No. reflections: ',len(reflData) 7197 RBdata = G2frame. PatternTree.GetItemPyData(7198 G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Rigid bodies'))7757 RBdata = G2frame.GPXtree.GetItemPyData( 7758 G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Rigid bodies')) 7199 7759 MCSAmodels = MCSAdata['Models'] 7200 7760 if not len(MCSAmodels): … … 7218 7778 for i in range(nCyc): 7219 7779 pgbar.SetTitle('MC/SA run '+str(i+1)+' of '+str(nCyc)) 7220 Result,tsum = G2mth.mcsaSearch(data,RBdata,reflType,reflData,covData,pgbar)7780 Result,tsum,nsum,rcov = G2mth.mcsaSearch(data,RBdata,reflType,reflData,covData,pgbar) 7221 7781 MCSAdata['Results'].append(Result) 7222 print ' MC/SA run completed: %d residual: %.3f%% SFcalc time: %.2fs '%(i,100*Result[2],tsum)7782 print ' MC/SA run completed: %d residual: %.3f%% SFcalc time: %.2fs Nsfcalc: %d'%(i,100*Result[2],tsum,nsum) 7223 7783 tsf += tsum 7224 print ' Structure factor time: %.2f'%(tsf) 7784 print ' Total SF time: %.2fs'%(tsf) 7785 XY = np.mgrid[0:rcov.shape[0],0:rcov.shape[1]] 7786 G2plt.PlotXYZ(G2frame,XY,rcov,labelX='ref No.',labelY='ref No.',newPlot=False, 7787 Title='Reflection covariance matrix',zrange=[-1.,1.],color='RdYlGn') 7225 7788 else: 7226 MCSAdata['Results'] = G2mth.MPmcsaSearch(nCyc,data,RBdata,reflType,reflData,covData) 7227 print ' MC/SA run time: %.2f'%(time.time()-time1) 7789 nprocs = GSASIIpath.GetConfigValue('Multiprocessing_cores') 7790 Results,sftime,numsf = G2mth.MPmcsaSearch(nCyc,data,RBdata,reflType,reflData,covData,nprocs) 7791 MCSAdata['Results'] += Results #+= to any saved ones 7792 print ' Total SF time: %.2fs MC/SA run time: %.2fs Nsfcalc: %d'%(sftime,time.time()-time1,numsf) 7228 7793 finally: 7229 7794 if process == 'single': … … 7232 7797 MCSAdata['Results'][0][0] = True 7233 7798 SetSolution(MCSAdata['Results'][0],data['MCSA']['Models']) 7234 G2frame. dataDisplay.SetFocus()7235 Page = G2frame. dataDisplay.FindPage('MC/SA')7236 G2frame. dataDisplay.SetSelection(Page)7799 G2frame.phaseDisplay.SetFocus() 7800 Page = G2frame.phaseDisplay.FindPage('MC/SA') 7801 G2frame.phaseDisplay.SetSelection(Page) 7237 7802 G2plt.PlotStructure(G2frame,data) 7238 7803 wx.CallAfter(UpdateMCSA) … … 7254 7819 7255 7820 def OnMCSAaddRB(event): 7256 rbData = G2frame. PatternTree.GetItemPyData(7257 G2gd.Get PatternTreeItemId(G2frame,G2frame.root,'Rigid bodies'))7821 rbData = G2frame.GPXtree.GetItemPyData( 7822 G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Rigid bodies')) 7258 7823 rbNames = {} 7259 7824 for rbVec in rbData['Vector']: … … 7266 7831 print '**** ERROR - no rigid bodies defined ****' 7267 7832 return 7268 dlg = wx.SingleChoiceDialog(G2frame .dataFrame,'Select','Rigid body',rbNames.keys())7833 dlg = wx.SingleChoiceDialog(G2frame,'Select','Rigid body',rbNames.keys()) 7269 7834 if dlg.ShowModal() == wx.ID_OK: 7270 7835 sel = dlg.GetSelection() … … 7284 7849 data['MCSA']['rbData'] = rbData 7285 7850 data['MCSA']['AtInfo'].update(rbData[rbType]['AtInfo']) 7286 G2plt.PlotStructure(G2frame,data)7287 7851 UpdateMCSA() 7852 wx.CallAfter(G2plt.PlotStructure,G2frame,data) 7288 7853 7289 7854 def OnMCSAclear(event): … … 7338 7903 7339 7904 # FillPawleyReflectionsGrid executable starts here 7340 G2frame. dataFrame.SetStatusText('To delete a Pawley reflection: select row & press Delete')7905 G2frame.GetStatusBar().SetStatusText('To delete a Pawley reflection: select row & press Delete',1) 7341 7906 generalData = data['General'] 7342 7907 if 'Pawley ref' in data: … … 7365 7930 G2frame.PawleyRefl.SetMargins(0,0) 7366 7931 G2frame.PawleyRefl.AutoSizeColumns(False) 7367 SetPhaseWindow(G2frame. dataFrame,G2frame.PawleyRefl,size=[450,300])7932 SetPhaseWindow(G2frame.PawleyRefl) 7368 7933 7369 7934 def OnPawleySet(event): … … 7377 7942 generalData = data['General'] 7378 7943 startDmin = generalData['Pawley dmin'] 7379 General = wx.Dialog(G2frame.dataFrame,wx.ID_ANY,'Set Pawley Parameters',7944 genDlg = wx.Dialog(G2frame,wx.ID_ANY,'Set Pawley Parameters', 7380 7945 style=wx.DEFAULT_DIALOG_STYLE) 7381 7946 mainSizer = wx.BoxSizer(wx.VERTICAL) 7382 mainSizer.Add(wx.StaticText( General,wx.ID_ANY,7947 mainSizer.Add(wx.StaticText(genDlg,wx.ID_ANY, 7383 7948 'Set Pawley Extraction Parameters for phase '+ 7384 7949 generalData.get('Name','?'))) 7385 7950 mainSizer.Add([5,10]) 7386 7951 pawleySizer = wx.BoxSizer(wx.HORIZONTAL) 7387 pawleySizer.Add(wx.StaticText( General,label=' Do Pawley refinement?: '),0,WACV)7388 pawlRef = G2G.G2CheckBox( General,'',generalData,'doPawley',7952 pawleySizer.Add(wx.StaticText(genDlg,label=' Do Pawley refinement?: '),0,WACV) 7953 pawlRef = G2G.G2CheckBox(genDlg,'',generalData,'doPawley', 7389 7954 DisablePawleyOpts) 7390 7955 pawleySizer.Add(pawlRef,0,WACV) 7391 7956 mainSizer.Add(pawleySizer) 7392 7957 pawleySizer = wx.BoxSizer(wx.HORIZONTAL) 7393 pawleySizer.Add(wx.StaticText( General,label=' Pawley dmin: '),0,WACV)7958 pawleySizer.Add(wx.StaticText(genDlg,label=' Pawley dmin: '),0,WACV) 7394 7959 def d2Q(*a,**kw): 7395 7960 temp['Qmax'] = 2 * math.pi / generalData['Pawley dmin'] 7396 7961 pawlQVal.SetValue(temp['Qmax']) 7397 pawlVal = G2G.ValidatedTxtCtrl( General,generalData,'Pawley dmin',7962 pawlVal = G2G.ValidatedTxtCtrl(genDlg,generalData,'Pawley dmin', 7398 7963 min=0.25,max=20.,nDig=(10,5),typeHint=float,OnLeave=d2Q) 7399 7964 pawleySizer.Add(pawlVal,0,WACV) 7400 pawleySizer.Add(wx.StaticText( General,label=' Qmax: '),0,WACV)7965 pawleySizer.Add(wx.StaticText(genDlg,label=' Qmax: '),0,WACV) 7401 7966 temp = {'Qmax':2 * math.pi / generalData['Pawley dmin']} 7402 7967 def Q2D(*args,**kw): 7403 7968 generalData['Pawley dmin'] = 2 * math.pi / temp['Qmax'] 7404 7969 pawlVal.SetValue(generalData['Pawley dmin']) 7405 pawlQVal = G2G.ValidatedTxtCtrl( General,temp,'Qmax',7970 pawlQVal = G2G.ValidatedTxtCtrl(genDlg,temp,'Qmax', 7406 7971 min=0.314,max=25.,nDig=(10,5),typeHint=float,OnLeave=Q2D) 7407 7972 pawleySizer.Add(pawlQVal,0,WACV) 7408 7973 mainSizer.Add(pawleySizer) 7409 7974 pawleySizer = wx.BoxSizer(wx.HORIZONTAL) 7410 pawleySizer.Add(wx.StaticText( General,label=' Pawley neg. wt.: '),0,WACV)7411 pawlNegWt = G2G.ValidatedTxtCtrl( General,generalData,'Pawley neg wt',7975 pawleySizer.Add(wx.StaticText(genDlg,label=' Pawley neg. wt.: '),0,WACV) 7976 pawlNegWt = G2G.ValidatedTxtCtrl(genDlg,generalData,'Pawley neg wt', 7412 7977 min=0.,max=1.,nDig=(10,4),typeHint=float) 7413 7978 pawleySizer.Add(pawlNegWt,0,WACV) … … 7415 7980 7416 7981 # make OK button 7417 def OnOK(event): General.EndModal(wx.ID_OK)7982 def OnOK(event): genDlg.EndModal(wx.ID_OK) 7418 7983 mainSizer.Add([5,5]) 7419 7984 btnsizer = wx.StdDialogButtonSizer() 7420 btn = wx.Button( General, wx.ID_OK)7985 btn = wx.Button(genDlg, wx.ID_OK) 7421 7986 btn.Bind(wx.EVT_BUTTON, OnOK) 7422 7987 btn.SetDefault() 7423 7988 btnsizer.AddButton(btn) 7424 btn = wx.Button( General, wx.ID_CANCEL)7989 btn = wx.Button(genDlg, wx.ID_CANCEL) 7425 7990 btnsizer.AddButton(btn) 7426 7991 btnsizer.Realize() 7427 7992 mainSizer.Add(btnsizer, 0, wx.ALIGN_CENTER|wx.ALL, 5) 7428 7993 7429 General.SetSizer(mainSizer)7430 mainSizer.Fit( General)7431 General.CenterOnParent()7432 res = General.ShowModal()7433 General.Destroy()7994 genDlg.SetSizer(mainSizer) 7995 mainSizer.Fit(genDlg) 7996 genDlg.CenterOnParent() 7997 res = genDlg.ShowModal() 7998 genDlg.Destroy() 7434 7999 7435 8000 if generalData['doPawley'] and res == wx.ID_OK and startDmin != generalData['Pawley dmin']: … … 7453 8018 for hist in histograms: 7454 8019 if 'PWDR' in hist[:4]: 7455 Id = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,hist)7456 inst = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(8020 Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,hist) 8021 inst = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId( 7457 8022 G2frame,Id, 'Instrument Parameters'))[0] 7458 limits = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Limits'))8023 limits = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,Id, 'Limits')) 7459 8024 Tmin = G2lat.Dsp2pos(inst,dmin) 7460 8025 if 'T' in inst['Type'][0]: … … 7509 8074 G2frame.ErrorDialog('Pawley estimate','No histograms defined for this phase') 7510 8075 return 7511 PatternId = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,HistoNames[0]) #only use 1st histogram7512 xdata = G2frame. PatternTree.GetItemPyData(PatternId)[1]7513 Inst = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId,'Instrument Parameters'))[0]7514 Sample = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId,'Sample Parameters'))8076 PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,HistoNames[0]) #only use 1st histogram 8077 xdata = G2frame.GPXtree.GetItemPyData(PatternId)[1] 8078 Inst = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId,'Instrument Parameters'))[0] 8079 Sample = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId,'Sample Parameters')) 7515 8080 wave = G2mth.getWave(Inst) 7516 8081 const = 9.e-2/(np.pi*Sample['Gonio. radius']) #shifts in microns … … 7559 8124 return 7560 8125 HistoNames = Histograms.keys() 7561 PatternId = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,HistoNames[0])7562 refData = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame, \8126 PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,HistoNames[0]) 8127 refData = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame, \ 7563 8128 PatternId,'Reflection Lists'))[PhaseName]['RefList'] 7564 8129 im = 0 … … 7650 8215 G2plt.PlotStructure(G2frame,data) 7651 8216 7652 G2frame. dataFrame.SetStatusText('')8217 G2frame.GetStatusBar().SetStatusText('',1) 7653 8218 if 'Map Peaks' in data: 7654 G2frame. dataFrame.SetStatusText('Double click any column heading to sort')8219 G2frame.GetStatusBar().SetStatusText('Double click any column heading to sort',1) 7655 8220 mapPeaks = data['Map Peaks'] 7656 8221 rowLabels = [] … … 7666 8231 MapPeaks.SetMargins(0,0) 7667 8232 MapPeaks.AutoSizeColumns(False) 7668 SetPhaseWindow( G2frame.dataFrame,MapPeaks,size=[440,300])8233 SetPhaseWindow(MapPeaks) 7669 8234 7670 8235 def OnPeaksMove(event): 7671 8236 if 'Map Peaks' in data: 7672 8237 mapPeaks = np.array(data['Map Peaks']) 7673 peakMax = np. fmax(mapPeaks.T[0])8238 peakMax = np.amax(mapPeaks.T[0]) 7674 8239 Ind = MapPeaks.GetSelectedRows() 7675 8240 for ind in Ind: … … 7715 8280 if generalData['Map'].get('Show bonds',False): 7716 8281 generalData['Map']['Show bonds'] = False 7717 G2frame.data Frame.MapPeaksEdit.SetLabel(G2gd.wxID_SHOWBONDS,'Show bonds')8282 G2frame.dataWindow.MapPeaksEdit.SetLabel(G2G.wxID_SHOWBONDS,'Show bonds') 7718 8283 else: 7719 8284 generalData['Map']['Show bonds'] = True 7720 G2frame.data Frame.MapPeaksEdit.SetLabel(G2gd.wxID_SHOWBONDS,'Hide bonds')8285 G2frame.dataWindow.MapPeaksEdit.SetLabel(G2G.wxID_SHOWBONDS,'Hide bonds') 7721 8286 FillMapPeaksGrid() 7722 8287 G2plt.PlotStructure(G2frame,data) … … 7882 8447 print ' Map search finished, time = %.2fs'%(time.time()-time0) 7883 8448 print ' No.peaks found:',len(peaks) 7884 Page = G2frame. dataDisplay.FindPage('Map peaks')7885 G2frame. dataDisplay.SetSelection(Page)8449 Page = G2frame.phaseDisplay.FindPage('Map peaks') 8450 G2frame.phaseDisplay.SetSelection(Page) 7886 8451 wx.CallAfter(FillMapPeaksGrid) 7887 8452 UpdateDrawAtoms() … … 7980 8545 it = 0 7981 8546 histNames.append(name) 7982 Id = G2gd.Get PatternTreeItemId(G2frame,G2frame.root,name)7983 Inst = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Instrument Parameters'))7984 Sample = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Sample Parameters'))8547 Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,name) 8548 Inst = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,Id,'Instrument Parameters')) 8549 Sample = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,Id,'Sample Parameters')) 7985 8550 Gangls[name] = copy.copy([Sample[item] for item in['Phi','Chi','Omega','Azimuth']]) 7986 RefDict = G2frame. PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Reflection Lists'))[phaseName]8551 RefDict = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,Id,'Reflection Lists'))[phaseName] 7987 8552 Refs = RefDict['RefList'].T #np.array! 7988 8553 if RefDict['Super']: im = 1 #(3+1) offset for m … … 8027 8592 return 8028 8593 # find the matching tab 8029 for PageNum in range(G2frame. dataDisplay.GetPageCount()):8030 if tabname == G2frame. dataDisplay.GetPageText(PageNum):8031 G2frame. dataDisplay.SetSelection(PageNum)8594 for PageNum in range(G2frame.phaseDisplay.GetPageCount()): 8595 if tabname == G2frame.phaseDisplay.GetPageText(PageNum): 8596 G2frame.phaseDisplay.SetSelection(PageNum) 8032 8597 return 8033 8598 else: … … 8046 8611 on a Phase data item window 8047 8612 ''' 8048 for page in G2frame. dataDisplay.gridList: # clear out all grids, forcing edits in progress to complete8613 for page in G2frame.phaseDisplay.gridList: # clear out all grids, forcing edits in progress to complete 8049 8614 page.ClearGrid() 8050 8615 page = event.GetSelection() 8616 G2frame.phaseDisplay.SetSize(G2frame.dataWindow.GetClientSize()) #TODO -almost right 8051 8617 ChangePage(page) 8052 8618 8053 8619 def ChangePage(page): 8054 text = G2frame. dataDisplay.GetPageText(page)8055 G2frame. dataDisplayPhaseText = text8056 G2frame.data Frame.helpKey = text # use name of Phase tab for help lookup8620 text = G2frame.phaseDisplay.GetPageText(page) 8621 G2frame.phaseDisplayPhaseText = text 8622 G2frame.dataWindow.helpKey = text # use name of Phase tab for help lookup 8057 8623 if text == 'General': 8058 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.DataGeneral)8624 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.DataGeneral) 8059 8625 UpdateGeneral() 8060 8626 elif text == 'Data': 8061 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.DataMenu)8627 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.DataMenu) 8062 8628 G2ddG.UpdateDData(G2frame,DData,data) 8063 8629 wx.CallAfter(G2plt.PlotSizeStrainPO,G2frame,data,hist='',Start=True) 8064 8630 elif text == 'Atoms': 8065 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.AtomsMenu)8631 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.AtomsMenu) 8066 8632 FillAtomsGrid(Atoms) 8067 8633 elif text == 'Layers': 8068 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.LayerData)8634 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.LayerData) 8069 8635 UpdateLayerData() 8070 8636 elif text == 'Wave Data' and data['General']['Modulated']: 8071 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.WavesData)8637 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.WavesData) 8072 8638 UpdateWavesData() 8073 8639 wx.CallAfter(G2plt.PlotStructure,G2frame,data,firstCall=True) 8074 8640 elif text == 'Draw Options': 8075 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.DataDrawOptions)8641 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.DataDrawOptions) 8076 8642 UpdateDrawOptions() 8077 8643 wx.CallAfter(G2plt.PlotStructure,G2frame,data,firstCall=True) 8078 8644 elif text == 'Draw Atoms': 8079 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.DrawAtomsMenu)8645 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.DrawAtomsMenu) 8080 8646 UpdateDrawAtoms() 8081 8647 wx.CallAfter(G2plt.PlotStructure,G2frame,data,firstCall=True) 8082 8648 elif text == 'RB Models': 8083 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.RigidBodiesMenu)8649 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.RigidBodiesMenu) 8084 8650 FillRigidBodyGrid() 8085 8651 elif text == 'Map peaks': 8086 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.MapPeaksMenu)8652 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.MapPeaksMenu) 8087 8653 FillMapPeaksGrid() 8088 8654 wx.CallAfter(G2plt.PlotStructure,G2frame,data,firstCall=True) 8089 8655 elif text == 'MC/SA': 8090 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.MCSAMenu)8656 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.MCSAMenu) 8091 8657 UpdateMCSA() 8092 8658 wx.CallAfter(G2plt.PlotStructure,G2frame,data,firstCall=True) 8093 8659 elif text == 'Texture': 8094 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.TextureMenu)8660 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.TextureMenu) 8095 8661 UpdateTexture() 8096 8662 wx.CallAfter(G2plt.PlotTexture,G2frame,data,Start=True) 8097 8663 elif text == 'Pawley reflections': 8098 G2gd.SetDataMenuBar(G2frame,G2frame.data Frame.PawleyMenu)8664 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.PawleyMenu) 8099 8665 FillPawleyReflectionsGrid() 8100 8666 else: … … 8105 8671 ''' 8106 8672 # General 8107 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.DataGeneral)8108 G2frame. dataFrame.Bind(wx.EVT_MENU, OnFourierMaps, id=G2gd.wxID_FOURCALC)8109 G2frame. dataFrame.Bind(wx.EVT_MENU, OnSearchMaps, id=G2gd.wxID_FOURSEARCH)8110 G2frame. dataFrame.Bind(wx.EVT_MENU, OnChargeFlip, id=G2gd.wxID_CHARGEFLIP)8111 G2frame. dataFrame.Bind(wx.EVT_MENU, On4DChargeFlip, id=G2gd.wxID_4DCHARGEFLIP)8112 G2frame. dataFrame.Bind(wx.EVT_MENU, OnFourClear, id=G2gd.wxID_FOURCLEAR)8113 G2frame. dataFrame.Bind(wx.EVT_MENU, OnRunSingleMCSA, id=G2gd.wxID_SINGLEMCSA)8114 G2frame. dataFrame.Bind(wx.EVT_MENU, OnRunMultiMCSA, id=G2gd.wxID_MULTIMCSA)8115 G2frame. dataFrame.Bind(wx.EVT_MENU, OnTransform, id=G2gd.wxID_TRANSFORMSTRUCTURE)8673 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.DataGeneral) 8674 G2frame.Bind(wx.EVT_MENU, OnFourierMaps, id=G2G.wxID_FOURCALC) 8675 G2frame.Bind(wx.EVT_MENU, OnSearchMaps, id=G2G.wxID_FOURSEARCH) 8676 G2frame.Bind(wx.EVT_MENU, OnChargeFlip, id=G2G.wxID_CHARGEFLIP) 8677 G2frame.Bind(wx.EVT_MENU, On4DChargeFlip, id=G2G.wxID_4DCHARGEFLIP) 8678 G2frame.Bind(wx.EVT_MENU, OnFourClear, id=G2G.wxID_FOURCLEAR) 8679 G2frame.Bind(wx.EVT_MENU, OnRunSingleMCSA, id=G2G.wxID_SINGLEMCSA) 8680 G2frame.Bind(wx.EVT_MENU, OnRunMultiMCSA, id=G2G.wxID_MULTIMCSA) 8681 G2frame.Bind(wx.EVT_MENU, OnTransform, id=G2G.wxID_TRANSFORMSTRUCTURE) 8116 8682 # Data 8117 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.DataMenu)8118 G2frame. dataFrame.Bind(wx.EVT_MENU, OnDataUse, id=G2gd.wxID_DATAUSE)8119 G2frame. dataFrame.Bind(wx.EVT_MENU, OnDataCopy, id=G2gd.wxID_DATACOPY)8120 G2frame. dataFrame.Bind(wx.EVT_MENU, OnDataCopyFlags, id=G2gd.wxID_DATACOPYFLAGS)8121 G2frame. dataFrame.Bind(wx.EVT_MENU, OnSelDataCopy, id=G2gd.wxID_DATASELCOPY)8122 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPwdrAdd, id=G2gd.wxID_PWDRADD)8123 G2frame. dataFrame.Bind(wx.EVT_MENU, OnHklfAdd, id=G2gd.wxID_HKLFADD)8124 G2frame. dataFrame.Bind(wx.EVT_MENU, OnDataDelete, id=G2gd.wxID_DATADELETE)8683 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.DataMenu) 8684 G2frame.Bind(wx.EVT_MENU, OnDataUse, id=G2G.wxID_DATAUSE) 8685 G2frame.Bind(wx.EVT_MENU, OnDataCopy, id=G2G.wxID_DATACOPY) 8686 G2frame.Bind(wx.EVT_MENU, OnDataCopyFlags, id=G2G.wxID_DATACOPYFLAGS) 8687 G2frame.Bind(wx.EVT_MENU, OnSelDataCopy, id=G2G.wxID_DATASELCOPY) 8688 G2frame.Bind(wx.EVT_MENU, OnPwdrAdd, id=G2G.wxID_PWDRADD) 8689 G2frame.Bind(wx.EVT_MENU, OnHklfAdd, id=G2G.wxID_HKLFADD) 8690 G2frame.Bind(wx.EVT_MENU, OnDataDelete, id=G2G.wxID_DATADELETE) 8125 8691 # Atoms 8126 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.AtomsMenu)8127 G2frame. dataFrame.Bind(wx.EVT_MENU, OnSetAll, id=G2gd.wxID_ATOMSSETALL)8128 G2frame. dataFrame.Bind(wx.EVT_MENU, AtomRefine, id=G2gd.wxID_ATOMSSETSEL)8129 G2frame. dataFrame.Bind(wx.EVT_MENU, AtomModify, id=G2gd.wxID_ATOMSMODIFY)8130 G2frame. dataFrame.Bind(wx.EVT_MENU, OnAtomInsert, id=G2gd.wxID_ATOMSEDITINSERT)8131 G2frame. dataFrame.Bind(wx.EVT_MENU, OnHydAtomAdd, id=G2gd.wxID_ADDHATOM)8132 G2frame. dataFrame.Bind(wx.EVT_MENU, AtomDelete, id=G2gd.wxID_ATOMSEDITDELETE)8133 G2frame. dataFrame.Bind(wx.EVT_MENU, AtomTransform, id=G2gd.wxID_ATOMSTRANSFORM)8134 # G2frame. dataFrame.Bind(wx.EVT_MENU, AtomRotate, id=G2gd.wxID_ATOMSROTATE)8135 8136 G2frame. dataFrame.Bind(wx.EVT_MENU, OnAtomAdd, id=G2gd.wxID_ATOMSEDITADD)8137 G2frame. dataFrame.Bind(wx.EVT_MENU, OnAtomViewAdd, id=G2gd.wxID_ATOMSVIEWADD)8138 G2frame. dataFrame.Bind(wx.EVT_MENU, OnAtomViewInsert, id=G2gd.wxID_ATOMVIEWINSERT)8139 G2frame. dataFrame.Bind(wx.EVT_MENU, OnHydAtomUpdate, id=G2gd.wxID_UPDATEHATOM)8140 G2frame. dataFrame.Bind(wx.EVT_MENU, OnAtomMove, id=G2gd.wxID_ATOMMOVE)8141 G2frame. dataFrame.Bind(wx.EVT_MENU, MakeMolecule, id=G2gd.wxID_MAKEMOLECULE)8142 G2frame. dataFrame.Bind(wx.EVT_MENU, OnReloadDrawAtoms, id=G2gd.wxID_RELOADDRAWATOMS)8143 G2frame. dataFrame.Bind(wx.EVT_MENU, OnDistAngle, id=G2gd.wxID_ATOMSDISAGL)8144 G2frame. dataFrame.Bind(wx.EVT_MENU, OnDistAnglePrt, id=G2gd.wxID_ATOMSPDISAGL)8145 G2frame. dataFrame.Bind(wx.EVT_MENU, OnDensity, id=G2gd.wxID_ATOMSDENSITY)8146 G2frame. dataFrame.Bind(wx.EVT_MENU, OnValidProtein, id=G2gd.wxID_VALIDPROTEIN)8147 G2frame. dataFrame.Bind(wx.EVT_MENU, OnIsoDistortCalc, id=G2gd.wxID_ISODISP)8692 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.AtomsMenu) 8693 G2frame.Bind(wx.EVT_MENU, OnSetAll, id=G2G.wxID_ATOMSSETALL) 8694 G2frame.Bind(wx.EVT_MENU, AtomRefine, id=G2G.wxID_ATOMSSETSEL) 8695 G2frame.Bind(wx.EVT_MENU, AtomModify, id=G2G.wxID_ATOMSMODIFY) 8696 G2frame.Bind(wx.EVT_MENU, OnAtomInsert, id=G2G.wxID_ATOMSEDITINSERT) 8697 G2frame.Bind(wx.EVT_MENU, OnHydAtomAdd, id=G2G.wxID_ADDHATOM) 8698 G2frame.Bind(wx.EVT_MENU, AtomDelete, id=G2G.wxID_ATOMSEDITDELETE) 8699 G2frame.Bind(wx.EVT_MENU, AtomTransform, id=G2G.wxID_ATOMSTRANSFORM) 8700 # G2frame.Bind(wx.EVT_MENU, AtomRotate, id=G2G.wxID_ATOMSROTATE) 8701 8702 G2frame.Bind(wx.EVT_MENU, OnAtomAdd, id=G2G.wxID_ATOMSEDITADD) 8703 G2frame.Bind(wx.EVT_MENU, OnAtomViewAdd, id=G2G.wxID_ATOMSVIEWADD) 8704 G2frame.Bind(wx.EVT_MENU, OnAtomViewInsert, id=G2G.wxID_ATOMVIEWINSERT) 8705 G2frame.Bind(wx.EVT_MENU, OnHydAtomUpdate, id=G2G.wxID_UPDATEHATOM) 8706 G2frame.Bind(wx.EVT_MENU, OnAtomMove, id=G2G.wxID_ATOMMOVE) 8707 G2frame.Bind(wx.EVT_MENU, MakeMolecule, id=G2G.wxID_MAKEMOLECULE) 8708 G2frame.Bind(wx.EVT_MENU, OnReloadDrawAtoms, id=G2G.wxID_RELOADDRAWATOMS) 8709 G2frame.Bind(wx.EVT_MENU, OnDistAngle, id=G2G.wxID_ATOMSDISAGL) 8710 G2frame.Bind(wx.EVT_MENU, OnDistAnglePrt, id=G2G.wxID_ATOMSPDISAGL) 8711 G2frame.Bind(wx.EVT_MENU, OnDensity, id=G2G.wxID_ATOMSDENSITY) 8712 G2frame.Bind(wx.EVT_MENU, OnValidProtein, id=G2G.wxID_VALIDPROTEIN) 8713 G2frame.Bind(wx.EVT_MENU, OnIsoDistortCalc, id=G2G.wxID_ISODISP) 8148 8714 if 'HydIds' in data['General']: 8149 G2frame.data Frame.AtomEdit.Enable(G2gd.wxID_UPDATEHATOM,True)8715 G2frame.dataWindow.AtomEdit.Enable(G2G.wxID_UPDATEHATOM,True) 8150 8716 else: 8151 G2frame.data Frame.AtomEdit.Enable(G2gd.wxID_UPDATEHATOM,False)8152 for id in G2frame.data Frame.ReImportMenuId: #loop over submenu items8153 G2frame. dataFrame.Bind(wx.EVT_MENU, OnReImport, id=id)8717 G2frame.dataWindow.AtomEdit.Enable(G2G.wxID_UPDATEHATOM,False) 8718 for id in G2frame.dataWindow.ReImportMenuId: #loop over submenu items 8719 G2frame.Bind(wx.EVT_MENU, OnReImport, id=id) 8154 8720 # Wave Data 8155 8721 if data['General']['Modulated']: 8156 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.WavesData)8157 G2frame. dataFrame.Bind(wx.EVT_MENU, OnWaveVary, id=G2gd.wxID_WAVEVARY)8722 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.WavesData) 8723 G2frame.Bind(wx.EVT_MENU, OnWaveVary, id=G2G.wxID_WAVEVARY) 8158 8724 # Stacking faults 8159 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.LayerData)8160 G2frame. dataFrame.Bind(wx.EVT_MENU, OnCopyPhase, id=G2gd.wxID_COPYPHASE)8161 G2frame. dataFrame.Bind(wx.EVT_MENU, OnLoadDIFFaX, id=G2gd.wxID_LOADDIFFAX)8162 G2frame. dataFrame.Bind(wx.EVT_MENU, OnSimulate, id=G2gd.wxID_LAYERSIMULATE)8163 G2frame. dataFrame.Bind(wx.EVT_MENU, OnFitLayers, id=G2gd.wxID_LAYERSFIT)8164 G2frame. dataFrame.Bind(wx.EVT_MENU, OnSeqSimulate, id=G2gd.wxID_SEQUENCESIMULATE)8725 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.LayerData) 8726 G2frame.Bind(wx.EVT_MENU, OnCopyPhase, id=G2G.wxID_COPYPHASE) 8727 G2frame.Bind(wx.EVT_MENU, OnLoadDIFFaX, id=G2G.wxID_LOADDIFFAX) 8728 G2frame.Bind(wx.EVT_MENU, OnSimulate, id=G2G.wxID_LAYERSIMULATE) 8729 G2frame.Bind(wx.EVT_MENU, OnFitLayers, id=G2G.wxID_LAYERSFIT) 8730 G2frame.Bind(wx.EVT_MENU, OnSeqSimulate, id=G2G.wxID_SEQUENCESIMULATE) 8165 8731 # Draw Options 8166 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.DataDrawOptions)8732 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.DataDrawOptions) 8167 8733 # Draw Atoms 8168 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.DrawAtomsMenu)8169 G2frame. dataFrame.Bind(wx.EVT_MENU, DrawAtomStyle, id=G2gd.wxID_DRAWATOMSTYLE)8170 G2frame. dataFrame.Bind(wx.EVT_MENU, DrawAtomLabel, id=G2gd.wxID_DRAWATOMLABEL)8171 G2frame. dataFrame.Bind(wx.EVT_MENU, DrawAtomColor, id=G2gd.wxID_DRAWATOMCOLOR)8172 G2frame. dataFrame.Bind(wx.EVT_MENU, ResetAtomColors, id=G2gd.wxID_DRAWATOMRESETCOLOR)8173 G2frame. dataFrame.Bind(wx.EVT_MENU, OnEditAtomRadii, id=G2gd.wxID_DRWAEDITRADII)8174 G2frame. dataFrame.Bind(wx.EVT_MENU, SetViewPoint, id=G2gd.wxID_DRAWVIEWPOINT)8175 G2frame. dataFrame.Bind(wx.EVT_MENU, AddSymEquiv, id=G2gd.wxID_DRAWADDEQUIV)8176 G2frame. dataFrame.Bind(wx.EVT_MENU, AddSphere, id=G2gd.wxID_DRAWADDSPHERE)8177 G2frame. dataFrame.Bind(wx.EVT_MENU, TransformSymEquiv, id=G2gd.wxID_DRAWTRANSFORM)8178 G2frame. dataFrame.Bind(wx.EVT_MENU, FillCoordSphere, id=G2gd.wxID_DRAWFILLCOORD)8179 G2frame. dataFrame.Bind(wx.EVT_MENU, FillUnitCell, id=G2gd.wxID_DRAWFILLCELL)8180 G2frame. dataFrame.Bind(wx.EVT_MENU, DrawAtomsDelete, id=G2gd.wxID_DRAWDELETE)8181 G2frame. dataFrame.Bind(wx.EVT_MENU, OnDrawDistVP, id=G2gd.wxID_DRAWDISTVP)8182 G2frame. dataFrame.Bind(wx.EVT_MENU, OnDrawDAT, id=G2gd.wxID_DRAWDISAGLTOR)8183 G2frame. dataFrame.Bind(wx.EVT_MENU, OnDrawPlane, id=G2gd.wxID_DRAWPLANE)8184 G2frame. dataFrame.Bind(wx.EVT_MENU, OnRestraint, id=G2gd.wxID_DRAWRESTRBOND)8185 G2frame. dataFrame.Bind(wx.EVT_MENU, OnRestraint, id=G2gd.wxID_DRAWRESTRANGLE)8186 G2frame. dataFrame.Bind(wx.EVT_MENU, OnRestraint, id=G2gd.wxID_DRAWRESTRPLANE)8187 G2frame. dataFrame.Bind(wx.EVT_MENU, OnRestraint, id=G2gd.wxID_DRAWRESTRCHIRAL)8188 G2frame. dataFrame.Bind(wx.EVT_MENU, OnDefineRB, id=G2gd.wxID_DRAWDEFINERB)8734 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.DrawAtomsMenu) 8735 G2frame.Bind(wx.EVT_MENU, DrawAtomStyle, id=G2G.wxID_DRAWATOMSTYLE) 8736 G2frame.Bind(wx.EVT_MENU, DrawAtomLabel, id=G2G.wxID_DRAWATOMLABEL) 8737 G2frame.Bind(wx.EVT_MENU, DrawAtomColor, id=G2G.wxID_DRAWATOMCOLOR) 8738 G2frame.Bind(wx.EVT_MENU, ResetAtomColors, id=G2G.wxID_DRAWATOMRESETCOLOR) 8739 G2frame.Bind(wx.EVT_MENU, OnEditAtomRadii, id=G2G.wxID_DRWAEDITRADII) 8740 G2frame.Bind(wx.EVT_MENU, SetViewPoint, id=G2G.wxID_DRAWVIEWPOINT) 8741 G2frame.Bind(wx.EVT_MENU, AddSymEquiv, id=G2G.wxID_DRAWADDEQUIV) 8742 G2frame.Bind(wx.EVT_MENU, AddSphere, id=G2G.wxID_DRAWADDSPHERE) 8743 G2frame.Bind(wx.EVT_MENU, TransformSymEquiv, id=G2G.wxID_DRAWTRANSFORM) 8744 G2frame.Bind(wx.EVT_MENU, FillCoordSphere, id=G2G.wxID_DRAWFILLCOORD) 8745 G2frame.Bind(wx.EVT_MENU, FillUnitCell, id=G2G.wxID_DRAWFILLCELL) 8746 G2frame.Bind(wx.EVT_MENU, DrawAtomsDelete, id=G2G.wxID_DRAWDELETE) 8747 G2frame.Bind(wx.EVT_MENU, OnDrawDistVP, id=G2G.wxID_DRAWDISTVP) 8748 G2frame.Bind(wx.EVT_MENU, OnDrawDAT, id=G2G.wxID_DRAWDISAGLTOR) 8749 G2frame.Bind(wx.EVT_MENU, OnDrawPlane, id=G2G.wxID_DRAWPLANE) 8750 G2frame.Bind(wx.EVT_MENU, OnRestraint, id=G2G.wxID_DRAWRESTRBOND) 8751 G2frame.Bind(wx.EVT_MENU, OnRestraint, id=G2G.wxID_DRAWRESTRANGLE) 8752 G2frame.Bind(wx.EVT_MENU, OnRestraint, id=G2G.wxID_DRAWRESTRPLANE) 8753 G2frame.Bind(wx.EVT_MENU, OnRestraint, id=G2G.wxID_DRAWRESTRCHIRAL) 8754 G2frame.Bind(wx.EVT_MENU, OnDefineRB, id=G2G.wxID_DRAWDEFINERB) 8189 8755 # RB Models 8190 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.RigidBodiesMenu)8191 G2frame. dataFrame.Bind(wx.EVT_MENU, OnAutoFindResRB, id=G2gd.wxID_AUTOFINDRESRB)8192 G2frame. dataFrame.Bind(wx.EVT_MENU, OnRBAssign, id=G2gd.wxID_ASSIGNATMS2RB)8193 G2frame. dataFrame.Bind(wx.EVT_MENU, OnRBCopyParms, id=G2gd.wxID_COPYRBPARMS)8194 G2frame. dataFrame.Bind(wx.EVT_MENU, OnGlobalResRBTherm, id=G2gd.wxID_GLOBALTHERM)8195 G2frame. dataFrame.Bind(wx.EVT_MENU, OnGlobalResRBRef, id=G2gd.wxID_GLOBALRESREFINE)8196 G2frame. dataFrame.Bind(wx.EVT_MENU, OnRBRemoveAll, id=G2gd.wxID_RBREMOVEALL)8756 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.RigidBodiesMenu) 8757 G2frame.Bind(wx.EVT_MENU, OnAutoFindResRB, id=G2G.wxID_AUTOFINDRESRB) 8758 G2frame.Bind(wx.EVT_MENU, OnRBAssign, id=G2G.wxID_ASSIGNATMS2RB) 8759 G2frame.Bind(wx.EVT_MENU, OnRBCopyParms, id=G2G.wxID_COPYRBPARMS) 8760 G2frame.Bind(wx.EVT_MENU, OnGlobalResRBTherm, id=G2G.wxID_GLOBALTHERM) 8761 G2frame.Bind(wx.EVT_MENU, OnGlobalResRBRef, id=G2G.wxID_GLOBALRESREFINE) 8762 G2frame.Bind(wx.EVT_MENU, OnRBRemoveAll, id=G2G.wxID_RBREMOVEALL) 8197 8763 # Map peaks 8198 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.MapPeaksMenu)8199 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPeaksMove, id=G2gd.wxID_PEAKSMOVE)8200 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPeaksViewPoint, id=G2gd.wxID_PEAKSVIEWPT)8201 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPeaksDistVP, id=G2gd.wxID_PEAKSDISTVP)8202 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPeaksDA, id=G2gd.wxID_PEAKSDA)8203 G2frame. dataFrame.Bind(wx.EVT_MENU, OnShowBonds, id=G2gd.wxID_SHOWBONDS)8204 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPeaksEquiv, id=G2gd.wxID_FINDEQVPEAKS)8205 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPeaksUnique, id=G2gd.wxID_PEAKSUNIQUE)8206 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPeaksDelete, id=G2gd.wxID_PEAKSDELETE)8207 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPeaksClear, id=G2gd.wxID_PEAKSCLEAR)8764 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.MapPeaksMenu) 8765 G2frame.Bind(wx.EVT_MENU, OnPeaksMove, id=G2G.wxID_PEAKSMOVE) 8766 G2frame.Bind(wx.EVT_MENU, OnPeaksViewPoint, id=G2G.wxID_PEAKSVIEWPT) 8767 G2frame.Bind(wx.EVT_MENU, OnPeaksDistVP, id=G2G.wxID_PEAKSDISTVP) 8768 G2frame.Bind(wx.EVT_MENU, OnPeaksDA, id=G2G.wxID_PEAKSDA) 8769 G2frame.Bind(wx.EVT_MENU, OnShowBonds, id=G2G.wxID_SHOWBONDS) 8770 G2frame.Bind(wx.EVT_MENU, OnPeaksEquiv, id=G2G.wxID_FINDEQVPEAKS) 8771 G2frame.Bind(wx.EVT_MENU, OnPeaksUnique, id=G2G.wxID_PEAKSUNIQUE) 8772 G2frame.Bind(wx.EVT_MENU, OnPeaksDelete, id=G2G.wxID_PEAKSDELETE) 8773 G2frame.Bind(wx.EVT_MENU, OnPeaksClear, id=G2G.wxID_PEAKSCLEAR) 8208 8774 # MC/SA 8209 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.MCSAMenu)8210 G2frame. dataFrame.Bind(wx.EVT_MENU, OnMCSAaddAtom, id=G2gd.wxID_ADDMCSAATOM)8211 G2frame. dataFrame.Bind(wx.EVT_MENU, OnMCSAaddRB, id=G2gd.wxID_ADDMCSARB)8212 G2frame. dataFrame.Bind(wx.EVT_MENU, OnMCSAclear, id=G2gd.wxID_CLEARMCSARB)8213 G2frame. dataFrame.Bind(wx.EVT_MENU, OnMCSAmove, id=G2gd.wxID_MOVEMCSA)8214 G2frame. dataFrame.Bind(wx.EVT_MENU, OnClearResults, id=G2gd.wxID_MCSACLEARRESULTS)8775 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.MCSAMenu) 8776 G2frame.Bind(wx.EVT_MENU, OnMCSAaddAtom, id=G2G.wxID_ADDMCSAATOM) 8777 G2frame.Bind(wx.EVT_MENU, OnMCSAaddRB, id=G2G.wxID_ADDMCSARB) 8778 G2frame.Bind(wx.EVT_MENU, OnMCSAclear, id=G2G.wxID_CLEARMCSARB) 8779 G2frame.Bind(wx.EVT_MENU, OnMCSAmove, id=G2G.wxID_MOVEMCSA) 8780 G2frame.Bind(wx.EVT_MENU, OnClearResults, id=G2G.wxID_MCSACLEARRESULTS) 8215 8781 # Texture 8216 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.TextureMenu)8217 G2frame. dataFrame.Bind(wx.EVT_MENU, OnTextureRefine, id=G2gd.wxID_REFINETEXTURE)8218 # G2frame. dataFrame.Bind(wx.EVT_MENU, OnTextureClear, id=G2gd.wxID_CLEARTEXTURE)8782 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.TextureMenu) 8783 G2frame.Bind(wx.EVT_MENU, OnTextureRefine, id=G2G.wxID_REFINETEXTURE) 8784 # G2frame.Bind(wx.EVT_MENU, OnTextureClear, id=G2G.wxID_CLEARTEXTURE) 8219 8785 # Pawley reflections 8220 FillSelectPageMenu(TabSelectionIdDict, G2frame.data Frame.PawleyMenu)8221 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPawleySet, id=G2gd.wxID_PAWLEYSET)8222 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPawleyLoad, id=G2gd.wxID_PAWLEYLOAD)8223 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPawleyEstimate, id=G2gd.wxID_PAWLEYESTIMATE)8224 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPawleyUpdate, id=G2gd.wxID_PAWLEYUPDATE)8225 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPawleySelAll, id=G2gd.wxID_PAWLEYSELALL)8226 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPawleySelNone, id=G2gd.wxID_PAWLEYSELNONE)8227 G2frame. dataFrame.Bind(wx.EVT_MENU, OnPawleyToggle, id=G2gd.wxID_PAWLEYSELTOGGLE)8786 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.PawleyMenu) 8787 G2frame.Bind(wx.EVT_MENU, OnPawleySet, id=G2G.wxID_PAWLEYSET) 8788 G2frame.Bind(wx.EVT_MENU, OnPawleyLoad, id=G2G.wxID_PAWLEYLOAD) 8789 G2frame.Bind(wx.EVT_MENU, OnPawleyEstimate, id=G2G.wxID_PAWLEYESTIMATE) 8790 G2frame.Bind(wx.EVT_MENU, OnPawleyUpdate, id=G2G.wxID_PAWLEYUPDATE) 8791 G2frame.Bind(wx.EVT_MENU, OnPawleySelAll, id=G2G.wxID_PAWLEYSELALL) 8792 G2frame.Bind(wx.EVT_MENU, OnPawleySelNone, id=G2G.wxID_PAWLEYSELNONE) 8793 G2frame.Bind(wx.EVT_MENU, OnPawleyToggle, id=G2G.wxID_PAWLEYSELTOGGLE) 8228 8794 8229 8795 # UpdatePhaseData execution starts here … … 8245 8811 global rbAtmDict 8246 8812 rbAtmDict = {} 8247 if G2frame.dataDisplay: 8248 G2frame.dataDisplay.Destroy() 8249 PhaseName = G2frame.PatternTree.GetItemText(Item) 8813 PhaseName = G2frame.GPXtree.GetItemText(Item) 8250 8814 G2gd.SetDataMenuBar(G2frame) 8251 G2frame.dataFrame.SetLabel('Phase Data for '+PhaseName) 8252 G2frame.dataFrame.CreateStatusBar() 8253 if GSASIIpath.GetConfigValue('debug'): 8254 G2frame.dataDisplay = G2G.GSNoteBook(parent=G2frame.dataFrame,size=G2frame.dataFrame.GetClientSize(), 8255 style=wx.aui.AUI_NB_DEFAULT_STYLE ^ wx.aui.AUI_NB_CLOSE_ON_ACTIVE_TAB) 8256 else: 8257 G2frame.dataDisplay = G2G.GSNoteBook(parent=G2frame.dataFrame,size=G2frame.dataFrame.GetClientSize()) 8258 G2frame.dataDisplay.gridList = [] # list of all grids in notebook 8815 #G2frame.SetLabel(G2frame.GetLabel().split('||')[0]+' || '+'Phase Data for '+PhaseName) 8816 G2frame.SetTitle('Phase Data for '+PhaseName) 8817 # Bob: why do this differently in debug mode? Is this code to test if tabs can be moved around? #TODO - yup, flaky tho. 8818 # if GSASIIpath.GetConfigValue('debug'): 8819 # G2frame.phaseDisplay = G2G.GSNoteBook(parent=G2frame.dataWindow,size=G2frame.dataWindow.GetClientSize(), 8820 # style=wx.aui.AUI_NB_TOP | wx.aui.AUI_NB_TAB_SPLIT | wx.aui.AUI_NB_TAB_MOVE) 8821 # else: 8822 # G2frame.phaseDisplay = G2G.GSNoteBook(parent=G2frame.dataWindow,size=G2frame.dataWindow.GetClientSize()) 8823 G2frame.phaseDisplay = G2G.GSNoteBook(parent=G2frame.dataWindow) 8824 G2frame.dataWindow.GetSizer().Add(G2frame.phaseDisplay,1,wx.ALL|wx.EXPAND,1) 8825 G2frame.phaseDisplay.gridList = [] # list of all grids in notebook 8259 8826 Pages = [] 8260 G2frame.dataDisplay.gridList = [] 8261 General = wx.ScrolledWindow(G2frame.dataDisplay) 8262 G2frame.dataDisplay.AddPage(General,'General') 8827 General = wx.ScrolledWindow(G2frame.phaseDisplay) 8828 G2frame.phaseDisplay.AddPage(General,'General') 8263 8829 Pages.append('General') 8264 DData = wx.ScrolledWindow(G2frame. dataDisplay)8265 G2frame. dataDisplay.AddPage(DData,'Data')8830 DData = wx.ScrolledWindow(G2frame.phaseDisplay) 8831 G2frame.phaseDisplay.AddPage(DData,'Data') 8266 8832 Pages.append('Data') 8267 Atoms = G2G.GSGrid(G2frame.dataDisplay) 8268 G2frame.dataDisplay.gridList.append(Atoms) 8269 G2frame.dataDisplay.AddPage(Atoms,'Atoms') 8833 Atoms = G2G.GSGrid(G2frame.phaseDisplay) 8834 # Atoms.SetScrollRate(0,0) 8835 G2frame.phaseDisplay.gridList.append(Atoms) 8836 G2frame.phaseDisplay.AddPage(Atoms,'Atoms') 8270 8837 Pages.append('Atoms') 8271 8838 if data['General']['Modulated']: 8272 G2frame.waveData = wx.ScrolledWindow(G2frame. dataDisplay)8273 G2frame. dataDisplay.AddPage(G2frame.waveData,'Wave Data')8839 G2frame.waveData = wx.ScrolledWindow(G2frame.phaseDisplay) 8840 G2frame.phaseDisplay.AddPage(G2frame.waveData,'Wave Data') 8274 8841 Pages.append('Wave Data') 8275 8842 if data['General']['Type'] == 'faulted': 8276 G2frame.layerData = wx.ScrolledWindow(G2frame. dataDisplay)8277 G2frame. dataDisplay.AddPage(G2frame.layerData,'Layers')8843 G2frame.layerData = wx.ScrolledWindow(G2frame.phaseDisplay) 8844 G2frame.phaseDisplay.AddPage(G2frame.layerData,'Layers') 8278 8845 Pages.append('Layers') 8279 drawOptions = wx.ScrolledWindow(G2frame. dataDisplay)8280 G2frame. dataDisplay.AddPage(drawOptions,'Draw Options')8846 drawOptions = wx.ScrolledWindow(G2frame.phaseDisplay) 8847 G2frame.phaseDisplay.AddPage(drawOptions,'Draw Options') 8281 8848 Pages.append('Draw Options') 8282 drawAtoms = G2G.GSGrid(G2frame.dataDisplay) 8283 G2frame.dataDisplay.gridList.append(drawAtoms) 8284 G2frame.dataDisplay.AddPage(drawAtoms,'Draw Atoms') 8849 drawAtoms = G2G.GSGrid(G2frame.phaseDisplay) 8850 # drawAtoms.SetScrollRate(0,0) 8851 G2frame.phaseDisplay.gridList.append(drawAtoms) 8852 G2frame.phaseDisplay.AddPage(drawAtoms,'Draw Atoms') 8285 8853 Pages.append('Draw Atoms') 8286 8854 if data['General']['Type'] not in ['faulted',] and not data['General']['Modulated']: 8287 RigidBodies = wx.ScrolledWindow(G2frame. dataDisplay)8288 G2frame. dataDisplay.AddPage(RigidBodies,'RB Models')8855 RigidBodies = wx.ScrolledWindow(G2frame.phaseDisplay) 8856 G2frame.phaseDisplay.AddPage(RigidBodies,'RB Models') 8289 8857 Pages.append('RB Models') 8290 MapPeaks = G2G.GSGrid(G2frame.dataDisplay) 8291 G2frame.dataDisplay.gridList.append(MapPeaks) 8292 G2frame.dataDisplay.AddPage(MapPeaks,'Map peaks') 8858 MapPeaks = G2G.GSGrid(G2frame.phaseDisplay) 8859 # MapPeaks.SetScrollRate(0,0) 8860 G2frame.phaseDisplay.gridList.append(MapPeaks) 8861 G2frame.phaseDisplay.AddPage(MapPeaks,'Map peaks') 8293 8862 Pages.append('Map peaks') 8294 8863 if data['General']['Type'] not in ['faulted',] and not data['General']['Modulated']: 8295 G2frame.MCSA = wx.ScrolledWindow(G2frame. dataDisplay)8296 G2frame. dataDisplay.AddPage(G2frame.MCSA,'MC/SA')8864 G2frame.MCSA = wx.ScrolledWindow(G2frame.phaseDisplay) 8865 G2frame.phaseDisplay.AddPage(G2frame.MCSA,'MC/SA') 8297 8866 Pages.append('MC/SA') 8298 Texture = wx.ScrolledWindow(G2frame. dataDisplay)8299 G2frame. dataDisplay.AddPage(Texture,'Texture')8867 Texture = wx.ScrolledWindow(G2frame.phaseDisplay) 8868 G2frame.phaseDisplay.AddPage(Texture,'Texture') 8300 8869 Pages.append('Texture') 8301 G2frame.PawleyRefl = G2G.GSGrid(G2frame.dataDisplay) 8302 G2frame.dataDisplay.gridList.append(G2frame.PawleyRefl) 8303 G2frame.dataDisplay.AddPage(G2frame.PawleyRefl,'Pawley reflections') 8870 G2frame.PawleyRefl = G2G.GSGrid(G2frame.phaseDisplay) 8871 # G2frame.PawleyRefl.SetScrollRate(0,0) 8872 G2frame.phaseDisplay.gridList.append(G2frame.PawleyRefl) 8873 G2frame.phaseDisplay.AddPage(G2frame.PawleyRefl,'Pawley reflections') 8304 8874 Pages.append('Pawley reflections') 8305 G2frame.data Frame.AtomCompute.Enable(G2gd.wxID_ISODISP,'ISODISTORT' in data)8306 G2frame.data Frame.AtomCompute.Enable(G2gd.wxID_VALIDPROTEIN,'macro' in data['General']['Type'])8307 G2frame. dataDisplay.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged)8875 G2frame.dataWindow.AtomCompute.Enable(G2G.wxID_ISODISP,'ISODISTORT' in data) 8876 G2frame.dataWindow.AtomCompute.Enable(G2G.wxID_VALIDPROTEIN,'macro' in data['General']['Type']) 8877 G2frame.phaseDisplay.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged) 8308 8878 FillMenus() 8309 8879 if oldPage is None or oldPage == 0: 8310 8880 ChangePage(0) 8311 wx.CallAfter(G2frame.dataDisplay.SendSizeEvent)8881 #wx.CallAfter(G2frame.phaseDisplay.SendSizeEvent) 8312 8882 elif oldPage: 8313 8883 SetupGeneral() # not sure why one might need this when moving from phase to phase; but does not hurt 8314 G2frame. dataDisplay.SetSelection(oldPage)8884 G2frame.phaseDisplay.SetSelection(oldPage)
Note: See TracChangeset
for help on using the changeset viewer.