cepgen is hosted by Hepforge, IPPP Durham
CepGen 1.2.5
Central exclusive processes event generator
Loading...
Searching...
No Matches
FunctionsWrappers.h
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#ifndef CepGen_Utils_FunctionsWrappers_h
20#define CepGen_Utils_FunctionsWrappers_h
21
22#include <functional>
23
25
26namespace cepgen {
27 namespace utils {
29 class Function1D {
30 public:
31 explicit Function1D(const std::function<double(double)>& func) : func_(func) {}
32 explicit Function1D(const std::function<double(double, const ParametersList&)>& func) : func_params_(func) {}
33 explicit Function1D(const std::function<double(double, void*)>& func) : func_obj_(func) {}
34
36 double operator()(double x, const ParametersList& params = ParametersList()) const {
37 if (func_params_)
38 return func_params_(x, params);
39 return func_(x);
40 }
42 double operator()(double x, void* obj) const {
43 if (func_obj_)
44 return func_obj_(x, obj);
45 return func_(x);
46 }
48 template <typename T>
49 double operator()(double x, const T& obj) const {
50 return func_obj_(x, (void*)&obj);
51 }
52
53 operator const std::function<double(double)>&() { return func_; }
54 operator const std::function<double(double, void*)>&() { return func_obj_; }
55
56 private:
58 std::function<double(double)> func_{nullptr};
60 std::function<double(double, const ParametersList&)> func_params_{nullptr};
62 std::function<double(double, void*)> func_obj_{nullptr};
63 };
64 } // namespace utils
65} // namespace cepgen
66
67#endif
Wrapper to a 1-dimensional function with optional parameters.
double operator()(double x, const ParametersList &params=ParametersList()) const
Call the function with a user collection of parameters.
double operator()(double x, void *obj) const
Call the function with an unspecified object as parameters.
double operator()(double x, const T &obj) const
Call the function with a templated object as parameters.
Function1D(const std::function< double(double, void *)> &func)
Function1D(const std::function< double(double, const ParametersList &)> &func)
Function1D(const std::function< double(double)> &func)
Common namespace for this Monte Carlo generator.