Changeset 372 for trunk/GSASIIpwd.py
- Timestamp:
- Sep 15, 2011 3:33:53 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIpwd.py
r358 r372 607 607 def getBackground(pfx,parmDict,bakType,xdata): 608 608 yb = np.zeros_like(xdata) 609 if bakType == 'chebyschev': 610 iBak = 0 611 while True: 609 nBak = 0 610 while True: 611 key = pfx+'Back:'+str(nBak) 612 if key in parmDict: 613 nBak += 1 614 else: 615 break 616 if bakType in ['chebyschev','cosine']: 617 for iBak in range(nBak): 612 618 key = pfx+'Back:'+str(iBak) 613 try:619 if bakType == 'chebyschev': 614 620 yb += parmDict[key]*(xdata-xdata[0])**iBak 615 iBak += 1 616 except KeyError: 617 break 621 elif bakType == 'cosine': 622 yb += parmDict[key]*npcosd(xdata*iBak) 623 elif bakType in ['interpolate',]: 624 if nBak == 1: 625 yb = np.ones_like(xdata)*parmDict[pfx+'Back:0'] 626 elif nBak == 2: 627 dX = xdata[-1]-xdata[0] 628 T2 = (xdata-xdata[0])/dX 629 T1 = 1.0-T2 630 yb = parmDict[pfx+'Back:0']*T1+parmDict[pfx+'Back:1']*T2 631 else: 632 bakPos = np.linspace(xdata[0],xdata[-1],nBak,True) 633 bakVals = np.zeros(nBak) 634 for i in range(nBak): 635 bakVals[i] = parmDict[pfx+'Back:'+str(i)] 636 bakInt = si.interp1d(bakPos,bakVals,'linear') 637 yb = bakInt(xdata) 618 638 return yb 619 639 620 640 def getBackgroundDerv(pfx,parmDict,bakType,xdata): 621 dydb = [] 622 if bakType == 'chebyschev': 623 iBak = 0 624 while True: 625 if pfx+'Back:'+str(iBak) in parmDict: 626 dydb.append((xdata-xdata[0])**iBak) 627 iBak += 1 628 else: 629 break 641 nBak = 0 642 while True: 643 key = pfx+'Back:'+str(nBak) 644 if key in parmDict: 645 nBak += 1 646 else: 647 break 648 dydb = np.zeros(shape=(nBak,len(xdata))) 649 650 if bakType in ['chebyschev','cosine']: 651 for iBak in range(nBak): 652 if bakType == 'chebyschev': 653 dydb[iBak] = (xdata-xdata[0])**iBak 654 elif bakType == 'cosine': 655 dydb[iBak] = npcosd(xdata*iBak) 656 elif bakType in ['interpolate',]: 657 if nBak == 1: 658 dydb[0] = np.ones_like(xdata) 659 elif nBak == 2: 660 dX = xdata[-1]-xdata[0] 661 T2 = (xdata-xdata[0])/dX 662 T1 = 1.0-T2 663 dydb = [T1,T2] 664 else: 665 bakPos = np.linspace(xdata[0],xdata[-1],nBak,True) 666 dx = bakPos[1]-bakPos[0] 667 for i,pos in enumerate(bakPos): 668 if i == 0: 669 dydb[0] = np.where(xdata<bakPos[1],(bakPos[1]-xdata)/dx,0.) 670 elif i == len(bakPos)-1: 671 dydb[i] = np.where(xdata>bakPos[-2],(bakPos[-1]-xdata)/dx,0.) 672 else: 673 dydb[i] = np.where(xdata>bakPos[i], 674 np.where(xdata<bakPos[i+1],(bakPos[i+1]-xdata)/dx,0.), 675 np.where(xdata>bakPos[i-1],(xdata-bakPos[i-1])/dx,0.)) 630 676 return dydb 631 677
Note: See TracChangeset
for help on using the changeset viewer.