Changeset 1496 for trunk/GSASIIpwd.py


Ignore:
Timestamp:
Sep 14, 2014 7:48:39 PM (7 years ago)
Author:
vondreele
Message:

Add sequential peak fitting.
Change Back:n to Back;n for background parameters
Also DebyeA, etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwd.py

    r1493 r1496  
    526526    cw = np.append(cw,cw[-1])
    527527    while True:
    528         key = pfx+'Back:'+str(nBak)
     528        key = pfx+'Back;'+str(nBak)
    529529        if key in parmDict:
    530530            nBak += 1
     
    534534        dt = xdata[-1]-xdata[0]   
    535535        for iBak in range(nBak):
    536             key = pfx+'Back:'+str(iBak)
     536            key = pfx+'Back;'+str(iBak)
    537537            if bakType == 'chebyschev':
    538538                yb += parmDict[key]*(2.*(xdata-xdata[0])/dt-1.)**iBak
     
    541541    elif bakType in ['lin interpolate','inv interpolate','log interpolate',]:
    542542        if nBak == 1:
    543             yb = np.ones_like(xdata)*parmDict[pfx+'Back:0']
     543            yb = np.ones_like(xdata)*parmDict[pfx+'Back;0']
    544544        elif nBak == 2:
    545545            dX = xdata[-1]-xdata[0]
    546546            T2 = (xdata-xdata[0])/dX
    547547            T1 = 1.0-T2
    548             yb = parmDict[pfx+'Back:0']*T1+parmDict[pfx+'Back:1']*T2
     548            yb = parmDict[pfx+'Back;0']*T1+parmDict[pfx+'Back;1']*T2
    549549        else:
    550550            if bakType == 'lin interpolate':
     
    558558            bakVals = np.zeros(nBak)
    559559            for i in range(nBak):
    560                 bakVals[i] = parmDict[pfx+'Back:'+str(i)]
     560                bakVals[i] = parmDict[pfx+'Back;'+str(i)]
    561561            bakInt = si.interp1d(bakPos,bakVals,'linear')
    562562            yb = bakInt(xdata)
     
    575575    while True:
    576576        try:
    577             dbA = parmDict[pfx+'DebyeA:'+str(iD)]
    578             dbR = parmDict[pfx+'DebyeR:'+str(iD)]
    579             dbU = parmDict[pfx+'DebyeU:'+str(iD)]
     577            dbA = parmDict[pfx+'DebyeA;'+str(iD)]
     578            dbR = parmDict[pfx+'DebyeR;'+str(iD)]
     579            dbU = parmDict[pfx+'DebyeU;'+str(iD)]
    580580            yb += ff*dbA*np.sin(q*dbR)*np.exp(-dbU*q**2)/(q*dbR)
    581581            iD += 1       
     
    618618    nBak = 0
    619619    while True:
    620         key = hfx+'Back:'+str(nBak)
     620        key = hfx+'Back;'+str(nBak)
    621621        if key in parmDict:
    622622            nBak += 1
     
    678678            if hfx+'difC' in parmDict:
    679679                q = 2*np.pi*parmDict[hfx+'difC']/xdata
    680             dbA = parmDict[hfx+'DebyeA:'+str(iD)]
    681             dbR = parmDict[hfx+'DebyeR:'+str(iD)]
    682             dbU = parmDict[hfx+'DebyeU:'+str(iD)]
     680            dbA = parmDict[hfx+'DebyeA;'+str(iD)]
     681            dbR = parmDict[hfx+'DebyeR;'+str(iD)]
     682            dbU = parmDict[hfx+'DebyeU;'+str(iD)]
    683683            sqr = np.sin(q*dbR)/(q*dbR)
    684684            cqr = np.cos(q*dbR)
     
    918918    dMdv = np.zeros(shape=(len(varyList),len(xdata)))
    919919    dMdb,dMddb,dMdpk = getBackgroundDerv('',parmDict,bakType,dataType,xdata)
    920     if 'Back:0' in varyList:            #background derivs are in front if present
     920    if 'Back;0' in varyList:            #background derivs are in front if present
    921921        dMdv[0:len(dMdb)] = dMdb
    922922    names = ['DebyeA','DebyeR','DebyeU']
     
    11231123    bakType,bakFlag = Background[0][:2]
    11241124    backVals = Background[0][3:]
    1125     backNames = ['Back:'+str(i) for i in range(len(backVals))]
     1125    backNames = ['Back;'+str(i) for i in range(len(backVals))]
    11261126    Debye = Background[1]           #also has background peaks stuff
    11271127    backDict = dict(zip(backNames,backVals))
     
    12551255        while True:
    12561256            try:
    1257                 bakName = 'Back:'+str(iBak)
     1257                bakName = 'Back;'+str(iBak)
    12581258                Background[0][iBak+3] = parmList[bakName]
    12591259                iBak += 1
     
    12891289            for i,back in enumerate(Background[0][3:]):
    12901290                ptstr += ptfmt % (back)
    1291                 sigstr += ptfmt % (sigDict['Back:'+str(i)])
     1291                sigstr += ptfmt % (sigDict['Back;'+str(i)])
    12921292            print ptstr
    12931293            print sigstr
     
    15051505        begin = time.time()
    15061506        values =  np.array(Dict2Values(parmDict, varyList))
     1507        Rvals = {}
    15071508        if FitPgm == 'LSQ':
    15081509            try:
     
    15151516            chisq = np.sum(result[2]['fvec']**2)
    15161517            Values2Dict(parmDict, varyList, result[0])
    1517             Rwp = np.sqrt(chisq/np.sum(w[xBeg:xFin]*y[xBeg:xFin]**2))*100.      #to %
    1518             GOF = chisq/(xFin-xBeg-len(varyList))       #reduced chi^2
     1518            Rvals['Rwp'] = np.sqrt(chisq/np.sum(w[xBeg:xFin]*y[xBeg:xFin]**2))*100.      #to %
     1519            Rvals['GOF'] = chisq/(xFin-xBeg-len(varyList))       #reduced chi^2
    15191520            print 'Number of function calls:',result[2]['nfev'],' Number of observations: ',xFin-xBeg,' Number of parameters: ',len(varyList)
    15201521            print 'fitpeak time = %8.3fs, %8.3fs/cycle'%(runtime,runtime/ncyc)
    1521             print 'Rwp = %7.2f%%, chi**2 = %12.6g, reduced chi**2 = %6.2f'%(Rwp,chisq,GOF)
     1522            print 'Rwp = %7.2f%%, chi**2 = %12.6g, reduced chi**2 = %6.2f'%(Rvals['Rwp'],chisq,Rvals['GOF'])
    15221523            try:
    1523                 sig = np.sqrt(np.diag(result[1])*GOF)
     1524                sig = np.sqrt(np.diag(result[1])*Rvals['GOF'])
    15241525                if np.any(np.isnan(sig)):
    15251526                    print '*** Least squares aborted - some invalid esds possible ***'
     
    15471548    GetPeaksParms(Inst,parmDict,Peaks,varyList)   
    15481549    PeaksPrint(dataType,parmDict,sigDict,varyList)
    1549     return sigDict
     1550    return sigDict,result,sig,Rvals,varyList,parmDict
    15501551
    15511552def calcIncident(Iparm,xdata):
Note: See TracChangeset for help on using the changeset viewer.