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
EvtGenModels
EvtSVVHelCPMix.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 "
EvtGenModels/EvtSVVHelCPMix.hh
"
22
23
#include "
EvtGenBase/EvtGenKine.hh
"
24
#include "
EvtGenBase/EvtId.hh
"
25
#include "
EvtGenBase/EvtPDL.hh
"
26
#include "
EvtGenBase/EvtParticle.hh
"
27
#include "
EvtGenBase/EvtReport.hh
"
28
#include "
EvtGenBase/EvtTensor3C.hh
"
29
#include "
EvtGenBase/EvtTensor4C.hh
"
30
#include "
EvtGenBase/EvtVector3C.hh
"
31
#include "
EvtGenBase/EvtVector3R.hh
"
32
#include "
EvtGenBase/EvtVector4C.hh
"
33
34
#include <ctype.h>
35
#include <fstream>
36
#include <iostream>
37
#include <stdlib.h>
38
#include <string>
39
40
std::string
EvtSVVHelCPMix::getName
()
const
41
{
42
return
"SVVHELCPMIX"
;
43
}
44
45
EvtDecayBase
*
EvtSVVHelCPMix::clone
()
const
46
{
47
return
new
EvtSVVHelCPMix
;
48
}
49
50
void
EvtSVVHelCPMix::init
()
51
{
52
// check that there are 12 arguments
53
checkNArg
( 12 );
54
checkNDaug
( 2 );
55
56
checkSpinParent
(
EvtSpinType::SCALAR
);
57
58
checkSpinDaughter
( 0,
EvtSpinType::VECTOR
);
59
checkSpinDaughter
( 1,
EvtSpinType::VECTOR
);
60
61
m_hp
=
EvtComplex
(
getArg
( 0 ) * cos(
getArg
( 1 ) ),
62
getArg
( 0 ) * sin(
getArg
( 1 ) ) );
63
m_h0
=
EvtComplex
(
getArg
( 2 ) * cos(
getArg
( 3 ) ),
64
getArg
( 2 ) * sin(
getArg
( 3 ) ) );
65
m_hm
=
EvtComplex
(
getArg
( 4 ) * cos(
getArg
( 5 ) ),
66
getArg
( 4 ) * sin(
getArg
( 5 ) ) );
67
m_averageM
=
getArg
( 6 );
68
m_deltaM
=
getArg
( 7 );
69
m_gamma
=
getArg
( 8 );
70
m_deltagamma
=
getArg
( 9 );
71
m_weakmixingphase
=
EvtComplex
( cos(
getArg
( 10 ) ), sin(
getArg
( 10 ) ) );
72
m_weakdirectphase
=
EvtComplex
( cos(
getArg
( 11 ) ), sin(
getArg
( 11 ) ) );
73
}
74
75
void
EvtSVVHelCPMix::initProbMax
()
76
{
77
setProbMax
(
getArg
( 0 ) *
getArg
( 0 ) +
getArg
( 2 ) *
getArg
( 2 ) +
78
getArg
( 4 ) *
getArg
( 4 ) );
79
}
80
81
void
EvtSVVHelCPMix::decay
(
EvtParticle
* p )
82
{
83
EvtParticle
* parent = p;
84
EvtAmp
& amp =
m_amp2
;
85
EvtId
n_v1 =
getDaug
( 0 );
86
EvtId
n_v2 =
getDaug
( 1 );
87
88
// Routine to decay a vector into a vector and scalar. Started
89
// by ryd on Oct 17, 1996.
90
// Modified by J.Catmore to take account of CP-violation and mixing
91
92
int
tndaug = 2;
93
EvtId
tdaug[2];
94
EvtId
Bs =
EvtPDL::getId
(
"B_s0"
);
95
EvtId
antiBs =
EvtPDL::getId
(
"anti-B_s0"
);
96
tdaug[0] = n_v1;
97
tdaug[1] = n_v2;
98
99
// Phase space and kinematics
100
101
parent->
initializePhaseSpace
( tndaug, tdaug );
102
103
EvtParticle
*v1, *v2;
104
v1 = parent->
getDaug
( 0 );
105
v2 = parent->
getDaug
( 1 );
106
107
EvtVector4R
momv1 = v1->
getP4
();
108
109
EvtVector3R
v1dir( momv1.
get
( 1 ), momv1.
get
( 2 ), momv1.
get
( 3 ) );
110
v1dir = v1dir / v1dir.
d3mag
();
111
112
// Definition of quantities used in construction of complex amplitudes:
113
114
EvtTensor3C
M;
// Tensor as defined in EvtGen manual, equ 117
115
EvtComplex
a, b,
116
c;
// Helicity amplitudes; EvtGen manual eqns 126-128, also see Phys Lett B 369 p144-150 eqn 15
117
//EvtComplex deltamu = EvtComplex(m_deltaM, -0.5*m_deltagamma); // See Phys Rev D 34 p1404
118
119
// conversion from times in mm/c to natural units [GeV]^-1
120
double
t = ( ( parent->
getLifetime
() ) / 2.998e11 ) * 6.58e-25;
121
122
// The following two quantities defined in Phys Rev D 34 p1404
123
EvtComplex
fplus =
124
EvtComplex
( cos(
m_averageM
* t ), -1. * sin(
m_averageM
* t ) ) *
125
exp
( -(
m_gamma
/ 2.0 ) * t ) *
126
( cos( 0.5 *
m_deltaM
* t ) * cosh( 0.25 *
m_deltagamma
* t ) +
127
EvtComplex
( 0.0, sin( 0.5 *
m_deltaM
* t ) *
128
sinh( 0.25 *
m_deltagamma
* t ) ) );
129
EvtComplex
fminus =
130
EvtComplex
( cos(
m_averageM
* t ), -1. * sin(
m_averageM
* t ) ) *
131
exp
( -(
m_gamma
/ 2.0 ) * t ) *
EvtComplex
( 0.0, 1.0 ) *
132
( sin( 0.5 *
m_deltaM
* t ) * cosh( 0.25 *
m_deltagamma
* t ) -
133
EvtComplex
( 0.0, 1.0 ) * sinh( 0.25 *
m_deltagamma
* t ) *
134
cos( 0.5 *
m_deltaM
* t ) );
135
136
// See EvtGen manual pp 106-107
137
138
a = -0.5 * (
m_hp
+
m_hm
);
139
b =
EvtComplex
( 0.0, 0.5 ) * (
m_hp
-
m_hm
);
140
c = (
m_h0
+ 0.5 * (
m_hp
+
m_hm
) );
141
142
M = a *
EvtTensor3C::id
() + b *
EvtGenFunctions::eps
( v1dir ) +
143
c *
EvtGenFunctions::directProd
( v1dir, v1dir );
144
145
EvtVector3C
t0 = M.
cont1
( v1->
eps
( 0 ).
vec
().
conj
() );
146
EvtVector3C
t1 = M.
cont1
( v1->
eps
( 1 ).
vec
().
conj
() );
147
EvtVector3C
t2 = M.
cont1
( v1->
eps
( 2 ).
vec
().
conj
() );
148
149
EvtVector3C
eps0 = v2->
eps
( 0 ).
vec
().
conj
();
150
EvtVector3C
eps1 = v2->
eps
( 1 ).
vec
().
conj
();
151
EvtVector3C
eps2 = v2->
eps
( 2 ).
vec
().
conj
();
152
153
// We need two sets of equations, one for mesons which were in the Bs state at t=0, and another
154
// for those which were in the antiBs state. Each equation consists of a sum of amplitudes - mod-squaring gives the interference terms.
155
156
EvtComplex
amplSum00, amplSum01, amplSum02;
157
EvtComplex
amplSum10, amplSum11, amplSum12;
158
EvtComplex
amplSum20, amplSum21, amplSum22;
159
160
// First the Bs state:
161
162
if
( parent->
getId
() == Bs ) {
163
amplSum00 = ( fplus *
m_weakdirectphase
* t0 * eps0 ) +
164
( fminus * ( 1.0 /
m_weakdirectphase
) *
m_weakmixingphase
*
165
t0 * eps0 );
166
amplSum01 = ( fplus *
m_weakdirectphase
* t0 * eps1 ) +
167
( fminus * ( 1.0 /
m_weakdirectphase
) *
m_weakmixingphase
*
168
t0 * eps1 );
169
amplSum02 = ( fplus *
m_weakdirectphase
* t0 * eps2 ) +
170
( fminus * ( 1.0 /
m_weakdirectphase
) *
m_weakmixingphase
*
171
t0 * eps2 );
172
173
amplSum10 = ( fplus *
m_weakdirectphase
* t1 * eps0 ) +
174
( fminus * ( 1.0 /
m_weakdirectphase
) *
m_weakmixingphase
*
175
t1 * eps0 );
176
amplSum11 = ( fplus *
m_weakdirectphase
* t1 * eps1 ) +
177
( fminus * ( 1.0 /
m_weakdirectphase
) *
m_weakmixingphase
*
178
t1 * eps1 );
179
amplSum12 = ( fplus *
m_weakdirectphase
* t1 * eps2 ) +
180
( fminus * ( 1.0 /
m_weakdirectphase
) *
m_weakmixingphase
*
181
t1 * eps2 );
182
183
amplSum20 = ( fplus *
m_weakdirectphase
* t2 * eps0 ) +
184
( fminus * ( 1.0 /
m_weakdirectphase
) *
m_weakmixingphase
*
185
t2 * eps0 );
186
amplSum21 = ( fplus *
m_weakdirectphase
* t2 * eps1 ) +
187
( fminus * ( 1.0 /
m_weakdirectphase
) *
m_weakmixingphase
*
188
t2 * eps1 );
189
amplSum22 = ( fplus *
m_weakdirectphase
* t2 * eps2 ) +
190
( fminus * ( 1.0 /
m_weakdirectphase
) *
m_weakmixingphase
*
191
t2 * eps2 );
192
}
193
194
// Now the anti-Bs state:
195
196
if
( parent->
getId
() == antiBs ) {
197
amplSum00 = ( fminus *
m_weakdirectphase
* ( 1.0 /
m_weakmixingphase
) *
198
t0 * eps0 ) +
199
( fplus * ( 1.0 /
m_weakdirectphase
) * t0 * eps0 );
200
amplSum01 = ( fminus *
m_weakdirectphase
* ( 1.0 /
m_weakmixingphase
) *
201
t0 * eps1 ) +
202
( fplus * ( 1.0 /
m_weakdirectphase
) * t0 * eps1 );
203
amplSum02 = ( fminus *
m_weakdirectphase
* ( 1.0 /
m_weakmixingphase
) *
204
t0 * eps2 ) +
205
( fplus * ( 1.0 /
m_weakdirectphase
) * t0 * eps2 );
206
207
amplSum10 = ( fminus *
m_weakdirectphase
* ( 1.0 /
m_weakmixingphase
) *
208
t1 * eps0 ) +
209
( fplus * ( 1.0 /
m_weakdirectphase
) * t1 * eps0 );
210
amplSum11 = ( fminus *
m_weakdirectphase
* ( 1.0 /
m_weakmixingphase
) *
211
t1 * eps1 ) +
212
( fplus * ( 1.0 /
m_weakdirectphase
) * t1 * eps1 );
213
amplSum12 = ( fminus *
m_weakdirectphase
* ( 1.0 /
m_weakmixingphase
) *
214
t1 * eps2 ) +
215
( fplus * ( 1.0 /
m_weakdirectphase
) * t1 * eps2 );
216
217
amplSum20 = ( fminus *
m_weakdirectphase
* ( 1.0 /
m_weakmixingphase
) *
218
t2 * eps0 ) +
219
( fplus * ( 1.0 /
m_weakdirectphase
) * t2 * eps0 );
220
amplSum21 = ( fminus *
m_weakdirectphase
* ( 1.0 /
m_weakmixingphase
) *
221
t2 * eps1 ) +
222
( fplus * ( 1.0 /
m_weakdirectphase
) * t2 * eps1 );
223
amplSum22 = ( fminus *
m_weakdirectphase
* ( 1.0 /
m_weakmixingphase
) *
224
t2 * eps2 ) +
225
( fplus * ( 1.0 /
m_weakdirectphase
) * t2 * eps2 );
226
}
227
228
// Now set the amplitudes
229
amp.
vertex
( 0, 0, amplSum00 );
230
amp.
vertex
( 0, 1, amplSum01 );
231
amp.
vertex
( 0, 2, amplSum02 );
232
233
amp.
vertex
( 1, 0, amplSum10 );
234
amp.
vertex
( 1, 1, amplSum11 );
235
amp.
vertex
( 1, 2, amplSum12 );
236
237
amp.
vertex
( 2, 0, amplSum20 );
238
amp.
vertex
( 2, 1, amplSum21 );
239
amp.
vertex
( 2, 2, amplSum22 );
240
241
return
;
242
}
243
244
std::string
EvtSVVHelCPMix::getParamName
(
int
i )
245
{
246
switch
( i ) {
247
case
0:
248
return
"plusHelAmp"
;
249
case
1:
250
return
"plusHelAmpPhase"
;
251
case
2:
252
return
"zeroHelAmp"
;
253
case
3:
254
return
"zeroHelAmpPhase"
;
255
case
4:
256
return
"minusHelAmp"
;
257
case
5:
258
return
"minusHelAmpPhase"
;
259
case
6:
260
return
"averageM"
;
261
case
7:
262
return
"deltaM"
;
263
case
8:
264
return
"gamma"
;
265
case
9:
266
return
"deltaGamma"
;
267
case
10:
268
return
"weakMixPhase"
;
269
case
11:
270
return
"weakDirectPhase"
;
271
default
:
272
return
""
;
273
}
274
}
275
276
std::string
EvtSVVHelCPMix::getParamDefault
(
int
i )
277
{
278
switch
( i ) {
279
case
0:
280
return
"1.0"
;
281
case
1:
282
return
"0.0"
;
283
case
2:
284
return
"1.0"
;
285
case
3:
286
return
"0.0"
;
287
case
4:
288
return
"1.0"
;
289
case
5:
290
return
"0.0"
;
291
default
:
292
return
""
;
293
}
294
}
exp
EvtComplex exp(const EvtComplex &c)
Definition
EvtComplex.hh:242
EvtGenKine.hh
EvtId.hh
EvtPDL.hh
EvtParticle.hh
EvtReport.hh
EvtSVVHelCPMix.hh
EvtTensor3C.hh
EvtTensor4C.hh
EvtVector3C.hh
EvtVector3R.hh
EvtVector4C.hh
EvtAmp
Definition
EvtAmp.hh:29
EvtAmp::vertex
void vertex(const EvtComplex &)
Definition
EvtAmp.cpp:453
EvtComplex
Definition
EvtComplex.hh:29
EvtDecayAmp::m_amp2
EvtAmp m_amp2
Definition
EvtDecayAmp.hh:73
EvtDecayBase::checkSpinDaughter
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
Definition
EvtDecayBase.cpp:547
EvtDecayBase::EvtDecayBase
EvtDecayBase()=default
EvtDecayBase::checkSpinParent
void checkSpinParent(EvtSpinType::spintype sp)
Definition
EvtDecayBase.cpp:534
EvtDecayBase::getArg
double getArg(unsigned int j)
Definition
EvtDecayBase.cpp:578
EvtDecayBase::setProbMax
void setProbMax(double prbmx)
Definition
EvtDecayBase.cpp:295
EvtDecayBase::getDaug
EvtId getDaug(int i) const
Definition
EvtDecayBase.hh:66
EvtDecayBase::checkNDaug
void checkNDaug(int d1, int d2=-1)
Definition
EvtDecayBase.cpp:516
EvtDecayBase::checkNArg
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
Definition
EvtDecayBase.cpp:492
EvtId
Definition
EvtId.hh:27
EvtPDL::getId
static EvtId getId(const std::string &name)
Definition
EvtPDL.cpp:283
EvtParticle
Definition
EvtParticle.hh:45
EvtParticle::initializePhaseSpace
double initializePhaseSpace(size_t numdaughter, const EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
Definition
EvtParticle.cpp:1100
EvtParticle::getId
EvtId getId() const
Definition
EvtParticle.cpp:124
EvtParticle::getP4
const EvtVector4R & getP4() const
Definition
EvtParticle.cpp:144
EvtParticle::getDaug
EvtParticle * getDaug(const int i)
Definition
EvtParticle.hh:173
EvtParticle::getLifetime
double getLifetime() const
Definition
EvtParticle.cpp:107
EvtParticle::eps
virtual EvtVector4C eps(int i) const
Definition
EvtParticle.cpp:623
EvtSVVHelCPMix
Definition
EvtSVVHelCPMix.hh:50
EvtSVVHelCPMix::m_weakmixingphase
EvtComplex m_weakmixingphase
Definition
EvtSVVHelCPMix.hh:74
EvtSVVHelCPMix::decay
void decay(EvtParticle *p) override
Definition
EvtSVVHelCPMix.cpp:81
EvtSVVHelCPMix::m_h0
EvtComplex m_h0
Definition
EvtSVVHelCPMix.hh:66
EvtSVVHelCPMix::m_deltaM
double m_deltaM
Definition
EvtSVVHelCPMix.hh:69
EvtSVVHelCPMix::getParamDefault
std::string getParamDefault(int i) override
Definition
EvtSVVHelCPMix.cpp:276
EvtSVVHelCPMix::m_weakdirectphase
EvtComplex m_weakdirectphase
Definition
EvtSVVHelCPMix.hh:75
EvtSVVHelCPMix::getName
std::string getName() const override
Definition
EvtSVVHelCPMix.cpp:40
EvtSVVHelCPMix::m_averageM
double m_averageM
Definition
EvtSVVHelCPMix.hh:68
EvtSVVHelCPMix::getParamName
std::string getParamName(int i) override
Definition
EvtSVVHelCPMix.cpp:244
EvtSVVHelCPMix::m_hp
EvtComplex m_hp
Definition
EvtSVVHelCPMix.hh:65
EvtSVVHelCPMix::clone
EvtDecayBase * clone() const override
Definition
EvtSVVHelCPMix.cpp:45
EvtSVVHelCPMix::init
void init() override
Definition
EvtSVVHelCPMix.cpp:50
EvtSVVHelCPMix::m_gamma
double m_gamma
Definition
EvtSVVHelCPMix.hh:70
EvtSVVHelCPMix::m_deltagamma
double m_deltagamma
Definition
EvtSVVHelCPMix.hh:71
EvtSVVHelCPMix::m_hm
EvtComplex m_hm
Definition
EvtSVVHelCPMix.hh:67
EvtSVVHelCPMix::initProbMax
void initProbMax() override
Definition
EvtSVVHelCPMix.cpp:75
EvtSpinType::SCALAR
@ SCALAR
Definition
EvtSpinType.hh:30
EvtSpinType::VECTOR
@ VECTOR
Definition
EvtSpinType.hh:31
EvtTensor3C
Definition
EvtTensor3C.hh:42
EvtTensor3C::cont1
EvtVector3C cont1(const EvtVector3C &v) const
Definition
EvtTensor3C.cpp:246
EvtTensor3C::id
static const EvtTensor3C & id()
Definition
EvtTensor3C.cpp:322
EvtVector3C
Definition
EvtVector3C.hh:29
EvtVector3C::conj
EvtVector3C conj() const
Definition
EvtVector3C.hh:178
EvtVector3R
Definition
EvtVector3R.hh:26
EvtVector3R::d3mag
double d3mag() const
Definition
EvtVector3R.cpp:87
EvtVector4C::vec
EvtVector3C vec() const
Definition
EvtVector4C.hh:103
EvtVector4R
Definition
EvtVector4R.hh:29
EvtVector4R::get
double get(int i) const
Definition
EvtVector4R.hh:163
EvtGenFunctions::eps
EvtTensor3C eps(const EvtVector3R &v)
Definition
EvtTensor3C.cpp:302
EvtGenFunctions::directProd
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)
Definition
EvtTensor3C.cpp:153
Generated by
1.17.0