BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
Material Class Reference

A wrapper for underlying material implementation. More...

Inheritance diagram for Material:
[legend]
Collaboration diagram for Material:
[legend]

Public Member Functions

 Material (const Material &material)
 
 Material (Material &&material)=default
 
 Material (std::unique_ptr< BaseMaterialImpl > material_impl)
 Creates material with particular material implementation. More...
 
std::string getName () const
 Returns the name of material. More...
 
Material inverted () const
 Constructs a material with inverted magnetization. More...
 
bool isDefaultMaterial () const
 Returns true if material has refractive index of (1.0, 0.0) and zero magnetization. More...
 
bool isEmpty () const
 Returns true if material underlying data is nullptr. More...
 
bool isMagneticMaterial () const
 
bool isScalarMaterial () const
 Indicates whether the interaction with the material is scalar. More...
 
kvector_t magnetization () const
 Get the magnetization (in A/m) More...
 
complex_t materialData () const
 Returns underlying material data. More...
 
Materialoperator= (const Material &other)
 
Materialoperator= (Material &&other)=default
 
Eigen::Matrix2cd polarizedSubtrSLD (const WavevectorInfo &wavevectors) const
 Returns ( $ \pi/\lambda^2 $ - sld) matrix with magnetization corrections. More...
 
complex_t refractiveIndex (double wavelength) const
 Returns refractive index. More...
 
complex_t refractiveIndex2 (double wavelength) const
 Returns squared refractive index. More...
 
Material rotatedMaterial (const Transform3D &transform) const
 
complex_t scalarSubtrSLD (const WavevectorInfo &wavevectors) const
 Returns ( $ \pi/\lambda^2 $ - sld), sld (in $nm^{-2}$) being the scattering length density. More...
 
MATERIAL_TYPES typeID () const
 Returns the type of underlying material implementation. More...
 

Private Attributes

std::unique_ptr< BaseMaterialImplm_material_impl
 

Friends

std::ostream & operator<< (std::ostream &ostr, const Material &mat)
 

Detailed Description

A wrapper for underlying material implementation.

Definition at line 29 of file Material.h.

Constructor & Destructor Documentation

◆ Material() [1/3]

Material::Material ( std::unique_ptr< BaseMaterialImpl material_impl)

Creates material with particular material implementation.

Definition at line 20 of file Material.cpp.

21  : m_material_impl(std::move(material_impl))
22 {
23 }
std::unique_ptr< BaseMaterialImpl > m_material_impl
Definition: Material.h:97

Referenced by inverted().

◆ Material() [2/3]

Material::Material ( const Material material)

Definition at line 25 of file Material.cpp.

26 {
27  if (material.isEmpty())
28  throw std::runtime_error("Material: Error! Attempt to initialize material with nullptr.");
29  m_material_impl.reset(material.m_material_impl->clone());
30 }
bool isEmpty() const
Returns true if material underlying data is nullptr.
Definition: Material.h:77

References isEmpty(), and m_material_impl.

Here is the call graph for this function:

◆ Material() [3/3]

Material::Material ( Material &&  material)
default

Member Function Documentation

◆ getName()

std::string Material::getName ( ) const

◆ inverted()

Material Material::inverted ( ) const

Constructs a material with inverted magnetization.

Definition at line 40 of file Material.cpp.

41 {
42  std::unique_ptr<BaseMaterialImpl> material_impl(m_material_impl->inverted());
43  return Material(std::move(material_impl));
44 }
Material(std::unique_ptr< BaseMaterialImpl > material_impl)
Creates material with particular material implementation.
Definition: Material.cpp:20

References Material(), and m_material_impl.

Here is the call graph for this function:

◆ isDefaultMaterial()

bool Material::isDefaultMaterial ( ) const

Returns true if material has refractive index of (1.0, 0.0) and zero magnetization.

Definition at line 86 of file Material.cpp.

87 {
88  return materialData() == complex_t() && isScalarMaterial();
89 }
std::complex< double > complex_t
Definition: Complex.h:20
bool isScalarMaterial() const
Indicates whether the interaction with the material is scalar.
Definition: Material.cpp:56
complex_t materialData() const
Returns underlying material data.
Definition: Material.cpp:81

References isScalarMaterial(), and materialData().

Here is the call graph for this function:

◆ isEmpty()

bool Material::isEmpty ( ) const
inline

Returns true if material underlying data is nullptr.

Definition at line 77 of file Material.h.

77 { return !m_material_impl; }

References m_material_impl.

Referenced by Material(), and operator=().

◆ isMagneticMaterial()

bool Material::isMagneticMaterial ( ) const

