evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
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 
24 #include "EvtGenBase/EvtComplex.hh"
27 
28 class EvtTensor4C;
29 class EvtVector4C;
30 class EvtDiracSpinor;
31 
32 class 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 
88 {
89  spinor[0] = EvtComplex();
90  spinor[1] = EvtComplex();
91  spinor[2] = EvtComplex();
92  spinor[3] = EvtComplex();
93 }
94 
96 {
97  spinor[0] = dspinor.spinor[0];
98  spinor[1] = dspinor.spinor[1];
99  spinor[2] = dspinor.spinor[2];
100  spinor[3] = dspinor.spinor[3];
101 }
102 
104 {
105  spinor[0] = dspinor.spinor[0];
106  spinor[1] = dspinor.spinor[1];
107  spinor[2] = dspinor.spinor[2];
108  spinor[3] = dspinor.spinor[3];
109 
110  return *this;
111 }
112 
114 {
115  spinor[0] += u2.spinor[0];
116  spinor[1] += u2.spinor[1];
117  spinor[2] += u2.spinor[2];
118  spinor[3] += u2.spinor[3];
119 
120  return *this;
121 }
122 
124  const EvtDiracSpinor& u2 )
125 {
126  return EvtDiracSpinor( u1 ) += u2;
127 }
128 
130 {
131  spinor[0] -= u2.spinor[0];
132  spinor[1] -= u2.spinor[1];
133  spinor[2] -= u2.spinor[2];
134  spinor[3] -= u2.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 adjoint() const
EvtDiracSpinor conj() const
EvtComplex spinor[4]
friend EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
friend EvtVector4C EvtLeptonVACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
void set_spinor(int i, const EvtComplex &sp)
friend EvtDiracSpinor operator-(const EvtDiracSpinor &u1, const EvtDiracSpinor &u2)
friend std::ostream & operator<<(std::ostream &s, const EvtDiracSpinor &c)
friend EvtDiracSpinor rotateEuler(const EvtDiracSpinor &sp, double alpha, double beta, double gamma)
friend EvtComplex EvtLeptonSCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
friend EvtTensor4C EvtLeptonTCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtDiracSpinor operator+(const EvtDiracSpinor &u1, const EvtDiracSpinor &u2)
EvtDiracSpinor & operator+=(const EvtDiracSpinor &u2)
friend EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
friend EvtDiracSpinor operator *(const EvtComplex &c, const EvtDiracSpinor &d)
friend EvtComplex EvtLeptonPCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
void set(const EvtComplex &sp0, const EvtComplex &sp1, const EvtComplex &sp2, const EvtComplex &sp3)
EvtDiracSpinor & operator=(const EvtDiracSpinor &dspinor)
EvtDiracSpinor & operator-=(const EvtDiracSpinor &u2)
friend EvtDiracSpinor operator+(const EvtDiracSpinor &u1, const EvtDiracSpinor &u2)
void applyBoostTo(const EvtVector4R &p4)
const EvtComplex & get_spinor(int i) const
friend EvtVector4C EvtLeptonACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
void applyRotateEuler(double alpha, double beta, double gamma)