EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
EvtDiracSpinor.hh
Go to the documentation of this file.
1
2/***********************************************************************
3* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4* *
5* This file is part of EvtGen. *
6* *
7* EvtGen is free software: you can redistribute it and/or modify *
8* it under the terms of the GNU General Public License as published by *
9* the Free Software Foundation, either version 3 of the License, or *
10* (at your option) any later version. *
11* *
12* EvtGen is distributed in the hope that it will be useful, *
13* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15* GNU General Public License for more details. *
16* *
17* You should have received a copy of the GNU General Public License *
18* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19***********************************************************************/
20
21#ifndef EVTDIRACSPINOR_HH
22#define EVTDIRACSPINOR_HH
23
27
28class EvtTensor4C;
29class EvtVector4C;
30class EvtDiracSpinor;
31
32class EvtDiracSpinor final {
33 friend EvtDiracSpinor rotateEuler( const EvtDiracSpinor& sp, double alpha,
34 double beta, double gamma );
35 friend EvtDiracSpinor boostTo( const EvtDiracSpinor& sp,
36 const EvtVector4R p4 );
37 friend EvtDiracSpinor boostTo( const EvtDiracSpinor& sp,
38 const EvtVector3R boost );
40 const EvtDiracSpinor& dp );
42 const EvtDiracSpinor& dp );
44 const EvtDiracSpinor& dp );
46 const EvtDiracSpinor& dp );
48 const EvtDiracSpinor& dp );
50 const EvtDiracSpinor& dp );
51 friend EvtDiracSpinor operator+( const EvtDiracSpinor& u1,
52 const EvtDiracSpinor& u2 );
53 friend EvtDiracSpinor operator-( const EvtDiracSpinor& u1,
54 const EvtDiracSpinor& u2 );
55 friend EvtDiracSpinor operator*( const EvtComplex& c,
56 const EvtDiracSpinor& d );
57
58 friend EvtComplex operator*( const EvtDiracSpinor& d,
59 const EvtDiracSpinor& dp );
60
61 friend std::ostream& operator<<( std::ostream& s, const EvtDiracSpinor& c );
62
63 public:
64 inline EvtDiracSpinor();
65 EvtDiracSpinor( const EvtComplex& sp0, const EvtComplex& sp1,
66 const EvtComplex& sp2, const EvtComplex& sp3 );
67 inline EvtDiracSpinor( const EvtDiracSpinor& dspinor );
68 inline EvtDiracSpinor& operator=( const EvtDiracSpinor& dspinor );
69
70 inline EvtDiracSpinor& operator+=( const EvtDiracSpinor& u2 );
71 inline EvtDiracSpinor& operator-=( const EvtDiracSpinor& u2 );
72
73 void set( const EvtComplex& sp0, const EvtComplex& sp1,
74 const EvtComplex& sp2, const EvtComplex& sp3 );
75 void set_spinor( int i, const EvtComplex& sp );
76 const EvtComplex& get_spinor( int i ) const;
77 EvtDiracSpinor conj() const;
78 void applyRotateEuler( double alpha, double beta, double gamma );
79 void applyBoostTo( const EvtVector4R& p4 );
80 void applyBoostTo( const EvtVector3R& boost );
81 EvtDiracSpinor adjoint() const;
82
83 private:
85};
86
94
96{
97 m_spinor[0] = dspinor.m_spinor[0];
98 m_spinor[1] = dspinor.m_spinor[1];
99 m_spinor[2] = dspinor.m_spinor[2];
100 m_spinor[3] = dspinor.m_spinor[3];
101}
102
104{
105 m_spinor[0] = dspinor.m_spinor[0];
106 m_spinor[1] = dspinor.m_spinor[1];
107 m_spinor[2] = dspinor.m_spinor[2];
108 m_spinor[3] = dspinor.m_spinor[3];
109
110 return *this;
111}
112
114{
115 m_spinor[0] += u2.m_spinor[0];
116 m_spinor[1] += u2.m_spinor[1];
117 m_spinor[2] += u2.m_spinor[2];
118 m_spinor[3] += u2.m_spinor[3];
119
120 return *this;
121}
122
124 const EvtDiracSpinor& u2 )
125{
126 return EvtDiracSpinor( u1 ) += u2;
127}
128
130{
131 m_spinor[0] -= u2.m_spinor[0];
132 m_spinor[1] -= u2.m_spinor[1];
133 m_spinor[2] -= u2.m_spinor[2];
134 m_spinor[3] -= u2.m_spinor[3];
135
136 return *this;
137}
138
140 const EvtDiracSpinor& u2 )
141{
142 return EvtDiracSpinor( u1 ) -= u2;
143}
144
145#endif
EvtDiracSpinor operator+(const EvtDiracSpinor &u1, const EvtDiracSpinor &u2)
EvtDiracSpinor operator-(const EvtDiracSpinor &u1, const EvtDiracSpinor &u2)
friend EvtDiracSpinor operator*(const EvtComplex &c, const EvtDiracSpinor &d)
EvtDiracSpinor & operator+=(const EvtDiracSpinor &u2)
friend std::ostream & operator<<(std::ostream &s, const EvtDiracSpinor &c)
friend EvtVector4C EvtLeptonVACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtDiracSpinor conj() const
friend EvtTensor4C EvtLeptonTCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtComplex m_spinor[4]
friend EvtDiracSpinor operator+(const EvtDiracSpinor &u1, const EvtDiracSpinor &u2)
friend EvtVector4C EvtLeptonACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
friend EvtDiracSpinor operator-(const EvtDiracSpinor &u1, const EvtDiracSpinor &u2)
EvtDiracSpinor & operator-=(const EvtDiracSpinor &u2)
const EvtComplex & get_spinor(int i) const
void set(const EvtComplex &sp0, const EvtComplex &sp1, const EvtComplex &sp2, const EvtComplex &sp3)
EvtDiracSpinor & operator=(const EvtDiracSpinor &dspinor)
friend EvtDiracSpinor rotateEuler(const EvtDiracSpinor &sp, double alpha, double beta, double gamma)
EvtDiracSpinor adjoint() const
friend EvtComplex EvtLeptonSCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
friend EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
void applyRotateEuler(double alpha, double beta, double gamma)
void applyBoostTo(const EvtVector4R &p4)
friend EvtComplex EvtLeptonPCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
friend EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
void set_spinor(int i, const EvtComplex &sp)