<div dir="ltr">Hi Matthew,<br><br><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Apr 20, 2017 at 5:34 PM, Matthew Marcus <span dir="ltr"><<a href="mailto:mamarcus@lbl.gov" target="_blank">mamarcus@lbl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Does Athena use a histogramming method for Fourier filtering?  </blockquote><div><br></div><div>The autobk() in Ifeffit does.  That is, the background mu0(E) and chi(E) are found at all input energy points.  This is converted to chi(k) at k for all energy points, and then a boxcar average is applied to give chi(k) on the standard 0.05 k-grid.  As shown earlier, this diminishes the noise and also the amplitude of chi(k), especially at higher frequencies.<br><br></div><div>In Larch, the cubic spline for the background mu0(E)  is found at all input energy points, but then evaluated at the values on the uniform k-grid.<br>. <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">That's what I use.  The idea is that to grid the data we don't interpolate but take averages over the data appearing within the bin, </blockquote><div><br></div><div> OK, but that boxcar average will blur the data.    I definitely see this with QXAFS (well "continuous") where I can scan continuously but bin the measurements into 0.05Ang-1 bins -- that *does* reduce the amplitude compared to binning into 0.02 Ang^-1 bins and compared to step scans, where one measures at fixed energies, not slewing over an energy range.<br><br></div><div>The data from SPRing8 was much finer spaced than EXAFS needs -- and boxcar averaging to 0.05 Ang^-1 does blur the data.<br> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">with interpolation only when there aren't any points within a bin. For those, you have to bridge across a gap.  This is the best idea I've come up with for using data which may be tabulated more finely than the k-grid of the Fourier filtering process (typically dk=0.05A^-1).<br></blockquote><div><br></div><div>Putting the spline through all the energy points does use all the data to predict the value on the 0.05 Ang^-1 grid, and avoids blurring the data.<br></div><div>Yes, the result can be noisier, but it does not suppress the oscillations.<br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Something I've used in a XANES context but never tried for EXAFS is a convolution with a kernel whose width depends on energy, such that it matches the sharpest credible feature.  See Manceau, A., Marcus, M. A., Lenoir, T. (2014) Estimating the number of pure chemical components in a mixture by X-ray absorption spectroscopy. J. Synchrotron Radiat. 21,1140-1147,<br>
specifically the SI.  </blockquote><div><br></div><div>I've read that paper, but I don't think I looked at the SI.  Will do.<br> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">The notion is that no real feature can be narrower than the combination of the core-hole lifetime and instrumental broadening or the EXAFS wiggle corresponding to the maximum reasonable path length.  This is done<br>
by transforming the data from E-space to a space in which a constant step in the abscissa corresponds to this energy-dependent minimum credible feature width.  Of course, in EXAFS this is mostly a constant width in k,<br>
so some kind of smoothing would work if it's a constant kernel in k.  </blockquote><div><br></div><div> That's sort of what a Fourier filter does, for example zero all the data above R>10 and transform back to k.<br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">S-G smoothing assumes uniform tabulation so unless your data were taken on a uniform k-grid, it doesn't really do the right thing.<br></blockquote><div><br></div><div>The S-G smoothing does appear to help even if the data are not strictly uniform (see example posted earlier where the data was very finely spaced in energy, but not uniformly).    I did forget about the uniformity requirement, but I think that for the purposes here (smooth very fine slightly noisy data before fitting the cubic spline) it's probably not a disaster.   <br><br>I would agree that this filter is designed to reduce high-frequency noise is largely cosmetic, and is not really going to help reduce the noise in the frequency range of the data we actually care about.  In fact, for me the main point would be that the S-G filter does *not* greatly alter the frequencies we care about, whereas boxcar averaging most certainly does.<br><br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
A problem with this method is that it drops off the very information you need to see what your noise floor is. </blockquote><div><br></div><div>Yes, that's a good point.  Removing the obvious high-frequency noise gives the impression that there is no low-frequency noise, which is not correct.<br><br> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I put this out there only for those who insist on smoothing.  I use my data un-smoothed for EXAFS analysis, knowing that the treatment of noise and sampling finer than the k-bin is not really right.<br></blockquote><br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
I don't really see the usefulness of smoothing for XANES or EXAFS analysis, though it might be OK for display if not overdone.<br></blockquote><div><br><div>Yes, I agree -- not smoothing chi(k) is the best approach.  But if you do smooth, use Savitzky-Golay on the uniform chi(k).<br><br></div> <br></div></div>-- <br><div class="gmail_signature">--Matt<br></div>
</div></div></div>