8.2. Semantic path descriptions¶
DEMETER does away with the old-fashioned way of organizing the paths calculated in a FEFF calculation. The “path index” is no longer explicitly used in a DEMETER program. Nonetheless, to build Path objects from a list of ScatteringPath objects, you need to know something about which path is which. The path interpretation is one good way of obtaining information about the list of paths, but it is not especially useful for finding automated solutions to building fitting models.
Consider a situation where a molecule is adsorbed to a surface. As an example, consider a ruthenium complex on an aluminum oxide support. One might run a series of DFT or molecular dynamics calculations in an attempt to determine the position at the surface where the molecule rests. Presumably the scattering from the atoms in the surface will be used to identify the surface position by analysis of the EXAFS data. Given several candidate positions, one would automate the construction of a simple fitting model which includes scattering from surface atoms.
The difficulty of this approach is that the single scattering paths from atoms in the surface might be in different positions in FEFF's path list depending on details of the structural geometry. If you want to include a single scattering path from, to use the example with the aluminum oxide support, an aluminum atom in the surface. Doing so is difficult to automate as you may not know FEFF's path index for that path going into the fit.
DEMETER offers a solution to this problem. You can specify a path using a semnatic description of the path. For example, you can find the single scattering path which scatters from aluminum and is between 3 and 4 Å from the scatterer. The following snippet of code imports a FEFF calculation from its serialization file and finds the path meeting that description:
my $feff = Demeter::Feff->new(yaml=>'myfeff.yaml', workspace=>'mycalc');
my $this_sp = $feff->find_path(gt => 3, lt=>4, tag=>['Al']);
my $path = Demeter::Path -> new(feff => $feff,
sp => $this_sp,
);
The find_path
method examines all the paths in a Feff objects path
list and compares them against the semantic descriptions given as
arguments to the method. In this case, the path that gets returned
must have a half path length greater than 3 Å and less that 4
Å. As the anonymous list given as the tag argument has only one
element, the path that returns must be a single scattering path. The
scatterer must have a site tag that equals the string “Al”.
If there are more than one path meeting the criteria outlined in the
argument, then the find_path
method returns the shortest such
path. The find_all_paths
takes the same sort of argument list as
find_path
and will return a list of paths meeting the criteria and
ordered by increasing half path length.
Here are all the criteria available to the find_path
and
find_all_paths
methods:
lt
- This criterion takes a number and requires that the returned path be shorter in half path length than that number.
gt
- This criterion takes a number and requires that the returned path be longer in half path length than that number.
nleg
- This criterion takes an integer and requires that the returned path have this number of scattering legs. This criterion is redundant when the list-valued criteria are also used.
sp
- This criterion takes a ScatteringPath object and requires that the returned path be longer in half path length than that path.
tag
- This criterion takes a string or an anonymous array of strings and
requires that the returned path contain the atoms which have this
(these) tags. The tag is the optional fifth column in a
feff.inp
file written by Demeter's Atoms. This criterion requires that the tags are lexically equal. See the tagmatch criterion for matching tags in the sense of regular expressions. tagmatch
- This criterion takes a string or an anonymous array of strings and
requires that the returned path contain the atoms which have tags
matching the arguments of this criterion. The tag is the optional
fifth column in a
feff.inp
file written by Demeter's Atoms. This criterion requires that the tags match in the sense of regular expressions. See the tag criterion for requiring that tags be lexically equal. ipot
- This criterion takes an integer from 0 to 7 or an anonymous array of such integers and requires that the returned path contain the atoms which have ipots equal to the arguments of this criterion.
element
- This criterion takes a string identifying an element (its name, its one or two letter symbol or its Z number) or an anonymous array of such strings and requires that the returned path contain the atoms which have the elements specified.
This method returns 0 if a path meeting the criteria cannot be found or if there is an error in specifying the criteria.
The list-valued criterion are compared in order with the scattering atoms in a path and the match is only true if each element hits with the corresponding scatterer in a path. Thus, it is not necessary to specify the nleg criterion when any of the list valued criteria are used.
Here is an example of using the find_all_paths
method to find all
single scattering paths in a FEFF calculcation which are
shorter than 6 Å.
my @list = $feff->find_all_paths( lt=>6, nleg=>2 );
For more details, see the Demeter::Feff::Paths documentation.
The example of Hg absorbed to DNA
demonstrates extensive use of the find_path
method. The silver/gold
alloy example also makes strategic use of this
tool.
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.