cepgen
is hosted by
Hepforge
,
IPPP Durham
CepGen
1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
AlphaEMRunning.cpp
Go to the documentation of this file.
1
/*
2
* CepGen: a central exclusive processes event generator
3
* Copyright (C) 2022 Laurent Forthomme
4
*
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, either version 3 of the License, or
8
* any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
*/
18
19
#include <gsl/gsl_sf_zeta.h>
20
21
#include "
CepGen/Modules/CouplingFactory.h
"
22
#include "
CepGen/Physics/Constants.h
"
23
#include "
CepGen/Physics/Coupling.h
"
24
#include "
CepGen/Physics/PDG.h
"
25
#include "
CepGen/Utils/Message.h
"
26
27
namespace
cepgen
{
29
class
AlphaEMRunning
final :
public
Coupling
{
30
public
:
31
explicit
AlphaEMRunning
(
const
ParametersList
& params) :
Coupling
(params), c_(
steer
<double>(
"c"
)) {}
32
33
static
ParametersDescription
description
() {
34
auto
desc =
Coupling::description
();
35
desc.setDescription(
"Running alpha(EM) evolution algorithm"
);
36
desc.add<
double
>(
"c"
, 1.).setDescription(
37
"running parameter (0 is constant alphaQED, 1 is QED evolution, best L3 fit value is 1.05 +- 0.07 +- 0.14)"
);
38
return
desc;
39
}
40
41
double
operator()
(
double
q)
const override
{
42
return
constants::ALPHA_EM
/ (1. - c_ * (
deltaAlphaL
(q) +
deltaAlphaH
(q)));
43
}
44
45
double
deltaAlphaL
(
double
q)
const
{
46
// lepton contribution to alphaEM (photon propagator), as parameterised by
47
// Steinhauser, Phys.Lett.B 429 (1998) 158-161
48
// https://doi.org/10.1016/S0370-2693(98)00503-6
49
50
// only retrieve once lepton masses
51
static
const
auto
m2_el = std::pow(
PDG::get
().mass(11), 2), m2_mu = std::pow(
PDG::get
().mass(13), 2),
52
m2_tau = std::pow(
PDG::get
().mass(15), 2);
53
// only compute once Riemann zeta function integer values
54
static
const
auto
zeta2 = gsl_sf_zeta_int(2), zeta3 = gsl_sf_zeta_int(3), zeta5 = gsl_sf_zeta_int(5);
55
56
const
auto
q2 = q * q;
57
58
//----- definition of all polarisation functions
59
60
auto
log_qm = [](
double
q2,
double
ml2) {
return
log(q2 / ml2); };
61
// one-loop corrections
62
auto
pi0 = [&log_qm](
double
q2,
double
ml2) {
return
20. / 9 - 4. / 3 * log_qm(q2, ml2) + 8. * ml2 / q2; };
63
// two-loop corrections
64
auto
pi1 = [&log_qm](
double
q2,
double
ml2) {
65
const
auto
lqm = log_qm(q2, ml2);
66
return
5. / 6 - 4. * zeta3 - lqm - 12. * lqm * ml2 / q2;
67
};
68
// three-loop corrections
69
auto
pi2A = [&log_qm](
double
q2,
double
ml2) {
// quenched
70
return
-121. / 48 + (-5. + 8. * log(2)) * zeta2 - 99. / 16 * zeta3 + 10. * zeta5 + 0.125 * log_qm(q2, ml2);
71
};
72
auto
pi2l = [&log_qm](
double
q2,
double
ml12,
double
ml22) {
73
const
auto
lqm1 = log_qm(q2, ml12), lqm2 = log_qm(q2, ml22);
74
return
-116. / 27 + 4. / 3 * zeta2 + 38. / 9 * zeta3 + 14. / 9 * lqm1 + (5. / 18 - 4. / 3 * zeta3) * lqm2 +
75
1. / 6 * lqm1 * lqm1 - lqm1 * lqm2 / 3.;
76
};
77
auto
pi2F = [&log_qm](
double
q2,
double
ml2) {
78
const
auto
lqm = log_qm(q2, ml2);
79
return
-307. / 216 - 8. / 3 * zeta2 + 545. / 144 * zeta3 + (11. / 6 - 4. / 3 * zeta3) * lqm - lqm * lqm / 6.;
80
};
81
auto
pi2h = [&log_qm](
double
q2,
double
ml2) {
82
const
auto
lqm = log_qm(q2, ml2);
83
return
-37. / 6 + 38. * zeta3 / 9. + (11. / 6 - 4. * zeta3 / 3.) * lqm - lqm * lqm / 6;
84
};
85
86
//----- compute lepton alphaQED contributions for all orders
87
88
const
auto
alpha_ov_pi =
constants::ALPHA_EM
* M_1_PI;
89
const
auto
order0 = -0.25 * alpha_ov_pi * (pi0(q2, m2_el) + pi0(q2, m2_mu) + pi0(q2, m2_tau));
90
const
auto
order1 = -0.25 * alpha_ov_pi * alpha_ov_pi * (pi1(q2, m2_el) + pi1(q2, m2_mu) + pi1(q2, m2_tau));
91
const
auto
order2_quenched = pi2A(q2, m2_el) + pi2A(q2, m2_mu) + pi2A(q2, m2_tau);
92
const
auto
order2_l = pi2l(q2, m2_mu, m2_el) + pi2l(q2, m2_tau, m2_mu) + pi2l(q2, m2_tau, m2_el);
93
const
auto
order2_F = pi2F(q2, m2_el) + pi2F(q2, m2_mu) + pi2F(q2, m2_tau);
94
const
auto
order2_h = pi2h(q2, m2_el) + pi2h(q2, m2_mu) + pi2h(q2, m2_tau);
95
const
auto
order2 =
96
-0.25 * alpha_ov_pi * alpha_ov_pi * alpha_ov_pi * (order2_quenched + order2_l + order2_F + order2_h);
97
98
return
order0 + order1 + order2;
99
}
100
101
double
deltaAlphaH
(
double
q)
const
{
102
// hadronic contribution to alphaEM, as parameterised by
103
// Burkhardt and Pietrzyk, Phys.Lett.B 513 (2001) 46-52
104
// https://doi.org/10.1016/S0370-2693(01)00393-8
105
if
(q < 0.)
106
return
0.;
107
auto
param = [](
double
q2,
double
a,
double
b,
double
c) {
return
a + b * log1p(c * q2); };
108
if
(q <= 0.7)
109
return
param(q * q, 0., 0.0023092, 3.9925370);
110
if
(q <= 2.)
111
return
param(q * q, 0., 0.0022333, 4.2191779);
112
if
(q <= 4.)
113
return
param(q * q, 0., 0.0024402, 3.2496684);
114
if
(q <= 10.)
115
return
param(q * q, 0., 0.0027340, 2.0995092);
116
static
const
double
mZ = 91.1876;
117
if
(q <= mZ)
118
return
param(q * q, 0.0010485, 0.0029431, 1.);
119
if
(q <= 1.e4)
120
return
param(q * q, 0.0012234, 0.0029237, 1.);
121
if
(q <= 1.e5)
122
return
param(q * q, 0.0016894, 0.0028984, 1.);
123
CG_WARNING
(
"AlphaEMRunning:deltaAlpha"
) <<
"Q exceeds the validity range of Burkhardt et al. parameterisation."
;
124
return
deltaAlphaH
(1.e5);
125
}
126
127
private
:
128
const
double
c_;
129
};
130
}
// namespace cepgen
131
REGISTER_ALPHAEM_MODULE
(
"running"
, AlphaEMRunning);
Constants.h
CouplingFactory.h
REGISTER_ALPHAEM_MODULE
#define REGISTER_ALPHAEM_MODULE(name, obj)
Add an electromagnetic coupling evolution algorithm.
Definition
CouplingFactory.h:25
Coupling.h
Message.h
CG_WARNING
#define CG_WARNING(mod)
Definition
Message.h:228
PDG.h
cepgen::AlphaEMRunning
Running electromagnetic alpha calculator.
Definition
AlphaEMRunning.cpp:29
cepgen::AlphaEMRunning::operator()
double operator()(double q) const override
Compute for a given .
Definition
AlphaEMRunning.cpp:41
cepgen::AlphaEMRunning::deltaAlphaH
double deltaAlphaH(double q) const
Definition
AlphaEMRunning.cpp:101
cepgen::AlphaEMRunning::AlphaEMRunning
AlphaEMRunning(const ParametersList ¶ms)
Definition
AlphaEMRunning.cpp:31
cepgen::AlphaEMRunning::description
static ParametersDescription description()
Definition
AlphaEMRunning.cpp:33
cepgen::AlphaEMRunning::deltaAlphaL
double deltaAlphaL(double q) const
Definition
AlphaEMRunning.cpp:45
cepgen::Coupling
A generic evaluation algorithm.
Definition
Coupling.h:26
cepgen::PDG::get
static PDG & get()
Retrieve a unique instance of this particles info collection.
Definition
PDG.cpp:41
cepgen::ParametersDescription
A description object for parameters collection.
Definition
ParametersDescription.h:26
cepgen::ParametersList
Definition
ParametersList.h:52
cepgen::Steerable::description
static ParametersDescription description()
Description of all object parameters.
Definition
Steerable.cpp:42
cepgen::Steerable::steer
T steer(const std::string &key) const
Retrieve a parameters as previously steered.
Definition
Steerable.h:39
cepgen::constants::ALPHA_EM
constexpr double ALPHA_EM
Electromagnetic coupling constant .
Definition
Constants.h:28
cepgen
Common namespace for this Monte Carlo generator.
Definition
CommandLineHandler.cpp:36
CepGen
Physics
AlphaEMRunning.cpp
Generated on Mon Jul 29 2024 for CepGen by
1.9.7