cepgen is hosted by Hepforge, IPPP Durham
CepGen 1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
BoostGaussKronrodAnalyticalIntegrator.cpp
Go to the documentation of this file.
1/*
2 * CepGen: a central exclusive processes event generator
3 * Copyright (C) 2022-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 <boost/math/quadrature/gauss_kronrod.hpp>
20
24
25namespace cepgen {
27 template <size_t N>
29 public:
31 : AnalyticIntegrator(params),
32 max_refinements_(steerAs<int, size_t>("limit")),
33 tol_(steer<double>("tolerance")) {}
34
37 desc.setDescription("Boost Gauss-Kronrod integration algorithm");
38 desc.add<int>("limit", 1000).setDescription("maximum number of subintervals to build");
39 desc.add<double>("tolerance", std::numeric_limits<double>::infinity()).setDescription("maximal tolerance");
40 return desc;
41 }
42
43 double integrate(const utils::Function1D& func, void* = nullptr, const Limits& lim = {}) const override {
44 return boost::math::quadrature::gauss_kronrod<double, N>::integrate(func,
45 lim.hasMin() ? lim.min() : range_.min(),
46 lim.hasMax() ? lim.max() : range_.max(),
47 tol_,
48 max_refinements_);
49 }
50
51 private:
52 const size_t max_refinements_;
53 const double tol_;
54 };
55} // namespace cepgen
#define REGISTER_ANALYTIC_INTEGRATOR(name, obj)
Add a generic analytical integrator object builder definition.
cepgen::BoostGaussKronrodAnalyticalIntegrator< 31 > BGKIntegrator31
cepgen::BoostGaussKronrodAnalyticalIntegrator< 41 > BGKIntegrator41
cepgen::BoostGaussKronrodAnalyticalIntegrator< 61 > BGKIntegrator61
cepgen::BoostGaussKronrodAnalyticalIntegrator< 51 > BGKIntegrator51
cepgen::BoostGaussKronrodAnalyticalIntegrator< 15 > BGKIntegrator15
Analytic (functional) integration algorithm.
static ParametersDescription description()
double integrate(const utils::Function1D &func, void *=nullptr, const Limits &lim={}) const override
Evaluate the integral of a function at a given value.
Validity interval for a variable.
Definition Limits.h:28
A description object for parameters collection.
U steerAs(const std::string &key) const
Retrieve a recasted parameters as previously steered.
Definition Steerable.h:44
T steer(const std::string &key) const
Retrieve a parameters as previously steered.
Definition Steerable.h:39
Wrapper to a 1-dimensional function with optional parameters.
Common namespace for this Monte Carlo generator.