BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MatrixRTCoefficients_v2 Class Reference
Inheritance diagram for MatrixRTCoefficients_v2:
Collaboration diagram for MatrixRTCoefficients_v2:

Public Member Functions

 MatrixRTCoefficients_v2 (double kz_sign, Eigen::Vector2cd eigenvalues, kvector_t b)
 
 MatrixRTCoefficients_v2 (const MatrixRTCoefficients_v2 &other)
 
 ~MatrixRTCoefficients_v2 () override
 
MatrixRTCoefficients_v2clone () const override
 
Eigen::Vector2cd T1plus () const override
 
Eigen::Vector2cd R1plus () const override
 
Eigen::Vector2cd T2plus () const override
 
Eigen::Vector2cd R2plus () const override
 
Eigen::Vector2cd T1min () const override
 
Eigen::Vector2cd R1min () const override
 
Eigen::Vector2cd T2min () const override
 
Eigen::Vector2cd R2min () const override
 
Eigen::Vector2cd getKz () const override
 
Eigen::Matrix2cd getReflectionMatrix () const override
 
virtual complex_t getScalarT () const
 
virtual complex_t getScalarR () const
 
virtual complex_t getScalarKz () const
 

Private Attributes

double m_kz_sign
 
Eigen::Vector2cd m_lambda
 
kvector_t m_b
 
Eigen::Vector4cd m_w_plus
 
Eigen::Vector4cd m_w_min
 
Eigen::Matrix4cd T1
 
Eigen::Matrix4cd R1
 
Eigen::Matrix4cd T2
 
Eigen::Matrix4cd R2
 

Friends

class SpecularMagneticStrategy
 

Detailed Description

Specular reflection and transmission coefficients in a layer in case of magnetic interactions between the scattered particle and the layer.

Definition at line 26 of file MatrixRTCoefficients_v2.h.

Constructor & Destructor Documentation

◆ MatrixRTCoefficients_v2() [1/2]

MatrixRTCoefficients_v2::MatrixRTCoefficients_v2 ( double  kz_sign,
Eigen::Vector2cd  eigenvalues,
kvector_t  b 
)

Definition at line 23 of file MatrixRTCoefficients_v2.cpp.

25  : m_kz_sign(kz_sign), m_lambda(std::move(eigenvalues)), m_b(std::move(b))
26 {
27 }
Eigen::Vector2cd m_lambda
wave propagation direction (-1 for direct one, 1 for time reverse)
kvector_t m_b
normalized magnetic field impact (with correction for external mag. field)
Eigen::Vector2cd eigenvalues(complex_t kz, double b_mag)

Referenced by clone().

◆ MatrixRTCoefficients_v2() [2/2]

MatrixRTCoefficients_v2::MatrixRTCoefficients_v2 ( const MatrixRTCoefficients_v2 other)
default

◆ ~MatrixRTCoefficients_v2()

MatrixRTCoefficients_v2::~MatrixRTCoefficients_v2 ( )
overridedefault

Member Function Documentation

◆ clone()

MatrixRTCoefficients_v2 * MatrixRTCoefficients_v2::clone ( ) const
overridevirtual

Implements ILayerRTCoefficients.

Definition at line 33 of file MatrixRTCoefficients_v2.cpp.

34 {
35  return new MatrixRTCoefficients_v2(*this);
36 }
MatrixRTCoefficients_v2(double kz_sign, Eigen::Vector2cd eigenvalues, kvector_t b)

References MatrixRTCoefficients_v2().

Here is the call graph for this function:

◆ T1plus()

Eigen::Vector2cd MatrixRTCoefficients_v2::T1plus ( ) const
overridevirtual

The following functions return the transmitted and reflected amplitudes for different incoming beam polarizations and eigenmodes.

Implements ILayerRTCoefficients.

Definition at line 38 of file MatrixRTCoefficients_v2.cpp.

39 {
40  const Eigen::Vector2cd result = waveVector(T1, m_w_plus);
41  if (m_lambda(0) == 0.0 && result == Eigen::Vector2cd::Zero())
42  return {0.5, 0.0};
43  return result;
44 }
Eigen::Vector4cd m_w_plus
boundary values for up-polarization
Eigen::Matrix4cd T1
matrix selecting the transmitted part of the first eigenmode
Eigen::Vector2cd waveVector(const Eigen::Matrix4cd &frob_matrix, const Eigen::Vector4cd &boundary_cond)

References m_lambda, m_w_plus, T1, and anonymous_namespace{MatrixRTCoefficients_v2.cpp}::waveVector().

Referenced by SpecularMagneticStrategy::findNormalizationCoefficients().

Here is the call graph for this function:

◆ R1plus()

Eigen::Vector2cd MatrixRTCoefficients_v2::R1plus ( ) const
overridevirtual

Implements ILayerRTCoefficients.

Definition at line 46 of file MatrixRTCoefficients_v2.cpp.

