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
EvtbTosllVectorAmp.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/EvtbTosllVectorAmp.hh
"
22
23
#include "
EvtGenBase/EvtAmp.hh
"
24
#include "
EvtGenBase/EvtDiracSpinor.hh
"
25
#include "
EvtGenBase/EvtGenKine.hh
"
26
#include "
EvtGenBase/EvtId.hh
"
27
#include "
EvtGenBase/EvtIdSet.hh
"
28
#include "
EvtGenBase/EvtPDL.hh
"
29
#include "
EvtGenBase/EvtParticle.hh
"
30
#include "
EvtGenBase/EvtReport.hh
"
31
#include "
EvtGenBase/EvtTensor4C.hh
"
32
#include "
EvtGenBase/EvtVector4C.hh
"
33
34
#include "
EvtGenModels/EvtbTosllAmp.hh
"
35
#include "
EvtGenModels/EvtbTosllFF.hh
"
36
37
void
EvtbTosllVectorAmp::CalcAmp
(
EvtParticle
* parent,
EvtAmp
& amp,
38
EvtbTosllFF
* formFactors )
39
{
40
//Add the lepton and neutrino 4 momenta to find q2
41
42
EvtVector4R
q = parent->
getDaug
( 1 )->
getP4
() + parent->
getDaug
( 2 )->
getP4
();
43
double
q2 = ( q.
mass2
() );
44
45
double
a1
,
a2
, a0, v, t1, t2, t3;
46
double
mesonmass = parent->
getDaug
( 0 )->
mass
();
47
double
parentmass = parent->
mass
();
48
49
formFactors->
getVectorFF
( parent->
getId
(), parent->
getDaug
( 0 )->
getId
(),
50
q2, mesonmass,
a1
,
a2
, a0, v, t1, t2, t3 );
51
52
EvtId
daught = parent->
getDaug
( 0 )->
getId
();
53
EvtId
parentId = parent->
getId
();
54
bool
btod =
false
;
55
bool
nnlo =
true
;
56
if
( ( parentId ==
EvtPDL::getId
(
"B0"
) ||
57
parentId ==
EvtPDL::getId
(
"anti-B0"
) ||
58
parentId ==
EvtPDL::getId
(
"B+"
) ||
59
parentId ==
EvtPDL::getId
(
"B-"
) ) &&
60
( daught ==
EvtPDL::getId
( std::string(
"rho+"
) ) ||
61
daught ==
EvtPDL::getId
( std::string(
"rho-"
) ) ||
62
daught ==
EvtPDL::getId
( std::string(
"rho0"
) ) ||
63
daught ==
EvtPDL::getId
( std::string(
"omega"
) ) ) ) {
64
btod =
true
;
65
}
66
if
( ( parentId ==
EvtPDL::getId
(
"B_s0"
) ||
67
parentId ==
EvtPDL::getId
(
"anti-B_s0"
) ) &&
68
( daught ==
EvtPDL::getId
( std::string(
"K*0"
) ) ||
69
daught ==
EvtPDL::getId
( std::string(
"anti-K*0"
) ) ||
70
daught ==
EvtPDL::getId
( std::string(
"K*+"
) ) ||
71
daught ==
EvtPDL::getId
( std::string(
"K*-"
) ) ) ) {
72
btod =
true
;
73
}
74
75
EvtVector4R
p4b;
76
p4b.
set
( parent->
mass
(), 0.0, 0.0, 0.0 );
77
EvtVector4R
p4meson = parent->
getDaug
( 0 )->
getP4
();
78
79
EvtVector4C
l11, l12;
80
EvtVector4C
l21, l22;
81
82
EvtVector4C
a11, a12;
83
EvtVector4C
a21, a22;
84
85
EvtId
parentID = parent->
getId
();
86
87
//EvtId l_num = parent->getDaug(1)->getId();
88
89
EvtVector4R
pbhat = p4b / parentmass;
90
EvtVector4R
qhat = q / parentmass;
91
EvtVector4R
pkstarhat = p4meson / parentmass;
92
EvtVector4R
phat = pbhat + pkstarhat;
93
94
EvtComplex
c7eff =
EvtbTosllAmp::GetC7Eff
( q2, nnlo );
95
EvtComplex
c9eff =
EvtbTosllAmp::GetC9Eff
( q2, nnlo, btod );
96
EvtComplex
c10eff =
EvtbTosllAmp::GetC10Eff
( q2, nnlo );
97
EvtComplex
uniti( 0.0, 1.0 );
98
99
double
mhatb = 4.4 / ( parentmass );
100
double
mhatkstar = mesonmass / ( parentmass );
101
double
shat = q2 / ( parentmass * parentmass );
102
103
EvtComplex
a;
104
a = c9eff * v * 2 / ( 1 + mhatkstar ) + 4 * mhatb * c7eff * t1 / shat;
105
EvtComplex
b;
106
b = ( 1 + mhatkstar ) *
107
( c9eff *
a1
+ 2 * mhatb * ( 1 - mhatkstar ) * c7eff * t2 / shat );
108
EvtComplex
c;
109
c = ( ( 1 - mhatkstar ) * c9eff *
a2
+
110
2 * mhatb * c7eff * ( t3 + ( 1 - mhatkstar * mhatkstar ) * t2 / shat ) ) /
111
( 1 - mhatkstar * mhatkstar );
112
EvtComplex
d;
113
d = ( c9eff * ( ( 1 + mhatkstar ) *
a1
- ( 1 - mhatkstar ) *
a2
-
114
2 * mhatkstar * a0 ) -
115
2 * mhatb * c7eff * t3 ) /
116
shat;
117
EvtComplex
e;
118
e = 2 * c10eff * v / ( 1 + mhatkstar );
119
EvtComplex
f;
120
f = ( 1 + mhatkstar ) * c10eff *
a1
;
121
EvtComplex
g;
122
g = c10eff *
a2
/ ( 1 + mhatkstar );
123
EvtComplex
h;
124
h = c10eff *
125
( ( 1 + mhatkstar ) *
a1
- ( 1 - mhatkstar ) *
a2
- 2 * mhatkstar * a0 ) /
126
shat;
127
128
EvtTensor4C
T1, T2;
129
130
static
const
EvtIdSet
bmesons{
"B-"
,
"anti-B0"
,
"anti-B_s0"
};
131
static
const
EvtIdSet
bbarmesons{
"B+"
,
"B0"
,
"B_s0"
};
132
133
EvtParticle
* lepPlus =
nullptr
;
134
EvtParticle
* lepMinus =
nullptr
;
135
136
int
charge1 =
EvtPDL::chg3
( parent->
getDaug
( 1 )->
getId
() );
137
int
charge2 =
EvtPDL::chg3
( parent->
getDaug
( 2 )->
getId
() );
138
139
lepPlus = ( charge1 > charge2 ) ? parent->
getDaug
( 1 ) : parent->
getDaug
( 2 );
140
lepMinus = ( charge1 < charge2 ) ? parent->
getDaug
( 1 )
141
: parent->
getDaug
( 2 );
142
143
if
( bmesons.
contains
( parentID ) ) {
144
T1 = a *
dual
(
EvtGenFunctions::directProd
( pbhat, pkstarhat ) ) -
145
b * uniti *
EvtTensor4C::g
() +
146
c * uniti *
EvtGenFunctions::directProd
( pbhat, phat ) +
147
d * uniti *
EvtGenFunctions::directProd
( pbhat, qhat );
148
149
T2 = e *
dual
(
EvtGenFunctions::directProd
( pbhat, pkstarhat ) ) -
150
f * uniti *
EvtTensor4C::g
() +
151
g * uniti *
EvtGenFunctions::directProd
( pbhat, phat ) +
152
h * uniti *
EvtGenFunctions::directProd
( pbhat, qhat );
153
154
l11 =
EvtLeptonVCurrent
( lepPlus->
spParent
( 0 ), lepMinus->
spParent
( 0 ) );
155
l21 =
EvtLeptonVCurrent
( lepPlus->
spParent
( 1 ), lepMinus->
spParent
( 0 ) );
156
l12 =
EvtLeptonVCurrent
( lepPlus->
spParent
( 0 ), lepMinus->
spParent
( 1 ) );
157
l22 =
EvtLeptonVCurrent
( lepPlus->
spParent
( 1 ), lepMinus->
spParent
( 1 ) );
158
159
a11 =
EvtLeptonACurrent
( lepPlus->
spParent
( 0 ), lepMinus->
spParent
( 0 ) );
160
a21 =
EvtLeptonACurrent
( lepPlus->
spParent
( 1 ), lepMinus->
spParent
( 0 ) );
161
a12 =
EvtLeptonACurrent
( lepPlus->
spParent
( 0 ), lepMinus->
spParent
( 1 ) );
162
a22 =
EvtLeptonACurrent
( lepPlus->
spParent
( 1 ), lepMinus->
spParent
( 1 ) );
163
164
}
else
{
165
if
( bbarmesons.
contains
( parentID ) ) {
166
T1 = -a *
dual
(
EvtGenFunctions::directProd
( pbhat, pkstarhat ) ) -
167
b * uniti *
EvtTensor4C::g
() +
168
c * uniti *
EvtGenFunctions::directProd
( pbhat, phat ) +
169
d * uniti *
EvtGenFunctions::directProd
( pbhat, qhat );
170
171
T2 = -e *
dual
(
EvtGenFunctions::directProd
( pbhat, pkstarhat ) ) -
172
f * uniti *
EvtTensor4C::g
() +
173
g * uniti *
EvtGenFunctions::directProd
( pbhat, phat ) +
174
h * uniti *
EvtGenFunctions::directProd
( pbhat, qhat );
175
176
l11 =
EvtLeptonVCurrent
( lepPlus->
spParent
( 1 ),
177
lepMinus->
spParent
( 1 ) );
178
l21 =
EvtLeptonVCurrent
( lepPlus->
spParent
( 0 ),
179
lepMinus->
spParent
( 1 ) );
180
l12 =
EvtLeptonVCurrent
( lepPlus->
spParent
( 1 ),
181
lepMinus->
spParent
( 0 ) );
182
l22 =
EvtLeptonVCurrent
( lepPlus->
spParent
( 0 ),
183
lepMinus->
spParent
( 0 ) );
184
185
a11 =
EvtLeptonACurrent
( lepPlus->
spParent
( 1 ),
186
lepMinus->
spParent
( 1 ) );
187
a21 =
EvtLeptonACurrent
( lepPlus->
spParent
( 0 ),
188
lepMinus->
spParent
( 1 ) );
189
a12 =
EvtLeptonACurrent
( lepPlus->
spParent
( 1 ),
190
lepMinus->
spParent
( 0 ) );
191
a22 =
EvtLeptonACurrent
( lepPlus->
spParent
( 0 ),
192
lepMinus->
spParent
( 0 ) );
193
194
}
else
{
195
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
) <<
"Wrong lepton number\n"
;
196
T1.zero();
197
T2.zero();
// Set all tensor terms to zero.
198
}
199
}
200
201
int
i;
202
203
for
( i = 0; i < 3; i++ ) {
204
EvtVector4C
eps = parent->
getDaug
( 0 )->
epsParent
( i ).
conj
();
205
206
EvtVector4C
E1 = T1.cont1( eps );
207
EvtVector4C
E2 = T2.cont1( eps );
208
209
amp.
vertex
( i, 0, 0, l11 * E1 + a11 * E2 );
210
amp.
vertex
( i, 0, 1, l12 * E1 + a12 * E2 );
211
amp.
vertex
( i, 1, 0, l21 * E1 + a21 * E2 );
212
amp.
vertex
( i, 1, 1, l22 * E1 + a22 * E2 );
213
}
214
}
EvtAmp.hh
EvtLeptonACurrent
EvtVector4C EvtLeptonACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
Definition
EvtDiracSpinor.cpp:223
EvtLeptonVCurrent
EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
Definition
EvtDiracSpinor.cpp:208
EvtDiracSpinor.hh
EvtGenKine.hh
EvtIdSet.hh
EvtId.hh
a2
const double a2
Definition
EvtLi2Spence.cpp:24
a1
const double a1
Definition
EvtLi2Spence.cpp:23
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
dual
EvtTensor4C dual(const EvtTensor4C &t2)
Definition
EvtTensor4C.cpp:363
EvtTensor4C.hh
EvtVector4C.hh
EvtbTosllAmp.hh
EvtbTosllFF.hh
EvtbTosllVectorAmp.hh
EvtAmp
Definition
EvtAmp.hh:29
EvtAmp::vertex
void vertex(const EvtComplex &)
Definition
EvtAmp.cpp:453
EvtComplex
Definition
EvtComplex.hh:29
EvtIdSet
Definition
EvtIdSet.hh:30
EvtIdSet::contains
bool contains(const EvtId &id) const
Definition
EvtIdSet.cpp:46
EvtId
Definition
EvtId.hh:27
EvtPDL::chg3
static int chg3(EvtId i)
Definition
EvtPDL.cpp:366
EvtPDL::getId
static EvtId getId(const std::string &name)
Definition
EvtPDL.cpp:283
EvtParticle
Definition
EvtParticle.hh:45
EvtParticle::epsParent
virtual EvtVector4C epsParent(int i) const
Definition
EvtParticle.cpp:611
EvtParticle::getId
EvtId getId() const
Definition
EvtParticle.cpp:124
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
EvtParticle::mass
double mass() const
Definition
EvtParticle.cpp:159
EvtTensor4C
Definition
EvtTensor4C.hh:38
EvtTensor4C::g
static const EvtTensor4C & g()
Definition
EvtTensor4C.cpp:43
EvtVector4C
Definition
EvtVector4C.hh:30
EvtVector4C::conj
EvtVector4C conj() const
Definition
EvtVector4C.hh:204
EvtVector4R
Definition
EvtVector4R.hh:29
EvtVector4R::mass2
double mass2() const
Definition
EvtVector4R.hh:100
EvtVector4R::set
void set(int i, double d)
Definition
EvtVector4R.hh:168
EvtbTosllAmp::GetC7Eff
EvtComplex GetC7Eff(double q2, bool nnlo=true)
Definition
EvtbTosllAmp.cpp:242
EvtbTosllAmp::GetC10Eff
EvtComplex GetC10Eff(double q2, bool nnlo=true)
Definition
EvtbTosllAmp.cpp:500
EvtbTosllAmp::GetC9Eff
EvtComplex GetC9Eff(double q2, bool nnlo=true, bool btod=false)
Definition
EvtbTosllAmp.cpp:330
EvtbTosllFF
Definition
EvtbTosllFF.hh:28
EvtbTosllFF::getVectorFF
virtual void getVectorFF(EvtId, EvtId, double, double, double &, double &, double &, double &, double &, double &, double &)
Definition
EvtbTosllFF.hh:38
EvtbTosllVectorAmp::CalcAmp
void CalcAmp(EvtParticle *parent, EvtAmp &, EvtbTosllFF *formFactors) override
Definition
EvtbTosllVectorAmp.cpp:37
EvtGenFunctions::directProd
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)
Definition
EvtTensor3C.cpp:153
Generated by
1.17.0