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
EvtSemiLeptonicVectorAmp.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/EvtSemiLeptonicVectorAmp.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/EvtPDL.hh
"
28
#include "
EvtGenBase/EvtParticle.hh
"
29
#include "
EvtGenBase/EvtReport.hh
"
30
#include "
EvtGenBase/EvtSemiLeptonicFF.hh
"
31
#include "
EvtGenBase/EvtTensor4C.hh
"
32
#include "
EvtGenBase/EvtVector4C.hh
"
33
using
std::endl;
34
35
void
EvtSemiLeptonicVectorAmp::CalcAmp
(
EvtParticle
* parent,
EvtAmp
& amp,
36
EvtSemiLeptonicFF
* FormFactors )
37
{
38
static
const
EvtId
EM =
EvtPDL::getId
(
"e-"
);
39
static
const
EvtId
MUM =
EvtPDL::getId
(
"mu-"
);
40
static
const
EvtId
TAUM =
EvtPDL::getId
(
"tau-"
);
41
static
const
EvtId
EP =
EvtPDL::getId
(
"e+"
);
42
static
const
EvtId
MUP =
EvtPDL::getId
(
"mu+"
);
43
static
const
EvtId
TAUP =
EvtPDL::getId
(
"tau+"
);
44
45
static
const
EvtId
D0 =
EvtPDL::getId
(
"D0"
);
46
static
const
EvtId
D0B =
EvtPDL::getId
(
"anti-D0"
);
47
static
const
EvtId
DP =
EvtPDL::getId
(
"D+"
);
48
static
const
EvtId
DM =
EvtPDL::getId
(
"D-"
);
49
static
const
EvtId
DSM =
EvtPDL::getId
(
"D_s-"
);
50
static
const
EvtId
DSP =
EvtPDL::getId
(
"D_s+"
);
51
52
//Add the lepton and neutrino 4 momenta to find q2
53
54
EvtVector4R
q = parent->
getDaug
( 1 )->
getP4
() + parent->
getDaug
( 2 )->
getP4
();
55
double
q2 = ( q.
mass2
() );
56
57
double
a1f, a2f, vf, a0f, a3f;
58
double
m_meson = parent->
getDaug
( 0 )->
mass
();
59
60
FormFactors->
getvectorff
( parent->
getId
(), parent->
getDaug
( 0 )->
getId
(),
61
q2, m_meson, &a1f, &a2f, &vf, &a0f );
62
63
double
costhl_flag = 1.0;
64
65
if
( parent->
getId
() == D0 || parent->
getId
() == D0B ||
66
parent->
getId
() == DP || parent->
getId
() == DM ) {
67
costhl_flag = -1.0;
68
}
69
if
( parent->
getId
() == DSP || parent->
getId
() == DSM ) {
70
costhl_flag = -1.0;
71
}
72
vf = vf * costhl_flag;
73
74
EvtVector4R
p4b;
75
p4b.
set
( parent->
mass
(), 0.0, 0.0, 0.0 );
76
77
EvtVector4R
p4meson = parent->
getDaug
( 0 )->
getP4
();
78
79
EvtVector4C
l1, l2;
80
81
EvtId
l_num = parent->
getDaug
( 1 )->
getId
();
82
double
m_b = parent->
mass
();
83
84
a3f = ( ( m_b + m_meson ) / ( 2.0 * m_meson ) ) * a1f -
85
( ( m_b - m_meson ) / ( 2.0 * m_meson ) ) * a2f;
86
87
EvtTensor4C
tds;
88
if
( l_num == EM || l_num == MUM || l_num == TAUM ) {
89
tds = a1f * ( m_b + m_meson ) *
EvtTensor4C::g
();
90
tds.
addDirProd
( ( -a2f / ( m_b + m_meson ) ) * p4b, p4b + p4meson );
91
tds +=
EvtComplex
( 0.0, vf / ( m_b + m_meson ) ) *
92
dual
(
EvtGenFunctions::directProd
( p4meson + p4b, p4b - p4meson ) );
93
tds.
addDirProd
( ( a0f - a3f ) * 2.0 * ( m_meson / q2 ) * p4b,
94
p4b - p4meson );
95
96
l1 =
EvtLeptonVACurrent
( parent->
getDaug
( 1 )->
spParent
( 0 ),
97
parent->
getDaug
( 2 )->
spParentNeutrino
() );
98
l2 =
EvtLeptonVACurrent
( parent->
getDaug
( 1 )->
spParent
( 1 ),
99
parent->
getDaug
( 2 )->
spParentNeutrino
() );
100
}
else
{
101
if
( l_num == EP || l_num == MUP || l_num == TAUP ) {
102
tds = a1f * ( m_b + m_meson ) *
EvtTensor4C::g
();
103
tds.
addDirProd
( ( -a2f / ( m_b + m_meson ) ) * p4b, p4b + p4meson );
104
tds -=
EvtComplex
( 0.0, vf / ( m_b + m_meson ) ) *
105
dual
(
EvtGenFunctions::directProd
( p4meson + p4b,
106
p4b - p4meson ) );
107
tds.
addDirProd
( ( a0f - a3f ) * 2.0 * ( m_meson / q2 ) * p4b,
108
p4b - p4meson );
109
110
l1 =
EvtLeptonVACurrent
( parent->
getDaug
( 2 )->
spParentNeutrino
(),
111
parent->
getDaug
( 1 )->
spParent
( 0 ) );
112
l2 =
EvtLeptonVACurrent
( parent->
getDaug
( 2 )->
spParentNeutrino
(),
113
parent->
getDaug
( 1 )->
spParent
( 1 ) );
114
}
else
{
115
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
116
<<
"Wrong lepton number"
<< endl;
117
}
118
}
119
120
EvtVector4C
et0 = tds.
cont1
( parent->
getDaug
( 0 )->
epsParent
( 0 ).
conj
() );
121
EvtVector4C
et1 = tds.
cont1
( parent->
getDaug
( 0 )->
epsParent
( 1 ).
conj
() );
122
EvtVector4C
et2 = tds.
cont1
( parent->
getDaug
( 0 )->
epsParent
( 2 ).
conj
() );
123
124
amp.
vertex
( 0, 0, l1.
cont
( et0 ) );
125
amp.
vertex
( 0, 1, l2.
cont
( et0 ) );
126
127
amp.
vertex
( 1, 0, l1.
cont
( et1 ) );
128
amp.
vertex
( 1, 1, l2.
cont
( et1 ) );
129
130
amp.
vertex
( 2, 0, l1.
cont
( et2 ) );
131
amp.
vertex
( 2, 1, l2.
cont
( et2 ) );
132
133
return
;
134
}
EvtAmp.hh
EvtLeptonVACurrent
EvtVector4C EvtLeptonVACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
Definition
EvtDiracSpinor.cpp:178
EvtDiracSpinor.hh
EvtGenKine.hh
EvtId.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
EvtSemiLeptonicFF.hh
EvtSemiLeptonicVectorAmp.hh
dual
EvtTensor4C dual(const EvtTensor4C &t2)
Definition
EvtTensor4C.cpp:363
EvtTensor4C.hh
EvtVector4C.hh
EvtAmp
Definition
EvtAmp.hh:29
EvtAmp::vertex
void vertex(const EvtComplex &)
Definition
EvtAmp.cpp:453
EvtComplex
Definition
EvtComplex.hh:29
EvtId
Definition
EvtId.hh:27
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::spParentNeutrino
virtual EvtDiracSpinor spParentNeutrino() const
Definition
EvtParticle.cpp:684
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
EvtSemiLeptonicFF
Definition
EvtSemiLeptonicFF.hh:26
EvtSemiLeptonicFF::getvectorff
virtual void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f)=0
EvtSemiLeptonicVectorAmp::CalcAmp
void CalcAmp(EvtParticle *parent, EvtAmp &, EvtSemiLeptonicFF *FormFactors) override
Definition
EvtSemiLeptonicVectorAmp.cpp:35
EvtTensor4C
Definition
EvtTensor4C.hh:38
EvtTensor4C::cont1
EvtVector4C cont1(const EvtVector4C &v4) const
Definition
EvtTensor4C.cpp:446
EvtTensor4C::g
static const EvtTensor4C & g()
Definition
EvtTensor4C.cpp:43
EvtTensor4C::addDirProd
EvtTensor4C & addDirProd(const EvtVector4R &p1, const EvtVector4R &p2)
Definition
EvtTensor4C.cpp:350
EvtVector4C
Definition
EvtVector4C.hh:30
EvtVector4C::conj
EvtVector4C conj() const
Definition
EvtVector4C.hh:204
EvtVector4C::cont
EvtComplex cont(const EvtVector4C &v4) const
Definition
EvtVector4C.hh:140
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
EvtGenFunctions::directProd
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)
Definition
EvtTensor3C.cpp:153
Generated by
1.17.0