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
EvtRareLbToLllFFlQCD.cpp
Go to the documentation of this file.
1
2
/***********************************************************************
3
* Copyright 1998-2022 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/EvtRareLbToLllFFlQCD.hh
"
22
23
#include "
EvtGenBase/EvtConst.hh
"
24
#include "
EvtGenBase/EvtIdSet.hh
"
25
#include "
EvtGenBase/EvtPDL.hh
"
26
#include "
EvtGenBase/EvtVector4R.hh
"
27
28
#include "
EvtGenModels/EvtWilsonCoefficients.hh
"
29
30
#include <cmath>
31
#include <stdlib.h>
32
33
//-----------------------------------------------------------------------------
34
// Implementation file for class : EvtRareLbToLllFFlQCD
35
//
36
// 2016-04-19 : Michal Kreps
37
// 2014-10-22 : Michal Kreps
38
//-----------------------------------------------------------------------------
39
40
void
EvtRareLbToLllFFlQCD::init
()
41
{
42
const
EvtId
LbID =
EvtPDL::getId
( std::string(
"Lambda_b0"
) );
43
const
EvtId
LID =
EvtPDL::getId
( std::string(
"Lambda0"
) );
44
const
EvtId
BID =
EvtPDL::getId
( std::string(
"B+"
) );
45
const
EvtId
KID =
EvtPDL::getId
( std::string(
"K-"
) );
46
const
double
m1 =
EvtPDL::getMass
( LbID );
47
const
double
m2 =
EvtPDL::getMass
( LID );
48
const
double
mB =
EvtPDL::getMass
( BID );
49
const
double
mK =
EvtPDL::getMass
( KID );
50
m_t0
= ( m1 - m2 ) * ( m1 - m2 );
51
m_tplus
= ( mB + mK ) * ( mB + mK );
52
53
m_fconsts
[0][0] = 0.4221;
54
m_fconsts
[0][1] = -1.1386;
55
m_fconsts
[0][2] = 5.416;
56
m_fconsts
[1][0] = 0.5182;
57
m_fconsts
[1][1] = -1.3495;
58
m_fconsts
[1][2] = 5.416;
59
m_fconsts
[2][0] = 0.3725;
60
m_fconsts
[2][1] = -0.9389;
61
m_fconsts
[2][2] = 5.711;
62
63
m_gconsts
[0][0] = 0.3563;
64
m_gconsts
[0][1] = -1.0612;
65
m_gconsts
[0][2] = 5.750;
66
m_gconsts
[1][0] = 0.3563;
67
m_gconsts
[1][1] = -1.1357;
68
m_gconsts
[1][2] = 5.750;
69
m_gconsts
[2][0] = 0.4028;
70
m_gconsts
[2][1] = -1.0290;
71
m_gconsts
[2][2] = 5.367;
72
73
m_hconsts
[0][0] = 0.4960;
74
m_hconsts
[0][1] = -1.1275;
75
m_hconsts
[0][2] = 5.416;
76
m_hconsts
[1][0] = 0.3876;
77
m_hconsts
[1][1] = -0.9623;
78
m_hconsts
[1][2] = 5.416;
79
m_hconsts
[2][0] = 0;
80
m_hconsts
[2][1] = 0;
81
m_hconsts
[2][2] = 0;
82
83
m_htildaconsts
[0][0] = 0.3403;
84
m_htildaconsts
[0][1] = -0.7697;
85
m_htildaconsts
[0][2] = 5.750;
86
m_htildaconsts
[1][0] = 0.3403;
87
m_htildaconsts
[1][1] = -0.8008;
88
m_htildaconsts
[1][2] = 5.750;
89
m_htildaconsts
[2][0] = 0;
90
m_htildaconsts
[2][1] = 0;
91
m_htildaconsts
[2][2] = 0;
92
93
EvtGenReport
(
EVTGEN_INFO
,
"EvtGen"
)
94
<<
" EvtRareLbToLll is using form factors from arXiv:1602.01399 "
95
<< std::endl;
96
}
97
98
//=============================================================================
99
100
void
EvtRareLbToLllFFlQCD::getFF
(
const
EvtParticle
& parent,
101
const
EvtParticle
&
lambda
,
102
EvtRareLbToLllFFBase::FormFactors
& FF )
const
103
{
104
// Find the FF information for this particle, start by setting all to zero
105
FF.
areZero
();
106
107
const
double
m1 = parent.
getP4
().
mass
();
108
const
double
m2 =
lambda
.getP4().mass();
109
// double m21=m2/m1;
110
EvtVector4R
p4parent;
111
p4parent.
set
( parent.
mass
(), 0, 0, 0 );
112
const
double
q2 = ( p4parent -
lambda
.getP4() ).mass2();
113
114
const
double
massSum = m1 + m2;
115
const
double
massDiff = m1 - m2;
116
const
double
massSumSq = massSum * massSum;
117
const
double
massDiffSq = massDiff * massDiff;
118
const
double
q2Sum = q2 - massSumSq;
119
const
double
q2Diff = q2 - massDiffSq;
120
121
double
f[3];
122
double
g[3];
123
double
h[2];
124
double
htilda[2];
125
126
for
(
int
i = 0; i <= 2; ++i ) {
127
f[i] =
formFactorParametrization
( q2,
m_fconsts
[i][0],
m_fconsts
[i][1],
128
m_fconsts
[i][2] );
129
g[i] =
formFactorParametrization
( q2,
m_gconsts
[i][0],
m_gconsts
[i][1],
130
m_gconsts
[i][2] );
131
}
132
for
(
int
i = 0; i <= 1; ++i ) {
133
h[i] =
formFactorParametrization
( q2,
m_hconsts
[i][0],
m_hconsts
[i][1],
134
m_hconsts
[i][2] );
135
htilda[i] =
formFactorParametrization
( q2,
m_htildaconsts
[i][0],
136
m_htildaconsts
[i][1],
137
m_htildaconsts
[i][2] );
138
}
139
140
// Both v^2==v'^2==1 by definition
141
FF.
m_F
[0] = f[1];
142
FF.
m_F
[1] = m1 *
143
( ( f[1] - f[0] ) * massSum +
144
massDiff *
145
( q2 * ( f[2] - f[1] ) - ( f[2] - f[0] ) * massSumSq ) /
146
q2 ) /
147
q2Sum;
148
FF.
m_F
[2] = -m2 *
149
( massSum * ( f[0] - f[1] ) +
150
massDiff *
151
( q2 * ( f[2] - f[1] ) - massSumSq * ( f[2] - f[0] ) ) /
152
q2 ) /
153
q2Sum;
154
155
FF.
m_G
[0] = g[1];
156
FF.
m_G
[1] = m1 / q2Diff *
157
( massDiff * ( g[0] - g[1] ) +
158
massSum *
159
( q2 * ( g[1] - g[2] ) + massDiffSq * ( g[2] - g[0] ) ) /
160
q2 );
161
FF.
m_G
[2] = -m2 / q2Diff *
162
( massDiff * ( g[1] - g[0] ) +
163
massSum *
164
( q2 * ( g[1] - g[2] ) + massDiffSq * ( g[2] - g[0] ) ) /
165
q2 );
166
167
FF.
m_FT
[0] = -massSum * h[1];
168
169
FF.
m_FT
[1] = -m1 / q2Sum *
170
( 2 * h[1] * m2 * massSum - h[0] * ( q2 - massSum * massDiff ) );
171
FF.
m_FT
[2] = -m2 / q2Sum *
172
( 2 * h[1] * m1 * massSum - h[0] * ( q2 + massSum * massDiff ) );
173
174
FF.
m_GT
[0] = massDiff * htilda[1];
175
176
FF.
m_GT
[1] = m1 / q2Diff *
177
( 2 * htilda[1] * massDiff * m2 +
178
htilda[0] * ( q2 - massSum * massDiff ) );
179
FF.
m_GT
[2] = m2 / q2Diff *
180
( -2 * htilda[1] * massDiff * m1 +
181
htilda[0] * ( q2 + massSum * massDiff ) );
182
183
return
;
184
}
185
186
double
EvtRareLbToLllFFlQCD::formFactorParametrization
(
const
double
q2,
187
const
double
a0,
188
const
double
a1
,
189
const
double
pole )
const
190
{
191
const
double
z =
zvar
( q2 );
192
return
1. / ( 1. - q2 / ( pole * pole ) ) * ( a0 +
a1
* z );
193
}
194
195
double
EvtRareLbToLllFFlQCD::zvar
(
const
double
q2 )
const
196
{
197
const
double
a = std::sqrt(
m_tplus
- q2 );
198
const
double
b = std::sqrt(
m_tplus
-
m_t0
);
199
200
return
( a - b ) / ( a + b );
201
}
EvtConst.hh
lambda
double lambda(double q, double m1, double m2)
Definition
EvtFlatQ2.cpp:30
EvtIdSet.hh
a1
const double a1
Definition
EvtLi2Spence.cpp:23
EvtPDL.hh
EvtRareLbToLllFFlQCD.hh
EvtGenReport
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition
EvtReport.cpp:32
EVTGEN_INFO
@ EVTGEN_INFO
Definition
EvtReport.hh:52
EvtVector4R.hh
EvtWilsonCoefficients.hh
EvtId
Definition
EvtId.hh:27
EvtPDL::getMass
static double getMass(EvtId i)
Definition
EvtPDL.cpp:311
EvtPDL::getId
static EvtId getId(const std::string &name)
Definition
EvtPDL.cpp:283
EvtParticle
Definition
EvtParticle.hh:45
EvtParticle::getP4
const EvtVector4R & getP4() const
Definition
EvtParticle.cpp:144
EvtParticle::mass
double mass() const
Definition
EvtParticle.cpp:159
EvtRareLbToLllFFBase::FormFactors
Definition
EvtRareLbToLllFFBase.hh:41
EvtRareLbToLllFFBase::FormFactors::m_G
double m_G[4]
Definition
EvtRareLbToLllFFBase.hh:50
EvtRareLbToLllFFBase::FormFactors::m_FT
double m_FT[4]
Definition
EvtRareLbToLllFFBase.hh:51
EvtRareLbToLllFFBase::FormFactors::m_F
double m_F[4]
Definition
EvtRareLbToLllFFBase.hh:49
EvtRareLbToLllFFBase::FormFactors::m_GT
double m_GT[4]
Definition
EvtRareLbToLllFFBase.hh:52
EvtRareLbToLllFFBase::FormFactors::areZero
void areZero()
Definition
EvtRareLbToLllFFBase.cpp:28
EvtRareLbToLllFFlQCD::getFF
void getFF(const EvtParticle &parent, const EvtParticle &lambda, EvtRareLbToLllFFBase::FormFactors &FF) const override
Definition
EvtRareLbToLllFFlQCD.cpp:100
EvtRareLbToLllFFlQCD::init
void init() override
Definition
EvtRareLbToLllFFlQCD.cpp:40
EvtRareLbToLllFFlQCD::m_t0
double m_t0
Definition
EvtRareLbToLllFFlQCD.hh:62
EvtRareLbToLllFFlQCD::formFactorParametrization
double formFactorParametrization(const double q2, const double a0, const double a1, const double pole) const
Definition
EvtRareLbToLllFFlQCD.cpp:186
EvtRareLbToLllFFlQCD::zvar
double zvar(const double q2) const
Definition
EvtRareLbToLllFFlQCD.cpp:195
EvtRareLbToLllFFlQCD::m_htildaconsts
double m_htildaconsts[3][3]
Definition
EvtRareLbToLllFFlQCD.hh:60
EvtRareLbToLllFFlQCD::m_gconsts
double m_gconsts[3][3]
Definition
EvtRareLbToLllFFlQCD.hh:58
EvtRareLbToLllFFlQCD::m_tplus
double m_tplus
Definition
EvtRareLbToLllFFlQCD.hh:63
EvtRareLbToLllFFlQCD::m_hconsts
double m_hconsts[3][3]
Definition
EvtRareLbToLllFFlQCD.hh:59
EvtRareLbToLllFFlQCD::m_fconsts
double m_fconsts[3][3]
Definition
EvtRareLbToLllFFlQCD.hh:57
EvtVector4R
Definition
EvtVector4R.hh:29
EvtVector4R::mass
double mass() const
Definition
EvtVector4R.cpp:48
EvtVector4R::set
void set(int i, double d)
Definition
EvtVector4R.hh:168
Generated by
1.17.0