Changeset 3317
- Timestamp:
- Mar 16, 2018 12:24:43 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIconstrGUI.py
r3302 r3317 1218 1218 return 1219 1219 constraints = G2frame.GPXtree.GetItemPyData(item) 1220 # GSASIIpath.IPyBreak()1221 1220 parmDict = {} 1222 1221 varyList = [] -
trunk/GSASIIctrlGUI.py
r3298 r3317 3607 3607 self.nextval = self.startValue 3608 3608 val = self._tc.GetValue().lower().strip() 3609 if val != s elf.startValue:3609 if val != str(self.startValue): 3610 3610 changed = True 3611 3611 neg = False -
trunk/GSASIIphsGUI.py
r3312 r3317 80 80 self.table = table 81 81 self.names = names 82 Nnames = len(self.names) 82 83 self.spins = spins 83 84 self.PrintTable = [' Magnetic symmetry operations for %s:'%self.text[0].split(':')[1],] … … 99 100 tableSizer = wx.FlexGridSizer(0,2*ncol+3,0,0) 100 101 j = 0 101 Red = False102 102 for item in self.table: 103 if 'for' in item: 104 mainSizer.Add(tableSizer,0,WACV) 105 mainSizer.Add(wx.StaticText(self.panel,label=item),0,WACV) 106 tableSizer = wx.FlexGridSizer(0,2*ncol+3,0,0) 107 continue 103 108 flds = item.split(')')[1] 104 109 tableSizer.Add(wx.StaticText(self.panel,label=' (%2d) '%(j+1)),0,WACV) … … 111 116 text = wx.StaticText(self.panel,label='%s '%(fld)) 112 117 tableSizer.Add(text,0,WACV) 113 text = wx.StaticText(self.panel,label=' (%s) '%(self.names[j ]))118 text = wx.StaticText(self.panel,label=' (%s) '%(self.names[j%Nnames])) 114 119 try: 115 if self.spins[j+ic*lentable] < 0 or Red:120 if self.spins[j+ic*lentable] < 0: 116 121 text.SetForegroundColour('Red') 117 122 item += ',-1' … … 119 124 item += ',+1' 120 125 except IndexError: 121 print(self.spins,j,ic,lentable,self.names[j ])126 print(self.spins,j,ic,lentable,self.names[j%Nnames]) 122 127 item += ',+1' 123 128 M,T,S = G2spc.MagText2MTS(item.split(')')[1].replace(' ',''),CIF=False) … … 147 152 btnsizer.AddButton(OKbtn) 148 153 btnsizer.Realize() 154 OKbtn.SetFocus() 149 155 mainSizer.Add((0,10)) 150 156 mainSizer.Add(btnsizer,0) … … 468 474 return 469 475 SGData['BNSlattsym'] = [BNSlatt,BNSsym[BNSlatt]] 476 SGData['SGSpin'] = [1,]*len(SGData['SGSpin']) 470 477 self.Trans = G2spc.ApplyBNSlatt(SGData,SGData['BNSlattsym']) 471 478 wx.CallAfter(self.Draw) … … 1835 1842 1836 1843 def OnShowSpins(event): 1837 showSpins.SetValue(False)1838 1844 msg = 'Magnetic space group information' 1839 1845 text,table = G2spc.SGPrint(SGData,AddInv=not SGData['SGFixed']) … … 1874 1880 SGData['OprNames'] = OprNames 1875 1881 spinSizer.Add(wx.StaticText(General,label=' Magnetic space group: %s '%(MagSym)),0,WACV) 1876 showSpins = wx. CheckBox(General,label=' Show spins?')1877 showSpins.Bind(wx.EVT_ CHECKBOX,OnShowSpins)1882 showSpins = wx.Button(General,label=' Show spins?') 1883 showSpins.Bind(wx.EVT_BUTTON,OnShowSpins) 1878 1884 spinSizer.Add(showSpins,0,WACV) 1879 1885 magSizer.Add(spinSizer) … … 1942 1948 modSizer.Add(superGp,0,WACV) 1943 1949 modSizer.Add((5,5),0) 1944 showOps = wx. CheckBox(General,label='Show ops.')1945 showOps.Bind(wx.EVT_ CHECKBOX,OnSuperGp)1950 showOps = wx.Button(General,label='Show ops.') 1951 showOps.Bind(wx.EVT_BUTTON,OnSuperGp) 1946 1952 modSizer.Add(showOps,0,WACV) 1947 1953 if PWDR: … … 2737 2743 atId = atomData[row][colIA+8] 2738 2744 rbExcl = rbAtmDict.get(atId,'') 2739 Atoms.SetReadOnly(row,colType,True)2740 Atoms.SetReadOnly(row,colSS,True) #site sym2741 Atoms.SetReadOnly(row,colSS+1,True) #Mult2742 2745 if Atoms.GetCellValue(row,colIA) == 'A': 2743 2746 try: #patch for sytsym name changes … … 2766 2769 if colM: 2767 2770 SytSym,Mul,Nop,dupDir = G2spc.SytSym(atomData[row][colX:colX+3],SGData) 2771 MagSytSym = G2spc.MagSytSym(SytSym,dupDir,SGData) 2772 Atoms.SetCellValue(row,colSS,MagSytSym) 2768 2773 CSI = [] 2769 2774 if not SGData['SGGray']: … … 2785 2790 if c != colR: 2786 2791 Atoms.SetCellStyle(row,c,VERY_LIGHT_GREY,True) 2792 Atoms.SetReadOnly(row,colType,True) 2793 Atoms.SetReadOnly(row,colSS,True) #site sym 2794 Atoms.SetReadOnly(row,colSS+1,True) #Mult 2787 2795 Atoms.AutoSizeColumns(False) 2788 2796 SetPhaseWindow(Atoms) -
trunk/GSASIIspc.py
r3311 r3317 77 77 SGSymbol = SGSymbol.replace("1'",'') 78 78 SGSymbol = SGSymbol.split(':')[0] #remove :1/2 setting symbol from some cif files 79 if '-2' in SGSymbol: #replace bad but legal symbols with correct equivalents 80 SGSymbol = SGSymbol.replace('-2','m') 81 if SGSymbol.split()[1] =='3/m': 82 SGSymbol = SGSymbol.replace('3/m','-6') 79 83 import pyspg 80 84 SGInfo = pyspg.sgforpy(SGSymbol) … … 210 214 SGData['SGSpin'] = lattSpin+[1,1,] 211 215 elif SGData['SGPtGrp'] in ['2/m','4/m','422','4mm','-42m','-4m2','-3m1','-31m', 212 '6/m','622','6mm','-6m2','-62m','m3','m -3m']:216 '6/m','622','6mm','-6m2','-62m','m3','m3m']: 213 217 SGData['SGSpin'] = lattSpin+[1,1,1,] 214 218 else: #'222'-'mmm','4/mmm','6/mmm' 215 219 SGData['SGSpin'] = lattSpin+[1,1,1,1,] 216 217 218 220 return SGInfo[-1],SGData 219 221 … … 385 387 return '432',[] 386 388 else: 387 return 'm -3m',[]389 return 'm3m',[] 388 390 389 391 def SGPrint(SGData,AddInv=False): … … 569 571 570 572 ''' 571 OprNames = [GetOprPtrName(str(irtx)) [1]for irtx in PackRot(SGData['SGOps'])]573 OprNames = [GetOprPtrName(str(irtx)) for irtx in PackRot(SGData['SGOps'])] 572 574 if SGData['SGInv']: 573 OprNames += [GetOprPtrName(str(-irtx)) [1]for irtx in PackRot(SGData['SGOps'])]575 OprNames += [GetOprPtrName(str(-irtx)) for irtx in PackRot(SGData['SGOps'])] 574 576 Nsyms = len(SGData['SGOps']) 575 if SGData['SGInv'] : Nsyms *= 2577 if SGData['SGInv'] and not SGData['SGFixed']: Nsyms *= 2 576 578 UsymOp = ['1',] 577 579 OprFlg = [0,] … … 697 699 if 'P' in SGData['SGLatt']: 698 700 if SGData['SGSys'] == 'triclinic': 699 BNSsym = {'P (a)':[.5,0,0],'P(b)':[0,.5,0],'P(c)':[0,0,.5]}701 BNSsym = {'P_a':[.5,0,0],'P_b':[0,.5,0],'P_c':[0,0,.5]} 700 702 elif SGData['SGSys'] == 'monoclinic': 701 BNSsym = {'P (a)':[.5,0,0],'P(b)':[0,.5,0],'P(c)':[0,0,.5]}703 BNSsym = {'P_a':[.5,0,0],'P_b':[0,.5,0],'P_c':[0,0,.5]} 702 704 if SGData['SGUniq'] == 'a': 703 BNSsym.update({'P (B)':[.5,0,.5],'P(C)':[.5,.5,0]})705 BNSsym.update({'P_B':[.5,0,.5],'P_C':[.5,.5,0]}) 704 706 elif SGData['SGUniq'] == 'b': 705 BNSsym.update({'P (A)':[.5,.5,0],'P(C)':[0,.5,.5]})707 BNSsym.update({'P_A':[.5,.5,0],'P_C':[0,.5,.5]}) 706 708 elif SGData['SGUniq'] == 'c': 707 BNSsym.update({'P (A)':[0,.5,.5],'P(B)':[.5,0,.5]})709 BNSsym.update({'P_A':[0,.5,.5],'P_B':[.5,0,.5]}) 708 710 elif SGData['SGSys'] == 'orthorhombic': 709 BNSsym = {'P (a)':[.5,0,0],'P(b)':[0,.5,0],'P(c)':[0,0,.5],710 'P (A)':[0,.5,.5],'P(B)':[.5,0,.5],'P(C)':[.5,.5,0],'P(I)':[.5,.5,.5]}711 BNSsym = {'P_a':[.5,0,0],'P_b':[0,.5,0],'P_c':[0,0,.5], 712 'P_A':[0,.5,.5],'P_B':[.5,0,.5],'P_C':[.5,.5,0],'P_I':[.5,.5,.5]} 711 713 elif SGData['SGSys'] == 'tetragonal': 712 BNSsym = {'P (c)':[0,0,.5],'P(C)':[.5,.5,0],'P(I)':[.5,.5,.5]}714 BNSsym = {'P_c':[0,0,.5],'P_C':[.5,.5,0],'P_I':[.5,.5,.5]} 713 715 elif SGData['SGSys'] in ['trigonal','hexagonal']: 714 BNSsym = {'P (c)':[0,0,.5]}716 BNSsym = {'P_c':[0,0,.5]} 715 717 elif SGData['SGSys'] == 'cubic': 716 BNSsym = {'P (I)':[.5,.5,.5]}718 BNSsym = {'P_I':[.5,.5,.5]} 717 719 718 720 elif 'A' in SGData['SGLatt']: … … 720 722 BNSsym = {} 721 723 if SGData['SGUniq'] == 'b': 722 BNSsym.update({'A (a)':[.5,0,0],'A(c)':[0,0,.5]})724 BNSsym.update({'A_a':[.5,0,0],'A_c':[0,0,.5]}) 723 725 elif SGData['SGUniq'] == 'c': 724 BNSsym.update({'A (a)':[.5,0,0],'A(b)':[0,.5,0]})726 BNSsym.update({'A_a':[.5,0,0],'A_b':[0,.5,0]}) 725 727 elif SGData['SGSys'] == 'orthorhombic': 726 BNSsym = {'A (a)':[.5,0,0],'A(b)':[0,.5,0],'A(c)':[0,0,.5],727 'A (B)':[.5,0,.5],'A(C)':[.5,.5,0]}728 BNSsym = {'A_a':[.5,0,0],'A_b':[0,.5,0],'A_c':[0,0,.5], 729 'A_B':[.5,0,.5],'A_C':[.5,.5,0]} 728 730 elif SGData['SGSys'] == 'triclinic': 729 BNSsym = {'A (a)':[.5,0,0],'A(b)':[0,.5,0],'A(c)':[0,0,.5]}731 BNSsym = {'A_a':[.5,0,0],'A_b':[0,.5,0],'A_c':[0,0,.5]} 730 732 731 733 elif 'B' in SGData['SGLatt']: … … 733 735 BNSsym = {} 734 736 if SGData['SGUniq'] == 'a': 735 BNSsym.update({'B (b)':[0,.5,0],'B(c)':[0,0,.5]})737 BNSsym.update({'B_b':[0,.5,0],'B_c':[0,0,.5]}) 736 738 elif SGData['SGUniq'] == 'c': 737 BNSsym.update({'B (a)':[.5,0,0],'B(b)':[0,.5,0]})739 BNSsym.update({'B_a':[.5,0,0],'B_b':[0,.5,0]}) 738 740 elif SGData['SGSys'] == 'orthorhombic': 739 BNSsym = {'B (a)':[.5,0,0],'B(b)':[0,.5,0],'B(c)':[0,0,.5],740 'B (A)':[0,.5,.5],'B(C)':[.5,.5,0]}741 BNSsym = {'B_a':[.5,0,0],'B_b':[0,.5,0],'B_c':[0,0,.5], 742 'B_A':[0,.5,.5],'B_C':[.5,.5,0]} 741 743 elif SGData['SGSys'] == 'triclinic': 742 BNSsym = {'B (a)':[.5,0,0],'B(b)':[0,.5,0],'B(c)':[0,0,.5]}744 BNSsym = {'B_a':[.5,0,0],'B_b':[0,.5,0],'B_c':[0,0,.5]} 743 745 744 746 elif 'C' in SGData['SGLatt']: … … 746 748 BNSsym = {} 747 749 if SGData['SGUniq'] == 'a': 748 BNSsym.update({'C (b)':[0,.5,.0],'C(c)':[0,0,.5]})750 BNSsym.update({'C_b':[0,.5,.0],'C_c':[0,0,.5]}) 749 751 elif SGData['SGUniq'] == 'b': 750 BNSsym.update({'C (a)':[.5,0,0],'C(c)':[0,0,.5]})752 BNSsym.update({'C_a':[.5,0,0],'C_c':[0,0,.5]}) 751 753 elif SGData['SGSys'] == 'orthorhombic': 752 BNSsym = {'C (a)':[.5,0,0],'C(b)':[0,.5,0],'C(c)':[0,0,.5],753 'C (A)':[0,.5,.5],'C(B)':[.5,0,.5]}754 BNSsym = {'C_a':[.5,0,0],'C_b':[0,.5,0],'C_c':[0,0,.5], 755 'C_A':[0,.5,.5],'C_B':[.5,0,.5]} 754 756 elif SGData['SGSys'] == 'triclinic': 755 BNSsym = {'C (a)':[.5,0,0],'C(b)':[0,.5,0],'C(c)':[0,0,.5]}757 BNSsym = {'C_a':[.5,0,0],'C_b':[0,.5,0],'C_c':[0,0,.5]} 756 758 757 759 elif 'I' in SGData['SGLatt']: 758 760 if SGData['SGSys'] in ['monoclinic','orthorhombic','triclinic']: 759 BNSsym = {'I (a)':[.5,0,0],'I(b)':[0,.5,0],'I(c)':[0,0,.5]}761 BNSsym = {'I_a':[.5,0,0],'I_b':[0,.5,0],'I_c':[0,0,.5]} 760 762 elif SGData['SGSys'] == 'tetragonal': 761 BNSsym = {'I (c)':[0,0,.5]}763 BNSsym = {'I_c':[0,0,.5]} 762 764 elif SGData['SGSys'] == 'cubic': 763 765 BNSsym = {} … … 765 767 elif 'F' in SGData['SGLatt']: 766 768 if SGData['SGSys'] in ['monoclinic','orthorhombic','cubic','triclinic']: 767 BNSsym = {'F (S)':[.5,.5,.5]}769 BNSsym = {'F_S':[.5,.5,.5]} 768 770 769 771 elif 'R' in SGData['SGLatt']: 770 BNSsym = {'R (I)':[0,0,.5]}772 BNSsym = {'R_I':[0,0,.5]} 771 773 return UsymOp,OprFlg,BNSsym 772 774 … … 776 778 A = np.array(BNSlatt[1]) 777 779 SGCen = SGData['SGCen'] 778 if ' (a)' in BNS:780 if '_a' in BNS: 779 781 Tmat[0,0] = 2.0 780 elif ' (b)' in BNS:782 elif '_b' in BNS: 781 783 Tmat[1,1] = 2.0 782 elif ' (c)' in BNS:784 elif '_c' in BNS: 783 785 Tmat[2,2] = 2.0 784 elif ' (A)' in BNS:786 elif '_A' in BNS: 785 787 Tmat[0,0] = 2.0 786 elif ' (B)' in BNS:788 elif '_B' in BNS: 787 789 Tmat[1,1] = 2.0 788 elif ' (C)' in BNS:790 elif '_C' in BNS: 789 791 Tmat[2,2] = 2.0 790 elif ' (I)' in BNS:792 elif '_I' in BNS: 791 793 Tmat *= 2.0 792 794 SGData['SGSpin'][-1] = -1 793 795 if 'R' in BNS: 794 796 SGData['SGSpin'][-1] = -1 795 elif ' (S)' in BNS:797 elif '_S' in BNS: 796 798 SGData['SGSpin'][-1] = -1 797 799 SGData['SGSpin'] += [-1,-1,-1,] … … 803 805 SGData['SGCen'] = np.vstack((SGCen,C))%1. 804 806 return Tmat 805 807 806 808 def CheckSpin(isym,SGData): 807 809 ''' Check for exceptions in spin rules 808 810 ''' 809 if SGData['SpGrp'] in ['C c','C 1 c 1','A a','A 1 a 1','B b 1 1','C c 1 1', 810 'A 1 1 a','B 1 1 b','I -4']: 811 if SGData['SGSpin'][:2] == [-1,-1]: 812 SGData['SGSpin'][(isym+1)%2] = 1 813 elif SGData['SpGrp'] in ['C 2/c','C 1 2/c 1','A 2/a','A 1 2/a 1','B 2/b 1 1','C 2/c 1 1', 814 'A 1 1 2/a','B 1 1 2/b']: 815 if SGData['SGSpin'][1:3] == [-1,-1]: 816 SGData['SGSpin'][isym%2+1] = 1 817 elif SGData['SGPtGrp'] in ['222','mm2','2mm','m2m']: 818 if SGData['SGSpin'][0]*SGData['SGSpin'][1]*SGData['SGSpin'][2] < 0: 819 SGData['SGSpin'][(isym+1)%3] *= -1 811 if SGData['SGPtGrp'] in ['222','mm2','2mm','m2m']: #only 2/3 can be red; not 1/3 or 3/3 812 if SGData['SGSpin'][1]*SGData['SGSpin'][2]*SGData['SGSpin'][3] < 0: 813 SGData['SGSpin'][(isym+1)%3+1] *= -1 820 814 if SGData['SpGrp'][0] == 'F' and isym > 2: 821 SGData['SGSpin'][(isym+1)%3+3] *= -1815 SGData['SGSpin'][(isym+1)%3+3] == 1 822 816 elif SGData['SGPtGrp'] == 'mmm': 823 817 if SGData['SpGrp'][0] == 'F' and isym > 2: 824 SGData['SGSpin'][(isym+1)%3+3] *= -1 825 elif SGData['SGSpin'][3] < 0: 826 if SGData['SpGrp'] in ['C m m a','A b m m','B m c m','B m a m','C m m b','A c m m', 827 'C c c a','A b a a','B b c b','B b a b','C c c b','A c a a','I b c a','I c a b']: 828 for i in [0,1,2]: 829 if i != isym and SGData['SGSpin'][i] < 0: 830 SGData['SGSpin'][i] = 1 831 elif SGData['SpGrp'] in ['I m m a','I b m m','I m c m','I m a m','I m m b','I c m m']: 832 if SGData['SGSpin'][0]*SGData['SGSpin'][1]*SGData['SGSpin'][2] < 0: 833 SGData['SGSpin'][(isym+1)%3] *= -1 834 elif SGData['SpGrp'] in ['I -4 m 2','I -4 c 2']: 835 if SGData['SGSpin'][2] < 0: 836 if 'm' in SGData['SpGrp']: 837 SGData['SGSpin'][1] = 1 838 elif isym < 2: 839 if SGData['SGSpin'][isym] < 0: 840 SGData['SGSpin'][:2] = [-1,-1] 841 else: 842 SGData['SGSpin'][:2] = [1,1] 843 else: 844 SGData['SGSpin'][:2] = [1,1] 845 818 SGData['SGSpin'][(isym+1)%3+3] == 1 819 846 820 def MagSGSym(SGData): #needs to use SGPtGrp not SGLaue! 847 821 SGLaue = SGData['SGLaue'] … … 1029 1003 Ptsym[1] += "'" 1030 1004 SGData['MagPtGp'] = '3'.join(Ptsym) 1031 elif SGData['SGPtGrp'] == 'm -3m':1005 elif SGData['SGPtGrp'] == 'm3m': 1032 1006 Ptsym = ['m','3','m'] 1033 1007 if SpnFlp[1:3] == [-1,1]: … … 1050 1024 magSym[0] = SGData.get('BNSlattsym',[SGData['SGLatt'],[0,0,0]])[0] 1051 1025 return ' '.join(magSym) 1052 1026 1053 1027 def MagText2MTS(mcifOpr,CIF=True): 1054 1028 "From magnetic space group cif text returns matrix/translation + spin flip" 1055 1029 XYZ = {'x':[1,0,0],'+x':[1,0,0],'-x':[-1,0,0],'y':[0,1,0],'+y':[0,1,0],'-y':[0,-1,0], 1056 'z':[0,0,1],'+z':[0,0,1],'-z':[0,0,-1],'x-y':[1,-1,0],'-x+y':[-1,1,0],'y-x':[-1,1,0]} 1030 'z':[0,0,1],'+z':[0,0,1],'-z':[0,0,-1],'x-y':[1,-1,0],'-x+y':[-1,1,0],'y-x':[-1,1,0], 1031 '+x-y':[1,-1,0],'+y-x':[-1,1,0]} 1057 1032 ops = mcifOpr.split(",") 1058 1033 M = [] … … 1108 1083 Ncv = len(SGData['SGCen']) 1109 1084 sgOp = [M for M,T in SGData['SGOps']] 1110 OprName = [GetOprPtrName(str(irtx))[1]for irtx in PackRot(SGData['SGOps'])]1111 if SGData['SGInv'] and not SGData .get('SGFixed',False):1085 oprName = [GetOprPtrName(str(irtx)) for irtx in PackRot(SGData['SGOps'])] 1086 if SGData['SGInv'] and not SGData['SGFixed'] and not SGData['SGGray']: 1112 1087 Nsym *= 2 1113 1088 sgOp += [-M for M,T in SGData['SGOps']] 1114 OprName += [GetOprPtrName(str(-irtx))[1]for irtx in PackRot(SGData['SGOps'])]1089 oprName += [GetOprPtrName(str(-irtx)) for irtx in PackRot(SGData['SGOps'])] 1115 1090 Nsyms = 0 1116 1091 sgOps = [] … … 1119 1094 Nsyms += Nsym 1120 1095 sgOps += sgOp 1121 OprNames += OprName1096 OprNames += oprName 1122 1097 SpnFlp = np.ones(Nsym,dtype=np.int) 1123 1098 GenFlg = SGData.get('GenFlg',[0]) 1099 Ngen = len(SGData['SGGen']) 1124 1100 # print ('GenFlg:',SGData['GenFlg']) 1125 1101 # print ('GenSym:',SGData['GenSym']) … … 1127 1103 for ieqv in range(Nsym): 1128 1104 for iunq in range(Nfl): 1129 if SGData['SGGen'][ieqv ] & GenFlg[iunq]:1105 if SGData['SGGen'][ieqv%Ngen] & GenFlg[iunq]: 1130 1106 SpnFlp[ieqv] *= FlpSpn[iunq] 1131 1107 # print ('\nMagSpGrp:',SGData['MagSpGrp'],Ncv) … … 1801 1777 :param Move: True move generated atom positions to be inside cell 1802 1778 False do not move atoms 1803 :return: [[XYZEquiv],Idup,[UijEquiv] ]1779 :return: [[XYZEquiv],Idup,[UijEquiv],spnflp] 1804 1780 1805 1781 * [XYZEquiv] is list of equivalent positions (XYZ is first entry) … … 1808 1784 Cell = unit cell translations needed to put new positions inside cell 1809 1785 [UijEquiv] - equivalent Uij; absent if no Uij given 1786 * +1/-1 for spin inversion of operator - empty if not magnetic 1810 1787 1811 1788 ''' … … 1818 1795 if SGData['SGFixed']: 1819 1796 inv = 1 1797 SpnFlp = SGData.get('SpnFlp',[]) 1798 spnflp = [] 1820 1799 X = np.array(XYZ) 1800 mj = 0 1821 1801 if Move: 1822 1802 X = MoveToUnitCell(X)[0] … … 1852 1832 Cell.append(cell) 1853 1833 if len(Uij): 1854 UijEquiv.append(newUij) 1834 UijEquiv.append(newUij) 1835 if len(SpnFlp): 1836 spnflp.append(SpnFlp[mj]) 1837 else: 1838 spnflp.append(1) 1839 mj += 1 1855 1840 if len(Uij): 1856 return zip(XYZEquiv,UijEquiv,Idup,Cell )1841 return zip(XYZEquiv,UijEquiv,Idup,Cell,spnflp) 1857 1842 else: 1858 return zip(XYZEquiv,Idup,Cell )1843 return zip(XYZEquiv,Idup,Cell,spnflp) 1859 1844 1860 1845 def GenHKL(HKL,SGData): … … 1964 1949 #### Site symmetry tables 1965 1950 ################################################################################ 1966 1967 OprPtrName = { 1968 '-6643':[ 2,' 1bar ', 1],'6479' :[ 10,' 2z ', 2],'-6479':[ 9,' mz ', 3], 1969 '6481' :[ 7,' my ', 4],'-6481':[ 6,' 2y ', 5],'6641' :[ 4,' mx ', 6], 1970 '-6641':[ 3,' 2x ', 7],'6591' :[ 28,' m+-0 ', 8],'-6591':[ 27,' 2+-0 ', 9], 1971 '6531' :[ 25,' m110 ',10],'-6531':[ 24,' 2110 ',11],'6537' :[ 61,' 4z ',12], 1972 '-6537':[ 62,' -4z ',13],'975' :[ 68,' 3+++1',14],'6456' :[ 114,' 3z1 ',15], 1973 '-489' :[ 73,' 3+-- ',16],'483' :[ 78,' 3-+- ',17],'-969' :[ 83,' 3--+ ',18], 1974 '819' :[ 22,' m+0- ',19],'-819' :[ 21,' 2+0- ',20],'2431' :[ 16,' m0+- ',21], 1975 '-2431':[ 15,' 20+- ',22],'-657' :[ 19,' m101 ',23],'657' :[ 18,' 2101 ',24], 1976 '1943' :[ 48,' -4x ',25],'-1943':[ 47,' 4x ',26],'-2429':[ 13,' m011 ',27], 1977 '2429' :[ 12,' 2011 ',28],'639' :[ 55,' -4y ',29],'-639' :[ 54,' 4y ',30], 1978 '-6484':[ 146,' 2010 ', 4],'6484' :[ 139,' m010 ', 5],'-6668':[ 145,' 2100 ', 6], 1979 '6668' :[ 138,' m100 ', 7],'-6454':[ 148,' 2120 ',18],'6454' :[ 141,' m120 ',19], 1980 '-6638':[ 149,' 2210 ',20],'6638' :[ 142,' m210 ',21], #search ends here 1981 '2223' :[ 68,' 3+++2',39], 1982 '6538' :[ 106,' 6z1 ',40],'-2169':[ 83,' 3--+2',41],'2151' :[ 73,' 3+--2',42], 1983 '2205' :[ 79,'-3-+-2',43],'-2205':[ 78,' 3-+-2',44],'489' :[ 74,'-3+--1',45], 1984 '801' :[ 53,' 4y1 ',46],'1945' :[ 47,' 4x3 ',47],'-6585':[ 62,' -4z3 ',48], 1985 '6585' :[ 61,' 4z3 ',49],'6584' :[ 114,' 3z2 ',50],'6666' :[ 106,' 6z5 ',51], 1986 '6643' :[ 1,' Iden ',52],'-801' :[ 55,' -4y1 ',53],'-1945':[ 48,' -4x3 ',54], 1987 '-6666':[ 105,' -6z5 ',55],'-6538':[ 105,' -6z1 ',56],'-2223':[ 69,'-3+++2',57], 1988 '-975' :[ 69,'-3+++1',58],'-6456':[ 113,' -3z1 ',59],'-483' :[ 79,'-3-+-1',60], 1989 '969' :[ 84,'-3--+1',61],'-6584':[ 113,' -3z2 ',62],'2169' :[ 84,'-3--+2',63], 1990 '-2151':[ 74,'-3+--2',64],'0':[0,' ????',0] 1991 } 1992 1951 1993 1952 OprName = { 1994 '-6643':' -1 ','6479' :' 2(z)','-6479':' m(z)', 1995 '6481' :' m(y)','-6481':' 2(y)','6641' :' m(x)', 1996 '-6641':' 2(x)','6591' :' m(+-0)','-6591':' 2(+-0)', 1997 '6531' :' m(110) ','-6531':' 2(110) ','6537' :' 4(001)', 1998 '-6537':' -4(001)','975' :' 3(111)','6456' :' 3 ', 1999 '-489' :' 3(+--)','483' :' 3(-+-)','-969' :' 3(--+)', 2000 '819' :' m(+0-)','-819' :' 2(+0-)','2431' :' m(0+-)', 2001 '-2431':' 2(0+-)','-657' :' m(xz)','657' :' 2(xz)', 2002 '1943' :' -4(100)','-1943':' 4(100)','-2429':' m(yz)', 2003 '2429' :' 2(yz)','639' :' -4(010)','-639' :' 4(010)', 2004 '-6484':' 2(010) ','6484' :' m(010) ','-6668':' 2(100) ', 2005 '6668' :' m(100) ','-6454':' 2(120) ','6454' :' m(120) ', 2006 '-6638':' 2(210) ','6638' :' m(210) '} #search ends here 2007 2008 1953 '-6643': ['-1',1],'6479' : ['2(z)',2],'-6479': ['m(z)',3], 1954 '6481' : ['m(y)',4],'-6481': ['2(y)',5],'6641' : ['m(x)',6], 1955 '-6641': ['2(x)',7],'6591' : ['m(+-0)',8],'-6591': ['2(+-0)',9], 1956 '6531' : ['m(110)',10],'-6531': ['2(110)',11],'6537' : ['4(z)',12], 1957 '-6537': ['-4(z)',13],'975' : ['3(111)',14],'6456' : ['3',15], 1958 '-489' : ['3(+--)',16],'483' : ['3(-+-)',17],'-969' : ['3(--+)',18], 1959 '819' : ['m(+0-)',19],'-819' : ['2(+0-)',20],'2431' : ['m(0+-)',21], 1960 '-2431': ['2(0+-)',22],'-657' : ['m(xz)',23],'657' : ['2(xz)',24], 1961 '1943' : ['-4(x)',25],'-1943': ['4(x)',26],'-2429': ['m(yz)',27], 1962 '2429' : ['2(yz)',28],'639' : ['-4(y)',29],'-639' : ['4(y)',30], 1963 '-6484': ['2(010)',4],'6484' : ['m(010)',5],'-6668': ['2(100)',6], 1964 '6668' : ['m(100)',7],'-6454': ['2(120)',18],'6454' : ['m(120)',19], 1965 '-6638': ['2(210)',20],'6638' : ['m(210)',21], #search in SytSym ends at m(210) 1966 '2223' : ['3(+++)2',39], 1967 '6538' : ['6(z)1',40],'-2169':['3(--+)2',41],'2151' : ['3(+--)2',42], 1968 '2205' :['-3(-+-)2',43],'-2205':[' (-+-)2',44],'489' :['-3(+--)1',45], 1969 '801' : ['4(y)1',46],'1945' : ['4(x)3',47],'-6585': ['-4(z)3 ',48], 1970 '6585' : ['4(z)3',49],'6584' : ['3(z)2',50],'6666' : ['6(z)5 ',51], 1971 '6643' : ['1',52],'-801' : ['-4(y)1',53],'-1945': ['-4(x)3 ',54], 1972 '-6666': ['-6(z)5',55],'-6538': ['-6(z)1',56],'-2223':['-3(+++)2',57], 1973 '-975' :['-3(+++)1',58],'-6456': ['-3(z)1',59],'-483' :['-3(-+-)1',60], 1974 '969' :['-3(--+)1',61],'-6584': ['-3(z)2',62],'2169' :['-3(--+)2',63], 1975 '-2151':['-3(+--)2',64], } 1976 2009 1977 KNsym = { 2010 1978 '0' :' 1 ','1' :' -1 ','64' :' 2(x)','32' :' m(x)', … … 2019 1987 '1156' :' mm2(xy)','772' :'mm2(+-0)','82' :' 222 ','136314944' :' 222(x)', 2020 1988 '8912912' :' 222(y)','1282' :' 222(z)','127' :' mmm ','204472417' :' mmm(x)', 2021 '13369369' :' mmm(y)','1927' :' mmm(z)','33554496' :' 4( 100)','16777280' :' -4(100)',2022 '50331745' :'4/m( 100)','169869394' :'422(100)','84934738' :'-42m 100','101711948' :'4mm(100)',2023 '254804095' :'4/mmm 100','536870928 ':' 4(010)','268435472' :' -4(010)','805306393' :'4/m (10)',2024 '545783890' :'422( 010)','272891986' :'-42m 010','541327412' :'4mm(010)','818675839' :'4/mmm010',2025 '2050' :' 4( 001)','4098' :' -4(001)','6151' :'4/m(001)','3410' :'422(001)',2026 '4818' :'-42m 001','2730' :'4mm(001)','8191' :'4/mmm001','8192' :' 3(111)',1989 '13369369' :' mmm(y)','1927' :' mmm(z)','33554496' :' 4(x)','16777280' :' -4(x)', 1990 '50331745' :'4/m(x)' ,'169869394' :'422(x)','84934738' :'-42m(x)','101711948' :'4mm(x)', 1991 '254804095' :'4/mmm(x)','536870928 ':' 4(y)','268435472' :' -4(y)','805306393' :'4/m(y)', 1992 '545783890' :'422(y)','272891986' :'-42m(y)','541327412' :'4mm(y)','818675839' :'4/mmm(y)', 1993 '2050' :' 4(z)','4098' :' -4(z)','6151' :'4/m(z)','3410' :'422(z)', 1994 '4818' :'-42m(z)','2730' :'4mm(z)','8191' :'4/mmm(z)','8192' :' 3(111)', 2027 1995 '8193' :' -3(111)','2629888' :' 32(111)','1319040' :' 3m(111)','3940737' :'-3m(111)', 2028 1996 '32768' :' 3(+--)','32769' :' -3(+--)','10519552' :' 32(+--)','5276160' :' 3m(+--)', … … 2031 1999 '142737664' :' 32(--+)','71434368' :' 3m(--+)','214040961' :'-3m(--+)','237650' :' 23 ', 2032 2000 '237695' :' m3 ','715894098' :' 432 ','358068946' :' -43m ','1073725439':' m3m ', 2033 '68157504' :' mm2 d100','4456464' :' mm2d010','642' :' mm2d001','153092172' :'-4m2 100',2034 '277348404' :'-4m2 010','5418' :'-4m2 001','1075726335':' 6/mmm ','1074414420':'-6m2 100',2035 '1075070124':'-6m2 120','1075069650':' 6mm ','1074414890':' 622 ','1073758215':' 6/m ',2001 '68157504' :' mm2(d100)','4456464' :' mm2(d010)','642' :' mm2(d001)','153092172' :'-4m2(x)', 2002 '277348404' :'-4m2(y)','5418' :'-4m2(z)','1075726335':' 6/mmm ','1074414420':'-6m2(100)', 2003 '1075070124':'-6m2(120)','1075069650':' 6mm ','1074414890':' 622 ','1073758215':' 6/m ', 2036 2004 '1073758212':' -6 ','1073758210':' 6 ','1073759865':'-3m(100)','1075724673':'-3m(120)', 2037 2005 '1073758800':' 3m(100)','1075069056':' 3m(120)','1073759272':' 32(100)','1074413824':' 32(120)', 2038 2006 '1073758209':' -3 ','1073758208':' 3 ','1074135143':'mmm(100)','1075314719':'mmm(010)', 2039 '1073743751':'mmm(110)','1074004034':' mm2 z100','1074790418':' mm2z010','1073742466':' mm2z110',2007 '1073743751':'mmm(110)','1074004034':' mm2(z100)','1074790418':' mm2(z010)','1073742466':' mm2(z110)', 2040 2008 '1074004004':'mm2(100)','1074790412':'mm2(010)','1073742980':'mm2(110)','1073872964':'mm2(120)', 2041 2009 '1074266132':'mm2(210)','1073742596':'mm2(+-0)','1073872930':'222(100)','1074266122':'222(010)', … … 2049 2017 2050 2018 NXUPQsym = { 2051 ' 1 ':(28,29,28,28),' -1 ':( 1,29,28, 0),' 2(x)':(12,18,12,25),' m(x)':(25,18,12,25),2052 ' 2/m(x)':( 1,18, 0,-1),' 2(y)':(13,17,13,24),' m(y)':(24,17,13,24),' 2/m(y)':( 1,17, 0,-1),2053 ' 2(z)':(14,16,14,23),' m(z)':(23,16,14,23),' 2/m(z)':( 1,16, 0,-1),' 2(yz)':(10,23,10,22),2054 ' m(yz)':(22,23,10,22),' 2/m(yz)':( 1,23, 0,-1),' 2(0+-)':(11,24,11,21),' m(0+-)':(21,24,11,21),2055 '2/m(0+-)' :( 1,24, 0,-1),' 2(xz)':( 8,21, 8,20),' m(xz)':(20,21, 8,20),' 2/m(xz)':( 1,21, 0,-1),2056 ' 2(+0-)':( 9,22, 9,19),' m(+0-)':(19,22, 9,19),'2/m(+0-)':( 1,22, 0,-1),' 2(xy)':( 6,19, 6,18),2057 ' m(xy)':(18,19, 6,18),' 2/m(xy)':( 1,19, 0,-1),' 2(+-0)':( 7,20, 7,17),' m(+-0)':(17,20, 7,17),2058 '2/m(+-0)' :( 1,20, 17,-1),' mm2(x)':(12,10, 0,-1),' mm2(y)':(13,10, 0,-1),' mm2(z)':(14,10, 0,-1),2059 ' mm2(yz)':(10,13, 0,-1),'mm2(0+-)':(11,13, 0,-1),' mm2(xz)':( 8,12, 0,-1),'mm2(+0-)':( 9,12, 0,-1),2060 ' mm2(xy)':( 6,11, 0,-1),'mm2(+-0)':( 7,11, 0,-1),' 222 ':( 1,10, 0,-1),' 222(x)':( 1,13, 0,-1),2061 ' 222(y)':( 1,12, 0,-1),' 222(z)':( 1,11, 0,-1),' mmm ':( 1,10, 0,-1),' mmm(x)':( 1,13, 0,-1),2062 ' mmm(y)':( 1,12, 0,-1),' mmm(z)':( 1,11, 0,-1),' 4(100)':(12, 4,12, 0),' -4(100)':( 1, 4,12, 0),2063 '4/m( 100)':( 1, 4,12,-1),'422(100)':( 1, 4, 0,-1),'-42m 100':( 1, 4, 0,-1),'4mm(100)':(12, 4, 0,-1),2064 '4/mmm 100':( 1, 4, 0,-1),' 4(010)':(13, 3,13, 0),' -4(010)':( 1, 3,13, 0),'4/m (10)':( 1, 3,13,-1),2065 '422( 010)':( 1, 3, 0,-1),'-42m 010':( 1, 3, 0,-1),'4mm(010)':(13, 3, 0,-1),'4/mmm010':(1, 3, 0,-1,),2066 ' 4(001)':(14, 2,14, 0),' -4(001)':( 1, 2,14, 0),'4/m(001)':( 1, 2,14,-1),'422(001)':( 1, 2, 0,-1),2067 '-42m 001':( 1, 2, 0,-1),'4mm(001)':(14, 2, 0,-1),'4/mmm001':( 1, 2, 0,-1),' 3(111)':( 2, 5, 2, 0),2068 ' -3(111)':( 1, 5, 2, 0),' 32(111)':( 1, 5, 0, 2),' 3m(111)':( 2, 5, 0, 2),'-3m(111)':( 1, 5, 0,-1),2069 ' 3(+--)':( 5, 8, 5, 0),' -3(+--)':( 1, 8, 5, 0),' 32(+--)':( 1, 8, 0, 5),' 3m(+--)':( 5, 8, 0, 5),2070 '-3m(+--)' :( 1, 8, 0,-1),' 3(-+-)':( 4, 7, 4, 0),' -3(-+-)':( 1, 7, 4, 0),' 32(-+-)':( 1, 7, 0, 4),2071 ' 3m(-+-)':( 4, 7, 0, 4),'-3m(-+-)':( 1, 7, 0,-1),' 3(--+)':( 3, 6, 3, 0),' -3(--+)':( 1, 6, 3, 0),2072 ' 32(--+)':( 1, 6, 0, 3),' 3m(--+)':( 3, 6, 0, 3),'-3m(--+)':( 1, 6, 0,-1),' 23 ':( 1, 1, 0, 0),2073 ' m3 ':( 1, 1, 0, 0),' 432 ':( 1, 1, 0, 0),' -43m ':( 1, 1, 0, 0),' m3m ':( 1, 1, 0, 0),2074 ' mm2d100':(12,13, 0,-1),' mm2d010':(13,12, 0,-1),' mm2d001':(14,11, 0,-1),'-4m2 100':( 1, 4, 0,-1),2075 '-4m2 010':( 1, 3, 0,-1),'-4m2 001':( 1, 2, 0,-1),' 6/mmm ':( 1, 9, 0,-1),'-6m2 100':( 1, 9, 0,-1),2076 '-6m2 120':( 1, 9, 0,-1),' 6mm ':(14, 9, 0,-1),' 622 ':( 1, 9, 0,-1),' 6/m ':( 1, 9,14,-1),2077 ' -6 ':( 1, 9,14, 0),' 6 ':(14, 9,14, 0),'-3m(100)':( 1, 9, 0,-1),'-3m(120)':( 1, 9, 0,-1),2078 ' 3m(100)':(14, 9, 0,14),' 3m(120)':(14, 9, 0,14),' 32(100)':( 1, 9, 0,14),' 32(120)':( 1, 9, 0,14),2079 ' -3 ':( 1, 9,14, 0),' 3 ':(14, 9,14, 0),'mmm(100)':( 1,14, 0,-1),'mmm(010)':( 1,15, 0,-1),2080 'mmm(110)' :( 1,11, 0,-1),' mm2z100':(14,14, 0,-1),' mm2z010':(14,15, 0,-1),' mm2z110':(14,11, 0,-1),2081 'mm2(100)' :(12,14, 0,-1),'mm2(010)':(13,15, 0,-1),'mm2(110)':( 6,11, 0,-1),'mm2(120)':(15,14, 0,-1),2082 'mm2(210)' :(16,15, 0,-1),'mm2(+-0)':( 7,11, 0,-1),'222(100)':( 1,14, 0,-1),'222(010)':( 1,15, 0,-1),2083 '222(110)' :( 1,11, 0,-1),'2/m(001)':( 1,16,14,-1),'2/m(100)':( 1,25,12,-1),'2/m(010)':( 1,28,13,-1),2084 '2/m(110)' :( 1,19, 6,-1),'2/m(120)':( 1,27,15,-1),'2/m(210)':( 1,26,16,-1),'2/m(+-0)':( 1,20,17,-1),2085 ' m(001) ':(23,16,14,23),' m(100) ':(26,25,12,26),' m(010) ':(27,28,13,27),' m(110) ':(18,19, 6,18),2086 ' m(120) ':(24,27,15,24),' m(210) ':(25,26,16,25),' m(+-0) ':(17,20, 7,17),' 2(001) ':(14,16,14,23),2087 ' 2(100) ':(12,25,12,26),' 2(010) ':(13,28,13,27),' 2(110) ':( 6,19, 6,18),' 2(120) ':(15,27,15,24),2088 ' 2(210) ':(16,26,16,25),' 2(+-0) ':( 7,20, 7,17),' -1 ':( 1,29,28, 0)2019 '1' :(28,29,28,28),'-1' :( 1,29,28, 0),'2(x)' :(12,18,12,25),'m(x)' :(25,18,12,25), 2020 '2/m(x)' :( 1,18, 0,-1),'2(y)' :(13,17,13,24),'m(y)' :(24,17,13,24),'2/m(y)' :( 1,17, 0,-1), 2021 '2(z)' :(14,16,14,23),'m(z)' :(23,16,14,23),'2/m(z)' :( 1,16, 0,-1),'2(yz)' :(10,23,10,22), 2022 'm(yz)' :(22,23,10,22),' 2/m(yz)' :( 1,23, 0,-1),'2(0+-)' :(11,24,11,21),'m(0+-)' :(21,24,11,21), 2023 '2/m(0+-)' :( 1,24, 0,-1),'2(xz)' :( 8,21, 8,20),'m(xz)' :(20,21, 8,20),'2/m(xz)' :( 1,21, 0,-1), 2024 '2(+0-)' :( 9,22, 9,19),'m(+0-)' :(19,22, 9,19),'2/m(+0-)' :( 1,22, 0,-1),'2(xy)' :( 6,19, 6,18), 2025 'm(xy)' :(18,19, 6,18),' 2/m(xy)' :( 1,19, 0,-1),'2(+-0)' :( 7,20, 7,17),'m(+-0)' :(17,20, 7,17), 2026 '2/m(+-0)' :( 1,20, 17,-1),'mm2(x)' :(12,10, 0,-1),'mm2(y)' :(13,10, 0,-1),'mm2(z)' :(14,10, 0,-1), 2027 'mm2(yz)' :(10,13, 0,-1),'mm2(0+-)' :(11,13, 0,-1),'mm2(xz)' :( 8,12, 0,-1),'mm2(+0-)' :( 9,12, 0,-1), 2028 'mm2(xy)' :( 6,11, 0,-1),'mm2(+-0)' :( 7,11, 0,-1),'222' :( 1,10, 0,-1),'222(x)' :( 1,13, 0,-1), 2029 '222(y)' :( 1,12, 0,-1),'222(z)' :( 1,11, 0,-1),'mmm' :( 1,10, 0,-1),'mmm(x)' :( 1,13, 0,-1), 2030 'mmm(y)' :( 1,12, 0,-1),'mmm(z)' :( 1,11, 0,-1),'4(x)' :(12, 4,12, 0),'-4(x)' :( 1, 4,12, 0), 2031 '4/m(x)' :( 1, 4,12,-1),'422(x)' :( 1, 4, 0,-1),'-42m(x)' :( 1, 4, 0,-1),'4mm(x)' :(12, 4, 0,-1), 2032 '4/mmm(x)' :( 1, 4, 0,-1),'4(y)' :(13, 3,13, 0),'-4(y)' :( 1, 3,13, 0),'4/m(y)' :( 1, 3,13,-1), 2033 '422(y)' :( 1, 3, 0,-1),'-42m(y)' :( 1, 3, 0,-1),'4mm(y)' :(13, 3, 0,-1),'4/mmm(y)' :(1, 3, 0,-1,), 2034 '4(z)' :(14, 2,14, 0),'-4(z)' :( 1, 2,14, 0),'4/m(z)' :( 1, 2,14,-1),'422(z)' :( 1, 2, 0,-1), 2035 '-42m(z)' :( 1, 2, 0,-1),'4mm(z)' :(14, 2, 0,-1),'4/mmm(z)' :( 1, 2, 0,-1),'3(111)' :( 2, 5, 2, 0), 2036 '-3(111)' :( 1, 5, 2, 0),'32(111)' :( 1, 5, 0, 2),'3m(111)' :( 2, 5, 0, 2),'-3m(111)' :( 1, 5, 0,-1), 2037 '3(+--)' :( 5, 8, 5, 0),'-3(+--)' :( 1, 8, 5, 0),'32(+--)' :( 1, 8, 0, 5),'3m(+--)' :( 5, 8, 0, 5), 2038 '-3m(+--)' :( 1, 8, 0,-1),'3(-+-)' :( 4, 7, 4, 0),'-3(-+-)' :( 1, 7, 4, 0),'32(-+-)' :( 1, 7, 0, 4), 2039 '3m(-+-)' :( 4, 7, 0, 4),'-3m(-+-)' :( 1, 7, 0,-1),'3(--+)' :( 3, 6, 3, 0),'-3(--+)' :( 1, 6, 3, 0), 2040 '32(--+)' :( 1, 6, 0, 3),'3m(--+)' :( 3, 6, 0, 3),'-3m(--+)' :( 1, 6, 0,-1),'23' :( 1, 1, 0, 0), 2041 'm3' :( 1, 1, 0, 0),'432' :( 1, 1, 0, 0),'-43m' :( 1, 1, 0, 0),'m3m' :( 1, 1, 0, 0), 2042 'mm2(d100)':(12,13, 0,-1),'mm2(d010)':(13,12, 0,-1),'mm2(d001)':(14,11, 0,-1),'-4m2(x)' :( 1, 4, 0,-1), 2043 '-4m2(y)' :( 1, 3, 0,-1),'-4m2(z)' :( 1, 2, 0,-1),'6/mmm' :( 1, 9, 0,-1),'-6m2(100)':( 1, 9, 0,-1), 2044 '-6m2(120)':( 1, 9, 0,-1),'6mm' :(14, 9, 0,-1),'622' :( 1, 9, 0,-1),'6/m' :( 1, 9,14,-1), 2045 '-6' :( 1, 9,14, 0),'6' :(14, 9,14, 0),'-3m(100)' :( 1, 9, 0,-1),'-3m(120)' :( 1, 9, 0,-1), 2046 '3m(100)' :(14, 9, 0,14),'3m(120)' :(14, 9, 0,14),'32(100)' :( 1, 9, 0,14),'32(120)' :( 1, 9, 0,14), 2047 '-3' :( 1, 9,14, 0),'3' :(14, 9,14, 0),'mmm(100)' :( 1,14, 0,-1),'mmm(010)' :( 1,15, 0,-1), 2048 'mmm(110)' :( 1,11, 0,-1),'mm2(z100)':(14,14, 0,-1),'mm2(z010)':(14,15, 0,-1),'mm2(z110)':(14,11, 0,-1), 2049 'mm2(100)' :(12,14, 0,-1),'mm2(010)' :(13,15, 0,-1),'mm2(110)' :( 6,11, 0,-1),'mm2(120)' :(15,14, 0,-1), 2050 'mm2(210)' :(16,15, 0,-1),'mm2(+-0)' :( 7,11, 0,-1),'222(100)' :( 1,14, 0,-1),'222(010)' :( 1,15, 0,-1), 2051 '222(110)' :( 1,11, 0,-1),'2/m(001)' :( 1,16,14,-1),'2/m(100)' :( 1,25,12,-1),'2/m(010)' :( 1,28,13,-1), 2052 '2/m(110)' :( 1,19, 6,-1),'2/m(120)' :( 1,27,15,-1),'2/m(210)' :( 1,26,16,-1),'2/m(+-0)' :( 1,20,17,-1), 2053 'm(001)' :(23,16,14,23),'m(100)' :(26,25,12,26),'m(010)' :(27,28,13,27),'m(110)' :(18,19, 6,18), 2054 'm(120)' :(24,27,15,24),'m(210)' :(25,26,16,25),'m(+-0)' :(17,20, 7,17),'2(001)' :(14,16,14,23), 2055 '2(100)' :(12,25,12,26),'2(010)' :(13,28,13,27),'2(110)' :( 6,19, 6,18),'2(120)' :(15,27,15,24), 2056 '2(210)' :(16,26,16,25),'2(+-0)' :( 7,20, 7,17),'-1' :( 1,29,28, 0) 2089 2057 } 2090 2058 … … 2158 2126 def GetOprPtrName(key): 2159 2127 'Needs a doc string' 2160 return OprPtrName[key] 2128 oprName = OprName[key][0] 2129 return oprName.replace('(','').replace(')','') 2130 2131 def GetOprPtrNumber(key): 2132 'Needs a doc string' 2133 return OprName[key][1] 2161 2134 2162 2135 def GetOprName(key): 2163 2136 'Needs a doc string' 2164 return OprName[key] 2137 return OprName[key][0] 2165 2138 2166 2139 def GetKNsym(key): 2167 2140 'Needs a doc string' 2168 2141 try: 2169 return KNsym[key] 2142 return KNsym[key].strip() 2170 2143 except KeyError: 2171 2144 return 'sp' … … 2179 2152 def GetCSxinel(siteSym): 2180 2153 "returns Xyz terms, multipliers, GUI flags" 2181 indx = GetNXUPQsym(siteSym )2154 indx = GetNXUPQsym(siteSym.strip()) 2182 2155 return CSxinel[indx[0]] 2183 2156 2184 2157 def GetCSuinel(siteSym): 2185 2158 "returns Uij terms, multipliers, GUI flags & Uiso2Uij multipliers" 2186 indx = GetNXUPQsym(siteSym )2159 indx = GetNXUPQsym(siteSym.strip()) 2187 2160 return CSuinel[indx[1]] 2188 2161 … … 2190 2163 "returns Mxyz terms, multipliers, GUI flags" 2191 2164 CSI = [[1,2,3],[1.0,1.0,1.0]] 2192 for opr in dupDir: 2165 for sopr in dupDir: 2166 # print (sopr,dupDir[sopr]) 2167 opr = sopr.replace("'",'') 2193 2168 indx = GetNXUPQsym(opr) 2194 if SpnFlp[dupDir[ opr]] > 0.:2169 if SpnFlp[dupDir[sopr]] > 0: 2195 2170 csi = CSxinel[indx[2]] #P 2196 2171 else: 2197 2172 csi = CSxinel[indx[3]] #Q 2198 # print(opr, SpnFlp[dupDir[opr]],indx,csi,CSI)2173 # print(opr,indx,csi,CSI) 2199 2174 if not len(csi): 2200 2175 return [[0,0,0],[0.,0.,0.]] … … 2873 2848 return np.sqrt(np.sum(XYZ**2)/900.) 2874 2849 2875 2876 2850 def Muiso2Shkl(muiso,SGData,cell): 2877 2851 "this is to convert isotropic mustrain to generalized Shkls" … … 2933 2907 :param XYZ: an array, tuple or list containing 3 elements: x, y & z 2934 2908 :param SGData: from SpcGroup 2935 :Returns: a twoelement tuple:2909 :Returns: a four element tuple: 2936 2910 2937 2911 * The 1st element is a code for the site symmetry (see GetKNsym) 2938 2912 * The 2nd element is the site multiplicity 2913 * Ndup number of overlapping operators 2914 * dupDir Dict - dictionary of overlapping operators 2939 2915 2940 2916 ''' … … 2951 2927 inv = 1 2952 2928 Xeqv = GenAtom(XYZ,SGData,True) 2929 # for xeqv in Xeqv: print(xeqv) 2953 2930 IRT = PackRot(SGData['SGOps']) 2954 2931 L = -1 … … 2961 2938 Ndup = io 2962 2939 Jdup += 1 2963 jx = GetOprPtrN ame(str(irtx)) #[KN table no,op name,KNsym ptr]2964 if jx [2]< 39:2940 jx = GetOprPtrNumber(str(irtx)) #[KN table no,op name,KNsym ptr] 2941 if jx < 39: 2965 2942 px = GetOprName(str(irtx)) 2966 if px != '6643': #skip Iden 2967 dupDir[px] = io 2968 Isym += 2**(jx[2]-1) 2943 if Xeqv[L][-1] < 0: 2944 if '(' in px: 2945 px = px.split('(') 2946 px[0] += "'" 2947 px = '('.join(px) 2948 else: 2949 px += "'" 2950 dupDir[px] = L 2951 Isym += 2**(jx-1) 2969 2952 if Isym == 1073741824: Isym = 0 2970 2953 Mult = len(SGData['SGOps'])*len(SGData['SGCen'])*(int(SGData['SGInv'])+1)//Jdup … … 2972 2955 return GetKNsym(str(Isym)),Mult,Ndup,dupDir 2973 2956 2957 def MagSytSym(SytSym,dupDir,SGData): 2958 ''' 2959 site sym operations: 1,-1,2,3,-3,4,-4,6,-6,m need to be marked if spin inversion 2960 ''' 2961 SGData['GenSym'],SGData['GenFlg'] = GetGenSym(SGData)[:2] 2962 # print('SGPtGrp',SGData['SGPtGrp'],'SytSym',SytSym,'MagSpGrp',SGData['MagSpGrp']) 2963 # print('dupDir',dupDir) 2964 SplitSytSym = SytSym.split('(') 2965 if SytSym == '1': #genersl position 2966 return SytSym 2967 if SplitSytSym[0] == SGData['SGPtGrp']: #simple cases 2968 try: 2969 MagSytSym = SGData['MagSpGrp'].split()[1] 2970 except IndexError: 2971 MagSytSym = SGData['MagSpGrp'][1:].strip("1'") 2972 if len(SplitSytSym) > 1: 2973 MagSytSym += '('+SplitSytSym[1] 2974 return MagSytSym 2975 if len(dupDir) == 1: 2976 return dupDir.keys()[0] 2977 2978 2979 if '2/m' in SytSym: #done I think; last 2wo might be not needed 2980 ops = {'(x)':['2(x)','m(x)'],'(y)':['2(y)','m(y)'],'(z)':['2(z)','m(z)'], 2981 '(100)':['2(100)','m(100)'],'(010)':['2(010)','m(010)'],'(001)':['2(001)','m(001)'], 2982 '(120)':['2(120)','m(120)'],'(210)':['2(210)','m(210)'],'(+-0)':['2(+-0)','m(+-0)'], 2983 '(110)':['2(110)','m(110)']} 2984 2985 elif '4/mmm' in SytSym: 2986 ops = {'(x)':['4(x)','m(x)','m(y)','m(0+-)'], #m(0+-) for cubic m3m? 2987 '(y)':['4(y)','m(y)','m(z)','m(+0-)'], #m(+0-) 2988 '(z)':['4(z)','m(z)','m(x)','m(+-0)']} #m(+-0) 2989 elif '4mm' in SytSym: 2990 ops = {'(x)':['4(x)','m(y)','m(yz)'],'(y)':['4(y)','m(z)','m(xz)'],'(z)':['4(z)','m(x)','m(110)']} 2991 elif '422' in SytSym: 2992 ops = {'(x)':['4(x)','2(y)','2(yz)'],'(y)':['4(y)','2(z)','2(xz)'],'(z)':['4(z)','2(x)','2(110)']} 2993 elif '-4m2' in SytSym: 2994 ops = {'(x)':['-4(x)','m(x)','2(yz)'],'(y)':['-4(y)','m(y)','2(xz)'],'(z)':['-4(z)','m(z)','2(110)']} 2995 elif '-42m' in SytSym: 2996 ops = {'(x)':['-4(x)','2(y)','m(yz)'],'(y)':['-4(y)','2(z)','m(xz)'],'(z)':['-4(z)','2(x)','m(110)']} 2997 elif '-4' in SytSym: 2998 ops = {'(x)':['-4(x)',],'(y)':['-4(y)',],'(z)':['-4(z)',],} 2999 elif '4' in SytSym: 3000 ops = {'(x)':['4(x)',],'(y)':['4(y)',],'(z)':['4(z)',],} 3001 3002 elif '222' in SytSym: 3003 ops = {'':['2(x)','2(y)','2(z)'], 3004 '(x)':['2(y)','2(z)','2(x)'],'(y)':['2(x)','2(z)','2(y)'],'(z)':['2(x)','2(y)','2(z)'], 3005 '(100)':['2(z)','2(100)','2(120)',],'(010)':['2(z)','2(010)','2(210)',], 3006 '(110)':['2(z)','2(110)','2(+-0)',],} 3007 elif 'mm2' in SytSym: 3008 ops = {'(x)':['m(y)','m(z)','2(x)'],'(y)':['m(x)','m(z)','2(y)'],'(z)':['m(x)','m(y)','2(z)'], 3009 '(xy)':['m(+-0)','m(z)','2(110)'],'(yz)':['m(0+-)','m(xz)','2(yz)'], #not 2(xy)! 3010 '(xz)':['m(+0-)','m(y)','2(xz)'],'(z100)':['m(100)','m(120)','2(z)'], 3011 '(z010)':['m(010)','m(210)','2(z)'],'(z110)':['m(110)','m(+-0)','2(z)'], 3012 '(+-0)':[ 'm(110)','m(z)','2(+-0)'],'(d100)':['m(yz)','m(0+-)','2(xz)'], 3013 '(d010)':['m(xz)','m(+0-)','2(y)'],'(d001)':['m(110)','m(+-0)','2(z)'], 3014 '(210)':['m(z)','m(010)','2(210)'], 3015 '(100)':['m(z)','m(120)','2(100)',],'(010)':['m(z)','m(210)','2(010)',], 3016 '(110)':['m(z)','m(+-0)','2(110)',],} 3017 elif 'mmm' in SytSym: 3018 ops = {'':['m(x)','m(y)','m(z)'], 3019 '(100)':['m(z)','m(100)','m(120)',],'(010)':['m(z)','m(010)','m(210)',], 3020 '(110)':['m(z)','m(110)','m(+-0)',], 3021 '(x)':['m(x)','m(y)','m(z)'],'(y)':['m(x)','m(y)','m(z)'],'(z)':['m(x)','m(y)','m(z)'],} 3022 3023 elif '32' in SytSym: 3024 ops = {'(120)':['3','2(120)',],'(100)':['3','2(100)']} 3025 elif '23' in SytSym: 3026 ops = {'':['2(x)','3(111)']} 3027 elif 'm3' in SytSym: 3028 ops = {'(100)':['(+-0)',],'(+--)':[],'(-+-)':[],'(--+)':[]} 3029 elif '3m' in SytSym: 3030 ops = {'(111)':['3(111)','m(+-0)',],'(+--)':['3(+--)','m(0+-)',], 3031 '(-+-)':['3(-+-)','m(+0-)',],'(--+)':['3(--+)','m(+-0)',], 3032 '(100)':['3','m(100)'],'(120)':['3','m(210)',]} 3033 3034 if SytSym.split('(')[0] in ['6/m','6mm','-6m2','622','-6','-3','-3m',]: #not simple cases 3035 MagSytSym = SytSym 3036 if "-1'" in dupDir: 3037 if '-6' in SytSym: 3038 MagSytSym = MagSytSym.replace('-6',"-6'") 3039 elif '-3m' in SytSym: 3040 MagSytSym = MagSytSym.replace('-3m',"-3'm'") 3041 elif '-3' in SytSym: 3042 MagSytSym = MagSytSym.replace('-3',"-3'") 3043 elif '-6m2' in SytSym: 3044 if "m'(110)" in dupDir: 3045 MagSytSym = "-6m'2'("+SytSym.split('(')[1] 3046 elif '6/m' in SytSym: 3047 if "m'(z)" in dupDir: 3048 MagSytSym = "6'/m'" 3049 elif '6mm' in SytSym: 3050 if "m'(110)" in dupDir: 3051 MagSytSym = "6'm'm" 3052 return MagSytSym 3053 try: 3054 axis = '('+SytSym.split('(')[1] 3055 except IndexError: 3056 axis = '' 3057 MagSytSym = '' 3058 for m in ops[axis]: 3059 if m in dupDir: 3060 MagSytSym += m.split('(')[0] 3061 else: 3062 MagSytSym += m.split('(')[0]+"'" 3063 if '2/m' in SytSym and '2' in m: 3064 MagSytSym += '/' 3065 if '-3/m' in SytSym: 3066 MagSytSym = '-'+MagSytSym 3067 3068 MagSytSym += axis 3069 # some exceptions & special rules 3070 if MagSytSym == "4'/m'm'm'": MagSytSym = "4/m'm'm'" 3071 return MagSytSym 3072 3073 # if len(GenSym) == 3: 3074 # if SGSpin[1] < 0: 3075 # if 'mm2' in SytSym: 3076 # MagSytSym = "m'm'2"+'('+SplitSytSym[1] 3077 # else: #bad rule for I41/a 3078 # MagSytSym = SplitSytSym[0]+"'" 3079 # if len(SplitSytSym) > 1: 3080 # MagSytSym += '('+SplitSytSym[1] 3081 # else: 3082 # MagSytSym = SytSym 3083 # if len(SplitSytSym) >1: 3084 # if "-4'"+'('+SplitSytSym[1] in dupDir: 3085 # MagSytSym = MagSytSym.replace('-4',"-4'") 3086 # if "-6'"+'('+SplitSytSym[1] in dupDir: 3087 # MagSytSym = MagSytSym.replace('-6',"-6'") 3088 # return MagSytSym 3089 # 3090 return SytSym 3091 2974 3092 def ElemPosition(SGData): 2975 3093 ''' Under development.
Note: See TracChangeset
for help on using the changeset viewer.