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
24#include "CepGen/Physics/PDG.h"
26
27namespace cepgen {
29 class AlphaEMRunning final : public Coupling {
30 public:
31 explicit AlphaEMRunning(const ParametersList& params) : Coupling(params), c_(steer<double>("c")) {}
32
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
131REGISTER_ALPHAEM_MODULE("running", AlphaEMRunning);
#define REGISTER_ALPHAEM_MODULE(name, obj)
Add an electromagnetic coupling evolution algorithm.
#define CG_WARNING(mod)
Definition Message.h:228
Running electromagnetic alpha calculator.
double operator()(double q) const override
Compute for a given .
double deltaAlphaH(double q) const
AlphaEMRunning(const ParametersList &params)
static ParametersDescription description()
double deltaAlphaL(double q) const
A generic evaluation algorithm.
Definition Coupling.h:26
static PDG & get()
Retrieve a unique instance of this particles info collection.
Definition PDG.cpp:41
A description object for parameters collection.
static ParametersDescription description()
Description of all object parameters.
Definition Steerable.cpp:42
T steer(const std::string &key) const
Retrieve a parameters as previously steered.
Definition Steerable.h:39
constexpr double ALPHA_EM
Electromagnetic coupling constant .
Definition Constants.h:28
Common namespace for this Monte Carlo generator.