Definition at line 61 of file Material.cpp.

62 {
63  return m_material_impl->isMagneticMaterial();
64 }

References m_material_impl.

◆ isScalarMaterial()

bool Material::isScalarMaterial ( ) const

Indicates whether the interaction with the material is scalar.

This means that different polarization states will be diffracted equally

Definition at line 56 of file Material.cpp.

57 {
58  return m_material_impl->isScalarMaterial();
59 }

References m_material_impl.

Referenced by SampleToPython::defineMaterials(), and isDefaultMaterial().

◆ magnetization()

kvector_t Material::magnetization ( ) const

Get the magnetization (in A/m)

Definition at line 76 of file Material.cpp.

77 {
78  return m_material_impl->magnetization();
79 }

References m_material_impl.

Referenced by createAveragedMaterial(), GUIDomainSampleVisitor::createMaterialFromDomain(), SampleToPython::defineMaterials(), Slice::initBField(), and operator==().

◆ materialData()

complex_t Material::materialData ( ) const

Returns underlying material data.

The units of returned values are the same as the ones passed to material factory functions

Definition at line 81 of file Material.cpp.

82 {
83  return m_material_impl->materialData();
84 }

References m_material_impl.

Referenced by createAveragedMaterial(), GUIDomainSampleVisitor::createMaterialFromDomain(), SampleToPython::defineMaterials(), isDefaultMaterial(), and operator==().

◆ operator=() [1/2]

Material & Material::operator= ( const Material other)

Definition at line 32 of file Material.cpp.

33 {
34  if (other.isEmpty())
35  throw std::runtime_error("Material: Error! Attempt to assign nullptr to material.");
36  m_material_impl.reset(other.m_material_impl->clone());
37  return *this;
38 }

References isEmpty(), and m_material_impl.

Here is the call graph for this function:

◆ operator=() [2/2]

Material& Material::operator= ( Material &&  other)
default

◆ polarizedSubtrSLD()

Eigen::Matrix2cd Material::polarizedSubtrSLD ( const WavevectorInfo wavevectors) const

Returns ( $ \pi/\lambda^2 $ - sld) matrix with magnetization corrections.

Definition at line 96 of file Material.cpp.

97 {
98  return m_material_impl->polarizedSubtrSLD(wavevectors);
99 }

References m_material_impl.

Referenced by FormFactorDecoratorMaterial::evaluatePol().

◆ refractiveIndex()

complex_t Material::refractiveIndex ( double  wavelength) const

Returns refractive index.

Definition at line 46 of file Material.cpp.

47 {
48  return m_material_impl->refractiveIndex(wavelength);
49 }

References m_material_impl.

Referenced by Slice::polarizedReducedPotential(), and Slice::scalarReducedPotential().

◆ refractiveIndex2()

complex_t Material::refractiveIndex2 ( double  wavelength) const

Returns squared refractive index.

Definition at line 51 of file Material.cpp.

52 {
53  return m_material_impl->refractiveIndex2(wavelength);
54 }

References m_material_impl.

◆ rotatedMaterial()

Material Material::rotatedMaterial ( const Transform3D transform) const

Definition at line 101 of file Material.cpp.

102 {
103  std::unique_ptr<BaseMaterialImpl> material_impl(m_material_impl->rotatedMaterial(transform));
104  return Material(std::move(material_impl));
105 }

Referenced by Particle::createSlicedParticle().

◆ scalarSubtrSLD()

complex_t Material::scalarSubtrSLD ( const WavevectorInfo wavevectors) const

Returns ( $ \pi/\lambda^2 $ - sld), sld (in $nm^{-2}$) being the scattering length density.

Definition at line 91 of file Material.cpp.

92 {
93  return m_material_impl->scalarSubtrSLD(wavevectors);
94 }

References m_material_impl.

Referenced by FormFactorDecoratorMaterial::getRefractiveIndexFactor().

◆ typeID()

MATERIAL_TYPES Material::typeID ( ) const

Returns the type of underlying material implementation.

Definition at line 71 of file Material.cpp.

72 {
73  return m_material_impl->typeID();
74 }

References m_material_impl.

Referenced by GUIDomainSampleVisitor::createMaterialFromDomain(), SampleToPython::defineMaterials(), and operator==().

Friends And Related Function Documentation

◆ operator<<

std::ostream& operator<< ( std::ostream &  ostr,
const Material mat 
)
friend

Definition at line 107 of file Material.cpp.

108 {
109  m.m_material_impl->print(ostr);
110  return ostr;
111 }

Member Data Documentation

◆ m_material_impl


The documentation for this class was generated from the following files: