Changeset 2506
- Timestamp:
- Oct 26, 2016 12:24:19 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIconstrGUI.py
r2496 r2506 23 23 import numpy as np 24 24 import numpy.ma as ma 25 import numpy.linalg as nl 25 26 import os.path 26 27 import GSASIIpath … … 1178 1179 1179 1180 def MagConstraints(G2frame,oldPhase,newPhase,Trans,Vec): 1181 '''Add constraints for new magnetic phase created via transformation of old 1182 nuclear one 1183 ''' 1184 Histograms,Phases = G2frame.GetUsedHistogramsAndPhasesfromTree() 1185 UseList = newPhase['Histograms'] 1186 detTrans = np.abs(nl.det(Trans)) 1187 opId = oldPhase['pId'] 1188 npId = newPhase['pId'] 1189 item = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Constraints') 1190 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,]] 1180 1196 print 'make nuclear-magnetic phase constraints here' 1181 1197 -
trunk/GSASIIpwdGUI.py
r2505 r2506 599 599 'covMatrix':np.eye(len(result[0])),'title':name,'parmDict':parmDict, 600 600 'fullVary':fullvaryList,'badVary':badVary} 601 dlg.Destroy()602 601 print ' ***** Sequential peak fit successful *****' 603 602 finally: 603 dlg.Destroy() 604 604 wx.EndBusyCursor() 605 605 if Reverse: … … 3001 3001 # style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_SKIP|wx.PD_CAN_ABORT) #desn't work in 32 bit versions 3002 3002 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_ABORT) 3003 OK,dmin,newcells = G2indx.DoIndexPeaks(peaks[0],controls,bravais,dlg,G2frame.ifX20) 3004 dlg.Destroy() 3003 try: 3004 OK,dmin,newcells = G2indx.DoIndexPeaks(peaks[0],controls,bravais,dlg,G2frame.ifX20) 3005 finally: 3006 dlg.Destroy() 3005 3007 cells = keepcells+newcells 3006 3008 cells = G2indx.sortM20(cells) -
trunk/GSASIIstrMath.py
r2501 r2506 753 753 FP = np.repeat(FP.T,len(SGT)*len(TwinLaw),axis=0) 754 754 FPP = np.repeat(FPP.T,len(SGT)*len(TwinLaw),axis=0) 755 Tindx = np.array([refDict['FF']['El'].index(El) for El in Tdata])756 755 Uniq = np.inner(H,SGMT) 757 756 Phi = np.inner(H,SGT) … … 764 763 Tuij = np.where(HbH<1.,np.exp(HbH),1.0).T 765 764 Tcorr = np.reshape(Tiso,Tuij.shape)*Tuij*Mdata*Fdata/len(SGMT) 765 Tindx = np.array([refDict['FF']['El'].index(El) for El in Tdata]) 766 766 FF = np.repeat(refDict['FF']['FF'][iBeg:iFin].T[Tindx].T,len(SGT)*len(TwinLaw),axis=0) 767 767 if 'N' in calcControls[hfx+'histType'] and parmDict[pfx+'isMag']: … … 1222 1222 Mag = np.sqrt(np.sum(Gdata**2,axis=0)) #magnitude of moments for uniq atoms 1223 1223 Gdata = np.where(Mag>0.,Gdata/Mag,0.) #normalze mag. moments 1224 dGdM = np.copy(Gdata) 1224 1225 Gdata = np.inner(Bmat,Gdata.T) #convert to crystal space 1225 1226 Gdata = np.inner(Gdata.T,SGMT).T #apply sym. ops. … … 1229 1230 Gdata = SGData['MagMom'][nxs,:,nxs]*Gdata #flip vectors according to spin flip 1230 1231 Gdata = np.inner(Amat,Gdata.T) #convert back to cart. space MXYZ, Natoms, NOps*Inv*Ncen 1231 Gdata = np.swapaxes(Gdata,1,2) # put Natoms last 1232 Gdata = np.swapaxes(Gdata,1,2) # put Natoms last - Mxyz,Nops,Natms 1232 1233 # GSASIIpath.IPyBreak() 1233 Mag = np.tile(Mag[:,nxs],len(SGMT)*Ncen).T # Mag same length as Gdata1234 Mag = np.tile(Mag[:,nxs],len(SGMT)*Ncen).T #make Mag same length as Gdata 1234 1235 if SGData['SGInv']: 1235 1236 Mag = np.repeat(Mag,2,axis=0) 1237 dGdm = (1.-Gdata**2) #1/Mag removed - canceled out in dqmx=sum(dqdm*dGdm) 1236 1238 dFdMx = np.zeros((nRef,mSize,3)) 1237 1239 Uij = np.array(G2lat.U6toUij(Uijdata)) … … 1282 1284 cosm = np.cos(mphase) #ditto 1283 1285 HM = np.inner(Bmat.T,H) #put into cartesian space 1284 HM = HM/np.sqrt(np.sum(HM**2,axis=0)) #Gdata = MAGS & HM = UVEC in magstrfc.for both OK1286 HM = HM/np.sqrt(np.sum(HM**2,axis=0)) 1285 1287 eDotK = np.sum(HM[:,:,nxs,nxs]*Gdata[:,nxs,:,:],axis=0) 1286 1288 Q = HM[:,:,nxs,nxs]*eDotK[nxs,:,:,:]-Gdata[:,nxs,:,:] #Mxyz,Nref,Nop,Natm = BPM in magstrfc.for OK 1287 dqdm = np.array([np.outer(hm,hm)-np.eye(3) for hm in HM.T]).T #Mxyz,Mxyz,Nref 1289 dqdm = np.array([np.outer(hm,hm)-np.eye(3) for hm in HM.T]).T #Mxyz,Mxyz,Nref (3x3 matrix) 1290 dqmx = np.sum(dqdm[:,:,:,nxs,nxs]*dGdm[:,nxs,nxs,:,:],axis=0) #matrix * vector = vector 1291 dmx = Q*Gdata[:,nxs,:,:]+dqmx #*Mag canceled out of dqmx term 1288 1292 fam = Q*TMcorr[nxs,:,nxs,:]*cosm[nxs,:,:,:]*Mag[nxs,nxs,:,:] #ditto 1289 1293 fbm = Q*TMcorr[nxs,:,nxs,:]*sinm[nxs,:,:,:]*Mag[nxs,nxs,:,:] #ditto … … 1292 1296 famx = Q*TMcorr[nxs,:,nxs,:]*Mag[nxs,nxs,:,:]*sinm[nxs,:,:,:] #Mxyz,Nref,Nops,Natom 1293 1297 fbmx = Q*TMcorr[nxs,:,nxs,:]*Mag[nxs,nxs,:,:]*cosm[nxs,:,:,:] 1294 #sum below is over Uniq1298 #sums below are over Nops - real part 1295 1299 dfadfr = np.sum(fam/occ,axis=2) #array(Mxyz,refBlk,nAtom) Fdata != 0 avoids /0. problem deriv OK 1296 dfadx = np.sum(twopi*Uniq[nxs,:,:,nxs,:]*famx[:,:,:,:,nxs],axis=2) #deriv OK 1297 dmx = dqdm[:,:,:,nxs,nxs]*Mag[nxs,nxs,nxs,:,:]+Q[nxs,:,:,:,:]*Gdata[:,nxs,nxs,:,:] 1298 dfadmx = np.sum(TMcorr[nxs,nxs,:,nxs,:]*cosm[nxs,nxs,:,:,:]*dmx,axis=-2) 1299 dfadmx = np.reshape(dfadmx,(3,iFin-iBeg,-1,3)) 1300 dfadx = np.sum(-twopi*Uniq[nxs,:,:,nxs,:]*famx[:,:,:,:,nxs],axis=2) #deriv OK 1301 dfadmx = np.sum(TMcorr[nxs,:,nxs,:]*cosm[nxs,:,:,:]*dmx,axis=2) 1300 1302 dfadui = np.sum(-SQfactor[:,nxs,nxs]*fam,axis=2) #array(Ops,refBlk,nAtoms) OK 1301 1303 dfadua = np.sum(-Hij[nxs,:,:,nxs,:]*fam[:,:,:,:,nxs],axis=2) #OK? not U12 & U23 in sarc 1302 # array(3,refBlk,nAtom,3) & array(3,refBlk,nAtom,6)1304 # imaginary part; array(3,refBlk,nAtom,3) & array(3,refBlk,nAtom,6) 1303 1305 dfbdfr = np.sum(fbm/occ,axis=2) #array(mxyz,refBlk,nAtom) Fdata != 0 avoids /0. problem 1304 dfbdx = np.sum(twopi*Uniq[nxs,:,:,nxs,:]*fbmx[:,:,:,:,nxs],axis=2) 1305 dfbdmx = np.sum(TMcorr[nxs,nxs,:,nxs,:]*sinm[nxs,nxs,:,:,:]*dmx,axis=-2) 1306 dfbdmx = np.reshape(dfbdmx,(3,iFin-iBeg,-1,3)) 1306 dfbdx = np.sum(-twopi*Uniq[nxs,:,:,nxs,:]*fbmx[:,:,:,:,nxs],axis=2) 1307 dfbdmx = np.sum(TMcorr[nxs,:,nxs,:]*sinm[nxs,:,:,:]*dmx,axis=2) 1307 1308 dfbdui = np.sum(-SQfactor[:,nxs,nxs]*fbm,axis=2) #array(Ops,refBlk,nAtoms) 1308 1309 dfbdua = np.sum(-Hij[nxs,:,:,nxs,:]*fbm[:,:,:,:,nxs],axis=2) 1310 #accumulate derivatives 1309 1311 dFdfr[iBeg:iFin] = 2.*np.sum((fams[:,:,nxs]*dfadfr+fbms[:,:,nxs]*dfbdfr)*Mdata/(2*Nops*Ncen),axis=0) 1310 1312 dFdx[iBeg:iFin] = 2.*np.sum(fams[:,:,nxs,nxs]*dfadx+fbms[:,:,nxs,nxs]*dfbdx,axis=0) 1311 dFdMx[iBeg:iFin] = 2.*np.sum(fams[:,:,nxs,nxs]*dfadmx+fbms[:,:,nxs,nxs]*dfbdmx,axis=0) 1313 # GSASIIpath.IPyBreak() 1314 dFdMx[iBeg:iFin] = np.reshape(2.*fams[:,:,nxs]*dfadmx+fbms[:,:,nxs]*dfbdmx,(iFin-iBeg,-1,3)) 1312 1315 dFdui[iBeg:iFin] = 2.*np.sum(fams[:,:,nxs]*dfadui+fbms[:,:,nxs]*dfbdui,axis=0) 1313 1316 dFdua[iBeg:iFin] = 2.*np.sum(fams[:,:,nxs,nxs]*dfadua+fbms[:,:,nxs,nxs]*dfbdua,axis=0) … … 3790 3793 if Ka2 and iFin2-iBeg2: 3791 3794 dMdv[varylist.index(name)][iBeg2:iFin2] += dpdA*dervDict2['pos'] 3792 elif name in dependentVars: 3795 elif name in dependentVars: #need to scale for mixed phase constraints? 3793 3796 depDerivDict[name][iBeg:iFin] += dpdA*dervDict['pos'] 3794 3797 if Ka2 and iFin2-iBeg2: … … 3846 3849 depDerivDict[phfx+name][iBeg2:iFin2] += parmDict[phfx+'Scale']*dFdvDict[phfx+name][iref]*dervDict2['int']/refl[9+im] 3847 3850 if not Phase['General'].get('doPawley'): 3848 #do atom derivatives - for RB,F,X & U so far 3851 #do atom derivatives - for RB,F,X & U so far - how do I scale mixed phase constraints? 3849 3852 corr = 0. 3850 3853 corr2 = 0.
Note: See TracChangeset
for help on using the changeset viewer.