Dear mailing list,
we recently published a paper where we broke with the "Sayers &
Bunker 1988 - Paradigm" to apply normalization as consistently as
possible between samples and standards when performing linear
combination fitting: http://pubs.acs.org/doi/abs/10.1021/acs.est.5b03096.
There, we showed that for known mixtures of phosphorus standards the
LCF of P K-edge XANES spectra delivers better results when changing
the base-line and normalization parameters of the sample (in defined
ranges, using the software R).
I'm writing to the mailing list of several reasons:
1) A reviewer explicitly asked to contact Bruce Ravel so that the
new insight could be implemented in ATHENA,
2) I was trying to combine my code with ATHENAs way of LCF before
publishing the code. Unfortunately, I have not been able to resolve
that a combination of both approaches results in large numbers of
LCF procedures (sometimes Million or Billion). So many procedures
are not fittable in reasonable time, maybe because my code is slow
or maybe because R isn't fast enough (or just the
nlsLM-function that I'm using for LCF). I'm stuck and maybe
programming in Perl would be a better choice (never programmed in
Perl, yet)? Maybe a different kind of fitting algorithm would be
faster?,
3) When using the nlsLM-function to perform LCF in R, I also
have to provide portions of the standards before starting the fit. I
used the same approach as ATHENA, dividing 1 by the number of
standards so that every standard has the same portion. However, when
playing with the code I realized that changing the starting portion
can have an impact on the fitting result. Has this been observed or
tested before by anyone else? How do you, in general, justify using
the same starting portion for every standard?
4) Some minor question about LCF in ATHENA:
a) Could the standards (the columns) in the output .csv-file
after LCF be sorted alphabetically?,
b) Does LCF in ATHENA sometimes produce negative numbers of
a portion because the weight of any "last" standard in a set is
always calculated by "1-sum(portions_of_other_standards)" (could it
be this? https://github.com/bruceravel/demeter/blob/master/lib/Demeter/LCF.pm#L375-L378).
To mimic "all samples sum to one" from ATHENA and to not produce
negative portions, we used all LCF results which have a residual
"absolute(1-sum(portions_of_all_standards)) < 0.0005"; maybe this
is of interest also for ATHENA?
Cheers,
Florian