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
EvtBcVNpi.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/EvtBcVNpi.hh
"
22
23
#include "
EvtGenBase/EvtDiracSpinor.hh
"
24
#include "
EvtGenBase/EvtGenKine.hh
"
25
#include "
EvtGenBase/EvtIdSet.hh
"
26
#include "
EvtGenBase/EvtPDL.hh
"
27
#include "
EvtGenBase/EvtParser.hh
"
28
#include "
EvtGenBase/EvtParticle.hh
"
29
#include "
EvtGenBase/EvtReport.hh
"
30
#include "
EvtGenBase/EvtTensor4C.hh
"
31
#include "
EvtGenBase/EvtVector4C.hh
"
32
33
#include "
EvtGenModels/EvtTauHadnu.hh
"
34
#include "
EvtGenModels/EvtWnPi.hh
"
35
36
#include <ctype.h>
37
#include <stdlib.h>
38
39
std::string
EvtBcVNpi::getName
()
const
40
{
41
return
"BC_VNPI"
;
42
}
43
44
EvtDecayBase
*
EvtBcVNpi::clone
()
const
45
{
46
return
new
EvtBcVNpi
;
47
}
48
49
//======================================================
50
void
EvtBcVNpi::init
()
51
{
52
//cout<<"BcVNpi::init()"<<endl;
53
54
checkNArg
( 1 );
55
checkSpinParent
(
EvtSpinType::SCALAR
);
56
checkSpinDaughter
( 0,
EvtSpinType::VECTOR
);
57
for
(
int
i = 1; i <= (
getNDaug
() - 1 ); i++ ) {
58
checkSpinDaughter
( i,
EvtSpinType::SCALAR
);
59
};
60
61
if
(
getNDaug
() < 2 ||
getNDaug
() > 6 ) {
62
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
63
<<
"Have not yet implemented this final state in BcVNpi model"
64
<< endl;
65
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
) <<
"Ndaug="
<<
getNDaug
() << endl;
66
for
(
int
id
= 0;
id
< (
getNDaug
() - 1 );
id
++ )
67
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
68
<<
"Daug "
<<
id
<<
" "
<<
EvtPDL::name
(
getDaug
(
id
) ).c_str()
69
<< endl;
70
return
;
71
}
72
73
// for(int i=0; i<getNDaug(); i++)
74
// cout<<"BcVNpi::init \t\t daughter "<<i<<" : "<<getDaug(i).getId()<<" "<<EvtPDL::name(getDaug(i)).c_str()<<endl;
75
76
m_idVector
=
getDaug
( 0 ).
getId
();
77
m_whichfit
= int(
getArg
( 0 ) + 0.1 );
78
// cout<<"BcVNpi: m_whichfit ="<<m_whichfit<<" m_idVector="<<m_idVector<<endl;
79
m_ffmodel
= std::make_unique<EvtBCVFF>(
m_idVector
,
m_whichfit
);
80
81
m_wcurr
= std::make_unique<EvtWnPi>();
82
83
m_nCall
= 0;
84
}
85
86
//======================================================
87
void
EvtBcVNpi::initProbMax
()
88
{
89
// cout<<"BcVNpi::initProbMax()"<<endl;
90
if
(
m_idVector
==
EvtPDL::getId
(
"J/psi"
).getId() &&
m_whichfit
== 1 &&
91
getNDaug
() == 6 )
92
setProbMax
( 720000. );
93
else
if
(
m_idVector
==
EvtPDL::getId
(
"J/psi"
).getId() &&
94
m_whichfit
== 2 &&
getNDaug
() == 6 )
95
setProbMax
( 471817. );
96
else
if
(
m_idVector
==
EvtPDL::getId
(
"J/psi"
).getId() &&
97
m_whichfit
== 1 &&
getNDaug
() == 4 )
98
setProbMax
( 42000. );
99
else
if
(
m_idVector
==
EvtPDL::getId
(
"J/psi"
).getId() &&
100
m_whichfit
== 2 &&
getNDaug
() == 4 )
101
setProbMax
( 16000. );
102
103
else
if
(
m_idVector
==
EvtPDL::getId
(
"psi(2S)"
).getId() &&
104
m_whichfit
== 1 &&
getNDaug
() == 4 )
105
setProbMax
( 1200. );
106
else
if
(
m_idVector
==
EvtPDL::getId
(
"psi(2S)"
).getId() &&
107
m_whichfit
== 2 &&
getNDaug
() == 4 )
108
setProbMax
( 2600. );
109
else
if
(
m_idVector
==
EvtPDL::getId
(
"psi(2S)"
).getId() &&
110
m_whichfit
== 1 &&
getNDaug
() == 6 )
111
setProbMax
( 40000. );
112
else
if
(
m_idVector
==
EvtPDL::getId
(
"psi(2S)"
).getId() &&
113
m_whichfit
== 2 &&
getNDaug
() == 6 )
114
setProbMax
( 30000. );
115
}
116
117
//======================================================
118
void
EvtBcVNpi::decay
(
EvtParticle
* root_particle )
119
{
120
++
m_nCall
;
121
// cout<<"BcVNpi::decay()"<<endl;
122
root_particle->
initializePhaseSpace
(
getNDaug
(),
getDaugs
() );
123
124
EvtVector4R
p4b( root_particle->
mass
(), 0., 0., 0. ),
// Bc momentum
125
p4meson = root_particle->
getDaug
( 0 )->
getP4
(),
// J/psi momenta
126
Q = p4b - p4meson;
127
double
Q2 = Q.
mass2
();
128
129
// check pi-mesons and calculate hadronic current
130
EvtVector4C
hardCur;
131
// bool foundHadCurr=false;
132
if
(
getNDaug
() == 2 ) {
133
hardCur =
m_wcurr
->WCurrent( root_particle->
getDaug
( 1 )->
getP4
() );
134
// foundHadCurr=true;
135
}
else
if
(
getNDaug
() == 3 ) {
136
hardCur =
m_wcurr
->WCurrent( root_particle->
getDaug
( 1 )->
getP4
(),
137
root_particle->
getDaug
( 2 )->
getP4
() );
138
// foundHadCurr=true;
139
}
else
if
(
getNDaug
() == 4 ) {
140
hardCur =
m_wcurr
->WCurrent( root_particle->
getDaug
( 1 )->
getP4
(),
141
root_particle->
getDaug
( 2 )->
getP4
(),
142
root_particle->
getDaug
( 3 )->
getP4
() );
143
// foundHadCurr=true;
144
}
else
if
(
getNDaug
() ==
145
6 )
// Bc -> psi pi+ pi+ pi- pi- pi+ from [Kuhn, Was, hep-ph/0602162
146
{
147
hardCur =
m_wcurr
->WCurrent( root_particle->
getDaug
( 1 )->
getP4
(),
148
root_particle->
getDaug
( 2 )->
getP4
(),
149
root_particle->
getDaug
( 3 )->
getP4
(),
150
root_particle->
getDaug
( 4 )->
getP4
(),
151
root_particle->
getDaug
( 5 )->
getP4
() );
152
// foundHadCurr=true;
153
}
else
{
154
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
155
<<
"Have not yet implemented this final state in BCNPI model"
156
<< endl;
157
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
) <<
"Ndaug="
<<
getNDaug
() << endl;
158
int
id;
159
for
(
id
= 0;
id
< (
getNDaug
() - 1 );
id
++ )
160
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
161
<<
"Daug "
<<
id
<<
" "
<<
EvtPDL::name
(
getDaug
(
id
) ).c_str()
162
<< endl;
163
::abort();
164
};
165
166
// calculate Bc -> V W form-factors
167
double
a1f, a2f, vf, a0f;
168
double
m_meson = root_particle->
getDaug
( 0 )->
mass
();
169
double
m_b = root_particle->
mass
();
170
m_ffmodel
->getvectorff( root_particle->
getId
(),
171
root_particle->
getDaug
( 0 )->
getId
(), Q2, m_meson,
172
&a1f, &a2f, &vf, &a0f );
173
double
a3f = ( ( m_b + m_meson ) / ( 2.0 * m_meson ) ) * a1f -
174
( ( m_b - m_meson ) / ( 2.0 * m_meson ) ) * a2f;
175
176
// calculate Bc -> V W current
177
EvtTensor4C
H;
178
H = a1f * ( m_b + m_meson ) *
EvtTensor4C::g
();
179
H.
addDirProd
( ( -a2f / ( m_b + m_meson ) ) * p4b, p4b + p4meson );
180
H +=
EvtComplex
( 0.0, vf / ( m_b + m_meson ) ) *
181
dual
(
EvtGenFunctions::directProd
( p4meson + p4b, p4b - p4meson ) );
182
H.
addDirProd
( ( a0f - a3f ) * 2.0 * ( m_meson / Q2 ) * p4b, p4b - p4meson );
183
EvtVector4C
Heps = H.
cont2
( hardCur );
184
185
for
(
int
i = 0; i < 3; i++ ) {
186
EvtVector4C
eps = root_particle->
getDaug
( 0 )
187
->
epsParent
( i )
188
.
conj
();
// psi-meson polarization vector
189
EvtComplex
amp = eps * Heps;
190
vertex
( i, amp );
191
};
192
}
EvtBcVNpi.hh
EvtDiracSpinor.hh
EvtGenKine.hh
EvtIdSet.hh
EvtPDL.hh
EvtParser.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
EvtTauHadnu.hh
dual
EvtTensor4C dual(const EvtTensor4C &t2)
Definition
EvtTensor4C.cpp:363
EvtTensor4C.hh
EvtVector4C.hh
EvtWnPi.hh
EvtBcVNpi
Definition
EvtBcVNpi.hh:38
EvtBcVNpi::getName
std::string getName() const override
Definition
EvtBcVNpi.cpp:39
EvtBcVNpi::initProbMax
void initProbMax() override
Definition
EvtBcVNpi.cpp:87
EvtBcVNpi::m_nCall
int m_nCall
Definition
EvtBcVNpi.hh:47
EvtBcVNpi::m_whichfit
int m_whichfit
Definition
EvtBcVNpi.hh:48
EvtBcVNpi::decay
void decay(EvtParticle *p) override
Definition
EvtBcVNpi.cpp:118
EvtBcVNpi::clone
EvtDecayBase * clone() const override
Definition
EvtBcVNpi.cpp:44
EvtBcVNpi::m_idVector
int m_idVector
Definition
EvtBcVNpi.hh:48
EvtBcVNpi::init
void init() override
Definition
EvtBcVNpi.cpp:50
EvtBcVNpi::m_ffmodel
std::unique_ptr< EvtBCVFF > m_ffmodel
Definition
EvtBcVNpi.hh:49
EvtBcVNpi::m_wcurr
std::unique_ptr< EvtWnPi > m_wcurr
Definition
EvtBcVNpi.hh:50
EvtComplex
Definition
EvtComplex.hh:29
EvtDecayAmp::vertex
void vertex(const EvtComplex &)
Definition
EvtDecayAmp.hh:37
EvtDecayBase::checkSpinDaughter
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
Definition
EvtDecayBase.cpp:547
EvtDecayBase::EvtDecayBase
EvtDecayBase()=default
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::setProbMax
void setProbMax(double prbmx)
Definition
EvtDecayBase.cpp:295
EvtDecayBase::getDaug
EvtId getDaug(int i) const
Definition
EvtDecayBase.hh:66
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::getId
int getId() const
Definition
EvtId.hh:41
EvtPDL::name
static std::string name(EvtId i)
Definition
EvtPDL.cpp:376
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::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::mass
double mass() const
Definition
EvtParticle.cpp:159
EvtSpinType::SCALAR
@ SCALAR
Definition
EvtSpinType.hh:30
EvtSpinType::VECTOR
@ VECTOR
Definition
EvtSpinType.hh:31
EvtTensor4C
Definition
EvtTensor4C.hh:38
EvtTensor4C::g
static const EvtTensor4C & g()
Definition
EvtTensor4C.cpp:43
EvtTensor4C::addDirProd
EvtTensor4C & addDirProd(const EvtVector4R &p1, const EvtVector4R &p2)
Definition
EvtTensor4C.cpp:350
EvtTensor4C::cont2
EvtVector4C cont2(const EvtVector4C &v4) const
Definition
EvtTensor4C.cpp:460
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
EvtGenFunctions::directProd
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)
Definition
EvtTensor3C.cpp:153
Generated by
1.17.0