Changeset 3565
- Timestamp:
- Aug 21, 2018 3:47:14 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIctrlGUI.py
r3561 r3565 2252 2252 ################################################################################ 2253 2253 class MultiFloatDialog(wx.Dialog): 2254 'Dialog to obtain a multi float valuefrom user'2254 'Dialog to obtain multiple values from user' 2255 2255 def __init__(self,parent,title,prompts,values,limits=[[0.,1.],],formats=['%.5g',]): 2256 2256 wx.Dialog.__init__(self,parent,-1,title, … … 2269 2269 Obj = event.GetEventObject() 2270 2270 id,limits,format = Indx[Obj] 2271 try: 2272 val = float(Obj.GetValue()) 2273 if val < limits[0] or val > limits[1]: 2274 raise ValueError 2275 except ValueError: 2276 val = self.values[id] 2277 self.values[id] = val 2278 Obj.SetValue(format%(val)) 2271 if 'bool' in format: 2272 self.values[id] = Obj.GetValue() 2273 else: 2274 try: 2275 val = float(Obj.GetValue()) 2276 if val < limits[0] or val > limits[1]: 2277 raise ValueError 2278 except ValueError: 2279 val = self.values[id] 2280 self.values[id] = val 2281 Obj.SetValue(format%(val)) 2279 2282 2280 2283 Indx = {} … … 2285 2288 for id,[prompt,value,limits,format] in enumerate(zip(self.prompts,self.values,self.limits,self.formats)): 2286 2289 lineSizer.Add(wx.StaticText(self.panel,label=prompt),0,wx.ALIGN_CENTER) 2287 valItem = wx.TextCtrl(self.panel,value=format%(value),style=wx.TE_PROCESS_ENTER) 2290 if 'bool' in format: 2291 valItem = wx.CheckBox(self.panel,label='') 2292 valItem.Bind(wx.EVT_CHECKBOX,OnValItem) 2293 valItem.SetValue(value) 2294 else: 2295 valItem = wx.TextCtrl(self.panel,value=format%(value),style=wx.TE_PROCESS_ENTER) 2296 valItem.Bind(wx.EVT_TEXT_ENTER,OnValItem) 2297 valItem.Bind(wx.EVT_KILL_FOCUS,OnValItem) 2288 2298 Indx[valItem] = [id,limits,format] 2289 2299 lineSizer.Add(valItem,0,wx.ALIGN_CENTER) 2290 valItem.Bind(wx.EVT_TEXT_ENTER,OnValItem)2291 valItem.Bind(wx.EVT_KILL_FOCUS,OnValItem)2292 2300 mainSizer.Add(lineSizer) 2293 2301 OkBtn = wx.Button(self.panel,-1,"Ok") -
trunk/GSASIIdataGUI.py
r3560 r3565 2705 2705 self.ExpandingAll = False 2706 2706 self.SeqTblHideList = None 2707 self.MagPhases = False #will contain possible magnetic phases from Bilbao MAXMAGN2708 2707 self.lastSelectedPhaseTab = None # track the last tab pressed on a phase window 2709 2708 … … 5005 5004 # PDR / Unit Cells List 5006 5005 G2G.Define_wxId('wxID_INDEXPEAKS', 'wxID_REFINECELL', 'wxID_COPYCELL', 'wxID_MAKENEWPHASE', 5007 'wxID_EXPORTCELLS','wxID_LOADCELL','wxID_IMPORTCELL','wxID_TRANSFORMCELL' )5006 'wxID_EXPORTCELLS','wxID_LOADCELL','wxID_IMPORTCELL','wxID_TRANSFORMCELL','wxID_RUNSUBMAG') 5008 5007 self.IndexMenu = wx.MenuBar() 5009 5008 self.PrefillDataMenu(self.IndexMenu) 5010 5009 self.IndexEdit = wx.Menu(title='') 5011 5010 self.IndexMenu.Append(menu=self.IndexEdit, title='Cell Index/Refine') 5012 self.IndexPeaks = self.IndexEdit.Append(G2G.wxID_INDEXPEAKS,'Index Cell','') 5011 self.IndexPeaks = self.IndexEdit.Append(G2G.wxID_INDEXPEAKS,'Index Cell', 5012 'Find cells that index fitted peaks') 5013 self.RunSubGroupsMag = self.IndexEdit.Append(G2G.wxID_RUNSUBMAG,'Run k-SUBGROUPMAG', 5014 'If disabled, do Load Cell first') 5013 5015 self.CopyCell = self.IndexEdit.Append(G2G.wxID_COPYCELL,'Copy Cell', 5014 5016 'Copy selected unit cell from indexing to cell refinement fields') … … 5026 5028 self.PostfillDataMenu() 5027 5029 self.IndexPeaks.Enable(False) 5030 self.RunSubGroupsMag.Enable(False) 5028 5031 self.CopyCell.Enable(False) 5029 5032 self.RefineCell.Enable(False) … … 5198 5201 # Phase / General tab 5199 5202 G2G.Define_wxId('wxID_FOURCALC', 'wxID_FOURSEARCH', 'wxID_FOURCLEAR','wxID_CHARGEFLIP','wxID_VALIDPROTEIN', 5200 'wxID_MULTIMCSA','wxID_SINGLEMCSA', 'wxID_4DCHARGEFLIP', 'wxID_TRANSFORMSTRUCTURE', )5203 'wxID_MULTIMCSA','wxID_SINGLEMCSA', 'wxID_4DCHARGEFLIP', 'wxID_TRANSFORMSTRUCTURE','wxID_USEBILBAOMAG',) 5201 5204 self.DataGeneral = wx.MenuBar() 5202 5205 self.PrefillDataMenu(self.DataGeneral) … … 5213 5216 self.GeneralCalc.Append(G2G.wxID_MULTIMCSA,'Multi MC/SA','Run Monte Carlo - Simulated Annealing on multiprocessors') 5214 5217 self.GeneralCalc.Append(G2G.wxID_TRANSFORMSTRUCTURE,'Transform','Transform crystal structure') 5218 self.GeneralCalc.Append(G2G.wxID_USEBILBAOMAG,'Select magnetic phase','If disabled, make in PWDR/Unit Cells') 5215 5219 self.GeneralCalc.Append(G2G.wxID_VALIDPROTEIN,'Protein quality','Protein quality analysis') 5216 5220 self.PostfillDataMenu() … … 7881 7885 data.append([]) #empty dmin 7882 7886 data.append({}) #empty superlattice stuff 7887 data.append([]) #empty mag cells list 7883 7888 G2frame.GPXtree.SetItemPyData(item,data) 7884 7889 #patch -
trunk/GSASIIphsGUI.py
r3560 r3565 282 282 #NB: commonNames & commonTrans defined in GSASIIdataGUI = G2gd 283 283 ''' 284 def __init__(self,parent,phase s,Trans=np.eye(3),Uvec=np.zeros(3),Vvec=np.zeros(3),ifMag=False,newSpGrp='',BNSlatt=''):284 def __init__(self,parent,phase,Trans=np.eye(3),Uvec=np.zeros(3),Vvec=np.zeros(3),ifMag=False,BNSlatt=''): 285 285 wx.Dialog.__init__(self,parent,wx.ID_ANY,'Setup phase transformation', 286 286 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 287 287 self.panel = wx.Panel(self) #just a dummy - gets destroyed in Draw! 288 self.Phases = phases289 phase = self.Phases['parent']290 288 self.Phase = copy.deepcopy(phase) #will be a new phase! 291 289 # self.Super = phase['General']['Super'] … … 299 297 self.oldSpGrp = phase['General']['SGData']['SpGrp'] 300 298 self.oldSGdata = phase['General']['SGData'] 301 if newSpGrp: 302 self.newSpGrp = newSpGrp 303 else: 304 self.newSpGrp = self.Phase['General']['SGData']['SpGrp'] 299 self.newSpGrp = self.Phase['General']['SGData']['SpGrp'] 305 300 self.SGData = G2spc.SpcGroup(self.newSpGrp)[1] 306 301 self.oldCell = phase['General']['Cell'][1:8] … … 407 402 self.Mtrans = Obj.GetValue() 408 403 409 def OnNewBilbao(event):410 del self.oldSGdata['MAXMAGN']411 self.BNSlatt = ''412 self.Phases = self.Phases['parent']413 self.ifMag = False414 wx.CallAfter(self.Draw)415 416 def OnBilbao(event):417 import MAXMAGN418 oldkvec = self.kvec419 self.Mtrans = True420 SGNo = G2spc.SpaceGroupNumber(self.SGData['SpGrp'])421 if not SGNo+1:422 wx.MessageBox('Nonstandard space group '+self.SGData['SpGrp']+' is not known by MAXMAGN',423 caption='Bilbao MAXMAGN error',style=wx.ICON_EXCLAMATION)424 return425 dlg = G2G.MultiFloatDialog(self,title='Propagation vector',prompts=[' kx',' ky',' kz'],426 values=self.kvec,limits=[[0.,1.],[0.,1.],[0.,1.]],formats=['%4.1f','%4.1f','%4.1f'])427 if dlg.ShowModal() == wx.ID_OK:428 self.kvec = dlg.GetValues()429 if self.kvec != oldkvec or 'MAXMAGN' not in self.oldSGdata:430 wx.BeginBusyCursor()431 self.oldSGdata['MAXMAGN'] = MAXMAGN.MAXMAGN(SGNo,self.kvec)432 wx.EndBusyCursor()433 for result in self.oldSGdata['MAXMAGN']:434 phase = {}435 numbs = [eval(item+'.') for item in result[2].split()]436 phase['Name'] = self.Phases['parent']['General']['Name']+' mag: '+result[0]437 phase['Uvec'] = np.array(numbs[3::4])438 phase['Trans'] = np.array([numbs[:3],numbs[4:7],numbs[8:11]])439 SpGp = result[0].replace("'",'')440 SpGrp = G2spc.StandardizeSpcName(SpGp)441 phase['newSpGrp'] = SpGrp442 phase['SGData'] = G2spc.SpcGroup(SpGrp)[1]443 G2spc.GetSGSpin(phase['SGData'],result[0])444 phase['BNSlatt'] = phase['SGData']['SGLatt']445 if result[1]:446 phase['BNSlatt'] += '_'+result[1]447 BNSsym = G2spc.GetGenSym(phase['SGData'])[2]448 phase['SGData']['BNSlattsym'] = [phase['BNSlatt'],BNSsym[phase['BNSlatt']]]449 G2spc.ApplyBNSlatt(phase['SGData'],phase['SGData']['BNSlattsym'])450 451 phase['SGData']['GenSym'],phase['SGData']['GenFlg'],BNSsym = G2spc.GetGenSym(phase['SGData'])452 phase['SGData']['MagSpGrp'] = G2spc.MagSGSym(phase['SGData'])453 OprNames,phase['SGData']['SpnFlp'] = G2spc.GenMagOps(phase['SGData'])454 self.Phases[result[0]] = phase455 self.Bilbao = ''456 wx.CallAfter(self.Draw)457 458 def OnBilbaoSG(event):459 Obj = event.GetEventObject()460 result = Obj.GetValue()461 self.Bilbao = result462 phase = self.Phases[result]463 self.Uvec = phase['Uvec']464 self.Trans = phase['Trans']465 self.newSpGrp = phase['newSpGrp']466 self.SGData = phase['SGData']467 self.BNSlatt = phase['BNSlatt']468 OprNames = G2spc.GenMagOps(self.SGData)[0]469 470 msg = 'Space Group Information'471 text,table = G2spc.SGPrint(self.SGData,AddInv=True)472 text[0] = ' Magnetic Space Group: '+self.SGData['MagSpGrp']473 text[3] = ' The magnetic lattice point group is '+self.SGData['MagPtGp']474 G2G.SGMagSpinBox(self.panel,msg,text,table,self.SGData['SGCen'],OprNames,475 self.SGData['SpnFlp'],False).Show()476 477 self.Phase['General']['SGData'] = self.SGData478 479 wx.CallAfter(self.Draw)480 404 481 405 self.panel.Destroy() … … 537 461 Mtrans.Bind(wx.EVT_CHECKBOX,OnMtrans) 538 462 MagSizer.Add(Mtrans,0,WACV) 539 Bilbao = wx.Button(self.panel,label='Run Bilbao MAXMAGN')540 Bilbao.Bind(wx.EVT_BUTTON,OnBilbao)541 MagSizer.Add(Bilbao,0,WACV)542 else:543 Bilbao = wx.Button(self.panel,label='Clear MAXMAGN')544 Bilbao.Bind(wx.EVT_BUTTON,OnNewBilbao)545 MagSizer.Add(Bilbao,0,WACV)546 463 mainSizer.Add(MagSizer,0,WACV) 547 464 mainSizer.Add(wx.StaticText(self.panel,label=' Old lattice parameters:'),0,WACV) … … 559 476 sgSizer = wx.BoxSizer(wx.HORIZONTAL) 560 477 sgSizer.Add(wx.StaticText(self.panel,label=' Target space group: '),0,WACV) 561 if self.oldSGdata.get('MAXMAGN',[]): 562 Bilbao = [] 563 for result in self.oldSGdata['MAXMAGN']: 564 Bilbao.append(result[0]) 565 SGTxtB = wx.ComboBox(self.panel,choices=Bilbao,value=self.Bilbao,style=wx.CB_READONLY|wx.CB_DROPDOWN) 566 SGTxtB.Bind(wx.EVT_COMBOBOX,OnBilbaoSG) 567 sgSizer.Add(SGTxtB,0,WACV) 568 else: 569 SGTxt = wx.Button(self.panel,wx.ID_ANY,self.newSpGrp,size=(100,-1)) 570 SGTxt.Bind(wx.EVT_BUTTON,OnSpaceGroup) 571 sgSizer.Add(SGTxt,0,WACV) 478 SGTxt = wx.Button(self.panel,wx.ID_ANY,self.newSpGrp,size=(100,-1)) 479 SGTxt.Bind(wx.EVT_BUTTON,OnSpaceGroup) 480 sgSizer.Add(SGTxt,0,WACV) 572 481 mainSizer.Add(sgSizer,0,WACV) 573 482 if 'magnetic' not in self.Phase['General']['Type']: 574 if self.ifMag and not self.oldSGdata.get('MAXMAGN',[]):483 if self.ifMag: 575 484 GenSym,GenFlg,BNSsym = G2spc.GetGenSym(self.SGData) 576 485 BNSizer = wx.BoxSizer(wx.HORIZONTAL) … … 623 532 if self.Mtrans: 624 533 self.Phase['General']['Cell'][1:] = G2lat.TransformCell(self.oldCell[:6],self.Trans.T) 625 return self.Phase,self.Trans.T,self.Uvec,self.Vvec,self.ifMag,self.ifConstr,self.Common ,self.Phases534 return self.Phase,self.Trans.T,self.Uvec,self.Vvec,self.ifMag,self.ifConstr,self.Common 626 535 else: 627 536 self.Phase['General']['Cell'][1:] = G2lat.TransformCell(self.oldCell[:6],self.Trans) 628 return self.Phase,self.Trans,self.Uvec,self.Vvec,self.ifMag,self.ifConstr,self.Common ,self.Phases537 return self.Phase,self.Trans,self.Uvec,self.Vvec,self.ifMag,self.ifConstr,self.Common 629 538 630 539 def OnOk(self,event): … … 642 551 '''Get user selected magnetic atoms after cell transformation 643 552 ''' 644 def __init__(self,parent,Atoms,atCodes ):553 def __init__(self,parent,Atoms,atCodes,atMxyz): 645 554 wx.Dialog.__init__(self,parent,wx.ID_ANY,'Magnetic atom selection', 646 555 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) … … 648 557 self.Atoms = Atoms 649 558 self.atCodes = atCodes 559 self.atMxyz = atMxyz 650 560 self.Use = len(self.Atoms)*[True,] 651 561 self.Draw() … … 662 572 self.panel = wx.Panel(self) 663 573 Indx = {} 574 Mstr = ['Mx','My','Mz'] 664 575 mainSizer = wx.BoxSizer(wx.VERTICAL) 665 576 666 mainSizer.Add(wx.StaticText(self.panel,label=' Name, x, y, z:'),0,WACV)577 mainSizer.Add(wx.StaticText(self.panel,label=' Name, x, y, z, allowed moments:'),0,WACV) 667 578 atmSizer = wx.FlexGridSizer(0,2,5,5) 668 for iuse,[use,atom] in enumerate(zip(self.Use,self.Atoms)): 579 for iuse,[use,atom,mxyz] in enumerate(zip(self.Use,self.Atoms,self.atMxyz)): 580 mstr = ['___','___','___'] 581 for i,mx in enumerate(mxyz): 582 if mx: 583 mstr[i] = Mstr[i] 669 584 useChk = wx.CheckBox(self.panel,label='Use?') 670 585 Indx[useChk.GetId()] = iuse … … 672 587 useChk.Bind(wx.EVT_CHECKBOX, OnUseChk) 673 588 atmSizer.Add(useChk,0,WACV) 674 text = ' %s %10.5f %10.5f %10.5f'%(atom[0],atom[3],atom[4],atom[5])589 text = ' %s %10.5f %10.5f %10.5f %4s %4s %4s '%(atom[0],atom[3],atom[4],atom[5],mstr[0],mstr[1],mstr[2]) 675 590 atmSizer.Add(wx.StaticText(self.panel,label=text),0,WACV) 676 591 mainSizer.Add(atmSizer) … … 2448 2363 Vvec = np.zeros(3) 2449 2364 ifMag = False 2450 newSpGrp = ''2451 2365 BNSlatt = '' 2452 if not G2frame.MagPhases:2453 G2frame.MagPhases = {'parent':data}2454 else:2455 G2frame.MagPhases['parent'] = data2456 2366 while True: 2457 dlg = TransformDialog(G2frame, G2frame.MagPhases,Trans,Uvec,Vvec,ifMag,newSpGrp,BNSlatt)2367 dlg = TransformDialog(G2frame,data,Trans,Uvec,Vvec,ifMag,BNSlatt) 2458 2368 try: 2459 2369 if dlg.ShowModal() == wx.ID_OK: 2460 newPhase,Trans,Uvec,Vvec,ifMag,ifConstr,Common,MagPhases = dlg.GetSelection() 2461 G2frame.MagPhases = MagPhases 2462 newSpGrp = newPhase['General']['SGData']['SpGrp'] 2370 newPhase,Trans,Uvec,Vvec,ifMag,ifConstr,Common = dlg.GetSelection() 2463 2371 if ifMag: 2464 2372 BNSlatt = newPhase['General']['SGData']['BNSlattsym'][0] … … 2483 2391 newPhase,atCodes = G2lat.TransformPhase(data,newPhase,Trans,Uvec,Vvec,ifMag) 2484 2392 detTrans = np.abs(nl.det(Trans)) 2485 2486 newPhase['ParentId'] = data['ranId']2487 2393 generalData = newPhase['General'] 2488 2394 SGData = generalData['SGData'] … … 2490 2396 Atoms = newPhase['Atoms'] 2491 2397 if ifMag: 2492 dlg = UseMagAtomDialog(G2frame,Atoms,atCodes) 2398 atMxyz = [] 2399 SGData['GenSym'],SGData['GenFlg'],BNSsym = G2spc.GetGenSym(SGData) 2400 SGData['OprNames'],SGData['SpnFlp'] = G2spc.GenMagOps(SGData) 2401 SGData['MagSpGrp'] = G2spc.MagSGSym(SGData) 2402 for atom in Atoms: 2403 SytSym,Mul,Nop,dupDir = G2spc.SytSym(atom[3:6],SGData) 2404 CSI = G2spc.GetCSpqinel(SGData['SpnFlp'],dupDir) 2405 atMxyz.append(CSI[0]) 2406 print (atom[3:6],CSI) 2407 dlg = UseMagAtomDialog(G2frame,Atoms,atCodes,atMxyz) 2493 2408 try: 2494 2409 if dlg.ShowModal() == wx.ID_OK: 2495 2410 newPhase['Atoms'],atCodes = dlg.GetSelection() 2496 SGData['GenSym'],SGData['GenFlg'],BNSsym = G2spc.GetGenSym(SGData)2497 SGData['OprNames'],SGData['SpnFlp'] = G2spc.GenMagOps(SGData)2498 SGData['MagSpGrp'] = G2spc.MagSGSym(SGData)2499 2411 generalData['Lande g'] = len(generalData['AtomTypes'])*[2.,] 2500 2412 break … … 2519 2431 if ifConstr: 2520 2432 G2cnstG.TransConstraints(G2frame,data,newPhase,Trans,Vvec,atCodes) #data is old phase 2433 G2frame.GPXtree.SelectItem(sub) 2434 2435 def OnUseBilbao(event): 2436 PatternName = data['magPhases'] 2437 PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,PatternName) 2438 UnitCellsId = G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List') 2439 magData = G2frame.GPXtree.GetItemPyData(UnitCellsId)[5] 2440 magKeep = [] 2441 magchoices = [] 2442 for magdata in magData: 2443 if magdata['Keep']: 2444 magKeep.append(magdata) 2445 magchoices.append(magdata['Name']) 2446 if not len(magKeep): 2447 G2frame.ErrorDialog('Magnetic phase selection error','No magnetic phases found; be sure to "Keep" some') 2448 return 2449 dlg = wx.SingleChoiceDialog(G2frame,'Select magnetic space group','Make new magnetic phase',magchoices) 2450 if dlg.ShowModal() == wx.ID_OK: 2451 vvec = np.zeros(3) 2452 magchoice = magKeep[dlg.GetSelection()] 2453 phaseName = magchoice['Name']+ 'mag' 2454 newPhase = copy.deepcopy(data) 2455 del newPhase['magPhases'] 2456 newPhase,atCodes = G2lat.TransformPhase(data,newPhase,magchoice['Trans'],magchoice['Uvec'],vvec,True) 2457 detTrans = np.abs(nl.det(magchoice['Trans'])) 2458 generalData = newPhase['General'] 2459 generalData['SGData'] = copy.deepcopy(magchoice['SGData']) 2460 SGData = generalData['SGData'] 2461 Atoms = newPhase['Atoms'] 2462 atMxyz = [] 2463 for atom in Atoms: 2464 SytSym,Mul,Nop,dupDir = G2spc.SytSym(atom[3:6],SGData) 2465 CSI = G2spc.GetCSpqinel(SGData['SpnFlp'],dupDir) 2466 atMxyz.append(CSI[0]) 2467 dlg = UseMagAtomDialog(G2frame,Atoms,atCodes,atMxyz) 2468 try: 2469 if dlg.ShowModal() == wx.ID_OK: 2470 newPhase['Atoms'],atCodes = dlg.GetSelection() 2471 generalData['Lande g'] = len(generalData['AtomTypes'])*[2.,] 2472 else: 2473 return 2474 finally: 2475 dlg.Destroy() 2476 NShkl = len(G2spc.MustrainNames(SGData)) 2477 NDij = len(G2spc.HStrainNames(SGData)) 2478 UseList = newPhase['Histograms'] 2479 for hist in UseList: 2480 UseList[hist]['Scale'] /= detTrans #scale by 1/volume ratio 2481 UseList[hist]['Mustrain'][4:6] = [NShkl*[0.01,],NShkl*[False,]] 2482 UseList[hist]['HStrain'] = [NDij*[0.0,],NDij*[False,]] 2483 newPhase['General']['Map'] = mapDefault.copy() 2484 sub = G2frame.GPXtree.AppendItem(parent= 2485 G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Phases'),text=phaseName) 2486 G2frame.GPXtree.SetItemPyData(sub,newPhase) 2487 newPhase['Drawing'] = [] 2488 G2cnstG.TransConstraints(G2frame,data,newPhase,magchoice['Trans'],vvec,atCodes) #data is old phase 2521 2489 G2frame.GPXtree.SelectItem(sub) 2522 2490 … … 9181 9149 G2frame.Bind(wx.EVT_MENU, OnRunMultiMCSA, id=G2G.wxID_MULTIMCSA) 9182 9150 G2frame.Bind(wx.EVT_MENU, OnTransform, id=G2G.wxID_TRANSFORMSTRUCTURE) 9151 G2frame.Bind(wx.EVT_MENU, OnUseBilbao, id=G2G.wxID_USEBILBAOMAG) 9183 9152 G2frame.Bind(wx.EVT_MENU, OnValidProtein, id=G2G.wxID_VALIDPROTEIN) 9184 9153 # Data … … 9375 9344 G2frame.dataWindow.AtomCompute.Enable(G2G.wxID_ISODISP,'ISODISTORT' in data) 9376 9345 G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_VALIDPROTEIN,'macro' in data['General']['Type']) 9346 G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_USEBILBAOMAG,'magPhases' in data) 9377 9347 G2frame.phaseDisplay.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged) 9378 9348 FillMenus() -
trunk/GSASIIplot.py
r3561 r3565 1891 1891 else: 1892 1892 pickIdText = '?' # unexpected 1893 if pickIdText in ['Index Peak List', 1894 'Unit Cells List','Reflection Lists'] and len(G2frame.HKL): 1893 if pickIdText in ['Index Peak List','Unit Cells List','Reflection Lists'] and len(G2frame.HKL): 1895 1894 found = [] 1896 1895 indx = -1 -
trunk/GSASIIpwd.py
r3561 r3565 1037 1037 :param A: lattice parameter terms A1-A6 1038 1038 :param Inst: instrument parameter info 1039 :returns: HKLs: listhkl, etc for allowed reflections1039 :returns: HKLs: np.array hkl, etc for allowed reflections 1040 1040 1041 1041 ''' … … 1051 1051 else: 1052 1052 HKLs.append([h,k,l,d,G2lat.Dsp2pos(Inst,d),-1]) 1053 return HKLs1053 return np.array(HKLs) 1054 1054 1055 1055 def getHKLMpeak(dmin,Inst,SGData,SSGData,Vec,maxH,A): -
trunk/GSASIIpwdGUI.py
r3562 r3565 2673 2673 if len(Unit) == 4: #patch 2674 2674 Unit.append({}) 2675 controls,bravais,cellist,dmin,ssopt = Unit 2675 if len(Unit) == 5: #patch 2676 Unit.append({}) 2677 controls,bravais,cellist,dmin,ssopt,magcells = Unit 2676 2678 if 'T' in Inst['Type'][0]: #TOF - use other limit! 2677 2679 dmin = G2lat.Pos2dsp(Inst,Limits[1][0]) … … 2977 2979 PatternId = G2frame.PatternId 2978 2980 peaks = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Index Peak List')) 2979 controls,bravais,cells,dminx,ssopt = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List'))2981 controls,bravais,cells,dminx,ssopt,magcells = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List')) 2980 2982 cell = controls[6:12] 2981 2983 A = G2lat.cell2A(cell) … … 3041 3043 3042 3044 def LoadUnitCell(event): 3043 controls,bravais,cells,dminx,ssopt = G2frame.GPXtree.GetItemPyData(UnitCellsId)3045 controls,bravais,cells,dminx,ssopt,magcells = G2frame.GPXtree.GetItemPyData(UnitCellsId) 3044 3046 pId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root, 'Phases') 3045 3047 if not pId: return … … 3052 3054 if pNum is None: return 3053 3055 Phase = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,pId,Phases[pNum])) 3056 Phase['magPhases'] = G2frame.GPXtree.GetItemText(G2frame.PatternId) #use as reference for recovering possible mag phases 3054 3057 Cell = Phase['General']['Cell'] 3055 3058 SGData = Phase['General']['SGData'] … … 3059 3062 controls[6:13] = Cell[1:8] 3060 3063 controls[13] = SGData['SpGrp'] 3064 if 'N' in Inst['Type'][0]: 3065 G2frame.dataWindow.RunSubGroupsMag.Enable(True) 3061 3066 G2frame.dataWindow.RefineCell.Enable(True) 3062 3067 OnHklShow(None) … … 3108 3113 return 3109 3114 print (' Refine cell') 3110 controls,bravais,cells,dminx,ssopt = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List'))3115 controls,bravais,cells,dminx,ssopt,magcells = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List')) 3111 3116 cell = controls[6:12] 3112 3117 A = G2lat.cell2A(cell) … … 3138 3143 peaks = [G2indx.IndexPeaks(peaks[0],G2frame.HKL)[1],peaks[1]] #put peak fit esds back in peaks 3139 3144 Lhkl,M20,X20,Aref,Zero = G2indx.refinePeaksT(peaks[0],difC,ibrav,A,controls[1],controls[0]) 3140 G2frame.HKL = np.array(G2frame.HKL)3141 3145 controls[1] = Zero 3142 3146 controls[6:12] = G2lat.A2cell(Aref) … … 3151 3155 else: 3152 3156 G2frame.HKL = G2pwd.getHKLpeak(dmin,SGData,A,Inst) 3153 data = [controls,bravais,cells,dmin,ssopt] 3157 G2frame.HKL = np.array(G2frame.HKL) 3158 data = [controls,bravais,cells,dmin,ssopt,magcells] 3154 3159 G2frame.GPXtree.SetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List'),data) 3155 3160 print (" %s%10.3f" % ('refinement M20 = ',M20)) … … 3174 3179 keepcells = [] 3175 3180 try: 3176 controls,bravais,cells,dminx,ssopt = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List'))3181 controls,bravais,cells,dminx,ssopt,magcells = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List')) 3177 3182 for cell in cells: 3178 3183 if cell[11]: … … 3211 3216 if OK: 3212 3217 cells[0][10] = True #select best M20 3213 data = [controls,bravais,cells,dmin,ssopt ]3218 data = [controls,bravais,cells,dmin,ssopt,magcells] 3214 3219 G2frame.GPXtree.SetItemPyData(G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List'),data) 3215 3220 bestCell = cells[0] … … 3259 3264 UnitCellsTable.SetValue(r,c,True) 3260 3265 gridDisplay.ForceRefresh() 3266 G2frame.GPXtree.SetItemPyData(UnitCellsId,data) 3267 3268 def RefreshMagCellsGrid(event): 3269 data = G2frame.GPXtree.GetItemPyData(UnitCellsId) 3270 magcells = data[5] 3271 r,c = event.GetRow(),event.GetCol() 3272 if magcells: 3273 if c == 1: 3274 for i in range(len(magcells)): 3275 magcells[i]['Use'] = False 3276 MagCellsTable.SetValue(i,c,False) 3277 MagCellsTable.SetValue(r,c,True) 3278 magDisplay.ForceRefresh() 3279 magcells[r]['Use'] = True 3280 SGData = magcells[r]['SGData'] 3281 A = G2lat.cell2A(magcells[r]['Cell'][:6]) 3282 G2frame.HKL = G2pwd.getHKLpeak(1.0,SGData,A,Inst) 3283 G2plt.PlotPatterns(G2frame) 3284 elif c == 2: 3285 if MagCellsTable.GetValue(r,c): 3286 MagCellsTable.SetValue(r,c,False) 3287 magcells[r]['Keep'] = False 3288 else: 3289 magcells[r]['Keep'] = True 3290 MagCellsTable.SetValue(r,c,True) 3291 magDisplay.ForceRefresh() 3292 data[5] = magcells 3261 3293 G2frame.GPXtree.SetItemPyData(UnitCellsId,data) 3262 3294 … … 3347 3379 ifMag = False 3348 3380 Type = 'nuclear' 3349 newSpGrp = ''3350 3381 BNSlatt = '' 3351 3382 E,SGData = G2spc.SpcGroup(controls[13]) 3352 3383 phase = {'General':{'Name':'','Type':Type,'Cell':['',]+controls[6:13],'SGData':SGData}} 3353 if not G2frame.MagPhases: 3354 G2frame.MagPhases = {'parent':phase} 3355 else: 3356 G2frame.MagPhases['parent'] = phase #do I want to do this or reverse?? 3357 dlg = G2phsG.TransformDialog(G2frame,G2frame.MagPhases,Trans,Uvec,Vvec,ifMag,newSpGrp,BNSlatt) 3384 dlg = G2phsG.TransformDialog(G2frame,phase,Trans,Uvec,Vvec,ifMag,BNSlatt) 3358 3385 try: 3359 3386 if dlg.ShowModal() == wx.ID_OK: 3360 newPhase,Trans,Uvec,Vvec,ifMag,ifConstr,Common,MagPhases = dlg.GetSelection() 3361 G2frame.MagPhases = MagPhases 3387 newPhase,Trans,Uvec,Vvec,ifMag,ifConstr,Common = dlg.GetSelection() 3362 3388 sgData = newPhase['General']['SGData'] 3363 3389 controls[5] = sgData['SGLatt']+sgData['SGLaue'] … … 3372 3398 wx.CallAfter(UpdateUnitCellsGrid,G2frame,data) 3373 3399 3400 def OnRunSubsMag(event): 3401 import kSUBGROUPSMAG as kMAG 3402 controls,bravais,cells,dminx,ssopt,magcells = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,G2frame.PatternId, 'Unit Cells List')) 3403 E,SGData = G2spc.SpcGroup(controls[13]) 3404 kvec = [0.,0.,0.] 3405 dlg = G2G.MultiFloatDialog(G2frame,title='k-SUBGROUPSMAG options',prompts=[' kx',' ky',' kz',' Use whole star',' Landau transition',' Give intermediate cells'], 3406 values=kvec+[False,False,False],limits=[[0.,1.],[0.,1.],[0.,1.],[True,False],[True,False],[True,False]],formats=['%4.1f','%4.1f','%4.1f','bool','bool','bool']) 3407 if dlg.ShowModal() == wx.ID_OK: 3408 magcells = [] 3409 newVals = dlg.GetValues() 3410 kvec = newVals[:3] 3411 star = newVals[3] 3412 Landau = newVals[4] 3413 intermed = newVals[5] 3414 wx.BeginBusyCursor() 3415 MAXMAGN = kMAG.GetNonStdSubgroupsmag(SGData,kvec,star,Landau,intermed) 3416 wx.EndBusyCursor() 3417 for result in MAXMAGN: 3418 if result[0].strip().endswith("1'"): #skip gray groups 3419 continue 3420 phase = {} 3421 numbs = [eval(item+'.') for item in result[2].split()] 3422 phase['Name'] = result[0].strip() 3423 phase['Uvec'] = np.array(numbs[3::4]) 3424 phase['Trans'] = np.array([numbs[:3],numbs[4:7],numbs[8:11]]) 3425 phase['Cell'] = G2lat.TransformCell(controls[6:12],phase['Trans'].T) 3426 phase['Keep'] = False 3427 phase['Use'] = False 3428 SpGp = result[0].replace("'",'') 3429 SpGrp = G2spc.StandardizeSpcName(SpGp) 3430 phase['SGData'] = G2spc.SpcGroup(SpGrp)[1] 3431 G2spc.GetSGSpin(phase['SGData'],result[0]) 3432 phase['BNSlatt'] = phase['SGData']['SGLatt'] 3433 if result[1]: 3434 phase['BNSlatt'] += '_'+result[1] 3435 BNSsym = G2spc.GetGenSym(phase['SGData'])[2] 3436 phase['SGData']['BNSlattsym'] = [phase['BNSlatt'],BNSsym[phase['BNSlatt']]] 3437 G2spc.ApplyBNSlatt(phase['SGData'],phase['SGData']['BNSlattsym']) 3438 phase['SGData']['GenSym'],phase['SGData']['GenFlg'],BNSsym = G2spc.GetGenSym(phase['SGData']) 3439 phase['SGData']['MagSpGrp'] = G2spc.MagSGSym(phase['SGData']) 3440 OprNames,SpnFlp = G2spc.GenMagOps(phase['SGData']) 3441 phase['SGData']['SpnFlp'] = SpnFlp 3442 magcells.append(phase) 3443 magcells[0]['Use'] = True 3444 SGData = magcells[0]['SGData'] 3445 A = G2lat.cell2A(magcells[0]['Cell'][:6]) 3446 G2frame.HKL = G2pwd.getHKLpeak(1.0,SGData,A,Inst) 3447 G2plt.PlotPatterns(G2frame) 3448 data = [controls,bravais,cells,dmin,ssopt,magcells] 3449 G2frame.GPXtree.SetItemPyData(G2gd.GetGPXtreeItemId(G2frame,G2frame.PatternId, 'Unit Cells List'),data) 3450 wx.CallAfter(UpdateUnitCellsGrid,G2frame,data) 3451 3374 3452 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.IndexMenu) 3375 3453 G2frame.Bind(wx.EVT_MENU, OnIndexPeaks, id=G2G.wxID_INDEXPEAKS) 3454 G2frame.Bind(wx.EVT_MENU, OnRunSubsMag, id=G2G.wxID_RUNSUBMAG) 3376 3455 G2frame.Bind(wx.EVT_MENU, CopyUnitCell, id=G2G.wxID_COPYCELL) 3377 3456 G2frame.Bind(wx.EVT_MENU, LoadUnitCell, id=G2G.wxID_LOADCELL) … … 3382 3461 G2frame.Bind(wx.EVT_MENU, OnExportCells, id=G2G.wxID_EXPORTCELLS) 3383 3462 3384 controls,bravais,cells,dminx,ssopt = data 3463 if len(data) < 6: 3464 data.append([]) 3465 controls,bravais,cells,dminx,ssopt,magcells = data 3385 3466 if len(controls) < 13: #add cell volume if missing 3386 3467 controls.append(G2lat.calc_V(G2lat.cell2A(controls[6:12]))) … … 3416 3497 G2frame.dataWindow.MakeNewPhase.Enable(True) 3417 3498 G2frame.dataWindow.ExportCells.Enable(True) 3499 # G2frame.dataWindow.RunSubGroupsMag.Enable(False) 3418 3500 G2frame.dataWindow.ClearData() 3419 3501 mainSizer = G2frame.dataWindow.GetSizer() … … 3639 3721 gridDisplay.SetReadOnly(r,c,isReadOnly=True) 3640 3722 mainSizer.Add(gridDisplay,0,WACV) 3723 if magcells and 'N' in Inst['Type'][0]: 3724 if 'N' in Inst['Type'][0]: 3725 G2frame.dataWindow.RunSubGroupsMag.Enable(True) 3726 mainSizer.Add(wx.StaticText(parent=G2frame.dataWindow,label='\n Magnetic cells from Bilbao k-SUBGROUPSMAG:'),0,WACV) 3727 rowLabels = [] 3728 colLabels = ['Space Gp.','Try','Keep','a','b','c','alpha','beta','gamma','Volume'] 3729 Types = [wg.GRID_VALUE_STRING,wg.GRID_VALUE_BOOL,wg.GRID_VALUE_BOOL,]+3*[wg.GRID_VALUE_FLOAT+':10,5',]+ \ 3730 3*[wg.GRID_VALUE_FLOAT+':10,3',]+[wg.GRID_VALUE_FLOAT+':10,2'] 3731 table = [] 3732 for phase in magcells: 3733 rowLabels.append('') 3734 cell = list(phase['Cell']) 3735 row = [phase['Name'],phase['Use'],phase['Keep'],]+cell 3736 table.append(row) 3737 MagCellsTable = G2G.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types) 3738 magDisplay = G2G.GSGrid(G2frame.dataWindow) 3739 magDisplay.SetTable(MagCellsTable, True) 3740 magDisplay.Bind(wg.EVT_GRID_CELL_LEFT_CLICK,RefreshMagCellsGrid) 3741 magDisplay.SetRowLabelSize(0) 3742 magDisplay.AutoSizeColumns(False) 3743 for r in range(magDisplay.GetNumberRows()): 3744 for c in range(magDisplay.GetNumberCols()): 3745 if c in [1,2]: 3746 magDisplay.SetReadOnly(r,c,isReadOnly=False) 3747 else: 3748 magDisplay.SetReadOnly(r,c,isReadOnly=True) 3749 mainSizer.Add(magDisplay,0,WACV) 3750 3641 3751 G2frame.dataWindow.SetDataSize() 3642 3752 -
trunk/GSASIIspc.py
r3562 r3565 535 535 536 536 def TextGen(SGData,reverse=False): 537 GenSym,GenFlg,BNSsym = GetGenSym(SGData) 538 SGData['GenSym'] = GenSym 539 SGData['GenFlg'] = GenFlg 537 540 text,table = SGPrint(SGData) 538 541 GenText = [] 542 OprNames = GetOprNames(SGData) 539 543 OpText = TextOps(text,table,reverse) 540 for gid in SGData['GenFlg']: 544 for name in SGData['GenSym']: 545 gid = OprNames.index(name.replace(' ','')) 541 546 GenText.append(OpText[gid]) 547 if len(SGData['SGCen']) > 1: 548 GenText.append(OpText[-1]) 542 549 return GenText 550 551 def GetOprNames(SGData): 552 OprNames = [GetOprPtrName(str(irtx)) for irtx in PackRot(SGData['SGOps'])] 553 if SGData['SGInv']: 554 OprNames += [GetOprPtrName(str(-irtx)) for irtx in PackRot(SGData['SGOps'])] 555 return OprNames 543 556 544 557 def MT2text(Opr,reverse=False):
Note: See TracChangeset
for help on using the changeset viewer.