Changeset 3686 for trunk/GSASIIpwdGUI.py
- Timestamp:
- Oct 22, 2018 8:58:53 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIpwdGUI.py
r3685 r3686 3137 3137 if pNum is None: return 3138 3138 Phase = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,pId,Phases[pNum])) 3139 Phase['magPhases'] = G2frame.GPXtree.GetItemText(G2frame.PatternId) #use as reference for recovering possible magphases3139 Phase['magPhases'] = G2frame.GPXtree.GetItemText(G2frame.PatternId) #use as reference for recovering possible phases 3140 3140 Cell = Phase['General']['Cell'] 3141 3141 SGData = Phase['General']['SGData'] … … 3153 3153 if 'R' in controls[5]: controls[5] = 'R3-H' 3154 3154 controls[6:13] = Cell[1:8] 3155 cx,ct,cs,cia = Phase['General']['AtomPtrs'] 3156 controls[15] = [atom[:cx+3] for atom in Phase['Atoms']] 3155 3157 if 'N' in Inst['Type'][0]: 3156 testAtoms = []3157 cx,ct,cs,cia = Phase['General']['AtomPtrs']3158 Atoms = Phase['Atoms']3159 for atom in Atoms:3160 if len(G2elem.GetMFtable([atom[ct],],[2.0,])):3161 testAtoms.append(atom[:cx+3])3162 controls[15] = testAtoms3163 3158 if not ssopt.get('Use',False): 3164 3159 G2frame.dataWindow.RunSubGroupsMag.Enable(True) … … 3420 3415 phase = magcells[r] 3421 3416 mSGData = phase['SGData'] 3422 msg = 'Magnetic space group information for '+phase['Name']3423 3417 text,table = G2spc.SGPrint(mSGData,AddInv=True) 3424 text[0] = ' Magnetic Space Group: '+mSGData['MagSpGrp'] 3425 text[3] = ' The magnetic lattice point group is '+mSGData['MagPtGp'] 3426 OprNames,SpnFlp = G2spc.GenMagOps(mSGData) 3427 G2G.SGMagSpinBox(G2frame.dataWindow,msg,text,table,mSGData['SGCen'],OprNames, 3428 mSGData['SpnFlp'],False).Show() 3418 if 'magAtoms' in phase: 3419 msg = 'Magnetic space group information for '+phase['Name'] 3420 text[0] = ' Magnetic Space Group: '+mSGData['MagSpGrp'] 3421 text[3] = ' The magnetic lattice point group is '+mSGData['MagPtGp'] 3422 OprNames,SpnFlp = G2spc.GenMagOps(mSGData) 3423 G2G.SGMagSpinBox(G2frame.dataWindow,msg,text,table,mSGData['SGCen'],OprNames, 3424 mSGData['SpnFlp'],False).Show() 3425 else: 3426 msg = 'Space Group Information' 3427 G2G.SGMessageBox(G2frame.dataWindow,msg,text,table).Show() 3429 3428 elif c == 1: 3430 3429 for i in range(len(magcells)): … … 3448 3447 elif c ==3: 3449 3448 r = event.GetRow() 3450 allmom = magcells[0].get('allmom',False)3451 magAtms = magcells[0].get('magAtms','')3452 3449 maxequiv = magcells[0].get('maxequiv',100) 3453 3450 phase = magcells[r] … … 3455 3452 Uvec = phase['Uvec'] 3456 3453 Trans = phase['Trans'] 3457 mAtoms = TestMagAtoms(phase,magAtms,SGData,Uvec,Trans,allmom,maxequiv) 3454 ifMag = False 3455 if 'magAtms' in magcells[r]: 3456 ifMag = True 3457 allmom = magcells[r].get('allmom',False) 3458 magAtms = magcells[r].get('magAtms','') 3459 mAtoms = TestMagAtoms(phase,magAtms,SGData,Uvec,Trans,allmom,maxequiv) 3460 else: 3461 mAtoms = TestAtoms(phase,controls[15],SGData,Uvec,Trans,maxequiv) 3458 3462 Atms = [] 3459 3463 AtCods = [] … … 3462 3466 atom[0] += '_%d'%ia 3463 3467 SytSym,Mul,Nop,dupDir = G2spc.SytSym(atom[2:5],mSGData) 3464 CSI = G2spc.GetCSpqinel(mSGData['SpnFlp'],dupDir)3465 3468 Atms.append(atom[:2]+['',]+atom[2:5]) 3466 3469 AtCods.append('1') 3467 MagSytSym = G2spc.MagSytSym(SytSym,dupDir,mSGData) 3468 atMxyz.append([MagSytSym,CSI[0]]) 3469 G2phsG.UseMagAtomDialog(G2frame,magcells[r]['Name'],Atms,AtCods,atMxyz,ifOK=True).ShowModal() 3470 if 'magAtms' in magcells[r]: 3471 MagSytSym = G2spc.MagSytSym(SytSym,dupDir,mSGData) 3472 CSI = G2spc.GetCSpqinel(mSGData['SpnFlp'],dupDir) 3473 atMxyz.append([MagSytSym,CSI[0]]) 3474 else: 3475 CSI = G2spc.GetCSxinel(SytSym) 3476 atMxyz.append([SytSym,CSI[0]]) 3477 G2phsG.UseMagAtomDialog(G2frame,magcells[r]['Name'],Atms,AtCods,atMxyz,ifMag=ifMag,ifOK=True).ShowModal() 3470 3478 data = [controls,bravais,cells,dminx,ssopt,magcells] 3471 3479 G2frame.GPXtree.SetItemPyData(UnitCellsId,data) … … 3631 3639 return uAtms 3632 3640 3641 def TestAtoms(phase,magAtms,SGData,Uvec,Trans,maxequiv=100): 3642 phase['Keep'] = False 3643 if not magAtms: 3644 phase['Keep'] = True 3645 return [] 3646 invTrans = nl.inv(Trans) 3647 atCodes = [] 3648 Phase = {'General':{'AtomPtrs':[2,1],'SGData':copy.deepcopy(phase['SGData'])},'Atoms':[]} 3649 for matm in magAtms: 3650 XYZ = G2spc.GenAtom(matm[3:6],SGData,False,Move=True) 3651 xyzs = [xyz[0] for xyz in XYZ] 3652 atCodes += len(xyzs)*['1',] 3653 xyzs,atCodes = G2lat.ExpandCell(xyzs,atCodes,0,Trans) 3654 for ix,x in enumerate(xyzs): 3655 xyz = G2lat.TransformXYZ(x-Uvec,invTrans.T,np.zeros(3))%1. 3656 Phase['Atoms'].append(matm[:2]+list(xyz)) 3657 uAtms = G2lat.GetUnique(Phase,atCodes)[0] 3658 natm = len(uAtms) 3659 if natm > maxequiv: #too many allowed atoms found 3660 phase['Keep'] = False 3661 return uAtms 3662 3633 3663 def OnRunSubs(event): 3634 # import SUBGROUPS as kSUB 3664 import kSUBGROUPSMAG as kMAG 3635 3665 G2frame.dataWindow.RunSubGroupsMag.Enable(False) 3636 3666 pUCid = G2gd.GetGPXtreeItemId(G2frame,G2frame.PatternId, 'Unit Cells List') 3637 3667 controls,bravais,cells,dminx,ssopt,magcells = G2frame.GPXtree.GetItemPyData(pUCid) 3638 3668 E,SGData = G2spc.SpcGroup(controls[13]) 3669 atoms = list(set([atom[1] for atom in controls[15]])) 3639 3670 Kx = [' ','0','1/2','-1/2','1/3','-1/3','2/3','1'] 3640 3671 Ky = [' ','0','1/2','1/3','2/3','1'] … … 3643 3674 dlg = G2G.MultiDataDialog(G2frame,title='SUBGROUPS options',prompts=[' k-vector 1',' k-vector 2',' k-vector 3', \ 3644 3675 ' Use whole star',' Filter by','preserve axes','max unique'], 3645 values=kvec+[False,'',True, '',False,100],3676 values=kvec+[False,'',True,100], 3646 3677 limits=[[Kx[1:],Ky[1:],Kz[1:]],[Kx,Ky,Kz],[Kx,Ky,Kz],[True,False],['',' Landau transition',' Only maximal subgroups',], 3647 3678 [True,False],[1,100]], … … 3649 3680 'bool','%d',]) 3650 3681 if dlg.ShowModal() == wx.ID_OK: 3651 subcells = []3682 magcells = [] 3652 3683 newVals = dlg.GetValues() 3653 3684 kvec[:9] = newVals[0]+newVals[1]+newVals[2]+[' ',] … … 3674 3705 caption='Bilbao SUBGROUPS setup error',style=wx.ICON_EXCLAMATION) 3675 3706 return 3676 print('run Bilbao SUBGROUPS - TBD') 3707 wx.BeginBusyCursor() 3708 wx.MessageBox(''' For use of SUBGROUPS, please cite: 3709 Symmetry-Based Computational Tools for Magnetic Crystallography, 3710 J.M. Perez-Mato, S.V. Gallego, E.S. Tasci, L. Elcoro, G. de la Flor, and M.I. Aroyo 3711 Annu. Rev. Mater. Res. 2015. 45,217-48. 3712 doi: 10.1146/annurev-matsci-070214-021008''',caption='Bilbao SUBGROUPS',style=wx.ICON_INFORMATION) 3713 3714 SUBGROUPS = kMAG.GetNonStdSubgroups(SGData,kvec[:9],star,Landau,maximal) 3715 wx.EndBusyCursor() 3716 if SUBGROUPS is None: 3717 wx.MessageBox('Check your internet connection?',caption='Bilbao SUBGROUPS error',style=wx.ICON_EXCLAMATION) 3718 return 3719 if not SUBGROUPS: 3720 if Landau: 3721 wx.MessageBox('No results from SUBGROUPS, multi k-vectors & Landau not compatible', 3722 caption='Bilbao SUBGROUPS error',style=wx.ICON_EXCLAMATION) 3723 else: 3724 wx.MessageBox('No results from SUBGROUPS, check your propagation vector(s)', 3725 caption='Bilbao SUBGROUPS error',style=wx.ICON_EXCLAMATION) 3726 return 3727 controls[14] = kvec[:9] 3728 dlg = wx.ProgressDialog('SUBGROUPS results','Processing '+SUBGROUPS[0][0],len(SUBGROUPS), 3729 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME) 3730 3731 for ir,result in enumerate(SUBGROUPS): 3732 dlg.Update(ir,newmsg='Processing '+result[0]) 3733 numbs = [eval(item+'.') for item in result[1].split()] 3734 Uvec = np.array(numbs[3::4]) 3735 Trans = np.array([numbs[:3],numbs[4:7],numbs[8:11]]).T #Bilbao gives transpose 3736 phase = G2lat.makeBilbaoPhase(result,Uvec,Trans) 3737 RVT = None 3738 if keepaxes: 3739 RVT = G2lat.FindNonstandard(controls,phase) 3740 if RVT is not None: 3741 result,Uvec,Trans = RVT 3742 phase = G2lat.makeBilbaoPhase(result,Uvec,Trans) 3743 phase['Cell'] = G2lat.TransformCell(controls[6:12],Trans) 3744 phase['maxequiv'] = maxequiv 3745 phase['nAtoms'] = len(TestAtoms(phase,controls[15],SGData,Uvec,Trans,maxequiv)) 3746 magcells.append(phase) 3747 dlg.Destroy() 3748 magcells[0]['Use'] = True 3749 SGData = magcells[0]['SGData'] 3750 A = G2lat.cell2A(magcells[0]['Cell'][:6]) 3751 G2frame.HKL = G2pwd.getHKLpeak(1.0,SGData,A,Inst) 3752 G2plt.PlotPatterns(G2frame,extraKeys=KeyList) 3753 data = [controls,bravais,cells,dmin,ssopt,magcells] 3754 G2frame.GPXtree.SetItemPyData(pUCid,data) 3755 G2frame.OnFileSave(event) 3756 wx.CallAfter(UpdateUnitCellsGrid,G2frame,data) 3677 3757 3678 3758 def OnRunSubsMag(event): … … 3682 3762 controls,bravais,cells,dminx,ssopt,magcells = G2frame.GPXtree.GetItemPyData(pUCid) 3683 3763 E,SGData = G2spc.SpcGroup(controls[13]) 3684 testAtoms = ['',]+list(set([atom[1] for atom in controls[15]])) 3764 atoms = list(set([atom[1] for atom in controls[15]])) 3765 testAtoms = ['',]+[atom for atom in atoms if len(G2elem.GetMFtable([atom,],[2.0,]))] 3685 3766 Kx = [' ','0','1/2','-1/2','1/3','-1/3','2/3','1'] 3686 3767 Ky = [' ','0','1/2','1/3','2/3','1'] … … 3754 3835 Uvec = np.array(numbs[3::4]) 3755 3836 Trans = np.array([numbs[:3],numbs[4:7],numbs[8:11]]).T #Bilbao gives transpose 3756 phase = G2lat.makeBilbaoPhase(result[:2],Uvec,Trans) 3757 3837 phase = G2lat.makeBilbaoPhase(result[:2],Uvec,Trans,True) 3758 3838 RVT = None 3759 3839 if keepaxes: … … 3761 3841 if RVT is not None: 3762 3842 result,Uvec,Trans = RVT 3763 phase = G2lat.makeBilbaoPhase(result,Uvec,Trans )3843 phase = G2lat.makeBilbaoPhase(result,Uvec,Trans,True) 3764 3844 phase['Cell'] = G2lat.TransformCell(controls[6:12],Trans) 3765 3845 phase['aType'] = atype … … 4056 4136 gridDisplay.SetReadOnly(r,c,isReadOnly=True) 4057 4137 mainSizer.Add(gridDisplay,0,WACV) 4058 if magcells and 'N' in Inst['Type'][0]: 4059 if 'N' in Inst['Type'][0]: 4060 if not ssopt.get('Use',False): 4061 G2frame.dataWindow.RunSubGroupsMag.Enable(True) 4138 if magcells: 4062 4139 G2frame.dataWindow.CopyCell.Enable(False) 4063 4140 kvec1 = ','.join(controls[14][:3]) 4064 4141 kvec2 = ','.join(controls[14][3:6]) 4065 4142 kvec3 = ','.join(controls[14][6:]) 4066 Label = '\n Magnetic cells from Bilbao k-SUBGROUPSMAG for %s; kvec1=(%s)'%(controls[13],kvec1) 4143 if 'magAtms' in magcells[0]: 4144 G2frame.dataWindow.RunSubGroupsMag.Enable(True) 4145 Label = '\n Magnetic subgroup cells from Bilbao k-SUBGROUPSMAG for %s; kvec1=(%s)'%(controls[13],kvec1) 4146 else: 4147 G2frame.dataWindow.RunSubGroups.Enable(True) 4148 Label = '\n Subgroup cells from Bilbao SUBGROUPS for %s; kvec1=(%s)'%(controls[13],kvec1) 4067 4149 if ' ' not in kvec2: 4068 4150 Label += ', kvec2=(%s)' % kvec2
Note: See TracChangeset
for help on using the changeset viewer.