Changeset 2512
- Timestamp:
- Nov 3, 2016 2:43:21 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIconstrGUI.py
r2506 r2512 37 37 import GSASIIplot as G2plt 38 38 import GSASIIobj as G2obj 39 import GSASIIspc as G2spc 39 40 VERY_LIGHT_GREY = wx.Colour(235,235,235) 40 41 … … 229 230 rbIds = rigidbodyDict.get('RBIds',{'Vector':[],'Residue':[]}) 230 231 rbVary,rbDict = G2stIO.GetRigidBodyModels(rigidbodyDict,Print=False) 231 badPhaseParms = ['Ax','Ay','Az','Amul','AI/A','Atype','SHorder','mV0','mV1','mV2','waveType','Vol', ]232 badPhaseParms = ['Ax','Ay','Az','Amul','AI/A','Atype','SHorder','mV0','mV1','mV2','waveType','Vol','isMag',] 232 233 globalList = rbDict.keys() 233 234 globalList.sort() … … 1091 1092 G2frame.dataFrame.ConstraintEdit.Enable(G2gd.wxID_EQUIVALANCEATOMS,False) 1092 1093 # G2frame.dataFrame.ConstraintEdit.Enable(G2gd.wxID_ADDRIDING,False) 1093 if text == 'Histogram/Phase constraints':1094 if text == 'Histogram/Phase': 1094 1095 G2frame.Page = [page,'hap'] 1095 1096 UpdateConstraintPanel(HAPConstr,'HAP') 1096 elif text == 'Histogram constraints':1097 elif text == 'Histogram': 1097 1098 G2frame.Page = [page,'hst'] 1098 1099 UpdateConstraintPanel(HistConstr,'Hist') 1099 elif text == 'Phase constraints':1100 elif text == 'Phase': 1100 1101 G2frame.Page = [page,'phs'] 1101 1102 G2frame.dataFrame.ConstraintEdit.Enable(G2gd.wxID_EQUIVALANCEATOMS,True) … … 1106 1107 return 1107 1108 UpdateConstraintPanel(PhaseConstr,'Phase') 1108 elif text == 'Global constraints':1109 elif text == 'Global': 1109 1110 G2frame.Page = [page,'glb'] 1110 1111 UpdateConstraintPanel(GlobalConstr,'Global') … … 1150 1151 # note that order of pages is hard-coded in RaisePage 1151 1152 PhaseConstr = wx.ScrolledWindow(G2frame.dataDisplay) 1152 G2frame.dataDisplay.AddPage(PhaseConstr,'Phase constraints')1153 G2frame.dataDisplay.AddPage(PhaseConstr,'Phase') 1153 1154 HAPConstr = wx.ScrolledWindow(G2frame.dataDisplay) 1154 G2frame.dataDisplay.AddPage(HAPConstr,'Histogram/Phase constraints')1155 G2frame.dataDisplay.AddPage(HAPConstr,'Histogram/Phase') 1155 1156 HistConstr = wx.ScrolledWindow(G2frame.dataDisplay) 1156 G2frame.dataDisplay.AddPage(HistConstr,'Histogram constraints')1157 G2frame.dataDisplay.AddPage(HistConstr,'Histogram') 1157 1158 GlobalConstr = wx.ScrolledWindow(G2frame.dataDisplay) 1158 G2frame.dataDisplay.AddPage(GlobalConstr,'Global constraints')1159 G2frame.dataDisplay.AddPage(GlobalConstr,'Global') 1159 1160 wx.CallAfter(OnPageChanged,None) 1160 1161 G2frame.dataDisplay.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged) … … 1178 1179 ################################################################################ 1179 1180 1180 def MagConstraints(G2frame,oldPhase,newPhase,Trans,Vec ):1181 def MagConstraints(G2frame,oldPhase,newPhase,Trans,Vec,atCodes): 1181 1182 '''Add constraints for new magnetic phase created via transformation of old 1182 1183 nuclear one 1184 NB: A = [G11,G22,G33,2*G12,2*G13,2*G23] 1183 1185 ''' 1184 1186 Histograms,Phases = G2frame.GetUsedHistogramsAndPhasesfromTree() 1185 1187 UseList = newPhase['Histograms'] 1186 1188 detTrans = np.abs(nl.det(Trans)) 1189 invTrans = nl.inv(Trans) 1190 oCell = oldPhase['General']['Cell'][1:7] 1191 nCell = newPhase['General']['Cell'][1:7] 1192 oGmat = G2lat.cell2Gmat(oldPhase['General']['Cell'][1:7])[0] 1193 nGmat = G2lat.cell2Gmat(newPhase['General']['Cell'][1:7])[0] 1194 Gtrans = np.inner(nGmat,nl.inv(oGmat)) 1195 print 'oA',G2lat.cell2A(oldPhase['General']['Cell'][1:7]) 1196 print 'nA',G2lat.cell2A(newPhase['General']['Cell'][1:7]) 1197 print 'oGmat',oGmat 1198 print 'nGmat',nGmat 1199 print 'Gtrans',Gtrans 1200 nAcof = G2lat.cell2A(newPhase['General']['Cell'][1:7]) 1201 1187 1202 opId = oldPhase['pId'] 1188 1203 npId = newPhase['pId'] 1204 oph = '%d::'%(opId) 1205 nph = '%d::'%(npId) 1206 cx,ct,cs,cia = newPhase['General']['AtomPtrs'] 1207 nAtoms = newPhase['Atoms'] 1208 oSGData = oldPhase['General']['SGData'] 1209 nSGData = newPhase['General']['SGData'] 1189 1210 item = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Constraints') 1190 1211 constraints = G2frame.PatternTree.GetItemPyData(item) 1191 GSASIIpath.IPyBreak() 1192 for hist in UseList: #HAP 1193 UseList[hist]['Scale'] /= detTrans #scale by 1/volume ratio 1194 UseList[hist]['Mustrain'][4:6] = [NShkl*[0.01,],NShkl*[False,]] 1195 UseList[hist]['HStrain'] = [NDij*[0.0,],NDij*[False,]] 1196 print 'make nuclear-magnetic phase constraints here' 1212 # GSASIIpath.IPyBreak() 1213 for ia,code in enumerate(atCodes): 1214 atom = nAtoms[ia] 1215 siteSym = G2spc.SytSym(atom[cx:cx+3],nSGData)[0] 1216 CSX = G2spc.GetCSxinel(siteSym) 1217 item = code.split('+')[0] 1218 iat,opr = item.split(':') 1219 Nop = abs(int(opr))%100-1 1220 if '-' in opr: 1221 Nop *= -1 1222 Opr = oldPhase['General']['SGData']['SGOps'][abs(Nop)][0] 1223 if Nop < 0: #inversion 1224 Opr *= -1 1225 XOpr = np.inner(Opr,Trans.T) 1226 names = ['dAx','dAy','dAz'] 1227 for ix,name in enumerate(names): 1228 IndpCon = [1.0,G2obj.G2VarObj('%d::%s:%s'%(opId,name,iat))] 1229 DepCons = [] 1230 for iop,opval in enumerate(XOpr[ix]): 1231 if opval and CSX[0][ix]: #-opval from defn of dAx, etc. 1232 DepCons.append([-opval,G2obj.G2VarObj('%d::%s:%d'%(npId,names[iop],ia))]) 1233 if len(DepCons) == 1: 1234 constraints['Phase'].append([IndpCon,DepCons[0],None,None,'e']) 1235 elif len(DepCons) > 1: 1236 for Dep in DepCons: 1237 Dep[0] *= -1 1238 constraints['Phase'].append([IndpCon]+DepCons+[0.0,None,'c']) 1239 for name in ['Afrac','AUiso']: 1240 IndpCon = [1.0,G2obj.G2VarObj('%d::%s:%s'%(opId,name,iat))] 1241 DepCons = [1.0,G2obj.G2VarObj('%d::%s:%d'%(npId,name,ia))] 1242 constraints['Phase'].append([IndpCon,DepCons,None,None,'e']) 1243 #how do I do Uij's for most Trans? 1244 Anames = [['A0','A3','A4'],['A3','A1','A5'],['A4','A5','A2']] 1245 Aids = [[0,0,'A0'],[1,1,'A1'],[2,2,'A2'],[0,1,'A3'],[0,2,'A4'],[1,2,'A5']] 1246 Axes = ['a','b','c'] 1247 Holds = [] 1248 #how do I invoke Laue symmetry matches for Laue symm change? 1249 for iA,Aid in enumerate(Aids): 1250 IndpCon = [1.0,G2obj.G2VarObj('%d::%s'%(npId,Aid[2]))] 1251 DepCons = [] 1252 for iat in range(3): 1253 if nSGData['SGLaue'] in ['-1','2/m']: 1254 if (abs(nAcof[iA]) < 1.e-8) and (abs(Gtrans[iat][Aid[0]]) < 1.e-8): 1255 if Axes[iat] != oSGData['SGUniq'] and oSGData['SGLaue'] != nSGData['SGLaue']: 1256 HoldObj = G2obj.G2VarObj('%d::%s'%(npId,Aid[2])) 1257 if not HoldObj in Holds: 1258 constraints['Phase'].append([[0.0,HoldObj],None,None,'h']) 1259 Holds.append(HoldObj) 1260 print constraints['Phase'][-1] 1261 if abs(Gtrans[iat][Aid[0]]) > 1.e-8 and abs(nAcof[iA]) > 1.e-8: 1262 print iat,Aid,Gtrans[iat][Aid[1]],'%d::%s'%(opId,Anames[iat][Aid[1]]) 1263 DepCons.append([Gtrans[iat][Aid[1]],G2obj.G2VarObj('%d::%s'%(opId,Anames[iat][Aid[1]]))]) 1264 if len(DepCons) == 1: 1265 constraints['Phase'].append([IndpCon,DepCons[0],None,None,'e']) 1266 elif len(DepCons) > 1: 1267 for Dep in DepCons: 1268 Dep[0] *= -1 1269 constraints['Phase'].append([IndpCon]+DepCons+[0.0,None,'c']) 1270 for hId,hist in enumerate(UseList): #HAP - seems OK 1271 ohapkey = '%d:%d:'%(opId,hId) 1272 nhapkey = '%d:%d:'%(npId,hId) 1273 IndpCon = [1.0,G2obj.G2VarObj(ohapkey+'Scale')] 1274 DepCons = [detTrans,G2obj.G2VarObj(nhapkey+'Scale')] 1275 constraints['HAP'].append([IndpCon,DepCons,None,None,'e']) 1276 for name in ['Size;i','Mustrain;i']: 1277 IndpCon = [1.0,G2obj.G2VarObj(ohapkey+name)] 1278 DepCons = [1.0,G2obj.G2VarObj(nhapkey+name)] 1279 constraints['HAP'].append([IndpCon,DepCons,None,None,'e']) 1197 1280 1198 1281 ################################################################################ -
trunk/GSASIIgrid.py
r2509 r2512 208 208 btnsizer = wx.StdDialogButtonSizer() 209 209 OKbtn = wx.Button(self.panel, wx.ID_OK) 210 OKbtn.Bind(wx.EVT_BUTTON, self.OnOk) 210 211 OKbtn.SetDefault() 211 212 btnsizer.AddButton(OKbtn) … … 224 225 self.ShowModal() 225 226 return 227 228 def OnOk(self,event): 229 parent = self.GetParent() 230 parent.Raise() 231 self.EndModal(wx.ID_OK) 226 232 227 233 class SGMagSpinBox(wx.Dialog): … … 584 590 event.Skip() 585 591 Flds = SGTxt.GetValue().split() 592 Flds[0] = Flds[0].upper() 586 593 #get rid of extra spaces between fields first 587 594 for fld in Flds: fld = fld.strip() … … 716 723 717 724 def GetSelection(self): 718 self.Phase['General']['Name'] += ' %s'%(self.Common) 725 if self.ifMag: 726 self.Phase['General']['Name'] += ' mag' 727 else: 728 self.Phase['General']['Name'] += ' %s'%(self.Common) 719 729 self.Phase['General']['Cell'][1:] = G2lat.TransformCell(self.oldCell[:6],self.Trans) 720 730 return self.Phase,self.Trans,self.Vec,self.ifMag,self.ifConstr … … 729 739 parent.Raise() 730 740 self.EndModal(wx.ID_CANCEL) 731 741 ################################################################################ 742 class UseMagAtomDialog(wx.Dialog): 743 '''Get user selected magnetic atoms after cell transformation 744 ''' 745 def __init__(self,parent,Atoms,atCodes): 746 wx.Dialog.__init__(self,parent,wx.ID_ANY,'Magnetic atom selection', 747 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 748 self.panel = wx.Panel(self) #just a dummy - gets destroyed in Draw! 749 self.Atoms = Atoms 750 self.atCodes = atCodes 751 self.Use = len(self.Atoms)*[True,] 752 self.Draw() 753 754 def Draw(self): 755 756 def OnUseChk(event): 757 Obj = event.GetEventObject() 758 iuse = Indx[Obj.GetId()] 759 self.Use[iuse] = not self.Use[iuse] 760 Obj.SetValue(self.Use[iuse]) 761 762 self.panel.Destroy() 763 self.panel = wx.Panel(self) 764 Indx = {} 765 mainSizer = wx.BoxSizer(wx.VERTICAL) 766 767 mainSizer.Add(wx.StaticText(self.panel,label=' Name, x, y, z:'),0,WACV) 768 atmSizer = wx.FlexGridSizer(0,2,5,5) 769 for iuse,[use,atom] in enumerate(zip(self.Use,self.Atoms)): 770 useChk = wx.CheckBox(self.panel,label='Use?') 771 Indx[useChk.GetId()] = iuse 772 useChk.SetValue(use) 773 useChk.Bind(wx.EVT_CHECKBOX, OnUseChk) 774 atmSizer.Add(useChk,0,WACV) 775 text = ' %s %10.5f %10.5f %10.5f'%(atom[0],atom[3],atom[4],atom[5]) 776 atmSizer.Add(wx.StaticText(self.panel,label=text),0,WACV) 777 mainSizer.Add(atmSizer) 778 779 OkBtn = wx.Button(self.panel,-1,"Ok") 780 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 781 cancelBtn = wx.Button(self.panel,-1,"Use All") 782 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 783 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 784 btnSizer.Add((20,20),1) 785 btnSizer.Add(OkBtn) 786 btnSizer.Add((20,20),1) 787 btnSizer.Add(cancelBtn) 788 btnSizer.Add((20,20),1) 789 790 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 791 self.panel.SetSizer(mainSizer) 792 self.panel.Fit() 793 self.Fit() 794 795 def GetSelection(self): 796 useAtoms = [] 797 useatCodes = [] 798 for use,atom,code in zip(self.Use,self.Atoms,self.atCodes): 799 if use: 800 useAtoms.append(atom) 801 useatCodes.append(code) 802 return useAtoms,useatCodes 803 804 def OnOk(self,event): 805 parent = self.GetParent() 806 parent.Raise() 807 self.EndModal(wx.ID_OK) 808 809 def OnCancel(self,event): 810 parent = self.GetParent() 811 parent.Raise() 812 self.EndModal(wx.ID_CANCEL) 813 814 732 815 ################################################################################ 733 816 class RotationDialog(wx.Dialog): -
trunk/GSASIIlattice.py
r2486 r2512 232 232 def TransformPhase(oldPhase,newPhase,Trans,Vec,ifMag): 233 233 '''Transform atoms from oldPhase to newPhase by Trans & Vec 234 NB: doesnt transform moments correctly - TBD235 234 236 235 :param oldPhase: dict G2 phase info for old phase … … 242 241 if True all nonmagnetic atoms will be removed 243 242 244 This needs to properly transform magnetic moments for mag - mag transforms245 243 ''' 246 244 … … 253 251 SGData = newPhase['General']['SGData'] 254 252 invTrans = nl.inv(Trans) 255 newAtoms = FillUnitCell(oldPhase) 253 newAtoms,atCodes = FillUnitCell(oldPhase) 254 # GSASIIpath.IPyBreak() 256 255 Unit =[abs(int(max(unit))-1) for unit in Trans] 257 256 for i,unit in enumerate(Unit): … … 259 258 for j in range(unit): 260 259 moreAtoms = copy.deepcopy(newAtoms) 261 for atom in moreAtoms: 260 moreCodes = [] 261 for atom,code in zip(moreAtoms,atCodes): 262 262 atom[cx+i] += 1. 263 if '+' in code: 264 cell = list(eval(code.split('+')[1])) 265 ops = code.split('+')[0] 266 else: 267 cell = [0,0,0] 268 ops = code 269 cell[i] += 1 270 moreCodes.append('%s+%d,%d,%d'%(ops,cell[0],cell[1],cell[2])) 263 271 newAtoms += moreAtoms 272 atCodes += moreCodes 264 273 if ifMag: 265 274 cia += 3 … … 268 277 newPhase['General']['AtomPtrs'] = [cx,ct,cs,cia] 269 278 magAtoms = [] 279 magatCodes = [] 270 280 Landeg = 2.0 271 for atom in newAtoms:281 for iat,atom in enumerate(newAtoms): 272 282 if len(G2elem.GetMFtable([atom[ct],],[Landeg,])): 273 283 magAtoms.append(atom[:cx+4]+[0.,0.,0.]+atom[cx+4:]) 284 magatCodes.append(atCodes[iat]) 274 285 newAtoms = magAtoms 286 atCodes = magatCodes 275 287 newPhase['Draw Atoms'] = [] 276 288 for atom in newAtoms: … … 289 301 atom[cm:cm+3] = mom*mag 290 302 newPhase['Atoms'] = newAtoms 291 newPhase['Atoms'] = GetUnique(newPhase)303 newPhase['Atoms'],atCodes = GetUnique(newPhase,atCodes) 292 304 newPhase['Drawing']['Atoms'] = [] 293 return newPhase 305 newPhase['ranId'] = ran.randint(0,sys.maxint) 306 return newPhase,atCodes 294 307 295 308 def FillUnitCell(Phase): 296 309 Atoms = Phase['Atoms'] 297 310 atomData = [] 311 atCodes = [] 298 312 SGData = Phase['General']['SGData'] 299 313 SpnFlp = SGData.get('SpnFlp',[]) … … 304 318 cm = cx+4 305 319 unit = np.zeros(3) 306 for atom in Atoms:320 for iat,atom in enumerate(Atoms): 307 321 XYZ = np.array(atom[cx:cx+3]) 308 322 xyz = XYZ%1. 309 unit = XYZ-xyz310 323 if atom[cia] == 'A': 311 324 Uij = atom[cia+2:cia+8] … … 321 334 mom = np.inner(np.array(atom[cm:cm+3]),Bmat) 322 335 atom[cm:cm+3] = np.inner(np.inner(mom,M),Amat)*nl.det(M)*SpnFlp[opNum-1] 336 atCodes.append('%d:%s'%(iat,str(item[2]))) 323 337 atomData.append(atom[:cia+9]) #not SS stuff 324 338 else: … … 334 348 atom[cm:cm+3] = np.inner(np.inner(mom,M),Amat)*nl.det(M)*SpnFlp[opNum-1] 335 349 # GSASIIpath.IPyBreak() 350 atCodes.append('%d:%s'%(iat,str(item[1]))) 336 351 atomData.append(atom[:cia+9]) #not SS stuff 337 352 338 return atomData 353 return atomData,atCodes 339 354 340 def GetUnique(Phase ):355 def GetUnique(Phase,atCodes): 341 356 342 357 def noDuplicate(xyzA,XYZ,Amat): … … 352 367 Ind = len(Atoms) 353 368 newAtoms = [] 369 newAtCodes = [] 354 370 Indx = {} 355 371 XYZ = {} … … 369 385 if Indx[ind]: 370 386 newAtoms.append(Atoms[ind]) 371 return newAtoms 387 newAtCodes.append(atCodes[ind]) 388 return newAtoms,newAtCodes 372 389 373 390 def calc_rVsq(A): -
trunk/GSASIIphsGUI.py
r2504 r2512 1388 1388 dlg.Destroy() 1389 1389 phaseName = newPhase['General']['Name'] 1390 if ifMag: 1391 phaseName += ' mag' 1392 newPhase = G2lat.TransformPhase(data,newPhase,Trans,Vec,ifMag) 1390 newPhase,atCodes = G2lat.TransformPhase(data,newPhase,Trans,Vec,ifMag) 1393 1391 detTrans = np.abs(nl.det(Trans)) 1394 1392 1395 1393 generalData = newPhase['General'] 1396 1394 SGData = generalData['SGData'] 1395 Atoms = newPhase['Atoms'] 1396 if ifMag: 1397 dlg = G2gd.UseMagAtomDialog(G2frame,Atoms,atCodes) 1398 try: 1399 if dlg.ShowModal() == wx.ID_OK: 1400 newPhase['Atoms'],atCodes = dlg.GetSelection() 1401 finally: 1402 dlg.Destroy() 1403 SGData['GenSym'],SGData['GenFlg'] = G2spc.GetGenSym(SGData) 1404 SGData['MagSpGrp'] = G2spc.MagSGSym(SGData) 1405 SGData['OprNames'],SGData['SpnFlp'] = G2spc.GenMagOps(SGData) 1406 generalData['Lande g'] = len(generalData['AtomTypes'])*[2.,] 1407 1397 1408 NShkl = len(G2spc.MustrainNames(SGData)) 1398 1409 NDij = len(G2spc.HStrainNames(SGData)) … … 1407 1418 G2frame.PatternTree.SetItemPyData(sub,newPhase) 1408 1419 if ifMag and ifConstr: 1409 G2cnstG.MagConstraints(G2frame,data,newPhase,Trans,Vec, ) #data is old phase1420 G2cnstG.MagConstraints(G2frame,data,newPhase,Trans,Vec,atCodes) #data is old phase 1410 1421 G2frame.PatternTree.SelectItem(sub) 1411 # G2gd.MovePatternTreeToGrid(G2frame,sub) #bring up new phase General tab1412 1422 1413 1423 ################################################################################ -
trunk/GSASIIrestrGUI.py
r2487 r2512 1678 1678 mulfrac = mul*frac 1679 1679 calcs = mul*frac*factors 1680 chisq += ch iralRestData['wtFactor']*((obs-np.sum(calcs))/esd)**21680 chisq += chemcompRestData['wtFactor']*((obs-np.sum(calcs))/esd)**2 1681 1681 for iatm,[atom,mf,fr,clc] in enumerate(zip(atoms,mulfrac,factors,calcs)): 1682 1682 table.append([atom,mf,fr,clc,'','']) … … 1816 1816 text = G2frame.dataDisplay.GetPageText(page) 1817 1817 G2frame.dataFrame.RestraintEdit.SetLabel(G2gd.wxID_RESRCHANGEVAL,'Change value') 1818 if text == 'Bond restraints':1818 if text == 'Bond': 1819 1819 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu) 1820 1820 G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,True) … … 1822 1822 bondRestData = restrData['Bond'] 1823 1823 UpdateBondRestr(bondRestData) 1824 elif text == 'Angle restraints':1824 elif text == 'Angle': 1825 1825 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu) 1826 1826 G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,True) … … 1828 1828 angleRestData = restrData['Angle'] 1829 1829 UpdateAngleRestr(angleRestData) 1830 elif text == 'Plane restraints':1830 elif text == 'Plane': 1831 1831 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu) 1832 1832 G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,True) … … 1834 1834 planeRestData = restrData['Plane'] 1835 1835 UpdatePlaneRestr(planeRestData) 1836 elif text == 'Chiral restraints':1836 elif text == 'Chiral': 1837 1837 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu) 1838 1838 G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,False) … … 1840 1840 chiralRestData = restrData['Chiral'] 1841 1841 UpdateChiralRestr(chiralRestData) 1842 elif text == 'Torsion restraints':1842 elif text == 'Torsion': 1843 1843 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu) 1844 1844 G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,False) … … 1847 1847 torsionRestData = restrData['Torsion'] 1848 1848 UpdateTorsionRestr(torsionRestData) 1849 elif text == 'Ramachandran restraints':1849 elif text == 'Ramachandran': 1850 1850 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu) 1851 1851 G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,False) … … 1855 1855 UpdateRamaRestr(ramaRestData) 1856 1856 wx.CallAfter(G2plt.PlotRama,G2frame,phaseName,rama,ramaName) 1857 elif text == 'Chem. comp. restraints':1857 elif text == 'Chem. comp.': 1858 1858 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu) 1859 1859 G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,True) … … 1863 1863 chemcompRestData = restrData['ChemComp'] 1864 1864 UpdateChemcompRestr(chemcompRestData) 1865 elif text == 'Texture restraints':1865 elif text == 'Texture': 1866 1866 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.RestraintMenu) 1867 1867 G2frame.dataFrame.RestraintEdit.Enable(G2gd.wxID_RESTRAINTADD,True) … … 1908 1908 G2frame.dataFrame.RestraintTab.DestroyItem(i) 1909 1909 1910 txt = 'Bond restraints'1910 txt = 'Bond' 1911 1911 BondRestr = wx.ScrolledWindow(G2frame.dataDisplay) 1912 1912 G2frame.dataDisplay.AddPage(BondRestr,txt) … … 1918 1918 tabIndex[item.GetId()] = tabcount 1919 1919 1920 txt = 'Angle restraints'1920 txt = 'Angle' 1921 1921 AngleRestr = wx.ScrolledWindow(G2frame.dataDisplay) 1922 1922 G2frame.dataDisplay.AddPage(AngleRestr,txt) … … 1928 1928 tabIndex[item.GetId()] = tabcount 1929 1929 1930 txt = 'Plane restraints'1930 txt = 'Plane' 1931 1931 PlaneRestr = wx.ScrolledWindow(G2frame.dataDisplay) 1932 1932 G2frame.dataDisplay.AddPage(PlaneRestr,txt) … … 1938 1938 tabIndex[item.GetId()] = tabcount 1939 1939 1940 txt = 'Chiral restraints'1940 txt = 'Chiral' 1941 1941 ChiralRestr = wx.ScrolledWindow(G2frame.dataDisplay) 1942 1942 G2frame.dataDisplay.AddPage(ChiralRestr,txt) … … 1949 1949 1950 1950 if 'macro' in General['Type']: 1951 txt = 'Torsion restraints'1951 txt = 'Torsion' 1952 1952 TorsionRestr = wx.ScrolledWindow(G2frame.dataDisplay) 1953 1953 G2frame.dataDisplay.AddPage(TorsionRestr,txt) … … 1959 1959 tabIndex[item.GetId()] = tabcount 1960 1960 1961 txt = 'Ramachandran restraints'1961 txt = 'Ramachandran' 1962 1962 RamaRestr = wx.ScrolledWindow(G2frame.dataDisplay) 1963 1963 G2frame.dataDisplay.AddPage(RamaRestr,txt) … … 1969 1969 tabIndex[item.GetId()] = tabcount 1970 1970 1971 txt = 'Chem. comp. restraints'1971 txt = 'Chem. comp.' 1972 1972 ChemCompRestr = wx.ScrolledWindow(G2frame.dataDisplay) 1973 1973 G2frame.dataDisplay.AddPage(ChemCompRestr,txt) … … 1980 1980 1981 1981 if General['SH Texture']['Order']: 1982 txt = 'Texture restraints'1982 txt = 'Texture' 1983 1983 TextureRestr = wx.ScrolledWindow(G2frame.dataDisplay) 1984 1984 G2frame.dataDisplay.AddPage(TextureRestr,txt) -
trunk/GSASIIstrMath.py
r2508 r2512 320 320 textureData = General['SH Texture'] 321 321 SGData = General['SGData'] 322 Atoms = Phases[phase]['Atoms'] 322 323 AtLookup = G2mth.FillAtomLookUp(Phases[phase]['Atoms'],cia+8) 323 324 cell = General['Cell'][1:7] … … 368 369 for i,[indx,factors,obs,esd] in enumerate(itemRest[rest]): 369 370 pNames.append(str(pId)+':'+name+':'+str(i)) 370 mul = np.array(G2mth.GetAtomItemsById(Atoms,AtLook Up,indx,cs+1))371 frac = np.array(G2mth.GetAtomItemsById(Atoms,AtLook Up,indx,cs-1))371 mul = np.array(G2mth.GetAtomItemsById(Atoms,AtLookup,indx,cs+1)) 372 frac = np.array(G2mth.GetAtomItemsById(Atoms,AtLookup,indx,cs-1)) 372 373 calc = np.sum(mul*frac*factors) 373 374 pVals.append(obs-calc) … … 455 456 cx,ct,cs,cia = General['AtomPtrs'] 456 457 SGData = General['SGData'] 458 Atoms = Phases[phase]['Atoms'] 457 459 AtLookup = G2mth.FillAtomLookUp(Phases[phase]['Atoms'],cia+8) 458 460 cell = General['Cell'][1:7] … … 511 513 for ind in indx: 512 514 dNames += [str(pId)+'::Afrac:'+str(AtLookup[ind])] 513 mul = np.array(G2mth.GetAtomItemsById(Atoms,AtLook Up,indx,cs+1))515 mul = np.array(G2mth.GetAtomItemsById(Atoms,AtLookup,indx,cs+1)) 514 516 deriv = mul*factors 515 517 elif 'Texture' in name: … … 1287 1289 eDotK = np.sum(HM[:,:,nxs,nxs]*Gdata[:,nxs,:,:],axis=0) 1288 1290 Q = HM[:,:,nxs,nxs]*eDotK[nxs,:,:,:]-Gdata[:,nxs,:,:] #Mxyz,Nref,Nop,Natm = BPM in magstrfc.for OK 1291 #there is still something wrong with the next three lines = dF/dmag not corect yet 1289 1292 dqdm = np.array([np.outer(hm,hm)-np.eye(3) for hm in HM.T]).T #Mxyz,Mxyz,Nref (3x3 matrix) 1290 1293 dqmx = np.sum(dqdm[:,:,:,nxs,nxs]*dGdm[:,nxs,nxs,:,:],axis=0) #matrix * vector = vector 1291 1294 dmx = Q*dGdM[:,nxs,:,:]+dqmx #*Mag canceled out of dqmx term 1295 # 1292 1296 fam = Q*TMcorr[nxs,:,nxs,:]*cosm[nxs,:,:,:]*Mag[nxs,nxs,:,:] #Mxyz,Nref,Nop,Natm 1293 1297 fbm = Q*TMcorr[nxs,:,nxs,:]*sinm[nxs,:,:,:]*Mag[nxs,nxs,:,:] … … 1300 1304 dfadx = np.sum(-twopi*Uniq[nxs,:,:,nxs,:]*famx[:,:,:,:,nxs],axis=2) #deriv OK 1301 1305 dfadmx = np.sum(TMcorr[nxs,:,nxs,:]*cosm[nxs,:,:,:]*dmx,axis=2) 1302 dfadui = np.sum(-SQfactor[:,nxs,nxs]*fam,axis=2) #array(Ops,refBlk,nAtoms) OK1303 dfadua = np.sum(-Hij[nxs,:,:,nxs,:]*fam[:,:,:,:,nxs],axis=2) # OK? not U12 & U23 in sarc1306 dfadui = np.sum(-SQfactor[:,nxs,nxs]*fam,axis=2) #array(Ops,refBlk,nAtoms) deriv OK 1307 dfadua = np.sum(-Hij[nxs,:,:,nxs,:]*fam[:,:,:,:,nxs],axis=2) #deriv OK? not U12 & U23 in sarc 1304 1308 # imaginary part; array(3,refBlk,nAtom,3) & array(3,refBlk,nAtom,6) 1305 1309 dfbdfr = np.sum(fbm/occ,axis=2) #array(mxyz,refBlk,nAtom) Fdata != 0 avoids /0. problem
Note: See TracChangeset
for help on using the changeset viewer.