[Ifeffit] Athena: Data cannot be imported by using plugin PFBL12C

Yuji Hiraoka hiraokay at spring8.or.jp
Wed Nov 15 20:50:32 CST 2017


Dear Matt,

Thanks for the reply and script.
I will try to use Larch, instead of athena with Ifeffit, process the 
data by a proper method, and conduct a study for dataformat. 

Best regards,
Yuji Hiraoka


>I have to admit I find this all sort of disappointing.
>
>First, the  PFBL12C is a really poor way to represent EXAFS data.  It uses
>a hard-to-parse and hard-to-interpret format and has many unlabeled
>columns.  It appears to include this really odd notion that recording
>"angle" is somehow better than recording energy, and saves a
>ridiculuously over-sampled spectrum that needs smoothing because of the
>high noise per recorded point.   It is, in short, a really poor way to
>represent EXAFS data.  We've seen it for many years, we've written papers
>and published supported code for better representations of EXAFS data.
> Still, we get questions about using data recorded in such files.  Data
>files this complex need a way to convert them into something useful.
>
>Second, the limitations you are seeing are due to using the outdated,
>no-longer-supported (for several years now actually) Ifeffit library.
>These data can be read and processed without problem with Larch, the
>replacement for Ifeffit.
>
>Stop using Ifeffit.  Use Larch instead.  Really.
>
>An example script to use larch for your `fail.dat` file is listed below.
>It is somewhat complicated because the raw data file is such a poor
>representation of EXAFS data.
>
>--Matt
>
>##### larch script to read, smooth and process data in the horrible PFBL12C
>format
># read raw data, extract angle, i0, sum of fluorescence
>datafile = 'fail.dat'
>rawdat = read_ascii(datafile)
>
>def degrees2eV(angle, dspace=1.63747):
>    from scipy.constants import hbar, c, e
>    hbarc = 1.e10*hbar*c/e
>    return (pi*hbarc/dspace) / sin(angle*pi/180.0)
>#enddef
>
>rawdat.angle  = rawdat.data[0, :]  # angle in degrees.  yikes!
>rawdat.energy = degrees2eV(rawdat.angle)
>rawdat.i0     = rawdat.data[42, :]
>rawdat.fluor  = rawdat.data[3:42, :].sum(axis=0)
>
># smooth data with Savitzky-Golay (data is ~evenly sampled in angle)
>smoothed       = group(energy=rawdat.energy)
>smoothed.i0    = savitzky_golay(rawdat.i0,    5, 1)
>smoothed.fluor = savitzky_golay(rawdat.fluor, 5, 1)
>
>newplot(smoothed.energy, rawdat.fluor, win=3)
>plot(smoothed.energy, smoothed.fluor, zorder=50, linewidth=4, win=3)
>
>### create "normal" XAFS energies, finely spaced over edge,
>### but spaced evenly in k for the EXAFS
>
>e0    = 8980.0  # nominal Cu K edge
>emin  = smoothed.energy.min()
>emax  = smoothed.energy.max() - 5.0
>epre1 = e0 - 20.0
>epre2 = e0 + 20.0
>kmin  = etok(20.0)
>kmax  = etok(emax-e0)
>
>def make_range(start, stop, step):
>    npts = max(2, 1 + int(0.1 + abs(stop-start)/abs(step)))
>    return linspace(start, stop, npts)
>#enddef
>
>en_new = concatenate((make_range(emin, epre1, 5),
>                      make_range(epre1+0.5, epre2-0.5, 0.5),
>                      e0 + ktoe(make_range(kmin, kmax, 0.05))))
>
># now interpolate smoothed data onto this energy grid
>dat       = group(energy=en_new, filename=datafile)
>dat.i0    = interp(smoothed.energy, smoothed.i0,    dat.energy)
>dat.fluor = interp(smoothed.energy, smoothed.fluor, dat.energy)
>dat.mu    = dat.fluor / dat.i0
>
># run autobk
>autobk(dat, rbkg=0.8, kweight=1)
>
># plot data
>plot_mu(dat, show_norm=True)
>plot_chik(dat, kweight=1, win=2)
>
>###################################################
>
>
>--------html-part included links-------
>http://dat.mu
>
>-------------------------------text/plain-------------------------------
>_______________________________________________
>Ifeffit mailing list
>Ifeffit ¡÷ millenia.cars.aps.anl.gov
>http://millenia.cars.aps.anl.gov/mailman/listinfo/ifeffit
>Unsubscribe: http://millenia.cars.aps.anl.gov/mailman/options/ifeffit




More information about the Ifeffit mailing list