BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
MatrixFlux.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Resample/Flux/MatrixFlux.h
6 //! @brief Defines class MatrixFlux.
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 #ifdef SWIG
16 #error no need to expose this header to Swig
17 #endif
18 
19 #ifndef USER_API
20 #ifndef BORNAGAIN_RESAMPLE_FLUX_MATRIXFLUX_H
21 #define BORNAGAIN_RESAMPLE_FLUX_MATRIXFLUX_H
22 
23 #include "Base/Spin/SpinMatrix.h"
24 #include "Resample/Flux/IFlux.h"
25 #include <heinz/Complex.h>
26 #include <heinz/Vectors3D.h>
27 #include <vector>
28 
29 //! Specular reflection and transmission coefficients in a layer in case
30 //! of magnetic interactions between the scattered particle and the layer.
31 
32 class MatrixFlux : public IFlux {
33 public:
34  MatrixFlux(double kz_sign, const Spinor& eigenvalues, const R3& b, double magnetic_SLD);
35 
36  //! The following functions return the transmitted and reflected amplitudes
37  //! for different incoming beam polarizations and eigenmodes
38  Spinor T1plus() const override;
39  Spinor R1plus() const override;
40  Spinor T2plus() const override;
41  Spinor R2plus() const override;
42  Spinor T1min() const override;
43  Spinor R1min() const override;
44  Spinor T2min() const override;
45  Spinor R2min() const override;
46  //! Returns z-part of the two wavevector eigenmodes
47  Spinor getKz() const override;
48  double magneticSLD() const { return m_magnetic_SLD; }
49 
50  SpinMatrix computeP() const;
52 
53  SpinMatrix computeDeltaMatrix(double thickness);
54 
55  SpinMatrix getReflectionMatrix() const { return m_R; };
56 
57  Spinor m_lambda; //!< eigenvalues for wave propagation
60  R3 m_b; //!< unit magnetic field vector
61 
62 private:
63  double m_kz_sign; //! wave propagation direction (-1 for direct one, 1 for time reverse)
65 
66  // helper functions to compute DWBA compatible amplitudes used in the T1plus() etc. functions
67  SpinMatrix TransformationMatrix(const Spinor& selection) const;
68  SpinMatrix T1Matrix() const;
69  SpinMatrix T2Matrix() const;
70 
71  SpinMatrix pMatrixHelper(double sign) const;
72 };
73 
74 #endif // BORNAGAIN_RESAMPLE_FLUX_MATRIXFLUX_H
75 #endif // USER_API
Defines and implements class IFlux.
Defines class SpinMatrix.
Interface to access reflection/transmission coefficients. Realized by ScalarFlux and MatrixFlux.
Definition: IFlux.h:30
Specular reflection and transmission coefficients in a layer in case of magnetic interactions between...
Definition: MatrixFlux.h:32
SpinMatrix computeP() const
Definition: MatrixFlux.cpp:124
Spinor T1min() const override
Definition: MatrixFlux.cpp:88
SpinMatrix getReflectionMatrix() const
Definition: MatrixFlux.h:55
Spinor R1plus() const override
Definition: MatrixFlux.cpp:73
Spinor T1plus() const override
The following functions return the transmitted and reflected amplitudes for different incoming beam p...
Definition: MatrixFlux.cpp:68
double m_magnetic_SLD
wave propagation direction (-1 for direct one, 1 for time reverse)
Definition: MatrixFlux.h:64
Spinor T2min() const override
Definition: MatrixFlux.cpp:98
Spinor m_lambda
eigenvalues for wave propagation
Definition: MatrixFlux.h:55
SpinMatrix TransformationMatrix(const Spinor &selection) const
Definition: MatrixFlux.cpp:43
SpinMatrix T1Matrix() const
Definition: MatrixFlux.cpp:58
Spinor T2plus() const override
Definition: MatrixFlux.cpp:78
SpinMatrix pMatrixHelper(double sign) const
Definition: MatrixFlux.cpp:113
double magneticSLD() const
Definition: MatrixFlux.h:48
SpinMatrix T2Matrix() const
Definition: MatrixFlux.cpp:63
SpinMatrix m_T
Definition: MatrixFlux.h:58
SpinMatrix computeInverseP() const
Definition: MatrixFlux.cpp:132
Spinor getKz() const override
Returns z-part of the two wavevector eigenmodes.
Definition: MatrixFlux.cpp:108
SpinMatrix m_R
Definition: MatrixFlux.h:59
Spinor R2min() const override
Definition: MatrixFlux.cpp:103
double m_kz_sign
Definition: MatrixFlux.h:63
R3 m_b
unit magnetic field vector
Definition: MatrixFlux.h:60
MatrixFlux(double kz_sign, const Spinor &eigenvalues, const R3 &b, double magnetic_SLD)
Definition: MatrixFlux.cpp:32
Spinor R2plus() const override
Definition: MatrixFlux.cpp:83
Spinor R1min() const override
Definition: MatrixFlux.cpp:93
SpinMatrix computeDeltaMatrix(double thickness)
Definition: MatrixFlux.cpp:146
Definition: Spinor.h:20