cepgen
is hosted by
Hepforge
,
IPPP Durham
CepGen
1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
AnalyticalIntegrator.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 <Math/Integrator.h>
20
21
#include "
CepGen/Integration/AnalyticIntegrator.h
"
22
#include "
CepGen/Modules/AnalyticIntegratorFactory.h
"
23
#include "
CepGen/Utils/FunctionsWrappers.h
"
24
#include "
CepGen/Utils/Message.h
"
25
26
namespace
cepgen
{
27
namespace
root {
28
class
AnalyticalIntegrator
final :
public
cepgen::AnalyticIntegrator
{
29
public
:
30
explicit
AnalyticalIntegrator
(
const
ParametersList
& params)
31
:
cepgen
::
AnalyticIntegrator
(params),
32
integr_(
steerAs
<int,
ROOT
::Math::IntegrationOneDim::Type>(
"type"
),
33
steer
<double>(
"epsabs"
),
34
steer
<double>(
"epsrel"
),
35
steer
<int>(
"limit"
),
36
steer
<int>(
"rule"
)) {
37
CG_DEBUG
(
"root:AnalyticalIntegrator"
).log([
this
](
auto
& log) {
38
log <<
"ROOT analytical integrator built with options:\n"
;
39
integr_.Options().Print(log.stream());
40
});
41
}
42
43
static
ParametersDescription
description
() {
44
auto
desc =
cepgen::AnalyticIntegrator::description
();
45
desc.setDescription(
"ROOT integration algorithms wrapper"
);
46
desc.addAs<
int
>(
"type"
, ROOT::Math::IntegrationOneDim::Type::kDEFAULT).setDescription(
"type of integration"
);
47
desc.add<
double
>(
"epsabs"
, -1.).setDescription(
"desired absolute error limit"
);
48
desc.add<
double
>(
"epsrel"
, -1.).setDescription(
"desired relative error limit"
);
49
desc.add<
int
>(
"limit"
, 0).setDescription(
"maximum number of subintervals to build"
);
50
desc.add<
int
>(
"rule"
, 0).setDescription(
"Gauss-Kronrod integration rule (only for GSL kADAPTIVE type)"
);
51
return
desc;
52
}
53
54
double
integrate
(
const
utils::Function1D
& func,
void
* params =
nullptr
,
const
Limits
& lim = {})
const
override
{
55
const
auto
func_local =
utils::Function1D
([&func, ¶ms](
double
x) {
return
func(x, params); });
56
const
double
xmin = lim.hasMin() ? lim.min() :
range_
.
min
();
57
const
double
xmax = lim.hasMax() ? lim.max() :
range_
.
max
();
58
return
integr_.Integral(func_local, xmin, xmax);
59
}
60
61
private
:
62
mutable
ROOT::Math::IntegratorOneDim integr_;
63
};
64
}
// namespace root
65
}
// namespace cepgen
66
using
cepgen::root::AnalyticalIntegrator
;
67
REGISTER_ANALYTIC_INTEGRATOR
(
"root"
,
AnalyticalIntegrator
);
AnalyticIntegratorFactory.h
REGISTER_ANALYTIC_INTEGRATOR
#define REGISTER_ANALYTIC_INTEGRATOR(name, obj)
Add a generic analytical integrator object builder definition.
Definition
AnalyticIntegratorFactory.h:25
AnalyticIntegrator.h
FunctionsWrappers.h
Message.h
CG_DEBUG
#define CG_DEBUG(mod)
Definition
Message.h:220
cepgen::AnalyticIntegrator
Analytic (functional) integration algorithm.
Definition
AnalyticIntegrator.h:32
cepgen::AnalyticIntegrator::range_
const Limits range_
Definition
AnalyticIntegrator.h:57
cepgen::AnalyticIntegrator::description
static ParametersDescription description()
Definition
AnalyticIntegrator.cpp:33
cepgen::Limits
Validity interval for a variable.
Definition
Limits.h:28
cepgen::Limits::min
double min() const
Lower limit to apply on the variable.
Definition
Limits.h:52
cepgen::Limits::max
double max() const
Upper limit to apply on the variable.
Definition
Limits.h:54
cepgen::ParametersDescription
A description object for parameters collection.
Definition
ParametersDescription.h:26
cepgen::ParametersList
Definition
ParametersList.h:52
cepgen::Steerable::steerAs
U steerAs(const std::string &key) const
Retrieve a recasted parameters as previously steered.
Definition
Steerable.h:44
cepgen::Steerable::steer
T steer(const std::string &key) const
Retrieve a parameters as previously steered.
Definition
Steerable.h:39
cepgen::root::AnalyticalIntegrator
Definition
AnalyticalIntegrator.cpp:28
cepgen::root::AnalyticalIntegrator::integrate
double integrate(const utils::Function1D &func, void *params=nullptr, const Limits &lim={}) const override
Evaluate the integral of a function at a given value.
Definition
AnalyticalIntegrator.cpp:54
cepgen::root::AnalyticalIntegrator::description
static ParametersDescription description()
Definition
AnalyticalIntegrator.cpp:43
cepgen::root::AnalyticalIntegrator::AnalyticalIntegrator
AnalyticalIntegrator(const ParametersList ¶ms)
Definition
AnalyticalIntegrator.cpp:30
cepgen::utils::Function1D
Wrapper to a 1-dimensional function with optional parameters.
Definition
FunctionsWrappers.h:29
ROOT
Definition
ROOTTreeInfo.cpp:22
cepgen
Common namespace for this Monte Carlo generator.
Definition
CommandLineHandler.cpp:36
CepGenAddOns
ROOTWrapper
AnalyticalIntegrator.cpp
Generated on Mon Jul 29 2024 for CepGen by
1.9.7