Changeset 2688 for trunk/GSASIIpwd.py


Ignore:
Timestamp:
Feb 3, 2017 2:23:47 PM (5 years ago)
Author:
vondreele
Message:

sequential PDF peak fitting now implemented

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwd.py

    r2681 r2688  
    383383            varyList.append('slope')
    384384        for i,peak in enumerate(peaks['Peaks']):
    385             parmDict[str(i)+':pos'] = peak[0]
    386             parmDict[str(i)+':mag'] = peak[1]
    387             parmDict[str(i)+':sig'] = peak[2]
     385            parmDict['PDFpos;'+str(i)] = peak[0]
     386            parmDict['PDFmag;'+str(i)] = peak[1]
     387            parmDict['PDFsig;'+str(i)] = peak[2]
    388388            if 'P' in peak[3]:
    389                 varyList.append(str(i)+':pos')
     389                varyList.append('PDFpos;'+str(i))
    390390            if 'M' in peak[3]:
    391                 varyList.append(str(i)+':mag')
     391                varyList.append('PDFmag;'+str(i))
    392392            if 'S' in peak[3]:
    393                 varyList.append(str(i)+':sig')
     393                varyList.append('PDFsig;'+str(i))
    394394        return parmDict,varyList
    395395       
     
    398398            peaks['Background'][1][1] = parmDict['slope']
    399399        for i,peak in enumerate(peaks['Peaks']):
    400             if str(i)+':pos' in varyList:
    401                 peak[0] = parmDict[str(i)+':pos']
    402             if str(i)+':mag' in varyList:
    403                 peak[1] = parmDict[str(i)+':mag']
    404             if str(i)+':sig' in varyList:
    405                 peak[2] = parmDict[str(i)+':sig']
     400            if 'PDFpos;'+str(i) in varyList:
     401                peak[0] = parmDict['PDFpos;'+str(i)]
     402            if 'PDFmag;'+str(i) in varyList:
     403                peak[1] = parmDict['PDFmag;'+str(i)]
     404            if 'PDFsig;'+str(i) in varyList:
     405                peak[2] = parmDict['PDFsig;'+str(i)]
    406406       
    407407   
     
    411411        while True:
    412412            try:
    413                 pos = parmdict[str(ipeak)+':pos']
    414                 mag = parmdict[str(ipeak)+':mag']
    415                 wid = parmdict[str(ipeak)+':sig']
     413                pos = parmdict['PDFpos;'+str(ipeak)]
     414                mag = parmdict['PDFmag;'+str(ipeak)]
     415                wid = parmdict['PDFsig;'+str(ipeak)]
    416416                wid2 = 2.*wid**2
    417417                Z += mag*rs2pi*np.exp(-(Xdata-pos)**2/wid2)/wid
     
    424424        M = CalcPDFpeaks(parmdict,xdata)-ydata
    425425        return M
    426                                
    427426           
    428     print 'Do PDF peak fitting'
    429427    newpeaks = copy.copy(peaks)
    430428    iBeg = np.searchsorted(data[1][0],newpeaks['Limits'][0])
     
    435433    if not len(varyList):
    436434        print ' Nothing varied'
    437         return newpeaks
    438    
    439     begin = time.time()
     435        return newpeaks,None,None,None,None,None
     436   
     437    Rvals = {}
    440438    values =  np.array(Dict2Values(parmDict, varyList))
    441439    result = so.leastsq(errPDFProfile,values,full_output=True,ftol=0.0001,
    442440           args=(X,Y,parmDict,varyList))
    443     ncyc = int(result[2]['nfev']/2)
    444     runtime = time.time()-begin   
    445     print 'PDF fitpeak time = %8.3fs, %8.3fs/cycle'%(runtime,runtime/ncyc)
    446441#    chisq = np.sum(result[2]['fvec']**2)
    447442    Values2Dict(parmDict, varyList, result[0])
    448443    SetParms(peaks,parmDict,varyList)
    449    
     444    chisq = np.sum(result[2]['fvec']**2)/(len(X)-len(values))   #reduced chi^2 = M/(Nobs-Nvar)
     445    Rvals['Rwp'] = np.sqrt(chisq/np.sum(Y**2))*100.      #to %
     446    Rvals['GOF'] = chisq/(len(X)-len(varyList))       #reduced chi^2
     447    sigList = list(np.sqrt(chisq*np.diag(result[1])))   
    450448    Z = CalcPDFpeaks(parmDict,X)
    451449    newpeaks['calc'] = [X,Z]
    452     return newpeaks   
     450    return newpeaks,result[0],varyList,sigList,parmDict,Rvals   
    453451   
    454452def MakeRDF(RDFcontrols,background,inst,pwddata):
Note: See TracChangeset for help on using the changeset viewer.