BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
SpinMatrix.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Base/Spin/SpinMatrix.h
6 //! @brief Defines class SpinMatrix.
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_BASE_SPIN_SPINMATRIX_H
16 #define BORNAGAIN_BASE_SPIN_SPINMATRIX_H
17 
18 #include <heinz/Complex.h>
19 #include <heinz/Vectors3D.h>
20 
21 class Spinor;
22 
23 class SpinMatrix {
24 public:
25  //! Constructs matrix with rows (a_,b_) and (c_,d_).
26  SpinMatrix(complex_t a_, complex_t b_, complex_t c_, complex_t d_);
27  //! Contructs the null matrix.
28  SpinMatrix();
29 
30  static SpinMatrix Diag(complex_t a_, complex_t d_);
31  static SpinMatrix One();
32 
33  //! Constructs matrix (I+v*s)/2, where s is the Pauli vector.
34  static SpinMatrix FromBlochVector(const R3& v);
35 
36  SpinMatrix operator-() const;
37 
38  SpinMatrix operator+(const SpinMatrix&) const;
39  SpinMatrix operator-(const SpinMatrix&) const;
41 
42  SpinMatrix operator*(const SpinMatrix&) const;
44 
45  Spinor operator*(const Spinor&) const;
46 
47  SpinMatrix operator*(complex_t) const;
48  SpinMatrix operator*(double) const;
49 
50  SpinMatrix operator/(complex_t) const;
51  SpinMatrix operator/(double) const;
52 
53  SpinMatrix operator*=(complex_t);
54  SpinMatrix operator*=(double);
55  SpinMatrix operator/=(complex_t);
56  SpinMatrix operator/=(double);
57 
58  Spinor col0() const;
59  Spinor col1() const;
60 
61  complex_t trace() const;
62  complex_t determinant() const;
63 
64  bool allFinite() const;
65 
66  SpinMatrix adjoint() const;
67 
68  complex_t a, b, c, d;
69 };
70 
71 SpinMatrix operator*(complex_t, const SpinMatrix&);
72 SpinMatrix operator*(double, const SpinMatrix&);
73 
74 #endif // BORNAGAIN_BASE_SPIN_SPINMATRIX_H
SpinMatrix operator*(complex_t, const SpinMatrix &)
Definition: SpinMatrix.cpp:145
complex_t a
Definition: SpinMatrix.h:68
complex_t b
Definition: SpinMatrix.h:68
complex_t c
Definition: SpinMatrix.h:68
SpinMatrix()
Contructs the null matrix.
Definition: SpinMatrix.cpp:26
SpinMatrix operator*(const SpinMatrix &) const
Definition: SpinMatrix.cpp:72
SpinMatrix operator/(complex_t) const
Definition: SpinMatrix.cpp:99
SpinMatrix adjoint() const
Definition: SpinMatrix.cpp:180
static SpinMatrix One()
Definition: SpinMatrix.cpp:36
SpinMatrix operator*=(const SpinMatrix &)
Definition: SpinMatrix.cpp:77
SpinMatrix operator+=(const SpinMatrix &)
Definition: SpinMatrix.cpp:62
bool allFinite() const
Definition: SpinMatrix.cpp:175
SpinMatrix operator+(const SpinMatrix &) const
Definition: SpinMatrix.cpp:52
Spinor col1() const
Definition: SpinMatrix.cpp:160
static SpinMatrix FromBlochVector(const R3 &v)
Constructs matrix (I+v*s)/2, where s is the Pauli vector.
Definition: SpinMatrix.cpp:41
static SpinMatrix Diag(complex_t a_, complex_t d_)
Definition: SpinMatrix.cpp:31
complex_t d
Definition: SpinMatrix.h:68
Spinor col0() const
Definition: SpinMatrix.cpp:155
complex_t trace() const
Definition: SpinMatrix.cpp:165
complex_t determinant() const
Definition: SpinMatrix.cpp:170
SpinMatrix operator-() const
Definition: SpinMatrix.cpp:47
SpinMatrix operator/=(complex_t)
Definition: SpinMatrix.cpp:127
Definition: Spinor.h:20