Changeset 1113


Ignore:
Timestamp:
Oct 18, 2013 11:18:14 AM (8 years ago)
Author:
vondreele
Message:

fix Babinet derivatives for SC & powder

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIstrMath.py

    r1111 r1113  
    605605    FFtables = calcControls['FFtables']
    606606    BLtables = calcControls['BLtables']
     607    nRef = len(refDict['RefList'])
    607608    Tdata,Mdata,Fdata,Xdata,dXdata,IAdata,Uisodata,Uijdata = GetAtomFXU(pfx,calcControls,parmDict)
     609    mSize = len(Mdata)
    608610    FF = np.zeros(len(Tdata))
    609611    if 'N' in calcControls[hfx+'histType']:
     
    616618    bij = Mast*Uij.T
    617619    dFdvDict = {}
    618     dFdfr = np.zeros((len(refDict['RefList']),len(Mdata)))
    619     dFdx = np.zeros((len(refDict['RefList']),len(Mdata),3))
    620     dFdui = np.zeros((len(refDict['RefList']),len(Mdata)))
    621     dFdua = np.zeros((len(refDict['RefList']),len(Mdata),6))
    622     dFdbab = np.zeros((len(refDict['RefList']),2))
     620    dFdfr = np.zeros((nRef,mSize))
     621    dFdx = np.zeros((nRef,mSize,3))
     622    dFdui = np.zeros((nRef,mSize))
     623    dFdua = np.zeros((nRef,mSize,6))
     624    dFdbab = np.zeros((nRef,2))
    623625    for iref,refl in enumerate(refDict['RefList']):
    624626        H = np.array(refl[:3])
     
    661663        dFdui[iref] = 2.*(fas[0]*dfadui[0]+fas[1]*dfadui[1])
    662664        dFdua[iref] = 2.*(fas[0]*dfadua[0]+fas[1]*dfadua[1])
    663         dFdbab[iref] = np.array([np.sum(dfadba*dBabdA),np.sum(-dfadba*parmDict[phfx+'BabA']*SQfactor*dBabdA)]).T
     665        dFdbab[iref] = 2.*fas[0]*np.array([np.sum(dfadba*dBabdA),np.sum(-dfadba*parmDict[phfx+'BabA']*SQfactor*dBabdA)]).T
    664666        if not SGData['SGInv']:
    665667            dfbdfr = np.sum(fb/occ[:,np.newaxis],axis=2)        #problem here if occ=0 for some atom
     
    672674            dFdui[iref] += 2.*(fbs[0]*dfbdui[0]-fbs[1]*dfbdui[1])
    673675            dFdua[iref] += 2.*(fbs[0]*dfbdua[0]+fbs[1]*dfbdua[1])
    674             dFdbab[iref] += np.array([np.sum(dfbdba*dBabdA),np.sum(-dfbdba*parmDict[phfx+'BabA']*SQfactor*dBabdA)]).T
     676            dFdbab[iref] += 2.*fbs[0]*np.array([np.sum(dfbdba*dBabdA),np.sum(-dfbdba*parmDict[phfx+'BabA']*SQfactor*dBabdA)]).T
    675677        #loop over atoms - each dict entry is list of derivatives for all the reflections
    676678    for i in range(len(Mdata)):     
     
    686688        dFdvDict[pfx+'AU13:'+str(i)] = 2.*dFdua.T[4][i]
    687689        dFdvDict[pfx+'AU23:'+str(i)] = 2.*dFdua.T[5][i]
    688         dFdvDict[pfx+'BabA'] = dFdbab.T[0]
    689         dFdvDict[pfx+'BabU'] = dFdbab.T[1]
     690    dFdvDict[pfx+'BabA'] = dFdbab.T[0]
     691    dFdvDict[pfx+'BabU'] = dFdbab.T[1]
    690692    return dFdvDict
    691693   
     
    15661568                            depDerivDict[name][iBeg2:iFin2] += sigDict[name]*dervDict2['sig']
    15671569                for name in ['BabA','BabU']:
    1568                     if phfx+name in varylist:
    1569                         dMdv[varylist.index(phfx+name)][iBeg:iFin] += dFdvDict[pfx+name][iref]*dervDict['int']*cw[iBeg:iFin]
    1570                         if Ka2:
    1571                             dMdv[varylist.index(phfx+name)][iBeg2:iFin2] += dFdvDict[pfx+name][iref]*dervDict2['int']*cw[iBeg2:iFin2]
    1572                     elif phfx+name in dependentVars:                   
    1573                         depDerivDict[phfx+name][iBeg:iFin] += dFdvDict[pfx+name][iref]*dervDict['int']*cw[iBeg:iFin]
    1574                         if Ka2:
    1575                             depDerivDict[phfx+name][iBeg2:iFin2] += dFdvDict[pfx+name][iref]*dervDict2['int']*cw[iBeg2:iFin2]                 
     1570                    if refl[9]:
     1571                        if phfx+name in varylist:
     1572                            dMdv[varylist.index(phfx+name)][iBeg:iFin] += dFdvDict[pfx+name][iref]*dervDict['int']/refl[9]
     1573                            if Ka2:
     1574                                dMdv[varylist.index(phfx+name)][iBeg2:iFin2] += dFdvDict[pfx+name][iref]*dervDict2['int']/refl[9]
     1575                        elif phfx+name in dependentVars:                   
     1576                            depDerivDict[phfx+name][iBeg:iFin] += dFdvDict[pfx+name][iref]*dervDict['int']/refl[9]
     1577                            if Ka2:
     1578                                depDerivDict[phfx+name][iBeg2:iFin2] += dFdvDict[pfx+name][iref]*dervDict2['int']/refl[9]                 
    15761579            elif 'T' in calcControls[hfx+'histType']:
    15771580                print 'TOF Undefined at present'
  • trunk/testDeriv.py

    r1112 r1113  
    139139            delVal.Bind(wx.EVT_KILL_FOCUS,OnDelValue)
    140140            mainSizer.Add(delVal,0)
    141         mainSizer.Layout()
     141#        mainSizer.Layout()
    142142        self.testDerivPanel.SetSizer(mainSizer)   
    143143        Size = mainSizer.Fit(self.testDerivPanel)
    144         Size[0] += 40
     144        Size[0] = 700
    145145        Size[1] = max(Size[1],290) + 35
    146146        self.testDerivPanel.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1)
     
    171171                self.values[self.varylist.index(name)] -= delt   
    172172                Mn = (M1-M0)/(2.*delt)
    173                 hplot.plot(Mn,'r+',label='numeric deriv')
     173                hplot.plot(Mn,'r',label='numeric deriv')
    174174                hplot.plot(dMdV[self.varylist.index(name)]-Mn,'g',label='diff')
    175175            hplot.legend(loc='best')
Note: See TracChangeset for help on using the changeset viewer.