Changeset 803 for trunk/GSASIIpwd.py


Ignore:
Timestamp:
Nov 21, 2012 1:30:38 PM (9 years ago)
Author:
vondreele
Message:

GSASIImath.py: map search gives mag in name, & change a looping form in findOffset
GSASIIphsGUI.py: map search gives mag in name
GSASIIplot.py: more curves for instrument parms plot
GSASIIpwd.py: make cw array of channel widths & use them
GSASIIstruct.py: ditto
G2pwd_fxye.py: fix for zero sig

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwd.py

    r801 r803  
    450450    yb = np.zeros_like(xdata)
    451451    nBak = 0
     452    cw = np.diff(xdata)
     453    cw = np.append(cw,cw[-1])
    452454    while True:
    453455        key = pfx+'Back:'+str(nBak)
     
    534536    dyddb = np.zeros(shape=(3*parmDict[pfx+'nDebye'],len(xdata)))
    535537    dydpk = np.zeros(shape=(4*parmDict[pfx+'nPeaks'],len(xdata)))
    536     dx = xdata[1]-xdata[0]
     538    cw = np.diff(xdata)
     539    cw = np.append(cw,cw[-1])
    537540
    538541    if bakType in ['chebyschev','cosine']:
     
    559562            bakPos[0] = xdata[0]
    560563            bakPos[-1] = xdata[-1]
    561             dx = bakPos[1]-bakPos[0]
    562564            for i,pos in enumerate(bakPos):
    563565                if i == 0:
     
    589591            cqr = np.cos(q*dbR)
    590592            temp = np.exp(-dbU*q**2)
    591             dyddb[3*iD] = ff*sqr*temp/(np.pi*dx)
    592             dyddb[3*iD+1] = ff*dbA*temp*(cqr-sqr)/(np.pi*dbR*dx)
    593             dyddb[3*iD+2] = -ff*dbA*sqr*temp*q**2/(np.pi*dx)
     593            dyddb[3*iD] = ff*sqr*temp/(np.pi*cw)
     594            dyddb[3*iD+1] = ff*dbA*temp*(cqr-sqr)/(np.pi*dbR*cw)
     595            dyddb[3*iD+2] = -ff*dbA*sqr*temp*q**2/(np.pi*cw)
    594596            iD += 1       #ff*dbA*np.sin(q*dbR)*np.exp(-dbU*q**2)/(q*dbR)
    595597        except KeyError:
     
    607609            iFin = np.searchsorted(xdata,pkP+fmax)
    608610            Df,dFdp,dFds,dFdg,dFdsh = getdFCJVoigt3(pkP,pkS,pkG,shl,xdata[iBeg:iFin])
    609             dydpk[4*iD][iBeg:iFin] += 100.*dx*pkI*dFdp
    610             dydpk[4*iD+1][iBeg:iFin] += 100.*dx*Df
    611             dydpk[4*iD+2][iBeg:iFin] += 100.*dx*pkI*dFds
    612             dydpk[4*iD+3][iBeg:iFin] += 100.*dx*pkI*dFdg
     611            dydpk[4*iD][iBeg:iFin] += 100.*cw[iBeg:iFin]*pkI*dFdp
     612            dydpk[4*iD+1][iBeg:iFin] += 100.*cw[iBeg:iFin]*Df
     613            dydpk[4*iD+2][iBeg:iFin] += 100.*cw[iBeg:iFin]*pkI*dFds
     614            dydpk[4*iD+3][iBeg:iFin] += 100.*cw[iBeg:iFin]*pkI*dFdg
    613615            iD += 1       
    614616        except KeyError:
     
    672674    yb = getBackground('',parmDict,bakType,xdata)
    673675    yc = np.zeros_like(yb)
     676    cw = np.diff(xdata)
     677    cw = np.append(cw,cw[-1])
    674678    if 'C' in dataType:
    675         dx = xdata[1]-xdata[0]
    676679        U = parmDict['U']
    677680        V = parmDict['V']
     
    705708                Wd,fmin,fmax = getWidthsCW(pos,sig,gam,shl)
    706709                iBeg = np.searchsorted(xdata,pos-fmin)
    707                 lenX = len(xdata)
    708                 if not iBeg:
    709                     iFin = np.searchsorted(xdata,pos+fmin)
    710                 elif iBeg == lenX:
    711                     iFin = iBeg
    712                 else:
    713                     iFin = min(lenX,iBeg+int((fmin+fmax)/dx))
     710                iFin = np.searchsorted(xdata,pos+fmin)
    714711                if not iBeg+iFin:       #peak below low limit
    715712                    iPeak += 1
     
    720717                if Ka2:
    721718                    pos2 = pos+lamRatio*tand(pos/2.0)       # + 360/pi * Dlam/lam * tan(th)
    722                     kdelt = int((pos2-pos)/dx)               
    723                     iBeg = min(lenX,iBeg+kdelt)
    724                     iFin = min(lenX,iFin+kdelt)
     719                    iBeg = np.searchsorted(xdata,pos2-fmin)
     720                    iFin = np.searchsorted(xdata,pos2+fmin)
    725721                    if iBeg-iFin:
    726722                        yc[iBeg:iFin] += intens*kRatio*getFCJVoigt3(pos2,sig,gam,shl,xdata[iBeg:iFin])
     
    810806            ip = names.index(parm)
    811807            dMdv[varyList.index(name)] = dMdpk[4*int(id)+ip]
     808    cw = np.diff(xdata)
     809    cw = np.append(cw,cw[-1])
    812810    if 'C' in dataType:
    813         dx = xdata[1]-xdata[0]
    814811        U = parmDict['U']
    815812        V = parmDict['V']
     
    850847                Wd,fmin,fmax = getWidthsCW(pos,sig,gam,shl)
    851848                iBeg = np.searchsorted(xdata,pos-fmin)
    852                 lenX = len(xdata)
    853                 if not iBeg:
    854                     iFin = np.searchsorted(xdata,pos+fmin)
    855                 elif iBeg == lenX:
    856                     iFin = iBeg
    857                 else:
    858                     iFin = min(lenX,iBeg+int((fmin+fmax)/dx))
     849                iFin = np.searchsorted(xdata,pos+fmin)
    859850                if not iBeg+iFin:       #peak below low limit
    860851                    iPeak += 1
     
    865856                dMdipk = getdFCJVoigt3(pos,sig,gam,shl,xdata[iBeg:iFin])
    866857                for i in range(1,5):
    867                     dMdpk[i][iBeg:iFin] += 100.*dx*intens*dMdipk[i]
    868                 dMdpk[0][iBeg:iFin] += 100.*dx*dMdipk[0]
     858                    dMdpk[i][iBeg:iFin] += 100.*cw[iBeg:iFin]*intens*dMdipk[i]
     859                dMdpk[0][iBeg:iFin] += 100.*cw[iBeg:iFin]*dMdipk[0]
    869860                dervDict = {'int':dMdpk[0],'pos':dMdpk[1],'sig':dMdpk[2],'gam':dMdpk[3],'shl':dMdpk[4]}
    870861                if Ka2:
    871862                    pos2 = pos+lamRatio*tand(pos/2.0)       # + 360/pi * Dlam/lam * tan(th)
    872                     kdelt = int((pos2-pos)/dx)               
    873                     iBeg = min(lenX,iBeg+kdelt)
    874                     iFin = min(lenX,iFin+kdelt)
     863                    iBeg = np.searchsorted(xdata,pos2-fmin)
     864                    iFin = np.searchsorted(xdata,pos2+fmin)
    875865                    if iBeg-iFin:
    876866                        dMdipk2 = getdFCJVoigt3(pos2,sig,gam,shl,xdata[iBeg:iFin])
    877867                        for i in range(1,5):
    878                             dMdpk[i][iBeg:iFin] += 100.*dx*intens*kRatio*dMdipk2[i]
    879                         dMdpk[0][iBeg:iFin] += 100.*dx*kRatio*dMdipk2[0]
    880                         dMdpk[5][iBeg:iFin] += 100.*dx*dMdipk2[0]
     868                            dMdpk[i][iBeg:iFin] += 100.*cw[iBeg:iFin]*intens*kRatio*dMdipk2[i]
     869                        dMdpk[0][iBeg:iFin] += 100.*cw[iBeg:iFin]*kRatio*dMdipk2[0]
     870                        dMdpk[5][iBeg:iFin] += 100.*cw[iBeg:iFin]*dMdipk2[0]
    881871                        dervDict = {'int':dMdpk[0],'pos':dMdpk[1],'sig':dMdpk[2],'gam':dMdpk[3],'shl':dMdpk[4],'L1/L2':dMdpk[5]*intens}
    882872                for parmName in ['pos','int','sig','gam']:
     
    970960                dMdpk = np.zeros(shape=(7,len(xdata)))
    971961                dMdipk = getdEpsVoigt(pos,alp,bet,sig,gam,xdata[iBeg:iFin])
    972                 cw = np.diff(xdata[iBeg:iFin])
    973                 cw = np.append(cw,cw[-1])
    974962                for i in range(1,6):
    975                     dMdpk[i][iBeg:iFin] += intens*cw*dMdipk[i]
    976                 dMdpk[0][iBeg:iFin] += cw*dMdipk[0]
     963                    dMdpk[i][iBeg:iFin] += intens*cw[iBeg:iFin]*dMdipk[i]
     964                dMdpk[0][iBeg:iFin] += cw[iBeg:iFin]*dMdipk[0]
    977965                dervDict = {'int':dMdpk[0],'pos':dMdpk[1],'alp':dMdpk[2],'bet':dMdpk[3],'sig':dMdpk[4],'gam':dMdpk[5]}
    978966                for parmName in ['pos','int','alp','bet','sig','gam']:
Note: See TracChangeset for help on using the changeset viewer.