47 {
48  if (m_lambda(0) == 0.0 && waveVector(T1, m_w_plus) == Eigen::Vector2cd::Zero())
49  return {-0.5, 0.0};
50  return waveVector(R1, m_w_plus);
51 }
Eigen::Matrix4cd R1
matrix selecting the reflected part of the first eigenmode

References m_lambda, m_w_plus, R1, T1, and anonymous_namespace{MatrixRTCoefficients_v2.cpp}::waveVector().

Referenced by getReflectionMatrix().

Here is the call graph for this function:

◆ T2plus()

Eigen::Vector2cd MatrixRTCoefficients_v2::T2plus ( ) const
overridevirtual

Implements ILayerRTCoefficients.

Definition at line 53 of file MatrixRTCoefficients_v2.cpp.

54 {
55  const Eigen::Vector2cd result = waveVector(T2, m_w_plus);
56  if (m_lambda(1) == 0.0 && result == Eigen::Vector2cd::Zero())
57  return {0.5, 0.0};
58  return result;
59 }
Eigen::Matrix4cd T2
matrix selecting the transmitted part of the second eigenmode

References m_lambda, m_w_plus, T2, and anonymous_namespace{MatrixRTCoefficients_v2.cpp}::waveVector().

Referenced by SpecularMagneticStrategy::findNormalizationCoefficients().

Here is the call graph for this function:

◆ R2plus()

Eigen::Vector2cd MatrixRTCoefficients_v2::R2plus ( ) const
overridevirtual

Implements ILayerRTCoefficients.

Definition at line 61 of file MatrixRTCoefficients_v2.cpp.

62 {
63  if (m_lambda(1) == 0.0 && waveVector(T2, m_w_plus) == Eigen::Vector2cd::Zero())
64  return {-0.5, 0.0};
65  return waveVector(R2, m_w_plus);
66 }
Eigen::Matrix4cd R2
matrix selecting the reflected part of the second eigenmode

References m_lambda, m_w_plus, R2, T2, and anonymous_namespace{MatrixRTCoefficients_v2.cpp}::waveVector().

Referenced by getReflectionMatrix().

Here is the call graph for this function:

◆ T1min()

Eigen::Vector2cd MatrixRTCoefficients_v2::T1min ( ) const
overridevirtual

Implements ILayerRTCoefficients.

Definition at line 68 of file MatrixRTCoefficients_v2.cpp.

69 {
70  const Eigen::Vector2cd result = waveVector(T1, m_w_min);
71  if (m_lambda(0) == 0.0 && result == Eigen::Vector2cd::Zero())
72  return {0.0, 0.5};
73  return result;
74 }
Eigen::Vector4cd m_w_min
boundary values for down-polarization

References m_lambda, m_w_min, T1, and anonymous_namespace{MatrixRTCoefficients_v2.cpp}::waveVector().

Referenced by SpecularMagneticStrategy::findNormalizationCoefficients().

Here is the call graph for this function:

◆ R1min()

Eigen::Vector2cd MatrixRTCoefficients_v2::R1min ( ) const
overridevirtual

Implements ILayerRTCoefficients.

Definition at line 76 of file MatrixRTCoefficients_v2.cpp.

77 {
78  if (m_lambda(0) == 0.0 && waveVector(T1, m_w_min) == Eigen::Vector2cd::Zero())
79  return {0.0, -0.5};
80  return waveVector(R1, m_w_min);
81 }

References m_lambda, m_w_min, R1, T1, and anonymous_namespace{MatrixRTCoefficients_v2.cpp}::waveVector().

Referenced by getReflectionMatrix().

Here is the call graph for this function:

◆ T2min()

Eigen::Vector2cd MatrixRTCoefficients_v2::T2min ( ) const
overridevirtual

Implements ILayerRTCoefficients.

Definition at line 83 of file MatrixRTCoefficients_v2.cpp.

84 {
85  const Eigen::Vector2cd result = waveVector(T2, m_w_min);
86  if (m_lambda(1) == 0.0 && result == Eigen::Vector2cd::Zero())
87  return {0.0, 0.5};
88  return result;
89 }

References m_lambda, m_w_min, T2, and anonymous_namespace{MatrixRTCoefficients_v2.cpp}::waveVector().

Referenced by SpecularMagneticStrategy::findNormalizationCoefficients().

Here is the call graph for this function:

◆ R2min()

Eigen::Vector2cd MatrixRTCoefficients_v2::R2min ( ) const
overridevirtual

Implements ILayerRTCoefficients.

Definition at line 91 of file MatrixRTCoefficients_v2.cpp.

92 {
93  if (m_lambda(1) == 0.0 && waveVector(T2, m_w_min) == Eigen::Vector2cd::Zero())
94  return {0.0, -0.5};
95  return waveVector(R2, m_w_min);
96 }

References m_lambda, m_w_min, R2, T2, and anonymous_namespace{MatrixRTCoefficients_v2.cpp}::waveVector().

Referenced by getReflectionMatrix().

Here is the call graph for this function:

◆ getKz()

Eigen::Vector2cd MatrixRTCoefficients_v2::getKz ( ) const
overridevirtual

