Changeset 945


Ignore:
Timestamp:
Jun 11, 2013 9:58:44 AM (10 years ago)
Author:
vondreele
Message:

some mods for POWGEN data for single peak fitting
unify profile parm calcs into G2mth

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r938 r945  
    730730                return [G2IO.makeInstDict(names,data,codes),{}]
    731731            elif 'T' in DataType:
    732                 names = ['Type','2-theta','difC','difA','Zero','alpha','beta-0','beta-1','sig-0','sig-1','X','Y','Azimuth']
    733                 codes = [0,0,0,0,0,0,0,0,0,0,0,0,0]
     732                names = ['Type','2-theta','difC','difA','Zero','alpha','beta-0','beta-1',
     733                    'beta-q','sig-0','sig-1','sig-q','X','Y','Azimuth']
     734                codes = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
    734735                azm = 0.
    735736                if 'INS  1DETAZM' in Iparm:
     
    745746                    data.extend([G2IO.sfloat(s[1]),G2IO.sfloat(s[2]),G2IO.sfloat(s[3])])
    746747                    s = Iparm['INS  1PRCF12'].split()
    747                     data.extend([0.0,G2IO.sfloat(s[1]),0.0,0.0,azm])
     748                    data.extend([0.0,0.0,G2IO.sfloat(s[1]),0.0,0.0,0.0,azm])
    748749                elif abs(pfType) in [3,4,5]:
    749750                    data.extend([G2IO.sfloat(s[0]),G2IO.sfloat(s[1]),G2IO.sfloat(s[2])])
    750751                    if abs(pfType) == 4:
    751                         data.extend([0.0,G2IO.sfloat(s[3]),0.0,0.0,azm])
     752                        data.extend([0.0,0.0,G2IO.sfloat(s[3]),0.0,0.0,0.0,azm])
    752753                    else:
    753754                        s = Iparm['INS  1PRCF12'].split()
    754                         data.extend([0.0,G2IO.sfloat(s[0]),0.0,0.0,azm])                       
     755                        data.extend([0.0,0.0,G2IO.sfloat(s[0]),0.0,0.0,0.0,azm])                       
    755756                Inst1 = G2IO.makeInstDict(names,data,codes)
    756757                Inst2 = {}
  • trunk/GSASIImath.py

    r943 r945  
    14651465    return Ind
    14661466   
     1467def getCWsig(ins,pos):
     1468    tp = tand(pos/2.0)
     1469    return ins['U']*tp**2+ins['V']*tp+ins['W']
     1470   
     1471def getCWsigDeriv(pos):
     1472    tp = tand(pos/2.0)
     1473    return tp**2,tp,1.0
     1474   
     1475def getCWgam(ins,pos):
     1476    return ins['X']/cosd(pos/2.0)+ins['Y']*tand(pos/2.0)
     1477   
     1478def getCWgamDeriv(pos):
     1479    return 1./cosd(pos/2.0),tand(pos/2.0)
     1480   
     1481def getTOFsig(ins,dsp):
     1482    return ins['sig-0']+ins['sig-1']*dsp**2+ins['sig-q']*dsp
     1483   
     1484def getTOFsigDeriv(dsp):
     1485    return 1.0,dsp**2,dsp
     1486   
     1487def getTOFgamma(ins,dsp):
     1488    return ins['X']*dsp+ins['Y']*dsp**2
     1489   
     1490def getTOFgammaDeriv(dsp):
     1491    return dsp,dsp**2
     1492   
     1493def getTOFbeta(ins,dsp):
     1494    return ins['beta-0']+ins['beta-1']/dsp**4+ins['beta-q']/dsp
     1495   
     1496def getTOFbetaDeriv(dsp):
     1497    return 1.0,1./dsp**4,1./dsp
     1498   
     1499def getTOFalpha(ins,dsp):
     1500    return ins['alpha']/dsp
     1501   
     1502def getTOFalphaDeriv(dsp):
     1503    return 1./dsp
     1504   
    14671505def setPeakparms(Parms,Parms2,pos,mag,ifQ=False,useFit=False):
    14681506    'Needs a doc string'       
     
    14761514        if ifQ:                              #qplot - convert back to 2-theta
    14771515            pos = 2.0*asind(pos*wave/(4*math.pi))
    1478         sig = ins['U']*tand(pos/2.0)**2+ins['V']*tand(pos/2.0)+ins['W']
    1479         gam = ins['X']/cosd(pos/2.0)+ins['Y']*tand(pos/2.0)           
     1516        sig = getCWsig(ins,pos)
     1517        gam = getCWgam(ins,pos)           
    14801518        XY = [pos,0, mag,1, sig,0, gam,0]       #default refine intensity 1st
    14811519    else:
     
    14861524            dsp = pos/Parms['difC'][1]
    14871525        if 'Pdabc' in Parms2:
    1488             for x in ['sig-0','sig-1','X','Y']:
     1526            for x in ['sig-0','sig-1','sig-q','X','Y']:
    14891527                ins[x] = Parms[x][ind]
    14901528            Pdabc = Parms2['Pdabc'].T
     
    14921530            bet = np.interp(dsp,Pdabc[0],Pdabc[2])
    14931531        else:
    1494             for x in ['alpha','beta-0','beta-1','sig-0','sig-1','X','Y']:
     1532            for x in ['alpha','beta-0','beta-1','beta-q','sig-0','sig-1','sig-q','X','Y']:
    14951533                ins[x] = Parms[x][ind]
    1496             alp = ins['alpha']/dsp
    1497             bet = ins['beta-0']+ins['beta-1']/dsp**4
    1498         sig = ins['sig-0']+ins['sig-1']*dsp**2
    1499         gam = ins['X']*dsp+ins['Y']*dsp**2
     1534            alp = getTOFalpha(ins,dsp)
     1535            bet = getTOFbeta(ins,dsp)
     1536        sig = getTOFsig(ins,dsp)
     1537        gam = getTOFgamma(ins,dsp)
    15001538        XY = [pos,0,mag,1,alp,0,bet,0,sig,0,gam,0]
    15011539    return XY
  • trunk/GSASIIpwd.py

    r939 r945  
    716716    cw = np.append(cw,cw[-1])
    717717    if 'C' in dataType:
    718         U = parmDict['U']
    719         V = parmDict['V']
    720         W = parmDict['W']
    721         X = parmDict['X']
    722         Y = parmDict['Y']
    723718        shl = max(parmDict['SH/L'],0.002)
    724719        Ka2 = False
     
    737732                    sig = parmDict[sigName]
    738733                else:
    739                     sig = U*tand(theta)**2+V*tand(theta)+W
     734                    sig = G2mth.getCWsig(parmDict,theta)
    740735                sig = max(sig,0.001)          #avoid neg sigma
    741736                gamName = 'gam'+str(iPeak)
     
    743738                    gam = parmDict[gamName]
    744739                else:
    745                     gam = X/cosd(theta)+Y*tand(theta)
     740                    gam = G2mth.getCWgam(parmDict,theta)
    746741                gam = max(gam,0.001)             #avoid neg gamma
    747742                Wd,fmin,fmax = getWidthsCW(pos,sig,gam,shl)
     
    766761        Pdabc = parmDict['Pdabc']
    767762        difC = parmDict['difC']
    768         alp0 = parmDict['alpha']
    769         bet0 = parmDict['beta-0']
    770         bet1 = parmDict['beta-1']
    771         sig0 = parmDict['sig-0']
    772         sig1 = parmDict['sig-1']
    773         X = parmDict['X']
    774         Y = parmDict['Y']
    775763        iPeak = 0
    776764        while True:
     
    787775                        alp = np.interp(dsp,Pdabc[0],Pdabc[1])
    788776                    else:
    789                         alp = alp0/dsp
     777                        alp = G2mth.getTOFalpha(parmDict,dsp)
    790778                betName = 'bet'+str(iPeak)
    791779                if betName in varyList:
     
    795783                        bet = np.interp(dsp,Pdabc[0],Pdabc[2])
    796784                    else:
    797                         bet = bet0+bet1/dsp**4
     785                        bet = G2mth.getTOFbeta(parmDict,dsp)
    798786                sigName = 'sig'+str(iPeak)
    799787                if sigName in varyList:
    800788                    sig = parmDict[sigName]
    801789                else:
    802                     sig = sig0+sig1*dsp**2
     790                    sig = G2mth.getTOFsig(parmDict,dsp)
    803791                gamName = 'gam'+str(iPeak)
    804792                if gamName in varyList:
    805793                    gam = parmDict[gamName]
    806794                else:
    807                     gam = X*dsp**2+Y*dsp
     795                    gam = G2mth.getTOFgamma(parmDict,dsp)
    808796                gam = max(gam,0.001)             #avoid neg gamma
    809797                Wd,fmin,fmax = getWidthsTOF(pos,alp,bet,sig,gam)
     
    849837    cw = np.append(cw,cw[-1])
    850838    if 'C' in dataType:
    851         U = parmDict['U']
    852         V = parmDict['V']
    853         W = parmDict['W']
    854         X = parmDict['X']
    855         Y = parmDict['Y']
    856839        shl = max(parmDict['SH/L'],0.002)
    857840        Ka2 = False
     
    872855                    sig = parmDict[sigName]
    873856                else:
    874                     sig = U*tanth**2+V*tanth+W
    875                     dsdU = tanth**2
    876                     dsdV = tanth
    877                     dsdW = 1.0
     857                    sig = G2mth.getCWsig(parmDict,theta)
     858                    dsdU,dsdV,dsdW = G2mth.getCWsigDeriv(theta)
    878859                sig = max(sig,0.001)          #avoid neg sigma
    879860                gamName = 'gam'+str(iPeak)
     
    881862                    gam = parmDict[gamName]
    882863                else:
    883                     gam = X/costh+Y*tanth
    884                     dgdX = 1.0/costh
    885                     dgdY = tanth
     864                    gam = G2mth.getCWgam(parmDict,theta)
     865                    dgdX,dgdY = G2mth.getCWgamDeriv(theta)
    886866                gam = max(gam,0.001)             #avoid neg gamma
    887867                Wd,fmin,fmax = getWidthsCW(pos,sig,gam,shl)
     
    936916        Pdabc = parmDict['Pdabc']
    937917        difC = parmDict['difC']
    938         alp0 = parmDict['alpha']
    939         bet0 = parmDict['beta-0']
    940         bet1 = parmDict['beta-1']
    941         sig0 = parmDict['sig-0']
    942         sig1 = parmDict['sig-1']
    943         X = parmDict['X']
    944         Y = parmDict['Y']
    945918        iPeak = 0
    946919        while True:
     
    957930                        alp = np.interp(dsp,Pdabc[0],Pdabc[1])
    958931                    else:
    959                         alp = alp0/dsp
    960                     dada0 = 1./dsp
     932                        alp = G2mth.getTOFalpha(parmDict,dsp)
     933                        dada0 = G2mth.getTOFalphaDeriv(dsp)
    961934                betName = 'bet'+str(iPeak)
    962935                if betName in varyList:
     
    966939                        bet = np.interp(dsp,Pdabc[0],Pdabc[2])
    967940                    else:
    968                         bet = bet0+bet1/dsp**4
    969                     dbdb0 = 1.
    970                     dbdb1 = 1/dsp**4
     941                        bet = G2mth.getTOFbeta(parmDict,dsp)
     942                        dbdb0,dbdb1,dbdb2 = G2mth.getTOFbetaDeriv(dsp)
    971943                sigName = 'sig'+str(iPeak)
    972944                if sigName in varyList:
    973945                    sig = parmDict[sigName]
    974946                else:
    975                     sig = sig0+sig1*dsp**2
    976                     dsds0 = 1.
    977                     dsds1 = dsp**2
     947                    sig = G2mth.getTOFsig(parmDict,dsp)
     948                    dsds0,dsds1,dsds2 = G2mth.getTOFsigDeriv(dsp)
    978949                gamName = 'gam'+str(iPeak)
    979950                if gamName in varyList:
    980951                    gam = parmDict[gamName]
    981952                else:
    982                     gam = X*dsp**2+Y*dsp
    983                     dsdX = dsp**2
    984                     dsdY = dsp
     953                    gam = G2mth.getTOFgamma(parmDict,dsp)
     954                    dsdX,dsdY = G2mth.getTOFgammaDeriv(dsp)
    985955                gam = max(gam,0.001)             #avoid neg gamma
    986956                Wd,fmin,fmax = getWidthsTOF(pos,alp,bet,sig,gam)
     
    1016986                if 'beta-1' in varyList:
    1017987                    dMdv[varyList.index('beta-1')] += dbdb1*dervDict['bet']
     988                if 'beta-q' in varyList:
     989                    dMdv[varyList.index('beta-q')] += dbdb2*dervDict['bet']
    1018990                if 'sig-0' in varyList:
    1019991                    dMdv[varyList.index('sig-0')] += dsds0*dervDict['sig']
    1020992                if 'sig-1' in varyList:
    1021993                    dMdv[varyList.index('sig-1')] += dsds1*dervDict['sig']
     994                if 'sig-q' in varyList:
     995                    dMdv[varyList.index('sig-q')] += dsds2*dervDict['sig']
    1022996                if 'X' in varyList:
    1023997                    dMdv[varyList.index('X')] += dsdX*dervDict['gam']
     
    11721146            insVals.append(Inst[parm][1])
    11731147            if parm in ['U','V','W','X','Y','SH/L','I(L2)/I(L1)','alpha',
    1174                 'beta-0','beta-1','sig-0','sig-1',] and Inst[parm][2]:
     1148                'beta-0','beta-1','beta-q','sig-0','sig-1','sig-q',] and Inst[parm][2]:
    11751149                    insVary.append(parm)
    11761150        instDict = dict(zip(insNames,insVals))
     
    11911165                if sigName not in varyList:
    11921166                    if 'C' in Inst['Type'][0]:
    1193                         parmDict[sigName] = parmDict['U']*tand(pos/2.0)**2+parmDict['V']*tand(pos/2.0)+parmDict['W']
     1167                        parmDict[sigName] = G2mth.getCWsig(parmDict,pos)
    11941168                    else:
    11951169                        dsp = pos/Inst['difC'][1]
    1196                         parmDict[sigName] = parmDict['sig-0']+parmDict['sig-1']*dsp**2
     1170                        parmDict[sigName] = G2mth.getTOFsig(parmDict,dsp)
    11971171                gamName = 'gam'+str(iPeak)
    11981172                if gamName not in varyList:
    11991173                    if 'C' in Inst['Type'][0]:
    1200                         parmDict[gamName] = parmDict['X']/cosd(pos/2.0)+parmDict['Y']*tand(pos/2.0)
     1174                        parmDict[gamName] = G2mth.getCWgam(parmDict,pos)
    12011175                    else:
    12021176                        dsp = pos/Inst['difC'][1]
    1203                         parmDict[sigName] = parmDict['X']*dsp**2+parmDict['Y']*dsp
     1177                        parmDict[gamName] = G2mth.getTOFgamma(parmDict,dsp)
    12041178                iPeak += 1
    12051179            except KeyError:
     
    12141188        for parm in Inst:
    12151189            if parm in  ['U','V','W','X','Y','SH/L','I(L2)/I(L1)','alpha',
    1216                 'beta-0','beta-1','sig-0','sig-1',]:
     1190                'beta-0','beta-1','beta-q','sig-0','sig-1','sig-q',]:
    12171191                ptlbls += "%s" % (parm.center(12))
    12181192                ptstr += ptfmt % (Inst[parm][1])
     
    12581232                    peak[2*j] = parmDict['alpha']/dsp
    12591233                elif 'beta' in parName:
    1260                     peak[2*j] = parmDict['beta-0']+parmDict['beta-1']/dsp**4
     1234                    peak[2*j] = G2mth.getTOFbeta(parmDict,dsp)
    12611235                elif 'sig' in parName:
    12621236                    if 'C' in Inst['Type'][0]:
    1263                         peak[2*j] = parmDict['U']*tand(pos/2.0)**2+parmDict['V']*tand(pos/2.0)+parmDict['W']
     1237                        peak[2*j] = G2mth.getCWsig(parmDict,pos)
    12641238                    else:
    1265                         peak[2*j] = parmDict['sig-0']+parmDict['sig-1']*dsp**2
     1239                        peak[2*j] = G2mth.getTOFsig(parmDict,dsp)
    12661240                elif 'gam' in parName:
    12671241                    if 'C' in Inst['Type'][0]:
    1268                         peak[2*j] = parmDict['X']/cosd(pos/2.0)+parmDict['Y']*tand(pos/2.0)
     1242                        peak[2*j] = G2mth.getCWgam(parmDict,pos)
    12691243                    else:
    1270                         peak[2*j] = parmDict['X']*dsp**2+parmDict['Y']*dsp
     1244                        peak[2*j] = G2mth.getTOFgamma(parmDict,dsp)
    12711245                       
    12721246    def PeaksPrint(dataType,parmDict,sigDict,varyList):
  • trunk/GSASIIpwdGUI.py

    r938 r945  
    312312    X = []
    313313    for key in T: X.append(D[key])
    314     data = X       
     314    data = X
    315315    G2frame.PatternTree.SetItemPyData(G2frame.PickId,data)
    316316    G2frame.PeakTable = G2gd.Table(data,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     
    604604    '''respond to selection of PWDR Limits data tree item.
    605605    '''
     606    #Add excluded regions here
    606607    if G2frame.dataDisplay:
    607608        G2frame.dataFrame.Clear()
     
    666667        for key in keys:
    667668            if key in ['Type','U','V','W','X','Y','SH/L','I(L2)/I(L1)','alpha',
    668                 'beta-0','beta-1','sig-0','sig-1','Polariz.','Lam','Azimuth','2-theta',
    669                 'difC','difA','Zero','Lam1','Lam2']:
     669                'beta-0','beta-1','beta-q','sig-0','sig-1','sig-q','Polariz.',
     670                'Lam','Azimuth','2-theta','difC','difA','Zero','Lam1','Lam2']:
    670671                good.append(key)
    671672        return good
     
    10091010                topSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,' alpha, beta: fixed by table'),0,wx.ALIGN_CENTER_VERTICAL)
    10101011            else:
    1011                 Items = ['difC','difA','Zero','alpha','beta-0','beta-1','sig-0','sig-1','X','Y']
     1012                Items = ['difC','difA','Zero','alpha','beta-0','beta-1','beta-q','sig-0','sig-1','sig-q','X','Y']
    10121013            for item in Items:
    10131014                fmt = '%10.3f'
Note: See TracChangeset for help on using the changeset viewer.