Changeset 1597


Ignore:
Timestamp:
Dec 6, 2014 3:12:32 PM (8 years ago)
Author:
vondreele
Message:

Incommensurate Pawley refinement works, including refinement of modulation vector.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIlattice.py

    r1596 r1597  
    467467    return np.inner(H,np.inner(G,H))
    468468   
     469def calc_rDsqSS(H,A,vec):
     470    'needs doc string'
     471    rdsq = calc_rDsq(H[:3]+(H[3]*vec).T,A)
     472    return rdsq
     473       
    469474def calc_rDsqZ(H,A,Z,tth,lam):
    470475    'needs doc string'
  • trunk/GSASIIstrIO.py

    r1596 r1597  
    562562        print >>pFile,' Process histograms in reverse order: ',Controls['Reverse Seq']
    563563   
    564 def GetPawleyConstr(SGLaue,PawleyRef,pawleyVary):
     564def GetPawleyConstr(SGLaue,PawleyRef,im,pawleyVary):
    565565    'needs a doc string'
    566566#    if SGLaue in ['-1','2/m','mmm']:
     
    571571        refI = int(varyI.split(':')[-1])
    572572        ih,ik,il = PawleyRef[refI][:3]
    573         dspI = PawleyRef[refI][4]
     573        dspI = PawleyRef[refI][4+im]
    574574        for varyJ in pawleyVary[i+1:]:
    575575            refJ = int(varyJ.split(':')[-1])
    576576            jh,jk,jl = PawleyRef[refJ][:3]
    577             dspJ = PawleyRef[refJ][4]
     577            dspJ = PawleyRef[refJ][4+im]
    578578            if SGLaue in ['4/m','4/mmm']:
    579579                isum = ih**2+ik**2
     
    631631def modVary(pfx,SSGData):
    632632    vary = []
    633     for i,item in SSGData['modSymb']:
     633    for i,item in enumerate(SSGData['modSymb']):
    634634        if item in ['a','b','g']:
    635635            vary.append(pfx+'mV%d'%(i))
     
    11481148                if refl[5+im]:
    11491149                    pawleyVary.append(pfx+'PWLref:'+str(i))
    1150             GetPawleyConstr(SGData['SGLaue'],PawleyRef,pawleyVary)      #does G2mv.StoreEquivalence
     1150            GetPawleyConstr(SGData['SGLaue'],PawleyRef,im,pawleyVary)      #does G2mv.StoreEquivalence
    11511151            phaseVary += pawleyVary
    11521152               
     
    16071607                for var in ['mV0','mV1','mV2']:
    16081608                    namstr += '%12s'%(pfx+var)
    1609                     ptstr += '%12.4f'%(parmDict[pfx+var])
     1609                    ptstr += '%12.6f'%(parmDict[pfx+var])
    16101610                    if pfx+var in sigDict:
    1611                         sigstr += '%12.4f'%(sigDict[pfx+var])
     1611                        sigstr += '%12.6f'%(sigDict[pfx+var])
    16121612                    else:
    16131613                        sigstr += 12*' '
  • trunk/GSASIIstrMath.py

    r1596 r1597  
    13701370    return sigDict,gamDict
    13711371       
    1372 def GetReflPos(refl,im,wave,A,hfx,calcControls,parmDict):
     1372def GetReflPos(refl,im,wave,A,pfx,hfx,calcControls,parmDict):
    13731373    'Needs a doc string'
    1374     h,k,l = refl[:3]
    1375     d = 1./np.sqrt(G2lat.calc_rDsq(np.array([h,k,l]),A))
    1376 
     1374    if im:
     1375        h,k,l,m = refl[:4]
     1376        vec = np.array([parmDict[pfx+'mV0'],parmDict[pfx+'mV1'],parmDict[pfx+'mV2']])
     1377        d = 1./np.sqrt(G2lat.calc_rDsqSS(np.array([h,k,l,m]),A,vec))
     1378    else:
     1379        h,k,l = refl[:3]
     1380        d = 1./np.sqrt(G2lat.calc_rDsq(np.array([h,k,l]),A))
    13771381    refl[4+im] = d
    13781382    if 'C' in calcControls[hfx+'histType']:
     
    13891393    return pos
    13901394
    1391 def GetReflPosDerv(refl,im,wave,A,hfx,calcControls,parmDict):
     1395def GetReflPosDerv(refl,im,wave,A,pfx,hfx,calcControls,parmDict):
    13921396    'Needs a doc string'
    13931397    dpr = 180./np.pi
    1394     h,k,l = refl[:3]
    1395     dstsq = G2lat.calc_rDsq(np.array([h,k,l]),A)
     1398    if im:
     1399        h,k,l,m = refl[:4]
     1400        vec = np.array([parmDict[pfx+'mV0'],parmDict[pfx+'mV1'],parmDict[pfx+'mV2']])
     1401        dstsq = G2lat.calc_rDsqSS(np.array([h,k,l,m]),A,vec)
     1402    else:
     1403        m = 0
     1404        h,k,l = refl[:3]       
     1405        dstsq = G2lat.calc_rDsq(np.array([h,k,l]),A)
    13961406    dst = np.sqrt(dstsq)
    13971407    dsp = 1./dst
     
    14021412        dpdA = np.array([h**2,k**2,l**2,h*k,h*l,k*l])*const*wave/(2.0*dst)
    14031413        dpdZ = 1.0
    1404         const = 9.e-2/(np.pi*parmDict[hfx+'Gonio. radius'])                  #shifts in microns
     1414        dpdV = np.array([2.*h*A[0]+k*A[3]+l*A[4],2*k*A[1]+h*A[3]+l*A[5],
     1415            2*l*A[2]+h*A[4]+k*A[5]])*m*const*wave/(2.0*dst)
     1416        shft = 9.e-2/(np.pi*parmDict[hfx+'Gonio. radius'])                  #shifts in microns
    14051417        if 'Bragg' in calcControls[hfx+'instType']:
    1406             dpdSh = -4.*const*cosd(pos/2.0)
    1407             dpdTr = -const*sind(pos)*100.0
    1408             return dpdA,dpdw,dpdZ,dpdSh,dpdTr,0.,0.
     1418            dpdSh = -4.*shft*cosd(pos/2.0)
     1419            dpdTr = -shft*sind(pos)*100.0
     1420            return dpdA,dpdw,dpdZ,dpdSh,dpdTr,0.,0.,dpdV
    14091421        else:               #Debye-Scherrer - simple but maybe not right
    1410             dpdXd = -const*cosd(pos)
    1411             dpdYd = -const*sind(pos)
    1412             return dpdA,dpdw,dpdZ,0.,0.,dpdXd,dpdYd
     1422            dpdXd = -shft*cosd(pos)
     1423            dpdYd = -shft*sind(pos)
     1424            return dpdA,dpdw,dpdZ,0.,0.,dpdXd,dpdYd,dpdV
    14131425    elif 'T' in calcControls[hfx+'histType']:
    14141426        dpdA = -np.array([h**2,k**2,l**2,h*k,h*l,k*l])*parmDict[hfx+'difC']*dsp**3/2.
     
    14171429        dpdDA = dsp**2
    14181430        dpdDB = 1./dsp
    1419         return dpdA,dpdZ,dpdDC,dpdDA,dpdDB
     1431        dpdV = np.array([2.*h*A[0]+k*A[3]+l*A[4],2*k*A[1]+h*A[3]+l*A[5],
     1432            2*l*A[2]+h*A[4]+k*A[5]])*m**parmDict[hfx+'difC']*dsp**3/2.
     1433        return dpdA,dpdZ,dpdDC,dpdDA,dpdDB,dpdV
    14201434           
    14211435def GetHStrainShift(refl,im,SGData,phfx,hfx,calcControls,parmDict):
     
    16531667                    h,k,l = refl[:3]
    16541668                Uniq = np.inner(refl[:3],SGMT)
    1655                 refl[5+im] = GetReflPos(refl,im,wave,A,hfx,calcControls,parmDict)         #corrected reflection position
     1669                refl[5+im] = GetReflPos(refl,im,wave,A,pfx,hfx,calcControls,parmDict)         #corrected reflection position
    16561670                Lorenz = 1./(2.*sind(refl[5+im]/2.)**2*cosd(refl[5+im]/2.))           #Lorentz correction
    16571671#                refl[5+im] += GetHStrainShift(refl,im,SGData,phfx,hfx,calcControls,parmDict)               #apply hydrostatic strain shift
     
    16961710                h,k,l = refl[:3]
    16971711                Uniq = np.inner(refl[:3],SGMT)
    1698                 refl[5+im] = GetReflPos(refl,im,0.0,A,hfx,calcControls,parmDict)         #corrected reflection position
     1712                refl[5+im] = GetReflPos(refl,im,0.0,A,pfx,hfx,calcControls,parmDict)         #corrected reflection position
    16991713                Lorenz = sind(parmDict[hfx+'2-theta']/2)*refl[4+im]**4                                                #TOF Lorentz correction
    17001714#                refl[5+im] += GetHStrainShift(refl,im,SGData,phfx,hfx,calcControls,parmDict)               #apply hydrostatic strain shift
     
    18211835        time0 = time.time()
    18221836        for iref,refl in enumerate(refDict['RefList']):
    1823             h,k,l = refl[:3]
     1837            if im:
     1838                h,k,l,m = refl[:4]
     1839            else:
     1840                h,k,l = refl[:3]
    18241841            Uniq = np.inner(refl[:3],SGMT)
    18251842            if 'T' in calcControls[hfx+'histType']:
     
    18821899                    pass
    18831900            if 'C' in calcControls[hfx+'histType']:
    1884                 dpdA,dpdw,dpdZ,dpdSh,dpdTr,dpdX,dpdY = GetReflPosDerv(refl,im,wave,A,hfx,calcControls,parmDict)
     1901                dpdA,dpdw,dpdZ,dpdSh,dpdTr,dpdX,dpdY,dpdV = GetReflPosDerv(refl,im,wave,A,pfx,hfx,calcControls,parmDict)
    18851902                names = {hfx+'Scale':[dIdsh,'int'],hfx+'Polariz.':[dIdpola,'int'],phfx+'Scale':[dIdsp,'int'],
    18861903                    hfx+'U':[tanth**2,'sig'],hfx+'V':[tanth,'sig'],hfx+'W':[1.0,'sig'],
     
    18951912                    names.update({hfx+'Absorption':[dFdAb,'int'],})
    18961913            else:   #'T'OF
    1897                 dpdA,dpdZ,dpdDC,dpdDA,dpdDB = GetReflPosDerv(refl,im,0.0,A,hfx,calcControls,parmDict)
     1914                dpdA,dpdZ,dpdDC,dpdDA,dpdDB,dpdV = GetReflPosDerv(refl,im,0.0,A,pfx,hfx,calcControls,parmDict)
    18981915                names = {hfx+'Scale':[dIdsh,'int'],phfx+'Scale':[dIdsp,'int'],
    18991916                    hfx+'difC':[dpdDC,'pos'],hfx+'difA':[dpdDA,'pos'],hfx+'difB':[dpdDB,'pos'],
     
    19611978                    if Ka2:
    19621979                        depDerivDict[name][iBeg2:iFin2] += dDijDict[name]*dervDict2['pos']
     1980            for i,name in enumerate([pfx+'mV0',pfx+'mV1',pfx+'mV2']):
     1981                if name in varylist:
     1982                    dMdv[varylist.index(name)][iBeg:iFin] += dpdV[i]*dervDict['pos']
     1983                    if Ka2:
     1984                        dMdv[varylist.index(name)][iBeg2:iFin2] += dpdV[i]*dervDict2['pos']
     1985                elif name in dependentVars:
     1986                    depDerivDict[name][iBeg:iFin] += dpdV[i]*dervDict['pos']
     1987                    if Ka2:
     1988                        depDerivDict[name][iBeg2:iFin2] += dpdV[i]*dervDict2['pos']
    19631989            if 'C' in calcControls[hfx+'histType']:
    19641990                sigDict,gamDict = GetSampleSigGamDerv(refl,im,wave,G,GB,SGData,hfx,phfx,calcControls,parmDict)
Note: See TracChangeset for help on using the changeset viewer.