Returns z-part of the two wavevector eigenmodes.

Implements ILayerRTCoefficients.

Definition at line 98 of file MatrixRTCoefficients_v2.cpp.

99 {
100  return -I * m_kz_sign * m_lambda;
101 }
constexpr complex_t I
Definition: Complex.h:21

References I, m_kz_sign, and m_lambda.

◆ getReflectionMatrix()

Eigen::Matrix2cd MatrixRTCoefficients_v2::getReflectionMatrix ( ) const
overridevirtual

Reimplemented from ILayerRTCoefficients.

Definition at line 103 of file MatrixRTCoefficients_v2.cpp.

104 {
105  Eigen::Matrix2cd R;
106  R.col(0) = R1plus() + R2plus();
107  R.col(1) = R1min() + R2min();
108 
109  return R;
110 }
Eigen::Vector2cd R2min() const override
Eigen::Vector2cd R2plus() const override
Eigen::Vector2cd R1min() const override
Eigen::Vector2cd R1plus() const override

References R1min(), R1plus(), R2min(), and R2plus().

Here is the call graph for this function:

◆ getScalarT()

virtual complex_t ILayerRTCoefficients::getScalarT ( ) const
inlinevirtualinherited

Scalar value getters; these throw errors by default as they should only be used when the derived object is really scalar.

Reimplemented in ScalarRTCoefficients.

Definition at line 48 of file ILayerRTCoefficients.h.

49  {
50  throw Exceptions::NotImplementedException("ILayerRTCoefficients::"
51  "getScalarT(): coefficients are not scalar.");
52  }

◆ getScalarR()

virtual complex_t ILayerRTCoefficients::getScalarR ( ) const
inlinevirtualinherited

Reimplemented in ScalarRTCoefficients.

Definition at line 53 of file ILayerRTCoefficients.h.

54  {
55  throw Exceptions::NotImplementedException("ILayerRTCoefficients::"
56  "getScalarR(): coefficients are not scalar.");
57  }

◆ getScalarKz()

virtual complex_t ILayerRTCoefficients::getScalarKz ( ) const
inlinevirtualinherited

Reimplemented in ScalarRTCoefficients.

Definition at line 58 of file ILayerRTCoefficients.h.

59  {
60  throw Exceptions::NotImplementedException("ILayerRTCoefficients::"
61  "getScalarKz(): coefficients are not scalar.");
62  }

Friends And Related Function Documentation

◆ SpecularMagneticStrategy

friend class SpecularMagneticStrategy
friend

Definition at line 29 of file MatrixRTCoefficients_v2.h.

Member Data Documentation

◆ m_kz_sign

double MatrixRTCoefficients_v2::m_kz_sign
private

Definition at line 53 of file MatrixRTCoefficients_v2.h.

Referenced by getKz().

◆ m_lambda

Eigen::Vector2cd MatrixRTCoefficients_v2::m_lambda
private

wave propagation direction (-1 for direct one, 1 for time reverse)

eigenvalues for wave propagation

Definition at line 54 of file MatrixRTCoefficients_v2.h.

Referenced by SpecularMagneticStrategy::calculateTR(), SpecularMagneticStrategy::calculateZeroFieldTR(), getKz(), SpecularMagneticStrategy::nullifyBottomReflection(), R1min(), R1plus(), R2min(), R2plus(), T1min(), T1plus(), T2min(), and T2plus().

◆ m_b

kvector_t MatrixRTCoefficients_v2::m_b
private

normalized magnetic field impact (with correction for external mag. field)

Definition at line 55 of file MatrixRTCoefficients_v2.h.

Referenced by SpecularMagneticStrategy::calculateTR(), and SpecularMagneticStrategy::nullifyBottomReflection().

◆ m_w_plus

Eigen::Vector4cd MatrixRTCoefficients_v2::m_w_plus
private

◆ m_w_min

Eigen::Vector4cd MatrixRTCoefficients_v2::m_w_min
private

◆ T1

Eigen::Matrix4cd MatrixRTCoefficients_v2::T1
private

◆ R1

Eigen::Matrix4cd MatrixRTCoefficients_v2::R1
private

matrix selecting the reflected part of the first eigenmode

Definition at line 62 of file MatrixRTCoefficients_v2.h.

Referenced by SpecularMagneticStrategy::calculateTR(), SpecularMagneticStrategy::calculateZeroFieldTR(), R1min(), R1plus(), and SpecularMagneticStrategy::setNoTransmission().

◆ T2

Eigen::Matrix4cd MatrixRTCoefficients_v2::T2
private

◆ R2

Eigen::Matrix4cd MatrixRTCoefficients_v2::R2
private

matrix selecting the reflected part of the second eigenmode

Definition at line 66 of file MatrixRTCoefficients_v2.h.

Referenced by SpecularMagneticStrategy::calculateTR(), SpecularMagneticStrategy::calculateZeroFieldTR(), R2min(), R2plus(), and SpecularMagneticStrategy::setNoTransmission().


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