Changeset 1474 for trunk/GSASIIpwd.py


Ignore:
Timestamp:
Aug 21, 2014 1:31:59 PM (7 years ago)
Author:
vondreele
Message:

1st MC/SA tutorial
various MC/SA fixes
fix to background peak fitting for CW & TOF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwd.py

    r1464 r1474  
    519519    return intens*Df(xdata)*DX/dx
    520520
    521 def getBackground(pfx,parmDict,bakType,xdata):
     521def getBackground(pfx,parmDict,bakType,dataType,xdata):
    522522    'needs a doc string'
    523523    yb = np.zeros_like(xdata)
     
    589589            pkS = parmDict[pfx+'BkPksig;'+str(iD)]
    590590            pkG = parmDict[pfx+'BkPkgam;'+str(iD)]
    591             shl = 0.002
    592             Wd,fmin,fmax = getWidthsCW(pkP,pkS,pkG,shl)
     591            if 'C' in dataType:
     592                Wd,fmin,fmax = getWidthsCW(pkP,pkS,pkG,.002)
     593            else: #'T'OF
     594                Wd,fmin,fmax = getWidthsTOF(pkP,1.,1.,pkS,pkG)
    593595            iBeg = np.searchsorted(xdata,pkP-fmin)
    594596            iFin = np.searchsorted(xdata,pkP+fmax)
    595             yb[iBeg:iFin] += pkI*getFCJVoigt3(pkP,pkS,pkG,shl,xdata[iBeg:iFin])
     597            lenX = len(xdata)
     598            if not iBeg:
     599                iFin = np.searchsorted(xdata,pkP+fmax)
     600            elif iBeg == lenX:
     601                iFin = iBeg
     602            else:
     603                iFin = np.searchsorted(xdata,pkP+fmax)
     604            if 'C' in dataType:
     605                yb[iBeg:iFin] += pkI*getFCJVoigt3(pkP,pkS,pkG,0.002,xdata[iBeg:iFin])
     606            else:   #'T'OF
     607                yb[iBeg:iFin] += pkI*getEpsVoigt(pkP,1.,1.,pkS,pkG,xdata[iBeg:iFin])
    596608            iD += 1       
    597609        except KeyError:
     
    602614    return yb
    603615   
    604 def getBackgroundDerv(hfx,parmDict,bakType,xdata):
     616def getBackgroundDerv(hfx,parmDict,bakType,dataType,xdata):
    605617    'needs a doc string'
    606618    nBak = 0
     
    685697            pkS = parmDict[hfx+'BkPksig;'+str(iD)]
    686698            pkG = parmDict[hfx+'BkPkgam;'+str(iD)]
    687             shl = 0.002
    688             Wd,fmin,fmax = getWidthsCW(pkP,pkS,pkG,shl)
     699            if 'C' in dataType:
     700                Wd,fmin,fmax = getWidthsCW(pkP,pkS,pkG,.002)
     701            else: #'T'OF
     702                Wd,fmin,fmax = getWidthsTOF(pkP,1.,1.,pkS,pkG)
    689703            iBeg = np.searchsorted(xdata,pkP-fmin)
    690704            iFin = np.searchsorted(xdata,pkP+fmax)
    691             Df,dFdp,dFds,dFdg,dFdsh = getdFCJVoigt3(pkP,pkS,pkG,shl,xdata[iBeg:iFin])
    692             dydpk[4*iD][iBeg:iFin] += 100.*cw[iBeg:iFin]*pkI*dFdp
    693             dydpk[4*iD+1][iBeg:iFin] += 100.*cw[iBeg:iFin]*Df
    694             dydpk[4*iD+2][iBeg:iFin] += 100.*cw[iBeg:iFin]*pkI*dFds
    695             dydpk[4*iD+3][iBeg:iFin] += 100.*cw[iBeg:iFin]*pkI*dFdg
     705            lenX = len(xdata)
     706            if not iBeg:
     707                iFin = np.searchsorted(xdata,pkP+fmax)
     708            elif iBeg == lenX:
     709                iFin = iBeg
     710            else:
     711                iFin = np.searchsorted(xdata,pkP+fmax)
     712            if 'C' in dataType:
     713                Df,dFdp,dFds,dFdg,x = getdFCJVoigt3(pkP,pkS,pkG,.002,xdata[iBeg:iFin])
     714                dydpk[4*iD][iBeg:iFin] += 100.*cw[iBeg:iFin]*pkI*dFdp
     715                dydpk[4*iD+1][iBeg:iFin] += 100.*cw[iBeg:iFin]*Df
     716                dydpk[4*iD+2][iBeg:iFin] += 100.*cw[iBeg:iFin]*pkI*dFds
     717                dydpk[4*iD+3][iBeg:iFin] += 100.*cw[iBeg:iFin]*pkI*dFdg
     718            else:   #'T'OF
     719                Df,dFdp,x,x,dFds,dFdg = getdEpsVoigt(pkP,1.,1.,pkS,pkG,xdata[iBeg:iFin])
     720                dydpk[4*iD][iBeg:iFin] += pkI*dFdp
     721                dydpk[4*iD+1][iBeg:iFin] += Df
     722                dydpk[4*iD+2][iBeg:iFin] += pkI*dFds
     723                dydpk[4*iD+3][iBeg:iFin] += pkI*dFdg
    696724            iD += 1       
    697725        except KeyError:
     
    778806    'needs a doc string'
    779807   
    780     yb = getBackground('',parmDict,bakType,xdata)
     808    yb = getBackground('',parmDict,bakType,dataType,xdata)
    781809    yc = np.zeros_like(yb)
    782810    cw = np.diff(xdata)
     
    886914# needs to return np.array([dMdx1,dMdx2,...]) in same order as varylist = backVary,insVary,peakVary order
    887915    dMdv = np.zeros(shape=(len(varyList),len(xdata)))
    888     dMdb,dMddb,dMdpk = getBackgroundDerv('',parmDict,bakType,xdata)
     916    dMdb,dMddb,dMdpk = getBackgroundDerv('',parmDict,bakType,dataType,xdata)
    889917    if 'Back:0' in varyList:            #background derivs are in front if present
    890918        dMdv[0:len(dMdb)] = dMdb
     
    898926    for name in varyList:
    899927        if 'BkPk' in name:
    900             parm,id = name.split(':')
     928            parm,id = name.split(';')
    901929            ip = names.index(parm)
    902930            dMdv[varyList.index(name)] = dMdpk[4*int(id)+ip]
     
    11171145    peaksList = []
    11181146    for i in range(Debye['nPeaks']):
    1119         peaksNames = ['BkPkpos:'+str(i),'BkPkint:'+str(i),'BkPksig:'+str(i),'BkPkgam:'+str(i)]
     1147        peaksNames = ['BkPkpos;'+str(i),'BkPkint;'+str(i),'BkPksig;'+str(i),'BkPkgam;'+str(i)]
    11201148        peaksDict.update(dict(zip(peaksNames,Debye['peaksList'][i][::2])))
    11211149        peaksList += zip(peaksNames,Debye['peaksList'][i][1::2])
     
    12381266        iDb = 0
    12391267        while True:
    1240             names = ['BkPkpos:','BkPkint:','BkPksig:','BkPkgam:']
     1268            names = ['BkPkpos;','BkPkint;','BkPksig;','BkPkgam;']
    12411269            try:
    12421270                for i,name in enumerate(names):
     
    12801308            parms = ['BkPkpos','BkPkint','BkPksig','BkPkgam']
    12811309            print 'Peaks in background coefficients'
    1282             ptfmt = "%12.5f"
     1310            ptfmt = "%15.3f"
    12831311            names =   'names :'
    12841312            ptstr =  'values:'
     
    12861314            for item in sigDict:
    12871315                if 'BkPk' in item:
    1288                     names += '%12s'%(item)
     1316                    names += '%15s'%(item)
    12891317                    sigstr += ptfmt%(sigDict[item])
    1290                     parm,id = item.split(':')
     1318                    parm,id = item.split(';')
    12911319                    ip = parms.index(parm)
    12921320                    ptstr += ptfmt%(Background[1]['peaksList'][int(id)][2*ip])
     
    15041532       
    15051533    sigDict = dict(zip(varyList,sig))
    1506     yb[xBeg:xFin] = getBackground('',parmDict,bakType,x[xBeg:xFin])
     1534    yb[xBeg:xFin] = getBackground('',parmDict,bakType,dataType,x[xBeg:xFin])
    15071535    yc[xBeg:xFin] = getPeakProfile(dataType,parmDict,x[xBeg:xFin],varyList,bakType)
    15081536    yd[xBeg:xFin] = y[xBeg:xFin]-yc[xBeg:xFin]
     
    16151643    msg = 'test '
    16161644    gplot = plotter.add('FCJ-Voigt, 11BM').gca()
    1617     gplot.plot(xdata,getBackground('',parmDict0,bakType,xdata))   
     1645    gplot.plot(xdata,getBackground('',parmDict0,bakType,'PXC',xdata))   
    16181646    gplot.plot(xdata,getPeakProfile(parmDict0,xdata,varyList,bakType))
    16191647    fplot = plotter.add('FCJ-Voigt, Ka1+2').gca()
    1620     fplot.plot(xdata,getBackground('',parmDict1,bakType,xdata))   
     1648    fplot.plot(xdata,getBackground('',parmDict1,bakType,'PXC',xdata))   
    16211649    fplot.plot(xdata,getPeakProfile(parmDict1,xdata,varyList,bakType))
    16221650   
Note: See TracChangeset for help on using the changeset viewer.