[Ifeffit] Re: Phase and Amplitude Correction

Matt Newville newville at cars.uchicago.edu
Thu Aug 28 10:27:10 CDT 2003


Hi Ian,

On Wed, 27 Aug 2003, Ian Drake wrote:
> I wanted to follow up on a suggestion by Grant Bunker (Aug.4th).  He 
> proposed that I look into doing both a phase and amplitude correction of 
> the data as opposed to doing only a total phase correction.  How might I 
> achieve this using IFEFFIT commands?

I think what Grant was getting at (and hopefully he can correct me
if not!) was correcting the non-trivial k-dependence of the XAFS
amplitude, so that the resulting chi(R) looked even more like the
partial pair distribution function, g(R).

The amplitude correction could be done by dividing the EXAFS chi(k)
by f(k)exp[-2R/lambda(k)].  Getting f(k) and lambda(k)  is
approximately the same difficulty as knowing the phase shift: if you
know the scattering atom and the distance, the Feff values should
work well for this.  So if you're doing phase-corrections with Feff,
why not do amplitude corrections too?

To do this with ifeffit, you'd want to use the get_path() command 
and its 'do_arrays' option:
   path(1, file = feff0001.dat)
   get_path(1, prefix=path1, do_arrays)

to create arrays path1.k, path1.amp, and path1.lambda.  These are 
on the Feff k-grid, so you'll have to interpolate to the data grid:
   read_data(file=my_dat.k, group=data, label= 'k chi')
   set r0       = 2.20
   set corr.k   = data.k
   set corr.f   = interp(path1.k, path1.amp, corr.k)
   set corr.lam = interp(path1.k, path1.lambda, corr.k)
 
   set corr.chi = data.chi / ( corr.f * exp(-2*r0/corr.lam))

   fftf(corr.chi, kmin=2, kmax=15,dk=1,kweight=2,pc_path=1)

This would have  a divide-by-zero since f(k=0)=0 in Feff, so
using
   set corr.chi = data.chi / ( (corr.f+1.e-12) * exp(-2*r0/corr.lam))
is safer.  

Anyway, this basic idea can get rid of most of the scattering bits
of chi(k), assuming a single shell where you know R and the atomic
species.  I just tried this and it seems to work pretty well for Cu,
Ag, and FeO -- the peaks in the FT are significantly sharper than
even the phase-corrected FTs. For Ag, the small Ramsauer-Townsend
effect is significantly reduced.  I put these examples (with data
and script) at
   http://cars9.uchicago.edu/ifeffit/contrib/FT_corrections/

Since the phase-corrected FTs can be used to get plausible distances
and scattering atom Zs, you might be able to bootstrap the whole
process to get plausible g(R) functions with very little input.  
That idea seems worth exploring to me, and might be a good approach
towards 'automated analysis' of the first shell...  These ideas
might also be related to Grant's work on regularization methods,
which also seems to be about getting plausible g(R) distributions
with very little input.

Any thoughts on how to improve this?

--Matt









More information about the Ifeffit mailing list