Hi Matt, 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? Thank you for your help, Ian Drake ***************************** UC Berkeley Dept. of Chem. Eng. Graduate Student Advised by Dr. Alex Bell Heterogeneous Catalysts ******************************
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
participants (2)
-
Ian Drake
-
Matt Newville