Changeset 3881


Ignore:
Timestamp:
Apr 8, 2019 3:22:13 PM (5 years ago)
Author:
vondreele
Message:

mag. str fctr. (again...)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIstrMath.py

    r3880 r3881  
    15091509    if parmDict[pfx+'isMag']:       #This part correct for making modulated mag moments on equiv atoms
    15101510       
    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,xyz
    1512 #        Tmag,TmagA,TmagB = G2mth.MagMod(ngl,mXYZ,modQ,MSSdata,SGData,SSGData)   #Ntau,Nops,Natm,Mxyz-Tmag matches drawing moments
     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,xyz
     1512        Tmag,TmagA,TmagB = G2mth.MagMod(ngl,mXYZ,modQ,MSSdata,SGData,SSGData)   #Ntau,Nops,Natm,Mxyz-Tmag matches drawing moments
    15131513       
    15141514        if not SGData['SGGray']:
     
    15201520            GSdata = SGData['MagMom'][nxs,:,nxs]*GSdata   #flip vectors according to spin flip * det(opM)
    15211521            GSdata = np.swapaxes(GSdata,0,1)    #Nop,Natm,Mxyz
    1522 #            Tmag += Gdata.T[nxs,nxs,:,:]
     1522            Tmag += Gdata.T[nxs,nxs,:,:]
    15231523           
    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]
     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]
    15271527
    15281528    FF = np.zeros(len(Tdata))
     
    15561556    while iBeg < nRef:
    15571557        iFin = min(iBeg+blkSize,nRef)
     1558        mRef= iFin-iBeg
    15581559        refl = refDict['RefList'][iBeg:iFin]    #array(blkSize,nItems)
    15591560        H = refl.T[:4]                          #array(blkSize,4)
     
    15901591        Tcorr = np.reshape(Tiso,Tuij.shape)*Tuij*Mdata*Fdata/Uniq.shape[1]  #refBlk x ops x atoms
    15911592
    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??           
    15961594           
     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)
    15971611           
     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
    15981614           
    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
    16631618        else:
    16641619            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.