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
EvtBcVPPHad.cpp
Go to the documentation of this file.
1
/***********************************************************************
2
* Copyright 1998-2023 CERN for the benefit of the EvtGen authors *
3
* *
4
* This file is part of EvtGen. *
5
* *
6
* EvtGen is free software: you can redistribute it and/or modify *
7
* it under the terms of the GNU General Public License as published by *
8
* the Free Software Foundation, either version 3 of the License, or *
9
* (at your option) any later version. *
10
* *
11
* EvtGen is distributed in the hope that it will be useful, *
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14
* GNU General Public License for more details. *
15
* *
16
* You should have received a copy of the GNU General Public License *
17
* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
18
***********************************************************************/
19
20
#include "
EvtGenModels/EvtBcVPPHad.hh
"
21
22
#include "
EvtGenBase/EvtDiracSpinor.hh
"
23
#include "
EvtGenBase/EvtIdSet.hh
"
24
#include "
EvtGenBase/EvtPDL.hh
"
25
#include "
EvtGenBase/EvtParticle.hh
"
26
#include "
EvtGenBase/EvtReport.hh
"
27
#include "
EvtGenBase/EvtSpinType.hh
"
28
#include "
EvtGenBase/EvtTensor4C.hh
"
29
#include "
EvtGenBase/EvtVector4R.hh
"
30
31
#include <iostream>
32
33
std::string
EvtBcVPPHad::getName
()
const
34
{
35
return
"BC_VPPHAD"
;
36
}
37
38
EvtDecayBase
*
EvtBcVPPHad::clone
()
const
39
{
40
return
new
EvtBcVPPHad
;
41
}
42
43
//======================================================
44
45
void
EvtBcVPPHad::init
()
46
{
47
checkNArg
( 1 );
48
checkSpinParent
(
EvtSpinType::SCALAR
);
49
checkSpinDaughter
( 0,
EvtSpinType::VECTOR
);
50
checkSpinDaughter
( 1,
EvtSpinType::DIRAC
);
51
checkSpinDaughter
( 2,
EvtSpinType::DIRAC
);
52
for
(
int
i = 3; i <= (
getNDaug
() - 1 ); i++ ) {
53
checkSpinDaughter
( i,
EvtSpinType::SCALAR
);
54
}
55
56
m_idVector
=
getDaug
( 0 ).
getId
();
57
m_whichFit
= int(
getArg
( 0 ) + 0.1 );
58
m_FFModel
= std::make_unique<EvtBCVFF2>(
m_idVector
,
m_whichFit
);
59
60
m_WCurr
= std::make_unique<EvtWHad>();
61
62
// determine the code of final hadronic state
63
const
EvtIdSet
thePis{
"pi+"
,
"pi-"
,
"pi0"
};
64
const
EvtIdSet
theK{
"K+"
,
"K-"
,
"K_S0"
};
65
const
EvtIdSet
thePs{
"p+"
,
"anti-p-"
};
66
67
if
(
getNDaug
() == 4 && thePs.
contains
(
getDaug
( 1 ) ) &&
68
thePs.
contains
(
getDaug
( 2 ) ) && thePis.
contains
(
getDaug
( 3 ) ) ) {
69
m_outCode
= 1;
// p+ p- pi+
70
}
else
{
71
EvtGenReport
(
EVTGEN_ERROR
,
"EvtBcPPHad::init has unknown decay mode"
);
72
}
73
EvtGenReport
(
EVTGEN_INFO
,
"EvtBcVPPHad"
)
74
<<
": m_outCode = "
<<
m_outCode
<<
", m_whichFit = "
<<
m_whichFit
75
<< std::endl;
76
}
77
78
//======================================================
79
80
void
EvtBcVPPHad::initProbMax
()
81
{
82
if
(
m_outCode
== 1 ) {
83
// p+ p- pi+
84
if
(
m_idVector
==
EvtPDL::getId
(
"J/psi"
).getId() ) {
85
if
(
m_whichFit
== 2 ) {
86
setProbMax
( 550.0 );
87
}
else
{
88
setProbMax
( 1100.0 );
89
}
90
}
else
if
(
m_idVector
==
EvtPDL::getId
(
"psi(2S)"
).getId() ) {
91
if
(
m_whichFit
== 2 ) {
92
setProbMax
( 7.0 );
93
}
else
{
94
setProbMax
( 50.0 );
95
}
96
}
97
}
else
{
98
EvtGenReport
(
99
EVTGEN_ERROR
,
100
"probmax: Have not yet implemented this final state in BC_VPPHAD model, m_outCode = "
)
101
<<
m_outCode
<< std::endl;
102
}
103
}
104
105
//======================================================
106
EvtVector4C
EvtBcVPPHad::hardCurrPP
(
EvtParticle
* parent,
int
i1,
int
i2 )
const
107
{
108
EvtVector4C
hardCur;
109
const
EvtVector4R
p1 = parent->
getDaug
( 1 )->
getP4
();
110
const
EvtDiracSpinor
sp1 = parent->
getDaug
( 1 )->
spParent
( i1 );
111
112
const
EvtVector4R
p2 = parent->
getDaug
( 2 )->
getP4
();
113
const
EvtDiracSpinor
sp2 = parent->
getDaug
( 2 )->
spParent
( i2 );
114
115
if
(
m_outCode
== 1 ) {
116
const
EvtVector4R
k = parent->
getDaug
( 3 )->
getP4
();
117
hardCur =
m_WCurr
->WCurrent_ppPi( p1, sp1, p2, sp2, k );
118
}
119
return
hardCur;
120
}
121
122
//======================================================
123
void
EvtBcVPPHad::decay
(
EvtParticle
* parent )
124
{
125
parent->
initializePhaseSpace
(
getNDaug
(),
getDaugs
() );
126
127
EvtParticle
* Jpsi = parent->
getDaug
( 0 );
128
129
const
EvtVector4R
p4b( parent->
mass
(), 0., 0., 0. ),
// Bc momentum
130
p4meson = Jpsi->
getP4
(),
// J/psi momenta
131
Q = p4b - p4meson, p4Sum = p4meson + p4b;
132
const
double
Q2 = Q.
mass2
();
133
134
// Calculate Bc -> V W form-factors
135
double
a1f( 0.0 ), a2f( 0.0 ), vf( 0.0 ), a0f( 0.0 );
136
137
const
double
mMeson = Jpsi->
mass
();
138
const
double
mB = parent->
mass
();
139
const
double
mVar = mB + mMeson;
140
141
m_FFModel
->getvectorff( parent->
getId
(), Jpsi->
getId
(), Q2, mMeson, &a1f,
142
&a2f, &vf, &a0f );
143
144
const
double
a3f = ( mVar / ( 2.0 * mMeson ) ) * a1f -
145
( ( mB - mMeson ) / ( 2.0 * mMeson ) ) * a2f;
146
147
// Calculate Bc -> V W current
148
EvtTensor4C
H = a1f * mVar *
EvtTensor4C::g
();
149
H.
addDirProd
( ( -a2f / mVar ) * p4b, p4Sum );
150
H +=
EvtComplex
( 0.0, vf / mVar ) *
151
dual
(
EvtGenFunctions::directProd
( p4Sum, Q ) );
152
H.
addDirProd
( ( a0f - a3f ) * 2.0 * ( mMeson / Q2 ) * p4b, Q );
153
154
for
(
int
i1 = 0; i1 < 2; ++i1 ) {
155
for
(
int
i2 = 0; i2 < 2; ++i2 ) {
156
const
EvtVector4C
hardCur =
hardCurrPP
( parent, i1, i2 );
157
const
EvtVector4C
Heps = H.
cont2
( hardCur );
158
for
(
int
i = 0; i < 3; i++ ) {
159
// psi-meson polarization vector
160
const
EvtVector4C
eps = Jpsi->
epsParent
( i ).
conj
();
161
const
EvtComplex
amp = eps * Heps;
162
vertex
( i, i1, i2, amp );
163
}
164
}
165
}
166
}
EvtBcVPPHad.hh
EvtDiracSpinor.hh
EvtIdSet.hh
EvtPDL.hh
EvtParticle.hh
EvtReport.hh
EvtGenReport
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition
EvtReport.cpp:32
EVTGEN_INFO
@ EVTGEN_INFO
Definition
EvtReport.hh:52
EVTGEN_ERROR
@ EVTGEN_ERROR
Definition
EvtReport.hh:49
EvtSpinType.hh
dual
EvtTensor4C dual(const EvtTensor4C &t2)
Definition
EvtTensor4C.cpp:363
EvtTensor4C.hh
EvtVector4R.hh
EvtBcVPPHad
Definition
EvtBcVPPHad.hh:35
EvtBcVPPHad::decay
void decay(EvtParticle *parent) override
Definition
EvtBcVPPHad.cpp:123
EvtBcVPPHad::init
void init() override
Definition
EvtBcVPPHad.cpp:45
EvtBcVPPHad::initProbMax
void initProbMax() override
Definition
EvtBcVPPHad.cpp:80
EvtBcVPPHad::m_outCode
int m_outCode
Definition
EvtBcVPPHad.hh:58
EvtBcVPPHad::m_whichFit
int m_whichFit
Definition
EvtBcVPPHad.hh:51
EvtBcVPPHad::m_WCurr
std::unique_ptr< EvtWHad > m_WCurr
Definition
EvtBcVPPHad.hh:61
EvtBcVPPHad::getName
std::string getName() const override
Definition
EvtBcVPPHad.cpp:33
EvtBcVPPHad::m_FFModel
std::unique_ptr< EvtBCVFF2 > m_FFModel
Definition
EvtBcVPPHad.hh:60
EvtBcVPPHad::clone
EvtDecayBase * clone() const override
Definition
EvtBcVPPHad.cpp:38
EvtBcVPPHad::m_idVector
int m_idVector
Definition
EvtBcVPPHad.hh:54
EvtBcVPPHad::hardCurrPP
EvtVector4C hardCurrPP(EvtParticle *parent, int i1, int i2) const
Definition
EvtBcVPPHad.cpp:106
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
EvtDiracSpinor
Definition
EvtDiracSpinor.hh:32
EvtIdSet
Definition
EvtIdSet.hh:30
EvtIdSet::contains
bool contains(const EvtId &id) const
Definition
EvtIdSet.cpp:46
EvtId::getId
int getId() const
Definition
EvtId.hh:41
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::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
EvtSpinType::SCALAR
@ SCALAR
Definition
EvtSpinType.hh:30
EvtSpinType::DIRAC
@ DIRAC
Definition
EvtSpinType.hh:33
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