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
EvtPsi2JpsiPiPi.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/EvtPsi2JpsiPiPi.hh
"
22
23
#include "
EvtGenBase/EvtComplex.hh
"
24
#include "
EvtGenBase/EvtParticle.hh
"
25
#include "
EvtGenBase/EvtTensor4C.hh
"
26
#include "
EvtGenBase/EvtVector4C.hh
"
27
#include "
EvtGenBase/EvtVector4R.hh
"
28
29
#include <cmath>
30
31
EvtPsi2JpsiPiPi::EvtPsi2JpsiPiPi
() :
32
m_tree
( false ),
33
m_phi
( 0.0 ),
34
m_cosPhi
( 1.0 ),
35
m_cos2Phi
( 1.0 ),
36
m_sinPhi
( 0.0 ),
37
m_sin2Phi
( 0.0 )
38
{
39
this->
setNLOArrays
();
40
}
41
42
void
EvtPsi2JpsiPiPi::setNLOArrays
()
43
{
44
// Parameters for NLO corrections obtained by fitting distributions
45
// shown in Fig 2 of the article
46
m_c0
[0] = 1.21214;
47
m_c0
[1] = -2.517;
48
m_c0
[2] = 4.66947;
49
m_c0
[3] = 15.0853;
50
m_c0
[4] = -49.7381;
51
m_c0
[5] = 35.5604;
52
53
m_c1
[0] = -6.74237;
54
m_c1
[1] = 84.2391;
55
m_c1
[2] = -389.74;
56
m_c1
[3] = 823.902;
57
m_c1
[4] = -808.538;
58
m_c1
[5] = 299.1;
59
60
m_c2
[0] = -1.25073;
61
m_c2
[1] = 16.2666;
62
m_c2
[2] = -74.6453;
63
m_c2
[3] = 156.789;
64
m_c2
[4] = -154.185;
65
m_c2
[5] = 57.5711;
66
67
m_s1
[0] = -8.01579;
68
m_s1
[1] = 93.9513;
69
m_s1
[2] = -451.713;
70
m_s1
[3] = 1049.67;
71
m_s1
[4] = -1162.9;
72
m_s1
[5] = 492.364;
73
74
m_s2
[0] = 3.04459;
75
m_s2
[1] = -26.0901;
76
m_s2
[2] = 81.1557;
77
m_s2
[3] = -112.875;
78
m_s2
[4] = 66.0432;
79
m_s2
[5] = -10.0446;
80
}
81
82
std::string
EvtPsi2JpsiPiPi::getName
()
const
83
{
84
return
"PSI2JPSIPIPI"
;
85
}
86
87
EvtDecayBase
*
EvtPsi2JpsiPiPi::clone
()
const
88
{
89
return
new
EvtPsi2JpsiPiPi
;
90
}
91
92
void
EvtPsi2JpsiPiPi::initProbMax
()
93
{
94
// Should be OK for all m_phi values
95
setProbMax
( 1.1 );
96
}
97
98
void
EvtPsi2JpsiPiPi::init
()
99
{
100
checkNArg
( 0, 1 );
101
102
if
(
getNArg
() == 0 ) {
103
m_tree
=
true
;
104
m_phi
= 0.0;
105
106
}
else
{
107
m_tree
=
false
;
108
m_phi
=
getArg
( 0 );
// LO vs NLO mixing angle in radians
109
}
110
111
double
twoPhi = 2.0 *
m_phi
;
112
m_cosPhi
= cos(
m_phi
);
113
m_cos2Phi
= cos( twoPhi );
114
m_sinPhi
= sin(
m_phi
);
115
m_sin2Phi
= sin( twoPhi );
116
}
117
118
void
EvtPsi2JpsiPiPi::decay
(
EvtParticle
* root )
119
{
120
root->
initializePhaseSpace
(
getNDaug
(),
getDaugs
() );
121
122
EvtVector4R
p4 =
123
root->
getDaug
( 0 )->
getP4
();
// J-psi momentum in psi2 rest frame
124
EvtVector4R
k1 = root->
getDaug
( 1 )->
getP4
();
// pi+ momentum in psi2 rest frame
125
double
mPiSq = k1.
mass2
();
// squared pion mass
126
EvtVector4R
k2 = root->
getDaug
( 2 )->
getP4
();
// pi- momentum in psi2 rest frame
127
EvtVector4R
tq = k1 - k2;
128
EvtVector4R
p3 = k1 + k2;
129
double
p3Sq = p3.
mass2
();
130
double
mpipi = p3.
mass
();
131
double
corr( 1.0 );
132
133
if
( !
m_tree
) {
134
// Calculate NLO corrections
135
corr = 0.0;
136
for
(
int
iq = 0; iq <
m_nQ
; ++iq ) {
137
corr += (
m_c0
[iq] +
m_c1
[iq] *
m_cosPhi
+
m_c2
[iq] *
m_cos2Phi
+
138
m_s1
[iq] *
m_sinPhi
+
m_s2
[iq] *
m_sin2Phi
) *
139
std::pow( mpipi, iq );
140
}
141
}
142
143
double
mSqTerm = 2.0 * mPiSq / p3Sq;
144
EvtTensor4C
p3Prod =
EvtGenFunctions::directProd
( p3, p3 );
145
146
// Eq 14 from the article
147
EvtTensor4C
L =
EvtGenFunctions::directProd
( tq, tq ) +
148
( ( 1.0 - 2.0 * mSqTerm ) / 3.0 ) *
149
( p3Sq *
EvtTensor4C::g
() - p3Prod );
150
151
EvtTensor4C
T = ( 2.0 / 3.0 ) * ( 1.0 + mSqTerm ) * p3Prod - L;
152
153
for
(
int
iPsi2 = 0; iPsi2 < 5; ++iPsi2 ) {
154
EvtTensor4C
epsX = root->
epsTensor
(
155
iPsi2 );
// psi2 polarization tensor in psi2 rest frame
156
EvtTensor4C
epsXT =
cont22
( epsX, T );
157
158
for
(
int
iPsi = 0; iPsi < 3; ++iPsi ) {
159
EvtVector4C
epsPsi = root->
getDaug
( 0 )->
epsParent
(
160
iPsi );
// Jpsi polarization vector in psi2 rest frame
161
EvtTensor4C
epeps =
dual
(
EvtGenFunctions::directProd
( epsPsi, p4 ) );
162
EvtTensor4C
ttt =
cont22
( epeps, epsXT );
163
164
// Eq 13 from the article
165
EvtComplex
amp = ttt.
trace
();
166
167
// NLO corrections
168
amp *= corr;
169
170
// Set vertex amplitude component
171
vertex
( iPsi2, iPsi, amp );
172
}
173
}
174
}
EvtComplex.hh
EvtParticle.hh
EvtPsi2JpsiPiPi.hh
cont22
EvtTensor3C cont22(const EvtTensor3C &t1, const EvtTensor3C &t2)
Definition
EvtTensor3C.cpp:210
dual
EvtTensor4C dual(const EvtTensor4C &t2)
Definition
EvtTensor4C.cpp:363
EvtTensor4C.hh
EvtVector4C.hh
EvtVector4R.hh
EvtComplex
Definition
EvtComplex.hh:29
EvtDecayAmp::vertex
void vertex(const EvtComplex &)
Definition
EvtDecayAmp.hh:37
EvtDecayBase::EvtDecayBase
EvtDecayBase()=default
EvtDecayBase::getNDaug
int getNDaug() const
Definition
EvtDecayBase.hh:64
EvtDecayBase::getNArg
int getNArg() const
Definition
EvtDecayBase.hh:67
EvtDecayBase::getArg
double getArg(unsigned int j)
Definition
EvtDecayBase.cpp:578
EvtDecayBase::setProbMax
void setProbMax(double prbmx)
Definition
EvtDecayBase.cpp:295
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
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::getP4
const EvtVector4R & getP4() const
Definition
EvtParticle.cpp:144
EvtParticle::getDaug
EvtParticle * getDaug(const int i)
Definition
EvtParticle.hh:173
EvtParticle::epsTensor
virtual EvtTensor4C epsTensor(int i) const
Definition
EvtParticle.cpp:720
EvtPsi2JpsiPiPi::m_cosPhi
double m_cosPhi
Definition
EvtPsi2JpsiPiPi.hh:48
EvtPsi2JpsiPiPi::m_sin2Phi
double m_sin2Phi
Definition
EvtPsi2JpsiPiPi.hh:48
EvtPsi2JpsiPiPi::m_c2
std::array< double, m_nQ > m_c2
Definition
EvtPsi2JpsiPiPi.hh:51
EvtPsi2JpsiPiPi::m_s2
std::array< double, m_nQ > m_s2
Definition
EvtPsi2JpsiPiPi.hh:51
EvtPsi2JpsiPiPi::m_cos2Phi
double m_cos2Phi
Definition
EvtPsi2JpsiPiPi.hh:48
EvtPsi2JpsiPiPi::EvtPsi2JpsiPiPi
EvtPsi2JpsiPiPi()
Definition
EvtPsi2JpsiPiPi.cpp:31
EvtPsi2JpsiPiPi::m_tree
bool m_tree
Definition
EvtPsi2JpsiPiPi.hh:46
EvtPsi2JpsiPiPi::initProbMax
void initProbMax() override
Definition
EvtPsi2JpsiPiPi.cpp:92
EvtPsi2JpsiPiPi::m_c1
std::array< double, m_nQ > m_c1
Definition
EvtPsi2JpsiPiPi.hh:51
EvtPsi2JpsiPiPi::m_nQ
static const int m_nQ
Definition
EvtPsi2JpsiPiPi.hh:50
EvtPsi2JpsiPiPi::setNLOArrays
void setNLOArrays()
Definition
EvtPsi2JpsiPiPi.cpp:42
EvtPsi2JpsiPiPi::clone
EvtDecayBase * clone() const override
Definition
EvtPsi2JpsiPiPi.cpp:87
EvtPsi2JpsiPiPi::m_s1
std::array< double, m_nQ > m_s1
Definition
EvtPsi2JpsiPiPi.hh:51
EvtPsi2JpsiPiPi::getName
std::string getName() const override
Definition
EvtPsi2JpsiPiPi.cpp:82
EvtPsi2JpsiPiPi::init
void init() override
Definition
EvtPsi2JpsiPiPi.cpp:98
EvtPsi2JpsiPiPi::m_sinPhi
double m_sinPhi
Definition
EvtPsi2JpsiPiPi.hh:48
EvtPsi2JpsiPiPi::decay
void decay(EvtParticle *p) override
Definition
EvtPsi2JpsiPiPi.cpp:118
EvtPsi2JpsiPiPi::m_c0
std::array< double, m_nQ > m_c0
Definition
EvtPsi2JpsiPiPi.hh:51
EvtPsi2JpsiPiPi::m_phi
double m_phi
Definition
EvtPsi2JpsiPiPi.hh:47
EvtTensor4C
Definition
EvtTensor4C.hh:38
EvtTensor4C::trace
EvtComplex trace() const
Definition
EvtTensor4C.hh:117
EvtTensor4C::g
static const EvtTensor4C & g()
Definition
EvtTensor4C.cpp:43
EvtVector4C
Definition
EvtVector4C.hh:30
EvtVector4R
Definition
EvtVector4R.hh:29
EvtVector4R::mass
double mass() const
Definition
EvtVector4R.cpp:48
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