Changeset 3881
- Timestamp:
- Apr 8, 2019 3:22:13 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIstrMath.py
r3880 r3881 1509 1509 if parmDict[pfx+'isMag']: #This part correct for making modulated mag moments on equiv atoms 1510 1510 1511 #mXYZ = np.array([[xyz[0] for xyz in list(G2spc.GenAtom(xyz,SGData,All=True,Move=True))] for xyz in (Xdata+dXdata).T])%1. #Natn,Nop,xyz1512 #Tmag,TmagA,TmagB = G2mth.MagMod(ngl,mXYZ,modQ,MSSdata,SGData,SSGData) #Ntau,Nops,Natm,Mxyz-Tmag matches drawing moments1511 mXYZ = np.array([[xyz[0] for xyz in list(G2spc.GenAtom(xyz,SGData,All=True,Move=True))] for xyz in (Xdata+dXdata).T])%1. #Natn,Nop,xyz 1512 Tmag,TmagA,TmagB = G2mth.MagMod(ngl,mXYZ,modQ,MSSdata,SGData,SSGData) #Ntau,Nops,Natm,Mxyz-Tmag matches drawing moments 1513 1513 1514 1514 if not SGData['SGGray']: … … 1520 1520 GSdata = SGData['MagMom'][nxs,:,nxs]*GSdata #flip vectors according to spin flip * det(opM) 1521 1521 GSdata = np.swapaxes(GSdata,0,1) #Nop,Natm,Mxyz 1522 #Tmag += Gdata.T[nxs,nxs,:,:]1522 Tmag += Gdata.T[nxs,nxs,:,:] 1523 1523 1524 #TmagC = np.inner(Tmag,uAmat.T) #make cartesian; Ntau,Nops,Natm,,Mxyz1525 #Smag = np.sqrt(np.sum(TmagC**2,axis=-1))1526 #Kmag = TmagC/Smag[:,:,:,nxs]1524 TmagC = np.inner(Tmag,uAmat.T) #make cartesian; Ntau,Nops,Natm,,Mxyz 1525 Smag = np.sqrt(np.sum(TmagC**2,axis=-1)) 1526 Kmag = TmagC/Smag[:,:,:,nxs] 1527 1527 1528 1528 FF = np.zeros(len(Tdata)) … … 1556 1556 while iBeg < nRef: 1557 1557 iFin = min(iBeg+blkSize,nRef) 1558 mRef= iFin-iBeg 1558 1559 refl = refDict['RefList'][iBeg:iFin] #array(blkSize,nItems) 1559 1560 H = refl.T[:4] #array(blkSize,4) … … 1590 1591 Tcorr = np.reshape(Tiso,Tuij.shape)*Tuij*Mdata*Fdata/Uniq.shape[1] #refBlk x ops x atoms 1591 1592 1592 if 'N' in calcControls[hfx+'histType'] and parmDict[pfx+'isMag']: #TODO: mag math here?? 1593 UniqM = np.hstack([Uniq for cen in SSCen]) 1594 UniqPM = np.hstack([UniqP for cen in SSCen]) 1595 GmfpuA = G2mth.MagModulation(UniqM,UniqPM,nWaves,Fmod,Xmod,Umod,Mmod,glTau,glWt) #2 x refBlk x sym X atoms 1593 if 'N' in calcControls[hfx+'histType'] and parmDict[pfx+'isMag']: #TODO: mag math here?? 1596 1594 1595 phasem = twopi*np.inner(H.T[:,:3],mXYZ) 1596 phasem = np.swapaxes(phasem,1,2) 1597 cosm = np.cos(phasem) 1598 sinm = np.sin(phasem) 1599 MF = refDict['FF']['MF'][iBeg:iFin].T[Tindx].T #Nref,Natm 1600 TMcorr = 0.539*(np.reshape(Tiso,Tuij.shape)*Tuij)[:,0,:]*Fdata*Mdata*MF/(Nops) #Nref,Natm 1601 # 1602 HM = np.inner(Bmat,HP.T) #put into cartesian space 1603 eM = HM/np.sqrt(np.sum(HM**2,axis=0)) #& normalize 1604 #for modulated moments --> m != 0 reflections 1605 M = np.array(np.abs(H[3]),dtype=np.int)-1 1606 fam = TMcorr[:,nxs,nxs,:,nxs]*np.array([np.where(M[i]>=0,(TmagA*cosm[i,nxs,:,:,nxs]-np.sign(H[3])[i]*TmagB*sinm[i,nxs,:,:,nxs]),0.) for i in range(mRef)]) 1607 fbm = TMcorr[:,nxs,nxs,:,nxs]*np.array([np.where(M[i]>=0,(TmagA*sinm[i,nxs,:,:,nxs]+np.sign(H[3])[i]*TmagB*cosm[i,nxs,:,:,nxs]),0.) for i in range(mRef)]) 1608 1609 famq = np.sum(np.sum(fam/2.,axis=-2),axis=-2) #Nref,Mxyz; sum ops & atoms 1610 fbmq = np.sum(np.sum(fbm/2.,axis=-2),axis=-2) 1597 1611 1612 fas = np.sum(famq,axis=-1)**2-np.sum(eM.T[:,nxs,:]*famq,axis=-1)**2 #mag intensity calc F^2-(e.F)^2 1613 fbs = np.sum(fbmq,axis=-1)**2-np.sum(eM.T[:,nxs,:]*fbmq,axis=-1)**2 1598 1614 1599 # phasem = twopi*np.inner(H.T[:,:3],mXYZ) 1600 # phasem = np.swapaxes(phasem,1,2) 1601 # cosm = np.cos(phasem) 1602 # sinm = np.sin(phasem) 1603 MF = refDict['FF']['MF'][iBeg:iFin].T[Tindx].T #Nref,Natm 1604 TMcorr = 0.539*(np.reshape(Tiso,Tuij.shape)*Tuij)[:,0,:]*Fdata*Mdata*MF/(2*Nops) #Nref,Natm 1605 # 1606 # HM = np.inner(Bmat,HP.T) #put into cartesian space 1607 # eM = HM/np.sqrt(np.sum(HM**2,axis=0)) #& normalize 1608 # cosq = np.inner(eM.T,Kmag) 1609 # 1610 # fam = TMcorr[:,nxs,nxs,:,nxs]*(TmagA[nxs,:,:,:,:]*cosm[:,nxs,:,:,nxs]-TmagB[nxs,:,:,:,:]*sinm[:,nxs,:,:,nxs])/2. #Nref,Ntau,Nops,Natm,Mxyz 1611 # fbm = TMcorr[:,nxs,nxs,:,nxs]*(TmagA[nxs,:,:,:,:]*sinm[:,nxs,:,:,nxs]+TmagB[nxs,:,:,:,:]*cosm[:,nxs,:,:,nxs])/2. 1612 # 1613 # 1614 # famq = np.sum(np.sum(fam,axis=2),axis=2) #Nref,Mxyz; sum ops & atoms 1615 # fbmq = np.sum(np.sum(fbm,axis=2),axis=2) 1616 # 1617 ## fas = np.sum(famq,axis=-1)**2-np.sum(HM.T[:,nxs,:]*famq,axis=-1)**2 #mag intensity calc F^2-(e.F)^2 1618 ## fbs = np.sum(fbmq,axis=-1)**2-np.sum(HM.T[:,nxs,:]*fbmq,axis=-1)**2 1619 # fas = famq**2-(cosq*famq)**2 1620 # fbs = fbmq**2-(cosq*fbmq)**2 1621 # 1622 # refl.T[10] = np.sum(fas/ngl,axis=-1)+np.sum(fbs/ngl,axis=-1) 1623 # refl.T[11] = atan2d(fbs[:,0],fas[:,0]) 1624 #for modulated moments --> m != 0 reflections 1625 # M = np.array(np.abs(H[3]),dtype=np.int)-1 1626 # fam = TMcorr[:,nxs,:,nxs]*np.array([np.where(M[i]>=0,(MmodA[:,:,M[i],:]*cosm[i,:,:,nxs]-np.sign(H[3])[i,nxs,nxs,nxs]*MmodB[:,:,M[i],:]*sinm[i,:,:,nxs]),0.) for i in range(mRef)]) 1627 # fbm = TMcorr[:,nxs,:,nxs]*np.array([np.where(M[i]>=0,(MmodA[:,:,M[i],:]*sinm[i,:,:,nxs]+np.sign(H[3])[i,nxs,nxs,nxs]*MmodB[:,:,M[i],:]*cosm[i,:,:,nxs]),0.) for i in range(mRef)]) 1628 # 1629 # famq = np.sum(np.sum(fam/2.,axis=-2),axis=-2) #Nref,Mxyz; sum ops & atoms 1630 # fbmq = np.sum(np.sum(fbm/2.,axis=-2),axis=-2) 1631 # 1632 # fas = np.sum(famq,axis=-1)**2-np.sum(HM.T*famq,axis=-1)**2 #mag intensity calc F^2-(e.F)^2 1633 # fbs = np.sum(fbmq,axis=-1)**2-np.sum(HM.T*fbmq,axis=-1)**2 1634 #from #3812 1635 # D = twopi*H.T[:,3:]*glTau[nxs,:] 1636 # mphase = phase[:,:,nxs,:]+D[:,nxs,:,nxs] 1637 # mphase = np.array([mphase+twopi*np.inner(cen,HP.T)[:,nxs,nxs,nxs] for cen in SGData['SGCen']]) 1638 # mphase = np.concatenate(mphase,axis=1) #remove extra axis; Nref,Nop,Ntau,Natm 1639 # sinm = np.swapaxes(np.sin(mphase),1,2) #--> Nref,Nop,Natm,Ntau 1640 # cosm = np.swapaxes(np.cos(mphase),1,2) #ditto 1641 # 1642 # HM = np.inner(Bmat,HP.T) #put into cartesian space 1643 # HM = HM/np.sqrt(np.sum(HM**2,axis=0)) #normalize 1644 # eDotK = np.sum(HM.T[:,nxs,nxs,nxs,:]*Kmag[nxs,:,:,:,:],axis=-1) 1645 # Q = HM.T[:,nxs,nxs,nxs,:]*eDotK[:,:,:,:,nxs]-Kmag[nxs,:,:,:,:] #Nref,Ntau,Nop,Natm,Mxyz 1646 # 1647 fam = (TMcorr[:,nxs,:,nxs]*cosp[:,:,:,nxs]) #Nref,Nop,Natm,Mxyz 1648 fbm = (TMcorr[:,nxs,nxs,:,nxs]*sinp[:,nxs,:,:,nxs]) 1649 fagm = fam*GmfpuA[0]-fbm*GmfpuA[1] #real; Nref,Nop,Natm,Mxyz 1650 fbgm = fbm*GmfpuA[0]+fam*GmfpuA[1] 1651 fasm = np.sum(np.sum(fagm,axis=1),axis=1) #Nref,,Mxyz sum Nop,Natm 1652 fbsm = np.sum(np.sum(fbgm,axis=1),axis=1) 1653 # 1654 # fams = np.sqrt(np.sum(fam**2,axis=-1)) 1655 # fbms = np.sqrt(np.sum(fbm**2,axis=-1)) 1656 # 1657 # fas = np.sum(np.sum(fams,axis=2),axis=2) #Nref,ntau,Mxyz; sum ops & atoms 1658 # fbs = np.sum(np.sum(fbms,axis=2),axis=2) #ditto 1659 # 1660 # refl.T[10] = np.sum(fas/ngl,axis=-1)**2+np.sum(fbs/ngl,axis=-1)**2 1661 # refl.T[11] = atan2d(fbs[:,0],fas[:,0]) 1662 1615 refl.T[10] = np.sum(fas*glWt,axis=1)+np.sum(fbs*glWt,axis=1) #square of sums 1616 refl.T[11] = atan2d(fbs[:,0],fas[:,0]) #ignore f' & f" 1617 1663 1618 else: 1664 1619 GfpuA = G2mth.Modulation(Uniq,UniqP,nWaves,Fmod,Xmod,Umod,glTau,glWt) #2 x refBlk x sym X atoms
Note: See TracChangeset
for help on using the changeset viewer.