cepgen is hosted by Hepforge, IPPP Durham
CepGen 1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
CapellaEtAl.cpp
Go to the documentation of this file.
1/*
2 * CepGen: a central exclusive processes event generator
3 * Copyright (C) 2023-2024 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 <cmath>
20
24
25namespace cepgen {
26 namespace strfun {
29 class CapellaEtAl final : public Parameterisation {
30 public:
31 explicit CapellaEtAl(const ParametersList& params)
32 : Parameterisation(params),
33 pA_(steer<double>("A")),
34 pBu_(steer<double>("Bu")),
35 pBd_(steer<double>("Bd")),
36 alpha_r_(steer<double>("alphaR")),
37 delta_0_(steer<double>("delta0")),
38 coeffs_(steer<std::vector<double> >("coeffs")) {
39 if (coeffs_.size() < 4)
40 throw CG_FATAL("CapellaEtAl") << "Invalid multiplicity of coefficients given: " << coeffs_ << ".";
41 }
42
45 desc.setDescription("Capella et al.");
46 desc.add<double>("A", 0.1502);
47 desc.add<double>("Bu", 1.2064);
48 desc.add<double>("Bd", 0.1798);
49 desc.add<double>("alphaR", 0.4150).setDescription("Reggeon intercept");
50 desc.add<double>("delta0", 0.08).setDescription("effective intercept at Q^2=0");
51 desc.add<std::vector<double> >("coeffs", {0.2631, 0.6452, 3.5489, 1.1170});
52 return desc;
53 }
54
55 void eval() override {
56 const auto nq2 = 1.5 * (1. + args_.q2 / (args_.q2 + coeffs_.at(2))); // n(Q^2) function in the paper
57 const auto dq2 = delta_0_ * (1 + (2 * args_.q2) / (args_.q2 + coeffs_.at(0))); // big-Delta(Q^2) function
58 const auto c1 = std::pow(args_.q2 / (args_.q2 + coeffs_.at(0)), 1. + dq2);
59 const auto c2 = std::pow(args_.q2 / (args_.q2 + coeffs_.at(1)), alpha_r_);
60
61 setF2(pA_ * std::pow(args_.xbj, -dq2) * std::pow(1 - args_.xbj, nq2 + 4.0) * c1 +
62 std::pow(args_.xbj, 1.0 - alpha_r_) *
63 (pBu_ * std::pow(1 - args_.xbj, nq2) + pBd_ * std::pow(1 - args_.xbj, nq2 + 1.0)) * c2);
64
65 // Note: add the high-Q^2 QCD evolution case (eq. (8) in the paper)
66 }
67
68 private:
69 const double pA_, pBu_, pBd_, alpha_r_, delta_0_;
70 const std::vector<double> coeffs_;
71 };
72 } // namespace strfun
73} // namespace cepgen
#define CG_FATAL(mod)
Definition Exception.h:61
#define REGISTER_STRFUN(name, id, obj)
Add a structure functions definition to the list of handled parameterisation.
A description object for parameters collection.
T steer(const std::string &key) const
Retrieve a parameters as previously steered.
Definition Steerable.h:39
Low-x structure functions, valid for the range GeV^2 .
CapellaEtAl(const ParametersList &params)
static ParametersDescription description()
void eval() override
Local structure functions evaluation method.
Base object for the parameterisation of nucleon structure functions.
Arguments args_
Last couple computed.
Parameterisation & setF2(double f2)
static ParametersDescription description()
Generic description for the structure functions.
Common namespace for this Monte Carlo generator.