[Ifeffit] normalization methods

Matt Newville newville at cars.uchicago.edu
Thu May 16 06:47:17 CDT 2013

Hi Matthew, George, Zach,

Thanks for the discussion!

On Wed, May 15, 2013 at 5:41 PM, Matthew Marcus <mamarcus at lbl.gov> wrote:
> I'm not sure what 'flattening' means.  Does that mean dividing by a linear
> or other polynomial function, fitted to the post-edge?
>         mam

Sorry, I should have been clearer.  "Standard Athena/Ifeffit" is to

  a) regress a pre-edge line to mu(E) (no power laws)
  b) regress a post-edge quadratic
  c) set edge_step = post_edge_quadratic(E0) - pre_edge_line(E0)
  b) set  norm(E)  = (mu(E) - pre_edge_line(E)) / edge_step.

Flattening (Athena only, now backported to larch) fits a quadratic to
the post-edge range (typcically E0+100 to end of data) of norm(E), and
then sets

  flattened(E) =  norm(E) for E<= E0
                     =  norm(E) - quadratic(E) + quadratic(E0)   for E > E0

I think this was originally meant for display purposes only.

Hopefully Bruce can correct me if I'm wrong on any of the details here.

I think it's fair to say that the "Standard Athena/Ifeffit" approach
to normalization is simple-minded.  It was designed for EXAFS in an
era when accessing databases seemed like a challenge, so even for
EXAFS it is simple-minded.

Flattening might be better at removing instrumental backgrounds, and
be better for linear analysis of XANES.  The main concern I would have
is the potential for a slight discontinuity at E0, or the potential
strong dependence from the choice of E0.

Using something like bkg_cl() (which matched mu(E) to the data from
the Cromer-Liberman tables) or MBACK (which I believe is similar, but
also accounts for  "elastic/Compton leakage" into the pre-edge part of
fluorescence spectra).

>From my point of view, the question is: what's the best way to do
this?    The pre_edge() function in Larch does include an energy
exponent term, and now writes out the "flattened" array, as above.
It does not include the scaling MAM described, but that would not be
hard.      Reimplementing bkg_cl() would not be too hard, but perhaps
trying to port MBACK would be better.     Perhaps all of the above is


More information about the Ifeffit mailing list