7.3. The path finder¶
The path finder is the tool that digs through the atoms list in the
feff.inp
file and determines all possible scattering
geometries. This has been reimplemented in DEMETER to add
some important features that are missing in FEFF's path
finder. Continuing with the example from the previous section, we can
use an instrumented Feff object to compute potentials. It is not
essential to run the potentials calculation (line 6) before the path
finder (line 7), however both must be run before anything else
(plotting, fitting) is done with the FEFF calculation.
1 2 3 4 5 6 7 8 9 | #!/usr/bin/perl
use Demeter;
my $feff = Demeter::Feff -> new(file => "feff/feff.inp");
$feff -> set(workspace => "feff/", screen => 0,);
$feff -> potph
$feff -> pathfinder;
$feff -> freeze("feff/feff.yaml");
|
At line 9, the attributes of the Feff object, including results of the
path finder, are written to a save file. This save file is in the
YAML format, which is
a simple, textual serialization format for data structures. As you
will see in subsequent sections, these YAML files (along with the
phase.bin
) can be used to restore a FEFF
calculation for future use.
This can be made a little more efficient. run
at line 6 below is
a thin wrapper around the potph
and pathfinder
method calls.
1 2 3 4 5 6 | #!/usr/bin/perl
use Demeter;
my $feff = Demeter::Feff -> new(file => "feff/feff.inp");
$feff -> set(workspace => "feff/", screen => 0,);
$feff -> run
|
The rest of this chapter will cover ways of finding out information about the FEFF calculation. The next chapter will cover in detail how information from the FEFF calculation is used to create Path object and how those Path objects can be plotted and used in a fitting model.
7.3.1. Comparing Pathfinders¶
DEMETER's path finder has two huge advantages over FEFF's:
- User configurable fuzzy degeneracy (explained in detail below). FEFF considers paths that differ in length by 0.00001 Å to be non-degenerate.
- The scattering geometries of the degenerate paths are stored and are available for use and examination. FEFF discards the details of the degenerate paths.
FEFF's path finder, however, has its advantages over DEMETER's.
- As it is written in a compiled language, it is considerably faster. Fortunately, the path finder does not need to be called very often.
- FEFF uses its fast plane wave calculation to approximate the importance of path. Low importance paths can be removed from consideration, as can all higher order paths built from that path. DEMETER does not have access to the plane wave calculation, so it must consider many more paths that FEFF's and relies instead on some simple heuristics to trim the tree of paths.
- FEFF path finder considers up to seven-legged paths. DEMETER currently defaults to four-legged paths. Five- and six-legged paths are possible, but time-consuming.
7.3.2. Fuzzy degeneracy¶
As the path finder organizes all the scattering geometries it finds
among the atoms in the input atoms list, it will make a fuzzy
comparison to sort the paths into nearly-degenerate bins. That is, all
paths whose lengths are within a small margin will be considered
degenerate. The width of this bin is set by the
♦Pathfinder→fuzz preference. Consider this
feff.inp
file:
TITLE magnetoplumbite PbFe_12O_19
HOLE 4 1.0 * Pb L3 edge (13035.0 eV), second number is S0^2
* mphase,mpath,mfeff,mchi
CONTROL 1 1 1 1
PRINT 1 0 0 0
RMAX 5.0
POTENTIALS
* ipot Z element
0 82 Pb
1 82 Pb
2 26 Fe
3 8 O
ATOMS * this list contains 39 atoms
* x y z ipot tag distance
0.00000 0.00000 0.00000 0 Pb1 0.00000
1.65468 0.00003 2.30070 3 O_1 2.83393
-0.82737 -1.43298 2.30070 3 O_1 2.83394
1.65468 0.00003 -2.30070 3 O_1 2.83393
-0.82737 -1.43298 -2.30070 3 O_1 2.83394
-0.82737 1.43304 2.30070 3 O_2 2.83397
-0.82737 1.43304 -2.30070 3 O_2 2.83397
2.63123 -1.31552 0.00000 3 O_3 2.94176
-0.17634 -2.93647 0.00000 3 O_3 2.94176
2.63123 1.31558 0.00000 3 O_4 2.94179
-2.45494 -1.62092 0.00000 3 O_4 2.94179
-2.45494 1.62098 0.00000 3 O_5 2.94182
-0.17634 2.93653 0.00000 3 O_5 2.94182
1.69537 -2.93647 0.00000 2 Fe2_1 3.39074
-3.39080 0.00003 0.00000 2 Fe2_2 3.39080
1.69537 2.93653 0.00000 2 Fe2_2 3.39079
0.83581 -1.44767 3.24399 2 Fe5_1 3.64936
0.83581 -1.44767 -3.24399 2 Fe5_1 3.64936
-1.67167 0.00003 3.24399 2 Fe5_2 3.64938
0.83581 1.44772 3.24399 2 Fe5_2 3.64938
-1.67167 0.00003 -3.24399 2 Fe5_2 3.64938
0.83581 1.44772 -3.24399 2 Fe5_2 3.64938
3.39074 0.00006 1.38042 2 Fe4_1 3.66097
-1.69542 -2.93644 1.38042 2 Fe4_1 3.66097
3.39074 0.00006 -1.38042 2 Fe4_1 3.66097
-1.69542 -2.93644 -1.38042 2 Fe4_1 3.66097
-1.69542 2.93656 1.38042 2 Fe4_2 3.66106
-1.69542 2.93656 -1.38042 2 Fe4_2 3.66106
END
Using the default ♦Pathfinder→fuzz parameter of 0.03
Å, will give these paths. Note that the Fe4
and Fe5
scatterers, which differ by about 0.11 Å, get merged into a single
scattering path with an Reff value that is the average of the
constituent paths.
# degen Reff scattering path I legs type
0001 6 2.834 ---- <+> O_1 <+> 2 2 single scattering
0002 6 2.942 ---- <+> O_3 <+> 2 2 single scattering
0003 3 3.391 ---- <+> Fe2_1 <+> 2 2 single scattering
0004 12 3.655 ---- <+> Fe5_1 <+> 2 2 single scattering
Resetting the ♦Pathfinder→fuzz to 0.01 separates those two nearly degenerate paths into separate scattering paths.
$any_object -> co -> set_default('pathfinder', 'fuzz', 0.01);
# degen Reff scattering path I legs type
0001 6 2.834 ---- <+> O_1 <+> 2 2 single scattering
0002 6 2.942 ---- <+> O_3 <+> 2 2 single scattering
0003 3 3.391 ---- <+> Fe2_1 <+> 2 2 single scattering
0004 6 3.649 ---- <+> Fe5_1 <+> 2 2 single scattering
0005 6 3.661 ---- <+> Fe4_1 <+> 2 2 single scattering
DEMETER is copyright © 2009-2016 Bruce Ravel – This document is copyright © 2016 Bruce Ravel
This document is licensed under The Creative Commons Attribution-ShareAlike License.
If DEMETER and this document are useful to you, please consider supporting The Creative Commons.