Hi folks, first of all thanks to all of you who attended the XAFS XII for an interesting conference with lots of input and new ideas. But now to my question: I have been guessing for a long time of doing an algorithm of doing some kind of potential surface scanning when doing an EXAFS fit. This procedure has been known in e.g. ab initio codes like GAUSSIAN for a long time and can be used to check if you are really in a global minimum on the potential surface. As EXAFS analysis is the ultimate search for a global minimum in the parameter space, but you never know if you really end up there, I was planning to do such kind of investigations. However, before I start off with wild coding :) I want to have more opinions on this topic. Here are my main points speaking for this kind of algorithm: 1) Computer power is quite fast now - and ifeffit is also really fast in computing the fit quality if you do not guess any variable (which you don't need in this case as you vary the parameters by your own). 2) In cases where you would expect large correlations between certain variables (e.g. when you have overlapping shells at nearly the same distance), one could systematically investigate the influence of small changes in the parameter space on the fit. That's it - now I am really keen on knowing what you think of this idea. Cheers, Norbert -- Dr. rer. nat. Norbert Weiher (norbertweiher@yahoo.de) Laboratory for Technical Chemistry - ETH Hönggerberg HCI E 117 - 8093 Zürich - Phone: +41 1 63 3 48 32
On Tuesday 08 July 2003 07:24 am, Norbert Weiher wrote:
I have been guessing for a long time of doing an algorithm of doing some kind of potential surface scanning when doing an EXAFS fit. This procedure has been known in e.g. ab initio codes like GAUSSIAN for a long time and can be used to check if you are really in a global minimum on the potential surface. As EXAFS analysis is the ultimate search for a global minimum in the parameter space, but you never know if you really end up there, I was planning to do such kind of investigations.
However, before I start off with wild coding :) I want to have more opinions on this topic. Here are my main points speaking for this kind of algorithm:
1) Computer power is quite fast now - and ifeffit is also really fast in computing the fit quality if you do not guess any variable (which you don't need in this case as you vary the parameters by your own).
2) In cases where you would expect large correlations between certain variables (e.g. when you have overlapping shells at nearly the same distance), one could systematically investigate the influence of small changes in the parameter space on the fit.
This is an excellent idea and, in fact, is among my long-range plans for Artemis. You might take a look at Biochemistry 35 (1996) pp. 9014-9023 and other papers by the same authors for an example of what I have in mind. In that example, they raster through a plane of two variables and fit the remaining variables. The end product is a contour plot of chi-square in the plane of the two rastered variables. Another possibility would be to start at Ifeffit's best fit and raster by hand through as many variables as you like, saving a matrix where the abscissae are the parameters and the values of the matrix elements are chi-square. You could then take cuts through this matrix to explore the multi-variate parameter space. In any case, it would not be a difficult programming chore to use perl, python, or C to walk through the parameters and organize the output and to use ifeffit to do the heavy lifting. Let us know how it works out for you, Norbert. B -- Bruce Ravel ----------------------------------- ravel@phys.washington.edu Code 6134, Building 3, Room 222 Naval Research Laboratory phone: (1) 202 767 5947 Washington DC 20375, USA fax: (1) 202 767 1697 NRL Synchrotron Radiation Consortium (NRL-SRC) Beamlines X11a, X11b, X23b, X24c, U4b National Synchrotron Light Source Brookhaven National Laboratory, Upton, NY 11973 My homepage: http://feff.phys.washington.edu/~ravel EXAFS software: http://feff.phys.washington.edu/~ravel/software/exafs/
Hi, On the 'Fitting Potential Surface' thread, I agree with most of the comments from the other responders, but wanted to add a few comments of my own. First, I think that automating a broader search of parameter space is a fine thing to do. I wouldn't bother with a more complex algorithms until using the existing least-squares approach with multiple 'random but reasonable' starting guesses was shown to fail in some important cases. In fact, though I think this is a fine thing to do, I don't find it to be too critical for most EXAFS problems. The truth is that first shell EXAFS fit is a pretty simple and robust problem for non-linear least-squares. Fitting N, R, sigma2, and E0 basically boils down to fitting a damped sine wave, and we have a very good starting guess of it's period. So it's hard to go too wrong unless E0 goes far off that it jumps a period, and that's not hard to spot (though an automated "warning flag" might be nice). Fitting a pair of Lorenztians to NMR, XANES, or XRD data is much less robust, and more likely to go completely wacky because of "multiple minima" or the "shallow areas" of parameter space. EXAFS fits are easy enough that for many years the simplified, linearized version of the problem (the "log-ratio" method) was preferred by many experts in the field, and can work very well for many problems. Just the fact that good EXAFS results can be obtained _without_ any least-squares refinement at all indicates the the robustness of the problem. Once multiple overlapping shells and multiple-scattering become important, the robustness and guaranteed uniqueness fades away, and more elaborate fitting methods are needed. And multiple minima become a more likely. On making contour plots: Personally, I don't get too excited about these. If there's one minima, all I get from these are a) the best-fit values, b) the uncertainties in the values, and c) the correlation between the variables. That is, I get 5 numbers that I already knew. If there are more than one statistically significant minima, the contour plot tells me nothing except that there are 2 minima (which is again something that I could have figured out with a lot fewer calculations!). Maybe the contour plot helps some people, and many people seem to like showing them, but I've never seen the point. I'm willing to accept that I might be in the extreme minority on this point. I hope that doesn't discourage you too much, just gives one opinion on where priorities could be placed.... Anyway, these are all good things to work on. Now, onto some of the nuts and bolts: Like the others, I'd highly recommend starting with the 'random but reasonable' starting guesses, and letting feffit() find the minima "attractors" from each guess. The reported correlations would give statistics on the contour of parameter space near each minima. This would be fairly simple to implement. Norbert wrote:
1) Computer power is quite fast now - and ifeffit is also really fast in computing the fit quality if you do not guess any variable (which you don't need in this case as you vary the parameters by your own).
It could possibly be faster at this too. That is, a non_feffit() command could generate 'chi-square' of (data-model) without a fit. Other possibilities are for feffit() to avoid the calculation of correlations and just give the best-fit values and chi-square. If you're mapping out parameter space yourself, you may not need the uncertainties found this way (though they might be a good way to estimate how big your steps in each parameter should be!). Also, Ifeffit's feffit() is slower than Feffit for at least one reason that, while normally "very good" could possibly be relaxed: In Ifeffit, all FTs use a grid of 2048 elements/0.05Ang^-1. In Feffit, the fits are done with 1024 element arrays, and the difference in speed is noticable (well, ~2x). In the old days, this was important, but machines are fast enough now that it normally doesn't matter. But if you're beating on these problems for hours, it might be worth the effort to allow this speed-up in Ifeffit. Grant wrote:
I don't think this should be very hard to do. Of course it easy to suggest that other people do the work, so I've been playing with these approaches myself using mathematica as my sandbox. The minimization code in feffit would have to be robust enough that it would give up gracefully (not crash) if it became numerically unstable.
I think it (minpack) is robust enough. I've never seen it crash, rarely fail by giving a 'this problem is too hard' error unless stuck somewhere where the variations in chi-square are pinned to zero. With Feffit this is rare unless N gets pulled to 0. Feffit can itself give a 'this problem is too hard' error, but that means 'took too many iterations'. Anyway, minpack should be *very* difficult to crash, but Ifeffit might need to give better messages if it is stressed harder. Let me know if any changes would help make this stuff easier to do. --Matt
participants (3)
-
Bruce Ravel
-
Matt Newville
-
Norbert Weiher