Changeset 490


Ignore:
Timestamp:
Feb 23, 2012 10:00:44 AM (10 years ago)
Author:
vondreele
Message:

further revisions to improve refinement speed in getPowderProfileDerv now OK for Ka1-Ka2 data

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIstruct.py

    r489 r490  
    24302430                tanth = tand(pos/2.0)
    24312431                costh = cosd(pos/2.0)
    2432                 dMdpk = np.zeros(shape=(6,len(x)))
     2432                lenBF = iFin-iBeg
     2433                dMdpk = np.zeros(shape=(6,lenBF))
    24332434                dMdipk = G2pwd.getdFCJVoigt3(refl[5],refl[6],refl[7],shl,x[iBeg:iFin])
    24342435                for i in range(1,5):
    2435                     dMdpk[i][iBeg:iFin] += 100.*dx*refl[13]*refl[9]*dMdipk[i]
    2436                 dMdpk[0][iBeg:iFin] += 100.*dx*refl[13]*refl[9]*dMdipk[0]
    2437                 dervDict = {'int':dMdpk[0],'pos':dMdpk[1],'sig':dMdpk[2],'gam':dMdpk[3],'shl':dMdpk[4]}
     2436                    dMdpk[i] += 100.*dx*refl[13]*refl[9]*dMdipk[i]
     2437                dMdpk[0] += 100.*dx*refl[13]*refl[9]*dMdipk[0]
     2438                dervDict = {'int':dMdpk[0],'pos':dMdpk[1],'sig':dMdpk[2],'gam':dMdpk[3],'shl':dMdpk[4],'L1/L2':np.zeros_like(dMdpk[0])}
    24382439                if Ka2:
    24392440                    pos2 = refl[5]+lamRatio*tanth       # + 360/pi * Dlam/lam * tan(th)
     
    24422443                    iFin2 = min(lenX,iFin+kdelt)
    24432444                    if iBeg2-iFin2:
     2445                        lenBF2 = iFin2-iBeg2
     2446                        dMdpk2 = np.zeros(shape=(6,lenBF2))
    24442447                        dMdipk2 = G2pwd.getdFCJVoigt3(pos2,refl[6],refl[7],shl,x[iBeg2:iFin2])
    24452448                        for i in range(1,5):
    2446                             dMdpk[i][iBeg2:iFin2] += 100.*dx*refl[13]*refl[9]*kRatio*dMdipk2[i]
    2447                         dMdpk[0][iBeg2:iFin2] += 100.*dx*refl[13]*refl[9]*kRatio*dMdipk2[0]
    2448                         dMdpk[5][iBeg2:iFin2] += 100.*dx*refl[13]*dMdipk2[0]
    2449                         dervDict = {'int':dMdpk[0],'pos':dMdpk[1],'sig':dMdpk[2],'gam':dMdpk[3],'shl':dMdpk[4],'L1/L2':dMdpk[5]*refl[9]}
     2449                            dMdpk2[i] = 100.*dx*refl[13]*refl[9]*kRatio*dMdipk2[i]
     2450                        dMdpk2[0] = 100.*dx*refl[13]*refl[9]*kRatio*dMdipk2[0]
     2451                        dMdpk2[5] = 100.*dx*refl[13]*dMdipk2[0]
     2452                        dervDict2 = {'int':dMdpk2[0],'pos':dMdpk2[1],'sig':dMdpk2[2],'gam':dMdpk2[3],'shl':dMdpk2[4],'L1/L2':dMdpk2[5]*refl[9]}
    24502453                if 'Pawley' in Phase['General']['Type']:
    24512454                    try:
    24522455                        idx = varylist.index(pfx+'PWLref:'+str(pawleyLookup[pfx+'%d,%d,%d'%(h,k,l)]))
    2453                         dMdv[idx] = dervDict['int']/refl[9]
     2456                        dMdv[idx][iBeg:iFin] = dervDict['int']/refl[9]
     2457                        if Ka2:
     2458                            dMdv[idx][iBeg2:iFin2] = dervDict2['int']/refl[9]
    24542459                        # Assuming Pawley variables not in constraints
    24552460                    except ValueError:
     
    24652470                    item = names[name]
    24662471                    if name in varylist:
    2467                         dMdv[varylist.index(name)] += item[0]*dervDict[item[1]]
     2472                        dMdv[varylist.index(name)][iBeg:iFin] += item[0]*dervDict[item[1]]
     2473                        if Ka2:
     2474                            dMdv[varylist.index(name)][iBeg2:iFin2] += item[0]*dervDict2[item[1]]
    24682475                    elif name in dependentVars:
    2469                         depDerivDict[name] += item[0]*dervDict[item[1]]
    2470 
     2476                        if Ka2:
     2477                            depDerivDict[name][iBeg2:iFin2] += item[0]*dervDict2[item[1]]
     2478                        depDerivDict[name][iBeg:iFin] += item[0]*dervDict[item[1]]
    24712479                for iPO in dIdPO:
    24722480                    if iPO in varylist:
    2473                         dMdv[varylist.index(iPO)] += dIdPO[iPO]*dervDict['int']
     2481                        dMdv[varylist.index(iPO)][iBeg:iFin] += dIdPO[iPO]*dervDict['int']
     2482                        if Ka2:
     2483                            dMdv[varylist.index(iPO)][iBeg2:iFin2] += dIdPO[iPO]*dervDict2['int']
    24742484                    elif iPO in dependentVars:
    2475                         depDerivDict[iPO] = dIdPO[iPO]*dervDict['int']
    2476 
     2485                        depDerivDict[iPO][iBeg:iFin] += dIdPO[iPO]*dervDict['int']
     2486                        if Ka2:
     2487                            depDerivDict[iPO][iBeg2:iFin2] += dIdPO[iPO]*dervDict2['int']
    24772488                for i,name in enumerate(['omega','chi','phi']):
    24782489                    aname = pfx+'SH '+name
    24792490                    if aname in varylist:
    2480                         dMdv[varylist.index(aname)] += dFdSA[i]*dervDict['int']
     2491                        dMdv[varylist.index(aname)][iBeg:iFin] += dFdSA[i]*dervDict['int']
     2492                        if Ka2:
     2493                            dMdv[varylist.index(aname)][iBeg2:iFin2] += dFdSA[i]*dervDict2['int']
    24812494                    elif aname in dependentVars:
    2482                         depDerivDict[aname] += dFdSA[i]*dervDict['int']
     2495                        depDerivDict[aname][iBeg:iFin] += dFdSA[i]*dervDict['int']
     2496                        if Ka2:
     2497                            depDerivDict[aname][iBeg2:iFin2] += dFdSA[i]*dervDict2['int']
    24832498                for iSH in dFdODF:
    24842499                    if iSH in varylist:
    2485                         dMdv[varylist.index(iSH)] += dFdODF[iSH]*dervDict['int']
     2500                        dMdv[varylist.index(iSH)][iBeg:iFin] += dFdODF[iSH]*dervDict['int']
     2501                        if Ka2:
     2502                            dMdv[varylist.index(iSH)][iBeg2:iFin2] += dFdODF[iSH]*dervDict2['int']
    24862503                    elif iSH in dependentVars:
    2487                         depDerivDict[iSH] += dFdODF[iSH]*dervDict['int']
     2504                        depDerivDict[iSH][iBeg:iFin] += dFdODF[iSH]*dervDict['int']
     2505                        if Ka2:
     2506                            depDerivDict[iSH][iBeg2:iFin2] += dFdODF[iSH]*dervDict2['int']
    24882507                cellDervNames = cellVaryDerv(pfx,SGData,dpdA)
    24892508                for name,dpdA in cellDervNames:
    24902509                    if name in varylist:
    2491                         dMdv[varylist.index(name)] += dpdA*dervDict['pos']
     2510                        dMdv[varylist.index(name)][iBeg:iFin] += dpdA*dervDict['pos']
     2511                        if Ka2:
     2512                            dMdv[varylist.index(name)][iBeg2:iFin2] += dpdA*dervDict2['pos']
    24922513                    elif name in dependentVars:
    2493                         depDerivDict[name] += dpdA*dervDict['pos']
     2514                        depDerivDict[name][iBeg:iFin] += dpdA*dervDict['pos']
     2515                        if Ka2:
     2516                            depDerivDict[name][iBeg2:iFin2] += dpdA*dervDict2['pos']
    24942517                dDijDict = GetHStrainShiftDerv(refl,SGData,phfx)
    24952518                for name in dDijDict:
    24962519                    if name in varylist:
    2497                         dMdv[varylist.index(name)] += dDijDict[name]*dervDict['pos']
     2520                        dMdv[varylist.index(name)][iBeg:iFin] += dDijDict[name]*dervDict['pos']
     2521                        if Ka2:
     2522                            dMdv[varylist.index(name)][iBeg2:iFin2] += dDijDict[name]*dervDict2['pos']
    24982523                    elif name in dependentVars:
    2499                         depDerivDict[name] += dDijDict[name]*dervDict['pos']
     2524                        depDerivDict[name][iBeg:iFin] += dDijDict[name]*dervDict['pos']
     2525                        if Ka2:
     2526                            depDerivDict[name][iBeg2:iFin2] += dDijDict[name]*dervDict2['pos']
    25002527                gamDict = GetSampleGamDerv(refl,wave,G,GB,phfx,calcControls,parmDict)
    25012528                for name in gamDict:
    25022529                    if name in varylist:
    2503                         dMdv[varylist.index(name)] += gamDict[name]*dervDict['gam']
     2530                        dMdv[varylist.index(name)][iBeg:iFin] += gamDict[name]*dervDict['gam']
     2531                        if Ka2:
     2532                            dMdv[varylist.index(name)][iBeg2:iFin2] += gamDict[name]*dervDict2['gam']
    25042533                    elif name in dependentVars:
    2505                         depDerivDict[name] += gamDict[name]*dervDict['gam']
     2534                        depDerivDict[name][iBeg:iFin] += gamDict[name]*dervDict['gam']
     2535                        if Ka2:
     2536                            depDerivDict[name][iBeg2:iFin2] += gamDict[name]*dervDict2['gam']
    25062537                                               
    25072538            elif 'T' in calcControls[hfx+'histType']:
     
    25102541            #do atom derivatives -  for F,X & U so far             
    25112542            corr = dervDict['int']/refl[9]
     2543            if Ka2:
     2544                corr2 = dervDict2['int']/refl[9]
    25122545            for name in varylist+dependentVars:
    25132546                try:
     
    25172550                    continue
    25182551                if name in varylist:
    2519                     dMdv[varylist.index(name)] += dFdvDict[name][iref]*corr
     2552                    dMdv[varylist.index(name)][iBeg:iFin] += dFdvDict[name][iref]*corr
     2553                    if Ka2:
     2554                        dMdv[varylist.index(name)][iBeg2:iFin2] += dFdvDict[name][iref]*corr2
    25202555                elif name in dependentVars:
    2521                     depDerivDict[name] += dFdvDict[name][iref]*corr
     2556                    depDerivDict[name][iBeg:iFin] += dFdvDict[name][iref]*corr
     2557                    if Ka2:
     2558                        depDerivDict[name][iBeg2:iFin2] += dFdvDict[name][iref]*corr2
    25222559    # now process derivatives in constraints
    25232560    G2mv.Dict2Deriv(varylist,depDerivDict,dMdv)
Note: See TracChangeset for help on using the changeset viewer.