Changeset 395 for trunk/GSASIIlattice.py


Ignore:
Timestamp:
Oct 20, 2011 9:25:32 AM (10 years ago)
Author:
vondreele
Message:

Add goniometer omega, chi & phi to sample data
put SH texture in General
fix phase delete to remove it from reflection lists as well
continue development of constraints/restraints GUI
fixes to texture computations, GUI & least squares refinement

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIlattice.py

    r391 r395  
    731731    return False
    732732       
    733 def GenSHCoeff(SGLaue,SamSym,L):
     733def GenSHCoeff(SGLaue,SamSym,L,IfLMN=True):
    734734    coeffNames = []
    735735    for iord in [2*i+2 for i in range(L/2)]:
    736736        for m in [i-iord for i in range(2*iord+1)]:
    737             if SamSym and OdfChk(SamSym,iord,m):
     737            if OdfChk(SamSym,iord,m):
    738738                for n in [i-iord for i in range(2*iord+1)]:
    739739                    if OdfChk(SGLaue,iord,n):
    740                         coeffNames.append('C(%d,%d,%d)'%(iord,m,n))
    741             else:                  #use for powder sample PO when SamSym = None
    742                 for n in [i-iord for i in range(2*iord+1)]:
    743                     if OdfChk(SGLaue,iord,n):
    744                         coeffNames.append('C(%d,%d)'%(iord,n))
     740                        if IfLMN:
     741                            coeffNames.append('C(%d,%d,%d)'%(iord,m,n))
     742                        else:
     743                            coeffNames.append('C(%d,%d)'%(iord,n))
    745744    return coeffNames
    746745
     
    913912    [-0.06773139,0.14120811,-0.15835721,0.18357456,-0.19364673,0.08377174,0.43116318,0.0,0.0]]
    914913}
    915    
    916 def GetKclKsl(L,N,SGLaue,psi,phi,beta):
     914
     915Lnorm = lambda L: 4.*np.pi/(2.0*L+1.)
     916
     917def GetKcl(L,N,SGLaue,phi,beta):
    917918    import pytexture as ptx
    918     FORPI = 12.5663706143592
    919919    RSQ2PI = 0.3989422804014
    920920    SQ2 = 1.414213562373
    921     Lnorm = FORPI/(2.0*L+1.)
    922     Ksl,x = ptx.pyplmpsi(L,0,1,psi)
    923     Ksl *= RSQ2PI
    924921    if SGLaue in ['m3','m3m']:
    925922        Kcl = 0.0
     
    927924            im = j/4+1
    928925            pcrs,dum = ptx.pyplmpsi(L,j,1,phi)
    929             Kcl += BOH['L='+str(l)][N-1][im-1]*pcrs*cosd(j*beta)       
     926            Kcl += BOH['L='+str(L)][N-1][im-1]*pcrs*cosd(j*beta)       
    930927    else:
    931928        pcrs,dum = ptx.pyplmpsi(L,N,1,phi)
     
    943940        else:
    944941            Kcl = pcrs*(cosd(N*beta)+sind(N*beta))
    945     return Kcl*Ksl,Lnorm
     942    return Kcl
     943   
     944def GetKsl(L,M,SamSym,psi,gam):
     945    import pytexture as ptx
     946    RSQPI = 0.5641895835478
     947    SQ2 = 1.414213562373
     948    psrs,dpdps = ptx.pyplmpsi(L,M,1,psi)
     949    psrs *= RSQPI
     950    dpdps *= RSQPI
     951    if M == 0:
     952        psrs /= SQ2
     953        dpdps /= SQ2
     954    if SamSym in ['mmm',]:
     955        dum = cosd(M*gam)
     956        Ksl = psrs*dum
     957        dKsdp = dpdps*dum
     958        dKsdg = -psrs*M*sind(M*gam)
     959    else:
     960        dum = cosd(M*gam)+sind(M*gam)
     961        Ksl = psrs*dum
     962        dKsdp = dpdps*dum
     963        dKsdg = psrs*M*(-sind(M*gam)+cosd(M*gam))
     964    return Ksl,dKsdp,dKsdg
     965   
     966def GetKclKsl(L,N,SGLaue,psi,phi,beta):
     967    """
     968    This is used for spherical harmonics description of preferred orientation;
     969        cylindrical symmetry only (M=0) and no sample angle derivatives returned
     970    """
     971    import pytexture as ptx
     972    RSQ2PI = 0.3989422804014
     973    SQ2 = 1.414213562373
     974    Ksl,x = ptx.pyplmpsi(L,0,1,psi)
     975    Ksl *= RSQ2PI
     976    if SGLaue in ['m3','m3m']:
     977        Kcl = 0.0
     978        for j in range(0,L+1,4):
     979            im = j/4+1
     980            pcrs,dum = ptx.pyplmpsi(L,j,1,phi)
     981            Kcl += BOH['L='+str(L)][N-1][im-1]*pcrs*cosd(j*beta)       
     982    else:
     983        pcrs,dum = ptx.pyplmpsi(L,N,1,phi)
     984        pcrs *= RSQ2PI
     985        if N:
     986            pcrs *= SQ2
     987        if SGLaue in ['mmm','4/mmm','6/mmm','R3mR','3m1','31m']:
     988            if SGLaue in ['3mR','3m1','31m']:
     989                if n%6 == 3:
     990                    Kcl = pcrs*sind(N*beta)
     991                else:
     992                    Kcl = pcrs*cosd(N*beta)
     993            else:
     994                Kcl = pcrs*cosd(N*beta)
     995        else:
     996            Kcl = pcrs*(cosd(N*beta)+sind(N*beta))
     997    return Kcl*Ksl,Lnorm(L)
    946998   
    947999def Glnh(Start,SHCoef,psi,gam,SamSym):
     
    9561008    for i,term in enumerate(SHCoef):
    9571009        l,m,n = eval(term.strip('C'))
    958         lNorm = 4.*np.pi/(2.*l+1.)
    9591010        pcrs,dum = ptx.pyplmpsi(l,m,1,psi)
    9601011        pcrs *= RSQPI
     
    9651016        else:
    9661017            Ksl = pcrs*(cosd(m*gam)+sind(m*gam))
    967         Fln[i] = SHCoef[term]*Ksl*lNorm
     1018        Fln[i] = SHCoef[term]*Ksl*Lnorm(l)
    9681019    ODFln = dict(zip(SHCoef.keys(),list(zip(SHCoef.values(),Fln))))
    9691020    return ODFln
     
    9821033    for i,term in enumerate(SHCoef):
    9831034        l,m,n = eval(term.strip('C'))
    984         lNorm = 4.*np.pi/(2.*l+1.)
    9851035        if SGData['SGLaue'] in ['m3','m3m']:
    9861036            Kcl = 0.0
     
    10041054            else:
    10051055                Kcl = pcrs*(cosd(n*beta)+sind(n*beta))
    1006         Fln[i] = SHCoef[term]*Kcl*lNorm
     1056        Fln[i] = SHCoef[term]*Kcl*Lnorm(l)
    10071057    ODFln = dict(zip(SHCoef.keys(),list(zip(SHCoef.values(),Fln))))
    10081058    return ODFln
     
    10691119    Tindx = 1.0
    10701120    for term in SHCoef:
    1071         l,m,n = eval(term.strip('C'))
     1121        l = eval(term.strip('C'))[0]
    10721122        Tindx += SHCoef[term]**2/(2.0*l+1.)
    10731123    return Tindx
Note: See TracChangeset for help on using the changeset viewer.