Description | Perl tools for X-ray Absorption Spectroscopy |
Demeter::ThreeBody - Multiple scattering from an arbitrary three-body configuration
This documentation refers to Demeter version 0.9.26.
Build a single scattering path of arbitrary length from the potentials of a Feff calculation:
my $tb = Demeter::ThreeBody->new(parent => $feff_object,
data => $data_object,
r1 => 2.7,
r2 => 2.6,
beta => 1.1,
ipot1 => 1,
ipot2 => 3,
);
$tb -> plot('R');
Given an arrangement of three atoms -- presmuably a nearly collinear configuration -- generate the double and tripple scattering paths associated with that configuration.
This object is treated just like a normal Path object in that it is parameterized in much the same way:
$tb -> set(s02 => 'amp', e0 => 'enot');
These parameters are passed along to the double and triple scattering paths that are generated by the use of this object. The assumption, therefore, is that the double and triple scattering paths would get the same parameters. This is probably a decent assumption for a nearly collinear configuration. In the collinear case, the fourth shell of copper metal for instance, deltaR and sigma^2 really should be parametrized the same as the single scattering path to th distant atom.
The degeneracies of the double and triple scattering paths are set to 2 and 1. It is up to you to make sure that the s02
path parameter is set correctly, presumably the same as the number of single scattering paths to the distant atom.
As with any Moose object, the attribute names are the name of the accessor methods.
This extends Demeter::Path. Along with the standard attributes of any Demeter object (name
, plottable
, data
, and so on), and of the Path object, a ThreeBody object has the following:
The r1
, r2
, beta
, ipot1
, and ipot2
attributes must be specified as these are used to construct the constituent paths.
The dspath
and tspath
attributes are set as the output of creating a ThreeBody object. Sensible things will happen when plotting or using in a fit, so it should not normally be necessary to access these directly.
When a ThreeBody is used in a fit, the Path objects contained in dspath
and tspath
will be pushed onto the Fit objects list of paths. When plotting a ThreeBody, each of those Path objects will beplotted. When added to a VPath, both will be added.
r1
The length of the leg between the absorber and the nearer atom.
r2
The length of the leg between the nearer atom and the more distant atom.
beta
The scattering angle through the intervening atom.
ipot1
From the Feff object specified by the parent
attribute, the potential index of the intervening atom.
ipot2
From the Feff object specified by the parent
attribute, the potential index of the distant atom.
dspath
This contains the Path object for the double scattering (3-legged) path.
tspath
This contains the Path object for the triple scattering (4-legged) path.
through
When true, this computes paths which scatter through the absorber:
Absorber ---> Atom1 ---> Absorber ---> Atom2 ---> Absorber
plus the three-legged path which skips the absorber
When false, this computes paths which scatter through the first atom:
Absorber ---> Atom1 ---> Atom2 ---> Atom1 ---> Absorber
plus the three-legged path which skips Atom1.
There are no outward-looking methods for the ThreeBody object beyond those of the Path object. All methods in this module are used behind the scenes and need never be called by the user.
Good question ...
See Demeter::Config for a description of the configuration system.
Demeter's dependencies are in the Build.PL file.
Do the right thing in a fit and in a VPath.
Sanity checking, for instance, need to check that the requested ipot actually exists; that parent and data are set before anything is done; ...
Think about serialization by itself and in a fit.
Please report problems to the Ifeffit Mailing List (http://cars9.uchicago.edu/mailman/listinfo/ifeffit/)
Patches are welcome.
Bruce Ravel, http://bruceravel.github.io/home
http://bruceravel.github.io/demeter/
Copyright (c) 2006-2018 Bruce Ravel (http://bruceravel.github.io/home). All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlgpl.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.