BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
Materials

Description

Classes and functions to describe magnetic and non-magnetic materials.

Collaboration diagram for Materials:

Classes

class  BaseMaterialImpl
 Interface for material implementation classes. Inherited by MagneticMaterialImpl, which has further children. More...
 
class  MagneticMaterialImpl
 Basic implementation for magnetized material. Inherited by RefractiveMaterialImpl and MaterialBySLDImpl. Incorporates data and methods required to handle material magnetization. More...
 
class  Material
 A wrapper for underlying material implementation. More...
 
class  MaterialBySLDImpl
 Material implementation based on wavelength-independent data (valid for a range of wavelengths) More...
 
class  RefractiveMaterialImpl
 Material implementation based on refractive coefficiencts (valid for one wavelength value only) More...
 

Functions

Material MaterialBySLD ()
 
Material MaterialBySLD (const std::string &name, double sld_real, double sld_imag, R3 magnetization={})
 
Material RefractiveMaterial (const std::string &name, complex_t refractive_index, R3 magnetization={})
 
Material RefractiveMaterial (const std::string &name, double delta, double beta, R3 magnetization={})
 
Material Vacuum ()
 

Function Documentation

◆ MaterialBySLD() [1/2]

◆ MaterialBySLD() [2/2]

Material MaterialBySLD ( const std::string &  name,
double  sld_real,
double  sld_imag,
R3  magnetization = {} 
)

Constructs a wavelength-independent material with a given complex-valued scattering length density (SLD). SLD values for a wide variety of materials can be found on https://sld-calculator.appspot.com/ and https://www.ncnr.nist.gov/resources/activation/ By convention, SLD imaginary part is treated as negative by default, which corresponds to attenuation of the signal. With no parameters given, MaterialBySLD constructs default (vacuum) material with zero sld and zero magnetization.

Parameters
namematerial name
sld_realreal part of the scattering length density, inverse square angstroms
sld_imagimaginary part of the scattering length density, inverse square angstroms
magnetizationmagnetization (in A/m)

Definition at line 31 of file MaterialFactoryFuncs.cpp.

46 {
47  constexpr double inv_sq_angstroms = 1.0 / (Units::angstrom * Units::angstrom);
48  std::unique_ptr<MaterialBySLDImpl> mat_impl(new MaterialBySLDImpl(
49  name, sld_real * inv_sq_angstroms, sld_imag * inv_sq_angstroms, magnetization));
50  return Material(std::move(mat_impl));
51 }
Material implementation based on wavelength-independent data (valid for a range of wavelengths)
A wrapper for underlying material implementation.
Definition: Material.h:35
static constexpr double angstrom
Definition: Units.h:34

◆ RefractiveMaterial() [1/2]

Material RefractiveMaterial ( const std::string &  name,
complex_t  refractive_index,
R3  magnetization = {} 
)

Constructs a material with name, refractive_index and magnetization (in A/m). Alternatively, $\delta$ and $\beta$ for refractive index $n = 1 - \delta + i \beta$ can be passed directly. With no parameters given, constructs default (vacuum) material with $n = 1$ and zero magnetization.

Definition at line 21 of file MaterialFactoryFuncs.cpp.

22 {
23  const double delta = 1.0 - refractive_index.real();
24  const double beta = refractive_index.imag();
25  return RefractiveMaterial(name, delta, beta, magnetization);
26 }
Material RefractiveMaterial(const std::string &name, complex_t refractive_index, R3 magnetization)
double beta(double z, double w)

References ROOT::Math::Cephes::beta().

Referenced by ExemplarySamples::createCoreShellParticle(), ExemplarySamples::createHomogeneousMultilayer(), ExemplarySamples::createMagneticCylinders(), ExemplarySamples::createMagneticLayer(), ExemplarySamples::createMagneticParticleZeroField(), ExemplarySamples::createMagneticRotation(), ExemplarySamples::createMagneticSpheres(), ExemplarySamples::createMagneticSubstrateZeroField(), ExemplarySamples::createMultiLayerWithRoughness(), ExemplarySamples::createResonator(), ExemplarySamples::createSimpleMagneticRotationWithRoughness(), ExemplarySamples::createSlicedCylinders(), and Vacuum().

Here is the call graph for this function:

◆ RefractiveMaterial() [2/2]

Material RefractiveMaterial ( const std::string &  name,
double  delta,
double  beta,
R3  magnetization = {} 
)

Definition at line 31 of file MaterialFactoryFuncs.cpp.

29 {
30  std::unique_ptr<RefractiveMaterialImpl> mat_impl(
31  new RefractiveMaterialImpl(name, delta, beta, magnetization));
32  return Material(std::move(mat_impl));
33 }
Material implementation based on refractive coefficiencts (valid for one wavelength value only)

◆ Vacuum()

Material Vacuum ( )

Definition at line 35 of file MaterialFactoryFuncs.cpp.

36 {
37  return RefractiveMaterial("vacuum", 0.0, 0.0, R3{});
38 }

References RefractiveMaterial().

Here is the call graph for this function: