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
EvtPhiDalitz.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/EvtPhiDalitz.hh
"
22
23
#include "
EvtGenBase/EvtGenKine.hh
"
24
#include "
EvtGenBase/EvtPDL.hh
"
25
#include "
EvtGenBase/EvtParticle.hh
"
26
#include "
EvtGenBase/EvtReport.hh
"
27
#include "
EvtGenBase/EvtVector3C.hh
"
28
#include "
EvtGenBase/EvtVector3R.hh
"
29
#include "
EvtGenBase/EvtVector4C.hh
"
30
#include "
EvtGenBase/EvtVector4R.hh
"
31
32
#include <math.h>
33
#include <stdlib.h>
34
#include <string>
35
36
// Implementation of KLOE measurement
37
// PL B561: 55-60 (2003) + Erratum B609:449-450 (2005)
38
// or hep-ex/0303016v2
39
40
std::string
EvtPhiDalitz::getName
()
const
41
{
42
return
"PHI_DALITZ"
;
43
}
44
45
EvtDecayBase
*
EvtPhiDalitz::clone
()
const
46
{
47
return
new
EvtPhiDalitz
;
48
}
49
50
void
EvtPhiDalitz::init
()
51
{
52
// check that there are 0 arguments
53
checkNArg
( 0 );
54
checkNDaug
( 3 );
55
56
checkSpinParent
(
EvtSpinType::VECTOR
);
57
58
checkSpinDaughter
( 0,
EvtSpinType::SCALAR
);
59
checkSpinDaughter
( 1,
EvtSpinType::SCALAR
);
60
checkSpinDaughter
( 2,
EvtSpinType::SCALAR
);
61
62
// results taken from KLOE results: arxiv.org/abs/hep-ex/0303016
63
m_mRho
= 0.7758;
64
m_gRho
= 0.1439;
65
m_aD
= 0.78;
66
m_phiD
= -2.47;
67
m_aOmega
= 0.0071;
68
m_phiOmega
= -0.22;
69
70
m_locPip
= -1;
71
m_locPim
= -1;
72
m_locPi0
= -1;
73
74
for
(
int
i = 0; i < 3; i++ ) {
75
if
(
getDaug
( i ) ==
EvtPDL::getId
(
"pi+"
) )
76
m_locPip
= i;
77
if
(
getDaug
( i ) ==
EvtPDL::getId
(
"pi-"
) )
78
m_locPim
= i;
79
if
(
getDaug
( i ) ==
EvtPDL::getId
(
"pi0"
) )
80
m_locPi0
= i;
81
}
82
if
(
m_locPip
== -1 ||
m_locPim
== -1 ||
m_locPi0
== -1 ) {
83
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
84
<<
getModelName
()
85
<<
"generator expects daughters to be pi+ pi- pi0\n"
;
86
EvtGenReport
(
EVTGEN_ERROR
,
"EvtGen"
)
87
<<
"Found "
<<
EvtPDL::name
(
getDaug
( 0 ) ) <<
" "
88
<<
EvtPDL::name
(
getDaug
( 1 ) ) <<
" "
89
<<
EvtPDL::name
(
getDaug
( 2 ) ) << std::endl;
90
}
91
}
92
93
void
EvtPhiDalitz::initProbMax
()
94
{
95
setProbMax
( 300.0 );
96
}
97
98
void
EvtPhiDalitz::decay
(
EvtParticle
* p )
99
{
100
const
EvtId
PIP =
EvtPDL::getId
(
"pi+"
);
101
const
EvtId
PIM =
EvtPDL::getId
(
"pi-"
);
102
const
EvtId
PIZ =
EvtPDL::getId
(
"pi0"
);
103
const
EvtId
OMEGA =
EvtPDL::getId
(
"omega"
);
104
105
p->
initializePhaseSpace
(
getNDaug
(),
getDaugs
() );
106
107
const
EvtVector4R
Ppip = p->
getDaug
(
m_locPip
)->
getP4
();
108
const
EvtVector4R
Ppim = p->
getDaug
(
m_locPim
)->
getP4
();
109
const
EvtVector4R
Ppi0 = p->
getDaug
(
m_locPi0
)->
getP4
();
110
const
EvtVector4R
Qm = ( Ppim + Ppi0 );
111
const
EvtVector4R
Qp = ( Ppip + Ppi0 );
112
const
EvtVector4R
Q0 = ( Ppip + Ppim );
113
const
double
m_pip =
EvtPDL::getMeanMass
( PIP );
114
const
double
m_pim =
EvtPDL::getMeanMass
( PIM );
115
const
double
m_pi0 =
EvtPDL::getMeanMass
( PIZ );
116
const
double
Mrhop =
m_mRho
;
117
const
double
Mrhom =
m_mRho
;
118
const
double
Mrho0 =
m_mRho
;
119
const
double
M2rhop = pow( Mrhop, 2 );
120
const
double
M2rhom = pow( Mrhom, 2 );
121
const
double
M2rho0 = pow( Mrho0, 2 );
122
const
double
M2omega = pow(
EvtPDL::getMeanMass
( OMEGA ), 2 );
123
124
const
double
Wrhop =
m_gRho
;
125
const
double
Wrhom =
m_gRho
;
126
const
double
Wrho0 =
m_gRho
;
127
const
double
Womega =
EvtPDL::getWidth
( OMEGA );
128
129
const
double
QmM = Qm.
mass
();
130
const
double
QmM2 = Qm.
mass2
();
131
const
double
QpM = Qp.
mass
();
132
const
double
QpM2 = Qp.
mass2
();
133
const
double
Q0M = Q0.
mass
();
134
const
double
Q0M2 = Q0.
mass2
();
135
136
//Rho- Resonance Amplitude
137
const
double
qm =
calc_q
( QmM, m_pim, m_pi0 );
138
const
double
qm_0 =
calc_q
( Mrhom, m_pim, m_pi0 );
139
const
double
Gm = Wrhom * pow( qm / qm_0, 3 ) * ( M2rhom / QmM2 );
140
const
EvtComplex
Drhom( ( QmM2 - M2rhom ), QmM * Gm );
141
const
EvtComplex
A1( M2rhom / Drhom );
142
143
//Rho+ Resonance Amplitude
144
const
double
qp =
calc_q
( QpM, m_pip, m_pi0 );
145
const
double
qp_0 =
calc_q
( Mrhop, m_pip, m_pi0 );
146
const
double
Gp = Wrhop * pow( qp / qp_0, 3 ) * ( M2rhop / QpM2 );
147
const
EvtComplex
Drhop( ( QpM2 - M2rhop ), QpM * Gp );
148
const
EvtComplex
A2( M2rhop / Drhop );
149
150
//Rho0 Resonance Amplitude
151
const
double
q0 =
calc_q
( Q0M, m_pip, m_pim );
152
const
double
q0_0 =
calc_q
( Mrho0, m_pip, m_pim );
153
const
double
G0 = Wrho0 * pow( q0 / q0_0, 3 ) * ( M2rho0 / Q0M2 );
154
const
EvtComplex
Drho0( ( Q0M2 - M2rho0 ), Q0M * G0 );
155
const
EvtComplex
A3( M2rho0 / Drho0 );
156
157
//Omega Resonance Amplitude
158
const
EvtComplex
OmegaA(
m_aOmega
* cos(
m_phiOmega
),
159
m_aOmega
* sin(
m_phiOmega
) );
160
const
EvtComplex
DOmega( ( Q0M2 - M2omega ), Q0M * Womega );
161
const
EvtComplex
A4( OmegaA * M2omega / DOmega );
162
163
//Direct Decay Amplitude
164
const
EvtComplex
A5(
m_aD
* cos(
m_phiD
),
m_aD
* sin(
m_phiD
) );
165
166
const
EvtComplex
Atot = A1 + A2 + A3 + A4 + A5;
167
168
// Polarization
169
170
const
EvtVector4C
ep0 = p->
eps
( 0 );
171
const
EvtVector4C
ep1 = p->
eps
( 1 );
172
const
EvtVector4C
ep2 = p->
eps
( 2 );
173
174
const
EvtVector3R
p1( Ppip.
get
( 1 ), Ppip.
get
( 2 ), Ppip.
get
( 3 ) );
175
const
EvtVector3R
p2( Ppim.
get
( 1 ), Ppim.
get
( 2 ), Ppim.
get
( 3 ) );
176
const
EvtVector3R
q =
cross
( p1, p2 );
177
178
const
EvtVector3C
e1( ep0.
get
( 1 ), ep0.
get
( 2 ), ep0.
get
( 3 ) );
179
const
EvtVector3C
e2( ep1.
get
( 1 ), ep1.
get
( 2 ), ep1.
get
( 3 ) );
180
const
EvtVector3C
e3( ep2.
get
( 1 ), ep2.
get
( 2 ), ep2.
get
( 3 ) );
181
182
//This is an approximate formula of the maximum value that
183
//|q| can have.
184
const
double
pM = p->
mass
();
185
const
double
mSum = Ppip.
mass
() + Ppim.
mass
() + Ppi0.
mass
();
186
const
double
norm = 10.26 / ( pM * pM - mSum * mSum );
187
188
vertex
( 0, norm * e1 * q * Atot );
189
vertex
( 1, norm * e2 * q * Atot );
190
vertex
( 2, norm * e3 * q * Atot );
191
192
return
;
193
}
194
195
double
EvtPhiDalitz::calc_q
(
double
M,
double
m1,
double
m2 )
const
196
{
197
const
double
m12Sum = m1 + m2;
198
199
if
( M > m12Sum ) {
200
const
double
MSq = M * M;
201
const
double
m12Diff = m1 - m2;
202
203
return
sqrt( ( MSq - ( m12Sum ) * ( m12Sum ) ) *
204
( MSq - ( m12Diff ) * ( m12Diff ) ) ) /
205
( 2.0 * M );
206
}
else
{
207
return
0.0;
208
}
209
}
EvtGenKine.hh
EvtPDL.hh
EvtParticle.hh
EvtPhiDalitz.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
EvtVector3C.hh
cross
EvtVector3R cross(const EvtVector3R &p1, const EvtVector3R &p2)
Definition
EvtVector3R.cpp:77
EvtVector3R.hh
EvtVector4C.hh
EvtVector4R.hh
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::setProbMax
void setProbMax(double prbmx)
Definition
EvtDecayBase.cpp:295
EvtDecayBase::getModelName
std::string getModelName() const
Definition
EvtDecayBase.hh:78
EvtDecayBase::getDaug
EvtId getDaug(int i) const
Definition
EvtDecayBase.hh:66
EvtDecayBase::checkNDaug
void checkNDaug(int d1, int d2=-1)
Definition
EvtDecayBase.cpp:516
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
Definition
EvtId.hh:27
EvtPDL::getWidth
static double getWidth(EvtId i)
Definition
EvtPDL.cpp:346
EvtPDL::name
static std::string name(EvtId i)
Definition
EvtPDL.cpp:376
EvtPDL::getMeanMass
static double getMeanMass(EvtId i)
Definition
EvtPDL.cpp:306
EvtPDL::getId
static EvtId getId(const std::string &name)
Definition
EvtPDL.cpp:283
EvtParticle
Definition
EvtParticle.hh:45
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::mass
double mass() const
Definition
EvtParticle.cpp:159
EvtParticle::eps
virtual EvtVector4C eps(int i) const
Definition
EvtParticle.cpp:623
EvtPhiDalitz
Definition
EvtPhiDalitz.hh:28
EvtPhiDalitz::m_locPi0
int m_locPi0
Definition
EvtPhiDalitz.hh:48
EvtPhiDalitz::clone
EvtDecayBase * clone() const override
Definition
EvtPhiDalitz.cpp:45
EvtPhiDalitz::decay
void decay(EvtParticle *p) override
Definition
EvtPhiDalitz.cpp:98
EvtPhiDalitz::initProbMax
void initProbMax() override
Definition
EvtPhiDalitz.cpp:93
EvtPhiDalitz::m_aOmega
double m_aOmega
Definition
EvtPhiDalitz.hh:44
EvtPhiDalitz::calc_q
double calc_q(double, double, double) const
Definition
EvtPhiDalitz.cpp:195
EvtPhiDalitz::m_locPim
int m_locPim
Definition
EvtPhiDalitz.hh:47
EvtPhiDalitz::m_locPip
int m_locPip
Definition
EvtPhiDalitz.hh:46
EvtPhiDalitz::m_phiOmega
double m_phiOmega
Definition
EvtPhiDalitz.hh:45
EvtPhiDalitz::m_gRho
double m_gRho
Definition
EvtPhiDalitz.hh:41
EvtPhiDalitz::m_aD
double m_aD
Definition
EvtPhiDalitz.hh:42
EvtPhiDalitz::m_mRho
double m_mRho
Definition
EvtPhiDalitz.hh:40
EvtPhiDalitz::m_phiD
double m_phiD
Definition
EvtPhiDalitz.hh:43
EvtPhiDalitz::getName
std::string getName() const override
Definition
EvtPhiDalitz.cpp:40
EvtPhiDalitz::init
void init() override
Definition
EvtPhiDalitz.cpp:50
EvtSpinType::SCALAR
@ SCALAR
Definition
EvtSpinType.hh:30
EvtSpinType::VECTOR
@ VECTOR
Definition
EvtSpinType.hh:31
EvtVector3C
Definition
EvtVector3C.hh:29
EvtVector3R
Definition
EvtVector3R.hh:26
EvtVector4C
Definition
EvtVector4C.hh:30
EvtVector4C::get
const EvtComplex & get(int) const
Definition
EvtVector4C.hh:125
EvtVector4R
Definition
EvtVector4R.hh:29
EvtVector4R::mass
double mass() const
Definition
EvtVector4R.cpp:48
EvtVector4R::get
double get(int i) const
Definition
EvtVector4R.hh:163
EvtVector4R::mass2
double mass2() const
Definition
EvtVector4R.hh:100
Generated by
1.17.0