Changeset 1957 for trunk/GSASIIspc.py


Ignore:
Timestamp:
Aug 14, 2015 3:08:55 PM (8 years ago)
Author:
vondreele
Message:

work on SS structure factors
some refactoring of SS special pos code
rearrange sf routines in G2strMath - some math error in the SS sf codes
make SS plots of structure behave properly

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIspc.py

    r1956 r1957  
    903903    '''
    904904    modsym,gensym = SSymbol.replace(' ','').split(')')
     905    if gensym in ['0','00','000','0000']:       #get rid of extraneous symbols
     906        gensym = ''
    905907    nfrac = modsym.count('/')
    906908    modsym = modsym.lstrip('(')
     
    14311433    return CSuinel[indx[1]]
    14321434   
     1435def getTauT(tau,sop,ssop,XYZ):
     1436    ssopinv = nl.inv(ssop[0])
     1437    mst = ssopinv[3][:3]
     1438    epsinv = ssopinv[3][3]
     1439    sdet = nl.det(sop[0])
     1440    ssdet = nl.det(ssop[0])
     1441    dtau = mst*(XYZ-sop[1])-epsinv*ssop[1][3]
     1442    dT = 1.0
     1443    if np.any(dtau%.5):
     1444        dT = np.tan(np.pi*np.sum(dtau%.5))
     1445    tauT = np.inner(mst,XYZ-sop[1])+epsinv*(tau-ssop[1][3])
     1446    return sdet,ssdet,dtau,dT,tauT
     1447   
     1448def OpsfromStringOps(A,SGData,SSGData):
     1449    SGOps = SGData['SGOps']
     1450    SSGOps = SSGData['SSGOps']
     1451    Ax = A.split('+')
     1452    Ax[0] = int(Ax[0])
     1453    iC = 1
     1454    if Ax[0] < 0:
     1455        iC = -1
     1456    Ax[0] = abs(Ax[0])
     1457    nA = Ax[0]%100-1
     1458    return SGOps[nA],SSGOps[nA],iC
     1459   
    14331460def GetSSfxuinel(waveType,nH,XYZ,SGData,SSGData,debug=False):
    14341461   
     
    14431470                csi[i] = parms.index(csi[i])
    14441471        return CSI
    1445    
     1472       
    14461473    def fracCrenel(tau,Toff,Twid):
    14471474        Tau = (tau-Toff[:,np.newaxis])%1.
     
    14861513        for i in SdIndx:
    14871514            sop = Sop[i]
    1488             ssop = SSop[i]
    1489             ssopinv = nl.inv(ssop[0])
    1490             mst = ssopinv[3][:3]
    1491             epsinv = ssopinv[3][3]
    1492             sdet = nl.det(sop[0])
    1493             ssdet = nl.det(ssop[0])
    1494             dtau = mst*(XYZ-sop[1])-epsinv*ssop[1][3]
    1495             dT = 1.0
    1496             if np.any(dtau%.5):
    1497                 dT = np.tan(np.pi*np.sum(dtau%.5))
    1498             tauT = np.inner(mst,XYZ-sop[1])+epsinv*(tau-ssop[1][3])
     1515            ssop = SSop[i]           
     1516            sdet,ssdet,dtau,dT,tauT = getTauT(tau,sop,ssop,XYZ)
    14991517            fsc = np.ones(2,dtype='i')
    15001518            if 'Crenel' in waveType:
     
    15511569            sop = Sop[i]
    15521570            ssop = SSop[i]
     1571            sdet,ssdet,dtau,dT,tauT = getTauT(tau,sop,ssop,XYZ)
    15531572            xsc = np.ones(6,dtype='i')
    1554             ssopinv = nl.inv(ssop[0])
    1555             mst = ssopinv[3][:3]
    1556             epsinv = ssopinv[3][3]
    1557             sdet = nl.det(sop[0])
    1558             ssdet = nl.det(ssop[0])
    1559             dtau = mst*(XYZ-sop[1])-epsinv*ssop[1][3]
    1560             dT = 1.0
    1561             if np.any(dtau%.5):
    1562                 dT = np.tan(np.pi*np.sum(dtau%.5))
    1563             tauT = np.inner(mst,XYZ-sop[1])+epsinv*(tau-ssop[1][3])
    15641573            if waveType == 'Fourier':
    15651574                dXT = posFourier(np.sort(tauT),nH,delt6[:3],delt6[3:])   #+np.array(XYZ)[:,np.newaxis,np.newaxis]
     
    16341643            sop = Sop[i]
    16351644            ssop = SSop[i]
    1636             ssopinv = nl.inv(ssop[0])
    1637             mst = ssopinv[3][:3]
    1638             epsinv = ssopinv[3][3]
    1639             sdet = nl.det(sop[0])
    1640             ssdet = nl.det(ssop[0])
    1641             dtau = mst*(XYZ-sop[1])-epsinv*ssop[1][3]
    1642             dT = 1.0
    1643             if np.any(dtau%.5):
    1644                 dT = np.tan(np.pi*np.sum(dtau%.5))
    1645             tauT = np.inner(mst,XYZ-sop[1])+epsinv*(tau-ssop[1][3])
     1645            sdet,ssdet,dtau,dT,tauT = getTauT(tau,sop,ssop,XYZ)
    16461646            usc = np.ones(12,dtype='i')
    16471647            dUT = posFourier(tauT,nH,delt12[:6],delt12[6:])                  #Uij modulations - 6x12x49 array
     
    21142114    else:
    21152115        cellA = np.zeros(3)
    2116     newX = Cen+(1-2*iC)*(np.inner(M,X)+T)+cellA
     2116    newX = Cen+(1-2*iC)*(np.inner(M,X).T+T)+cellA
    21172117    if len(Uij):
    21182118        U = Uij2U(Uij)
Note: See TracChangeset for help on using the changeset viewer.