cepgen is hosted by Hepforge, IPPP Durham
CepGen 1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
BlockDurandHa.cpp
Go to the documentation of this file.
1/*
2 * CepGen: a central exclusive processes event generator
3 * Copyright (C) 2017-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 {
28 class BlockDurandHa final : public Parameterisation {
29 public:
30 explicit BlockDurandHa(const ParametersList& params)
31 : Parameterisation(params),
32 a_(steer<std::vector<double> >("a")),
33 b_(steer<std::vector<double> >("b")),
34 c_(steer<std::vector<double> >("c")),
35 n_(steer<double>("n")),
36 lambda_(steer<double>("Lambda")),
37 mu2_(steer<double>("mu2")),
38 m2_(steer<double>("m2")) {
39 if (a_.size() != 3)
40 throw CG_FATAL("BlockDurandHa") << "Parameter 'a' should have 3 components! Parsed " << a_ << ".";
41 if (b_.size() != 3)
42 throw CG_FATAL("BlockDurandHa") << "Parameter 'b' should have 3 components! Parsed " << b_ << ".";
43 if (c_.size() != 2)
44 throw CG_FATAL("BlockDurandHa") << "Parameter 'c' should have 3 components! Parsed " << c_ << ".";
45 }
46
47 void eval() override {
48 const double tau = args_.q2 / (args_.q2 + mu2_);
49 const double xl = log1p(args_.q2 / mu2_);
50 const double xlx = log(tau / args_.xbj);
51
52 const double A = a_.at(0) + a_.at(1) * xl + a_.at(2) * xl * xl;
53 const double B = b_.at(0) + b_.at(1) * xl + b_.at(2) * xl * xl;
54 const double C = c_.at(0) + c_.at(1) * xl;
55 const double D = args_.q2 * (args_.q2 + lambda_ * m2_) / pow(args_.q2 + m2_, 2);
56
57 setF2(D * pow(1. - args_.xbj, n_) * (C + A * xlx + B * xlx * xlx));
58 }
59
62 desc.setDescription("Block-Durand-Ha (continuum)");
63 desc.add<std::vector<double> >("a", {8.205e-4, -5.148e-2, -4.725e-3});
64 desc.add<std::vector<double> >("b", {2.217e-3, 1.244e-2, 5.958e-4});
65 desc.add<std::vector<double> >("c", {0.255e0, 1.475e-1});
66 desc.add<double>("n", 11.49);
67 desc.add<double>("Lambda", 2.430);
68 desc.add<double>("mu2", 2.82);
69 desc.add<double>("m2", 0.753);
70 return desc;
71 }
72
73 private:
74 std::vector<double> a_, b_, c_;
75 double n_;
77 double lambda_;
79 double mu2_;
81 double m2_;
82 };
83 } // namespace strfun
84} // namespace cepgen
86REGISTER_STRFUN("BlockDurandHa", 13, BlockDurandHa);
#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
parameterisation from Block, Durand, and Ha
BlockDurandHa(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)
double tau(double xbj, double q2) const
Compute the dimensionless variable .
static ParametersDescription description()
Generic description for the structure functions.
Common namespace for this Monte Carlo generator.