Changeset 2464
- Timestamp:
- Sep 11, 2016 3:05:54 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIgrid.py
r2451 r2464 185 185 wx.Dialog.__init__(self,parent,wx.ID_ANY,title,pos=wx.DefaultPosition, 186 186 style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) 187 self.text =text187 self.text = text 188 188 self.table = table 189 189 self.panel = wx.Panel(self) … … 224 224 self.ShowModal() 225 225 return 226 227 class SGMagSpinBox(wx.Dialog): 228 ''' Special version of MessageBox that displays magnetic spin text 229 ''' 230 def __init__(self,parent,title,text,table,names,spins,): 231 wx.Dialog.__init__(self,parent,wx.ID_ANY,title,pos=wx.DefaultPosition, 232 style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,size=wx.Size(400,350)) 233 self.text = text 234 self.table = table 235 self.names = names 236 self.spins = spins 237 self.panel = wxscroll.ScrolledPanel(self) 238 mainSizer = wx.BoxSizer(wx.VERTICAL) 239 mainSizer.Add((0,10)) 240 first = text[0].split(':') 241 cents = ['',] 242 if not 'P' in first[1][0]: 243 cents = text[-1].split(';') 244 for line in text: 245 mainSizer.Add(wx.StaticText(self.panel,label=' %s '%(line)),0,WACV) 246 try: 247 nops = self.names.index(' 1bar ') 248 except ValueError: 249 nops = len(self.names) 250 ncol = self.table[0].count(',')+2 251 for ic,cent in enumerate(cents): 252 if cent: 253 cent = cent.strip(' (').strip(')+\n') 254 mainSizer.Add(wx.StaticText(self.panel,label=' for (%s)+'%(cent)),0,WACV) 255 tableSizer = wx.FlexGridSizer(0,2*ncol+3,0,0) 256 for j,item in enumerate(self.table): 257 flds = item.split(')')[1] 258 tableSizer.Add(wx.StaticText(self.panel,label=' (%2d) '%(j+1)),0,WACV|wx.ALIGN_LEFT) 259 flds = flds.replace(' ','').split(',') 260 for i,fld in enumerate(flds): 261 if i < ncol-1: 262 text = wx.StaticText(self.panel,label='%s, '%(fld)) 263 tableSizer.Add(text,0,WACV|wx.ALIGN_RIGHT) 264 else: 265 text = wx.StaticText(self.panel,label='%s '%(fld)) 266 tableSizer.Add(text,0,WACV|wx.ALIGN_RIGHT) 267 text = wx.StaticText(self.panel,label=' (%s) '%(self.names[j])) 268 if self.spins[j+ic*len(self.table)] < 0: 269 text.SetForegroundColour('Red') 270 tableSizer.Add(text,0,WACV|wx.ALIGN_RIGHT) 271 if not j%2: 272 tableSizer.Add((20,0)) 273 mainSizer.Add(tableSizer,0,wx.ALIGN_LEFT) 274 275 btnsizer = wx.StdDialogButtonSizer() 276 OKbtn = wx.Button(self.panel, wx.ID_OK) 277 OKbtn.SetDefault() 278 btnsizer.AddButton(OKbtn) 279 btnsizer.Realize() 280 mainSizer.Add((0,10)) 281 mainSizer.Add(btnsizer,0,wx.ALIGN_CENTER) 282 self.panel.SetSizer(mainSizer) 283 size = np.array(self.GetSize()) 284 self.panel.SetupScrolling() 285 size = [size[0]-5,size[1]-20] #this fiddling is needed for older wx! 286 self.panel.SetSize(size) 287 self.panel.SetAutoLayout(1) 288 289 def Show(self): 290 '''Use this method after creating the dialog to post it 291 ''' 292 self.ShowModal() 293 return 226 294 227 295 ################################################################################ … … 1165 1233 btnSizer.Add((20,20),1) 1166 1234 mainSizer.Add(btnSizer,0,wx.BOTTOM|wx.TOP, 10) 1235 self.panel.SetSizer(mainSizer) 1167 1236 size = np.array(self.GetSize()) 1168 1237 self.panel.SetupScrolling() 1169 self.panel.SetSizer(mainSizer)1170 1238 self.panel.SetAutoLayout(1) 1171 1239 size = [size[0]-5,size[1]-20] #this fiddling is needed for older wx! … … 1208 1276 ''' 1209 1277 def __init__(self,parent,data,default,Reset=True): 1210 wx.Dialog.__init__(self,parent,wx.ID_ANY, 1211 'Distance Angle Controls', 1278 wx.Dialog.__init__(self,parent,wx.ID_ANY,'Distance Angle Controls', 1212 1279 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 1213 1280 self.default = default -
trunk/GSASIIphsGUI.py
r2461 r2464 726 726 SGData['SGSpin'][isym] = spCode[Obj.GetValue()] 727 727 G2spc.CheckSpin(isym,SGData) 728 wx.CallAfter(UpdateGeneral) 729 728 wx.CallAfter(UpdateGeneral) 729 730 def OnShowSpins(event): 731 showSpins.SetValue(False) 732 msg = 'Magnetic spin operators for '+SGData['MagSpGrp'] 733 text,table = G2spc.SGPrint(SGData,AddInv=True) 734 text[0] = ' Magnetic Space Group: '+SGData['MagSpGrp'] 735 G2gd.SGMagSpinBox(General,msg,text,table,OprNames,SpnFlp).Show() 736 730 737 SGData = generalData['SGData'] 731 738 Indx = {} … … 749 756 MagSym = G2spc.MagSGSym(SGData) 750 757 SGData['MagSpGrp'] = MagSym 751 spinSizer.Add(wx.StaticText(General,label=' OG Magnetic space group: '+MagSym),0,WACV) 758 OprNames,SpnFlp = G2spc.GenMagOps(SGData) 759 spinSizer.Add(wx.StaticText(General,label=' OG Magnetic space group: %s '%(MagSym)),0,WACV) 760 showSpins = wx.CheckBox(General,label=' Show spins?') 761 showSpins.Bind(wx.EVT_CHECKBOX,OnShowSpins) 762 spinSizer.Add(showSpins,0,WACV) 752 763 magSizer.Add(spinSizer) 753 764 return magSizer … … 1270 1281 GenSym,GenFlg = G2spc.GetGenSym(generalData['SGData']) 1271 1282 generalData['SGData']['GenSym'] = GenSym 1283 generalData['SGData']['GenFlg'] = GenFlg 1272 1284 mainSizer.Add(MagSizer()) 1273 1285 G2G.HorizontalLine(mainSizer,General) -
trunk/GSASIIspc.py
r2461 r2464 104 104 if SGData['SGLaue'] == '2/m' and SGData['SGLatt'] != 'P' and '/' in SGData['SpGrp']: 105 105 SGData['SGSpin'].append(1) #fix bug in fortran 106 if SGData['SpGrp'] in ['F 2 2 2','F m m m','F m m 2','F m 2 m','F 2 m m']: 107 SGData['SGSpin'] = [1,1,1,1,1,1] 108 if SGData['SpGrp'] in ['F d d 2','F d 2 d','F 2 d d','F d d d']: 109 SGData['SGSpin'] = [1,1,1] 106 if 'F' in SGData['SpGrp']: 107 SGData['SGSpin'] += [1,1,1,1] 108 elif 'R' in SGData['SpGrp']: 109 SGData['SGSpin'] += [1,1,1] 110 elif SGData['SpGrp'][0] in ['A','B','C','I']: 111 SGData['SGSpin'] += [1,] 110 112 if SGData['SGInv']: 111 113 if SGData['SGLaue'] in ['-1','2/m','mmm']: … … 168 170 moregen.append(1) 169 171 SGData['SGGen'] += moregen 172 # GSASIIpath.IPyBreak() 170 173 if SGData['SGLaue'] in '-1': 171 174 SGData['SGSys'] = SysSym[0] … … 357 360 return 'm-3m',[] 358 361 359 def SGPrint(SGData ):362 def SGPrint(SGData,AddInv=False): 360 363 ''' 361 364 Print the output of SpcGroup in a nicely formatted way. Used in SpaceGroup … … 395 398 for i,Opr in enumerate(SGData['SGOps']): 396 399 SGTable.append('(%2d) %s'%(i+1,MT2text(Opr))) 400 if AddInv and SGData['SGInv']: 401 for i,Opr in enumerate(SGData['SGOps']): 402 IOpr = [-Opr[0],-Opr[1]] 403 SGTable.append('(%2d) %s'%(i+1,MT2text(IOpr))) 397 404 return SGText,SGTable 398 405 … … 488 495 for l in SGPrint(A): 489 496 print l 490 497 ################################################################################ 498 #### Magnetic space group stuff 499 ################################################################################ 500 491 501 def GetGenSym(SGData): 492 502 ''' … … 504 514 if SGData['SGInv']: Nsyms *= 2 505 515 UsymOp = [] 506 OprFlg = [] 516 OprFlg = [] 507 517 if Nsyms in [1,3]: NunqOp = 0 #Triclinic acentric OR trigonal 3 508 518 elif Nsyms == 2: #Centric triclinic or acentric monoclinic … … 889 899 if SpnFlp[2] < 0: 890 900 magSym[0] += '(P)' 901 # print SpnFlp 891 902 return ' '.join(magSym) 903 904 def GenMagOps(SGData): 905 FlpSpn = SGData['SGSpin'] 906 Nsym = len(SGData['SGOps']) 907 Nfl = len(SGData['GenFlg']) 908 Ncv = len(SGData['SGCen']) 909 sgOp = [M for M,T in SGData['SGOps']] 910 OprName = [GetOprPtrName(str(irtx))[1] for irtx in PackRot(SGData['SGOps'])] 911 if SGData['SGInv']: 912 Nsym *= 2 913 sgOp += [-M for M,T in SGData['SGOps']] 914 OprName += [GetOprPtrName(str(-irtx))[1] for irtx in PackRot(SGData['SGOps'])] 915 Nsyms = 0 916 sgOps = [] 917 OprNames = [] 918 for incv in range(Ncv): 919 Nsyms += Nsym 920 sgOps += sgOp 921 OprNames += OprName 922 SpnFlp = np.ones(Nsym,dtype=np.int) 923 for ieqv in range(Nsym): 924 for iunq in range(Nfl): 925 if SGData['SGGen'][ieqv] & SGData['GenFlg'][iunq]: 926 SpnFlp[ieqv] *= FlpSpn[iunq] 927 # print '\nMagSpGrp:',SGData['MagSpGrp'],Ncv 928 # print 'GenFlg:',SGData['GenFlg'] 929 # print 'GenSym:',SGData['GenSym'] 930 # print 'FlpSpn:',Nfl,FlpSpn 931 detM = [nl.det(M) for M in sgOp] 932 for incv in range(Ncv): 933 if incv: 934 SpnFlp = np.concatenate((SpnFlp,SpnFlp[:Nsym]*FlpSpn[Nfl+incv-1])) 935 MagMom = SpnFlp*np.array(Ncv*detM) 936 SGData['MagMom'] = MagMom 937 # print 'SgOps:',OprNames 938 # print 'SpnFlp:',SpnFlp 939 # print 'MagMom:',MagMom 940 return OprNames,SpnFlp 941 942 892 943 893 944 … … 1807 1858 def GetNXUPQsym(siteSym): 1808 1859 ''' 1809 The codes XUPQ are for lookup of symmetry constraints for position(X), thermal parm(U) & magnetic moments 1810 (P&Q-not used in GSAS-II) 1860 The codes XUPQ are for lookup of symmetry constraints for position(X), thermal parm(U) & magnetic moments (P & Q) 1811 1861 ''' 1812 1862 NXUPQsym = {
Note: See TracChangeset
for help on using the changeset viewer.