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
EvtKStopizmumu.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/EvtKStopizmumu.hh
"
22
23
#include "
EvtGenBase/EvtConst.hh
"
24
#include "
EvtGenBase/EvtDiracSpinor.hh
"
25
#include "
EvtGenBase/EvtGenKine.hh
"
26
#include "
EvtGenBase/EvtPDL.hh
"
27
#include "
EvtGenBase/EvtParticle.hh
"
28
#include "
EvtGenBase/EvtReport.hh
"
29
#include "
EvtGenBase/EvtVector3R.hh
"
30
#include "
EvtGenBase/EvtVector4C.hh
"
31
#include "
EvtGenBase/EvtVector4R.hh
"
32
33
void
EvtKStopizmumu::init
()
34
{
35
// 5 arguments
36
checkNArg
( 5 );
37
38
// Only 3 daughters
39
checkNDaug
( 3 );
40
41
// Spin-0 parent
42
checkSpinParent
(
EvtSpinType::SCALAR
);
43
44
// Spin-0 daughters
45
checkSpinDaughter
( 0,
EvtSpinType::SCALAR
);
46
checkSpinDaughter
( 1,
EvtSpinType::DIRAC
);
47
checkSpinDaughter
( 2,
EvtSpinType::DIRAC
);
48
49
// KS parent
50
const
EvtId
p =
getParentId
();
51
52
if
( p !=
EvtPDL::getId
(
"K_S0"
) ) {
53
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
54
<<
"EvtKStopizmumu: Parent must be K_S0"
<< std::endl;
55
assert( 0 );
56
}
57
58
// Daughter types and ordering
59
const
EvtId
d1 =
getDaug
( 0 );
60
const
EvtId
d2 =
getDaug
( 1 );
61
const
EvtId
d3 =
getDaug
( 2 );
62
63
if
( !( d1 ==
EvtPDL::getId
(
"pi0"
) && d2 ==
EvtPDL::getId
(
"mu+"
) &&
64
d3 ==
EvtPDL::getId
(
"mu-"
) ) ) {
65
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
66
<<
"EvtKStopizmumu: Daughter sequence should be pi0, mu+, mu-"
67
<< std::endl;
68
assert( 0 );
69
}
70
}
71
72
void
EvtKStopizmumu::decay
(
EvtParticle
* p )
73
{
74
const
double
Mpiz =
EvtPDL::getMass
(
EvtPDL::getId
(
"pi0"
) );
75
const
double
MKS =
EvtPDL::getMass
(
EvtPDL::getId
(
"K_S0"
) );
76
const
double
MKS_Sq = MKS * MKS;
77
const
double
rpisq = Mpiz * Mpiz / MKS_Sq;
78
const
double
z0 = 1.0 / 3.0 + rpisq;
79
80
// Generate 4-vectors in phase space
81
p->
initializePhaseSpace
(
getNDaug
(),
getDaugs
() );
82
83
// Daughter momenta
84
const
EvtVector4R
p4piz = p->
getDaug
( 0 )->
getP4
();
85
86
// Input parameters
87
const
double
as =
getArg
( 0 );
88
// bs value from G8/30GF in here: http://arxiv.org/pdf/hep-ph/0404136.pdf would be 0.017
89
const
double
bs =
getArg
( 1 );
90
const
double
b2 =
getArg
( 2 ) * 1e-8;
91
const
double
d2 =
getArg
( 3 ) * 1e-8;
92
const
double
rvsq =
getArg
( 4 );
93
const
double
GF =
EvtConst::Fermi
;
94
const
double
alpha_s = 4.0 * b2 / 3.0;
95
const
double
beta_s = -8.0 * d2 / 3.0;
96
97
// Calculate p4KS momentum
98
EvtVector4R
p4KS( MKS, 0.0, 0.0, 0.0 );
99
100
const
EvtVector4R
q = p4KS - p4piz;
101
102
const
double
z = ( q.
get
( 0 ) * q.
get
( 0 ) - q.
get
( 1 ) * q.
get
( 1 ) -
103
q.
get
( 2 ) * q.
get
( 2 ) - q.
get
( 3 ) * q.
get
( 3 ) ) /
104
MKS_Sq;
105
106
// Calculate line shape
107
const
EvtComplex
line_shape = GF * MKS_Sq *
Wpol_z
( z, as, bs ) +
108
Wpipi_z
( z, alpha_s, beta_s, rvsq, rpisq, z0 );
109
110
// Calculate spin
111
const
EvtVector4R
mom_sum = p4KS + p4piz;
112
113
EvtVector4C
l11, l12, l21, l22;
114
115
l11 =
EvtLeptonVCurrent
( p->
getDaug
( 1 )->
spParent
( 0 ),
116
p->
getDaug
( 2 )->
spParent
( 0 ) );
117
118
l21 =
EvtLeptonVCurrent
( p->
getDaug
( 1 )->
spParent
( 0 ),
119
p->
getDaug
( 2 )->
spParent
( 1 ) );
120
121
l12 =
EvtLeptonVCurrent
( p->
getDaug
( 1 )->
spParent
( 1 ),
122
p->
getDaug
( 2 )->
spParent
( 0 ) );
123
124
l22 =
EvtLeptonVCurrent
( p->
getDaug
( 1 )->
spParent
( 1 ),
125
p->
getDaug
( 2 )->
spParent
( 1 ) );
126
127
vertex
( 0, 0, mom_sum * l11 * line_shape );
128
vertex
( 0, 1, mom_sum * l12 * line_shape );
129
vertex
( 1, 0, mom_sum * l21 * line_shape );
130
vertex
( 1, 1, mom_sum * l22 * line_shape );
131
}
132
133
double
EvtKStopizmumu::F_z
(
const
double
& z,
const
double
& rvsq )
134
{
135
double
F_z
= 1.0 + ( z / rvsq );
136
return
F_z
;
137
}
138
139
EvtComplex
EvtKStopizmumu::G_z
(
const
double
& z )
140
{
141
EvtComplex
G_z
;
142
143
if
( z <= 4.0 ) {
144
G_z
= sqrt( ( 4.0 / z ) - 1.0 ) * asin( sqrt( z ) / 2.0 );
145
}
else
{
146
double
z4 = 4.0 / z;
147
G_z
= -0.5 * sqrt( 1.0 - z4 ) *
148
( log( ( 1.0 - sqrt( 1.0 - z4 ) ) / ( 1.0 + sqrt( 1.0 + z4 ) ) ) +
149
EvtComplex
( 0,
EvtConst::pi
) );
150
}
151
152
return
G_z
;
153
}
154
155
EvtComplex
EvtKStopizmumu::chi_z
(
const
double
& z,
const
double
& rpisq )
156
{
157
double
z_prime = z / rpisq;
158
EvtComplex
chi = 4.0 / 9.0 - 4.0 * rpisq / ( 3.0 * z ) -
159
( 1.0 - 4.0 * rpisq / z ) *
G_z
( z_prime ) / 3.0;
160
return
chi;
161
}
162
163
double
EvtKStopizmumu::Wpol_z
(
const
double
& z,
const
double
& as,
164
const
double
& bs )
165
{
166
double
Wpol = ( as + bs * z );
167
return
Wpol;
168
}
169
170
EvtComplex
EvtKStopizmumu::Wpipi_z
(
const
double
& z,
const
double
& alpha_s,
171
const
double
& beta_s,
const
double
& rvsq,
172
const
double
& rpisq,
const
double
& z0 )
173
{
174
EvtComplex
Wpipi = ( alpha_s + beta_s * ( z - z0 ) / rpisq ) *
175
F_z
( z, rvsq ) *
chi_z
( z, rpisq ) / rpisq;
176
return
Wpipi;
177
}
EvtConst.hh
EvtLeptonVCurrent
EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
Definition
EvtDiracSpinor.cpp:208
EvtDiracSpinor.hh
EvtGenKine.hh
EvtKStopizmumu.hh
EvtPDL.hh
EvtParticle.hh
EvtReport.hh
EvtGenReport
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition
EvtReport.cpp:32
EVTGEN_ERROR
@ EVTGEN_ERROR
Definition
EvtReport.hh:49
EvtVector3R.hh
EvtVector4C.hh
EvtVector4R.hh
EvtComplex
Definition
EvtComplex.hh:29
EvtConst::pi
static const double pi
Definition
EvtConst.hh:26
EvtConst::Fermi
static const double Fermi
Definition
EvtConst.hh:31
EvtDecayAmp::vertex
void vertex(const EvtComplex &)
Definition
EvtDecayAmp.hh:37
EvtDecayBase::checkSpinDaughter
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
Definition
EvtDecayBase.cpp:547
EvtDecayBase::getNDaug
int getNDaug() const
Definition
EvtDecayBase.hh:64
EvtDecayBase::checkSpinParent
void checkSpinParent(EvtSpinType::spintype sp)
Definition
EvtDecayBase.cpp:534
EvtDecayBase::getArg
double getArg(unsigned int j)
Definition
EvtDecayBase.cpp:578
EvtDecayBase::getParentId
EvtId getParentId() const
Definition
EvtDecayBase.hh:60
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
EvtDecayBase::getDaugs
const EvtId * getDaugs() const
Definition
EvtDecayBase.hh:65
EvtId
Definition
EvtId.hh:27
EvtKStopizmumu::init
void init() override
Definition
EvtKStopizmumu.cpp:33
EvtKStopizmumu::Wpipi_z
EvtComplex Wpipi_z(const double &z, const double &alpha_s, const double &beta_s, const double &rvsq, const double &rpisq, const double &z0)
Definition
EvtKStopizmumu.cpp:170
EvtKStopizmumu::F_z
double F_z(const double &z, const double &rvsq)
Definition
EvtKStopizmumu.cpp:133
EvtKStopizmumu::Wpol_z
double Wpol_z(const double &z, const double &as, const double &bs)
Definition
EvtKStopizmumu.cpp:163
EvtKStopizmumu::chi_z
EvtComplex chi_z(const double &z, const double &rpisq)
Definition
EvtKStopizmumu.cpp:155
EvtKStopizmumu::decay
void decay(EvtParticle *p) override
Definition
EvtKStopizmumu.cpp:72
EvtKStopizmumu::G_z
EvtComplex G_z(const double &z)
Definition
EvtKStopizmumu.cpp:139
EvtPDL::getMass
static double getMass(EvtId i)
Definition
EvtPDL.cpp:311
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::spParent
virtual EvtDiracSpinor spParent(int) const
Definition
EvtParticle.cpp:660
EvtParticle::getP4
const EvtVector4R & getP4() const
Definition
EvtParticle.cpp:144
EvtParticle::getDaug
EvtParticle * getDaug(const int i)
Definition
EvtParticle.hh:173
EvtSpinType::SCALAR
@ SCALAR
Definition
EvtSpinType.hh:30
EvtSpinType::DIRAC
@ DIRAC
Definition
EvtSpinType.hh:33
EvtVector4C
Definition
EvtVector4C.hh:30
EvtVector4R
Definition
EvtVector4R.hh:29
EvtVector4R::get
double get(int i) const
Definition
EvtVector4R.hh:163
Generated by
1.17.0