BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MagneticMaterialImpl.h
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Sample/Material/MagneticMaterialImpl.h
6 //! @brief Defines magnetic material base implementation.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************** //
14 
15 #ifndef BORNAGAIN_CORE_MATERIAL_MAGNETICMATERIALIMPL_H
16 #define BORNAGAIN_CORE_MATERIAL_MAGNETICMATERIALIMPL_H
17 
19 
20 class Transform3D;
21 class WavevectorInfo;
22 
23 //! Basic implementation for magnetized material.
24 //! Inherited by RefractiveMaterialImpl and MaterialBySLDImpl.
25 //! Incorporates data and methods required to handle material magnetization.
26 //! @ingroup materials
27 
29 {
30 public:
31  //! Constructs basic material with name and magnetization
32  MagneticMaterialImpl(const std::string& name, kvector_t magnetization);
33 
34  virtual ~MagneticMaterialImpl() = default;
35 
36  //! Returns pointer to a copy of material
37  MagneticMaterialImpl* clone() const override = 0;
38 
39  //! Constructs a material with inverted magnetization
40  MagneticMaterialImpl* inverted() const override final;
41 
42  //! Indicates whether the interaction with the material is scalar.
43  //! This means that different polarization states will be diffracted equally
44  bool isScalarMaterial() const override final;
45 
46  bool isMagneticMaterial() const override final;
47 
48  //! Returns the magnetization (in A/m)
49  kvector_t magnetization() const override final;
50 
51  //! Returns (\f$ \pi/\lambda^2 \f$ - sld) matrix with magnetization corrections
52  Eigen::Matrix2cd polarizedSubtrSLD(const WavevectorInfo& wavevectors) const override final;
53 
54  MagneticMaterialImpl* rotatedMaterial(const Transform3D& transform) const override final;
55 
56 private:
58 
59  kvector_t m_magnetization; //!< magnetization
60 };
61 
62 #endif // BORNAGAIN_CORE_MATERIAL_MAGNETICMATERIALIMPL_H
Defines basic material implementation interface.
Interface for material implementation classes.
Basic implementation for magnetized material.
void setMagnetization(kvector_t magnetization)
virtual ~MagneticMaterialImpl()=default
MagneticMaterialImpl * clone() const override=0
Returns pointer to a copy of material.
MagneticMaterialImpl(const std::string &name, kvector_t magnetization)
Constructs basic material with name and magnetization.
MagneticMaterialImpl * inverted() const override final
Constructs a material with inverted magnetization.
kvector_t magnetization() const override final
Returns the magnetization (in A/m)
bool isScalarMaterial() const override final
Indicates whether the interaction with the material is scalar.
MagneticMaterialImpl * rotatedMaterial(const Transform3D &transform) const override final
Eigen::Matrix2cd polarizedSubtrSLD(const WavevectorInfo &wavevectors) const override final
Returns ( - sld) matrix with magnetization corrections.
bool isMagneticMaterial() const override final
kvector_t m_magnetization
magnetization
Vector transformations in three dimensions.
Definition: Transform3D.h:28
Holds all wavevector information relevant for calculating form factors.