EvtGen
2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Toggle main menu visibility
Loading...
Searching...
No Matches
src
EvtGenBase
EvtTensorParticle.cpp
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
#include "
EvtGenBase/EvtTensorParticle.hh
"
22
23
#include "
EvtGenBase/EvtComplex.hh
"
24
#include "
EvtGenBase/EvtReport.hh
"
25
#include "
EvtGenBase/EvtTensor4C.hh
"
26
#include "
EvtGenBase/EvtVector4C.hh
"
27
#include "
EvtGenBase/EvtVector4R.hh
"
28
29
#include <cassert>
30
#include <iostream>
31
#include <math.h>
32
#include <stdlib.h>
33
34
void
EvtTensorParticle::init
(
EvtId
part_n,
const
EvtVector4R
& p4 )
35
{
36
init
( part_n, p4.
get
( 0 ), p4.
get
( 1 ), p4.
get
( 2 ), p4.
get
( 3 ) );
37
38
setLifetime
();
39
}
40
41
void
EvtTensorParticle::init
(
EvtId
part_n,
double
e,
double
px,
double
py,
42
double
pz )
43
{
44
m_validP4
=
true
;
45
setp
( e, px, py, pz );
46
setpart_num
( part_n );
47
48
m_eps
[0].setdiag( 0.0, -1.0 / sqrt( 6.0 ), -1.0 / sqrt( 6.0 ),
49
2.0 / sqrt( 6.0 ) );
50
m_eps
[1].setdiag( 0.0, 1.0 / sqrt( 2.0 ), -1.0 / sqrt( 2.0 ), 0.0 );
51
m_eps
[2].setdiag( 0.0, 0.0, 0.0, 0.0 );
52
m_eps
[3].setdiag( 0.0, 0.0, 0.0, 0.0 );
53
m_eps
[4].setdiag( 0.0, 0.0, 0.0, 0.0 );
54
55
m_eps
[2].set( 1, 2,
EvtComplex
( 1.0 / sqrt( 2.0 ), 0.0 ) );
56
m_eps
[2].set( 2, 1,
EvtComplex
( 1.0 / sqrt( 2.0 ), 0.0 ) );
57
m_eps
[3].set( 1, 3,
EvtComplex
( 1.0 / sqrt( 2.0 ), 0.0 ) );
58
m_eps
[3].set( 3, 1,
EvtComplex
( 1.0 / sqrt( 2.0 ), 0.0 ) );
59
m_eps
[4].set( 2, 3,
EvtComplex
( 1.0 / sqrt( 2.0 ), 0.0 ) );
60
m_eps
[4].set( 3, 2,
EvtComplex
( 1.0 / sqrt( 2.0 ), 0.0 ) );
61
62
setLifetime
();
63
}
64
65
void
EvtTensorParticle::init
(
EvtId
part_n,
const
EvtVector4R
& p4,
66
const
EvtTensor4C
& epsin1,
67
const
EvtTensor4C
& epsin2,
68
const
EvtTensor4C
& epsin3,
69
const
EvtTensor4C
& epsin4,
70
const
EvtTensor4C
& epsin5 )
71
{
72
m_validP4
=
true
;
73
setp
( p4 );
74
setpart_num
( part_n );
75
76
m_eps
[0] = epsin1;
77
m_eps
[1] = epsin2;
78
m_eps
[2] = epsin3;
79
m_eps
[3] = epsin4;
80
m_eps
[4] = epsin5;
81
82
setLifetime
();
83
}
84
85
EvtTensor4C
EvtTensorParticle::epsTensorParent
(
int
i )
const
86
{
87
assert( i >= 0 &&
static_cast<
std::size_t
>
( i ) <
m_eps
.size() );
88
89
return
boostTo
(
m_eps
[i], this->
getP4
() );
90
}
91
92
EvtTensor4C
EvtTensorParticle::epsTensor
(
int
i )
const
93
{
94
assert( i >= 0 &&
static_cast<
std::size_t
>
( i ) <
m_eps
.size() );
95
return
m_eps
[i];
96
}
97
98
EvtSpinDensity
EvtTensorParticle::rotateToHelicityBasis
()
const
99
{
100
static
const
EvtVector4C
eplus( 0.0, -1.0 / sqrt( 2.0 ),
101
EvtComplex
( 0.0, -1.0 / sqrt( 2.0 ) ), 0.0 );
102
static
const
EvtVector4C
ezero( 0.0, 0.0, 0.0, 1.0 );
103
static
const
EvtVector4C
eminus( 0.0, 1.0 / sqrt( 2.0 ),
104
EvtComplex
( 0.0, -1.0 / sqrt( 2.0 ) ), 0.0 );
105
106
static
const
EvtTensor4C
dPpp(
EvtGenFunctions::directProd
( eplus, eplus ) );
107
static
const
EvtTensor4C
dPp0(
EvtGenFunctions::directProd
( eplus, ezero ) );
108
static
const
EvtTensor4C
dP0p(
EvtGenFunctions::directProd
( ezero, eplus ) );
109
static
const
EvtTensor4C
dPpm(
EvtGenFunctions::directProd
( eplus, eminus ) );
110
static
const
EvtTensor4C
dP00(
EvtGenFunctions::directProd
( ezero, ezero ) );
111
static
const
EvtTensor4C
dPmp(
EvtGenFunctions::directProd
( eminus, eplus ) );
112
static
const
EvtTensor4C
dPmm(
EvtGenFunctions::directProd
( eminus, eminus ) );
113
static
const
EvtTensor4C
dPm0(
EvtGenFunctions::directProd
( eminus, ezero ) );
114
static
const
EvtTensor4C
dP0m(
EvtGenFunctions::directProd
( ezero, eminus ) );
115
116
static
const
EvtTensor4C
es0(
conj
( dPpp ) );
117
static
const
EvtTensor4C
es1(
118
conj
( ( 1 / sqrt( 2.0 ) ) * dPp0 + ( 1 / sqrt( 2.0 ) ) * dP0p ) );
119
static
const
EvtTensor4C
es2(
conj
( ( 1 / sqrt( 6.0 ) ) * dPpm +
120
( 2 / sqrt( 6.0 ) ) * dP00 +
121
( 1 / sqrt( 6.0 ) ) * dPmp ) );
122
static
const
EvtTensor4C
es3(
123
conj
( ( 1 / sqrt( 2.0 ) ) * dPm0 + ( 1 / sqrt( 2.0 ) ) * dP0m ) );
124
static
const
EvtTensor4C
es4(
conj
( dPmm ) );
125
126
EvtSpinDensity
R;
127
R.
setDim
( 5 );
128
129
for
(
int
j = 0; j < 5; j++ ) {
130
R.
set
( 0, j,
cont
( es0,
m_eps
[j] ) );
131
R.
set
( 1, j,
cont
( es1,
m_eps
[j] ) );
132
R.
set
( 2, j,
cont
( es2,
m_eps
[j] ) );
133
R.
set
( 3, j,
cont
( es3,
m_eps
[j] ) );
134
R.
set
( 4, j,
cont
( es4,
m_eps
[j] ) );
135
}
136
return
R;
137
}
138
139
EvtSpinDensity
EvtTensorParticle::rotateToHelicityBasis
(
double
alpha,
140
double
beta,
141
double
gamma )
const
142
{
143
EvtTensor4C
es[5];
144
145
EvtVector4C
eplus( 0.0, -1.0 / sqrt( 2.0 ),
146
EvtComplex
( 0.0, -1.0 / sqrt( 2.0 ) ), 0.0 );
147
EvtVector4C
ezero( 0.0, 0.0, 0.0, 1.0 );
148
EvtVector4C
eminus( 0.0, 1.0 / sqrt( 2.0 ),
149
EvtComplex
( 0.0, -1.0 / sqrt( 2.0 ) ), 0.0 );
150
151
eplus.
applyRotateEuler
( alpha, beta, gamma );
152
ezero.
applyRotateEuler
( alpha, beta, gamma );
153
eminus.
applyRotateEuler
( alpha, beta, gamma );
154
155
for
(
int
i = 0; i < 5; i++ )
156
es[i].zero();
157
158
es[0] =
EvtGenFunctions::directProd
( eplus, eplus );
159
es[1] = ( 1 / sqrt( 2.0 ) ) *
EvtGenFunctions::directProd
( eplus, ezero ) +
160
( 1 / sqrt( 2.0 ) ) *
EvtGenFunctions::directProd
( ezero, eplus );
161
es[2] = ( 1 / sqrt( 6.0 ) ) *
EvtGenFunctions::directProd
( eplus, eminus ) +
162
( 2 / sqrt( 6.0 ) ) *
EvtGenFunctions::directProd
( ezero, ezero ) +
163
( 1 / sqrt( 6.0 ) ) *
EvtGenFunctions::directProd
( eminus, eplus );
164
es[3] = ( 1 / sqrt( 2.0 ) ) *
EvtGenFunctions::directProd
( eminus, ezero ) +
165
( 1 / sqrt( 2.0 ) ) *
EvtGenFunctions::directProd
( ezero, eminus );
166
es[4] =
EvtGenFunctions::directProd
( eminus, eminus );
167
168
for
(
int
i = 0; i < 5; i++ )
169
es[i] =
conj
( es[i] );
170
171
EvtSpinDensity
R;
172
R.
setDim
( 5 );
173
174
for
(
int
i = 0; i < 5; i++ )
175
for
(
int
j = 0; j < 5; j++ )
176
R.
set
( i, j,
cont
( es[i],
m_eps
[j] ) );
177
178
return
R;
179
}
EvtComplex.hh
conj
EvtComplex conj(const EvtComplex &c)
Definition
EvtComplex.hh:198
boostTo
EvtRaritaSchwinger boostTo(const EvtRaritaSchwinger &rs, const EvtVector4R p4)
Definition
EvtRaritaSchwinger.cpp:34
EvtReport.hh
cont
EvtComplex cont(const EvtTensor4C &t1, const EvtTensor4C &t2)
Definition
EvtTensor4C.cpp:290
EvtTensor4C.hh
EvtTensorParticle.hh
EvtVector4C.hh
EvtVector4R.hh
EvtComplex
Definition
EvtComplex.hh:29
EvtId
Definition
EvtId.hh:27
EvtParticle::setLifetime
void setLifetime()
Definition
EvtParticle.cpp:100
EvtParticle::getP4
const EvtVector4R & getP4() const
Definition
EvtParticle.cpp:144
EvtParticle::m_validP4
bool m_validP4
Definition
EvtParticle.hh:460
EvtParticle::setp
void setp(double e, double px, double py, double pz)
Definition
EvtParticle.hh:442
EvtParticle::setpart_num
void setpart_num(EvtId particle_number)
Definition
EvtParticle.hh:454
EvtSpinDensity
Definition
EvtSpinDensity.hh:28
EvtSpinDensity::setDim
void setDim(int n)
Definition
EvtSpinDensity.cpp:79
EvtSpinDensity::set
void set(int i, int j, const EvtComplex &rhoij)
Definition
EvtSpinDensity.cpp:106
EvtTensor4C
Definition
EvtTensor4C.hh:38
EvtTensorParticle::rotateToHelicityBasis
EvtSpinDensity rotateToHelicityBasis() const override
Definition
EvtTensorParticle.cpp:98
EvtTensorParticle::epsTensorParent
EvtTensor4C epsTensorParent(int i) const override
Definition
EvtTensorParticle.cpp:85
EvtTensorParticle::epsTensor
EvtTensor4C epsTensor(int i) const override
Definition
EvtTensorParticle.cpp:92
EvtTensorParticle::init
void init(EvtId part_n, double e, double px, double py, double pz)
Definition
EvtTensorParticle.cpp:41
EvtTensorParticle::m_eps
std::array< EvtTensor4C, 5 > m_eps
Definition
EvtTensorParticle.hh:47
EvtVector4C
Definition
EvtVector4C.hh:30
EvtVector4C::applyRotateEuler
void applyRotateEuler(double alpha, double beta, double gamma)
Definition
EvtVector4C.cpp:128
EvtVector4R
Definition
EvtVector4R.hh:29
EvtVector4R::get
double get(int i) const
Definition
EvtVector4R.hh:163
EvtGenFunctions::directProd
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)
Definition
EvtTensor3C.cpp:153
Generated by
1.17.0