BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MatrixRTCoefficients_v3.h
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Sample/RT/MatrixRTCoefficients_v3.h
6 //! @brief Defines class MatrixRTCoefficients_v3.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2020
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************** //
14 
15 #ifndef BORNAGAIN_CORE_RT_MATRIXRTCOEFFICIENTS_V3_H
16 #define BORNAGAIN_CORE_RT_MATRIXRTCOEFFICIENTS_V3_H
17 
18 #include "Base/Vector/Vectors3D.h"
20 #include <vector>
21 
22 //! Specular reflection and transmission coefficients in a layer in case
23 //! of magnetic interactions between the scattered particle and the layer.
24 //! @ingroup algorithms_internal
25 
27 {
28 public:
36  template <class sampleClass> friend class TestSimulation;
37 
38  MatrixRTCoefficients_v3(double kz_sign, Eigen::Vector2cd eigenvalues, kvector_t b,
39  double magnetic_SLD);
42 
43  MatrixRTCoefficients_v3* clone() const override;
44 
45  //! The following functions return the transmitted and reflected amplitudes
46  //! for different incoming beam polarizations and eigenmodes
47  Eigen::Vector2cd T1plus() const override;
48  Eigen::Vector2cd R1plus() const override;
49  Eigen::Vector2cd T2plus() const override;
50  Eigen::Vector2cd R2plus() const override;
51  Eigen::Vector2cd T1min() const override;
52  Eigen::Vector2cd R1min() const override;
53  Eigen::Vector2cd T2min() const override;
54  Eigen::Vector2cd R2min() const override;
55  //! Returns z-part of the two wavevector eigenmodes
56  Eigen::Vector2cd getKz() const override;
57  double magneticSLD() const { return m_magnetic_SLD; }
58 
59  Eigen::Matrix2cd computeP() const;
60  Eigen::Matrix2cd computeInverseP() const;
61 
62  Eigen::Matrix2cd computeDeltaMatrix(double thickness);
63 
64  Eigen::Matrix2cd getReflectionMatrix() const override { return m_R; };
65 
66 private:
67  double m_kz_sign; //! wave propagation direction (-1 for direct one, 1 for time reverse)
68  Eigen::Vector2cd m_lambda; //!< eigenvalues for wave propagation
69  kvector_t m_b; //!< unit magnetic field vector
71 
72  Eigen::Matrix2cd m_T;
73  Eigen::Matrix2cd m_R;
74 
75  // helper functions to compute DWBA compatible amplitudes used in the T1plus() etc. functions
76  Eigen::Matrix2cd TransformationMatrix(Eigen::Vector2d selection) const;
77  Eigen::Matrix2cd T1Matrix() const;
78  Eigen::Matrix2cd T2Matrix() const;
79 
80  Eigen::Matrix2cd pMatrixHelper(double sign) const;
81 };
82 
83 #endif // BORNAGAIN_CORE_RT_MATRIXRTCOEFFICIENTS_V3_H
Defines and implements class ILayerRTCoefficients.
Defines basic vectors in R^3 and C^3.
Interface to access reflection/transmission coefficients.
Specular reflection and transmission coefficients in a layer in case of magnetic interactions between...
Eigen::Vector2cd R2plus() const override
Eigen::Matrix2cd computeDeltaMatrix(double thickness)
Eigen::Vector2cd R1plus() const override
Eigen::Matrix2cd TransformationMatrix(Eigen::Vector2d selection) const
Eigen::Matrix2cd T2Matrix() const
Eigen::Vector2cd m_lambda
wave propagation direction (-1 for direct one, 1 for time reverse)
Eigen::Vector2cd T1plus() const override
The following functions return the transmitted and reflected amplitudes for different incoming beam p...
friend class SpecularMagneticNewNCTestingStrategy
Eigen::Matrix2cd computeInverseP() const
Eigen::Vector2cd R1min() const override
Eigen::Vector2cd T2min() const override
Eigen::Matrix2cd T1Matrix() const
Eigen::Matrix2cd computeP() const
Eigen::Matrix2cd pMatrixHelper(double sign) const
friend class SpecularMagnetic_v3ConsistencyTest
Eigen::Vector2cd getKz() const override
Returns z-part of the two wavevector eigenmodes.
kvector_t m_b
unit magnetic field vector
~MatrixRTCoefficients_v3() override
Eigen::Vector2cd R2min() const override
MatrixRTCoefficients_v3(const MatrixRTCoefficients_v3 &other)
MatrixRTCoefficients_v3(double kz_sign, Eigen::Vector2cd eigenvalues, kvector_t b, double magnetic_SLD)
Eigen::Vector2cd T2plus() const override
friend class SpecularMagnetic_v3ConsistencyTest_AmplitudesBackwardsBackwards_Test
Eigen::Vector2cd T1min() const override
Eigen::Matrix2cd getReflectionMatrix() const override
MatrixRTCoefficients_v3 * clone() const override
friend class SpecularMagnetic_v3ConsistencyTest_ScalarMagneticAmplitudes_Test
Implements the magnetic Fresnel computation with Nevot-Croce roughness.
Implements the magnetic Fresnel computation with Nevot-Croce roughness.
Implements the magnetic Fresnel computation with the analytical Tanh roughness.
Eigen::Vector2cd eigenvalues(complex_t kz, double b_mag)