1 #ifndef GAUDIMATH_FUNADAPTERS_H 2 #define GAUDIMATH_FUNADAPTERS_H 1 7 #include <boost/variant.hpp> 11 #include "CLHEP/GenericFunctions/GenericFunctions.hh" 12 #include "CLHEP/GenericFunctions/Argument.hh" 13 #include "CLHEP/GenericFunctions/AbsFunction.hh" 17 #if defined(__clang__) || defined(__CLING__) 18 #pragma clang diagnostic push 19 #pragma clang diagnostic ignored "-Winconsistent-missing-override" 20 #elif defined(__GNUC__) && __GNUC__ >= 5 21 #pragma GCC diagnostic push 22 #pragma GCC diagnostic ignored "-Wsuggest-override" 27 #if __cplusplus > 201402L 30 template <
typename... lambda_ts>
31 struct composer_t : lambda_ts...
33 template <
typename... T>
34 composer_t(T&&... t) : lambda_ts(
std::
forward<T>(t))... {}
36 using lambda_ts::operator()...;
41 template <
typename... lambda_ts>
44 template <
typename lambda_t>
49 using lambda_t::operator();
52 template <
typename lambda_t,
typename... more_lambda_ts>
55 template <
typename... lambda_ts>
56 composer_t(
const lambda_t& lambda, lambda_ts&&... more_lambdas): lambda_t{lambda},
super_t{std::forward<lambda_ts>(more_lambdas)...} { }
57 template <
typename... lambda_ts>
58 composer_t(lambda_t&& lambda, lambda_ts&&... more_lambdas): lambda_t{
std::move(lambda)},
super_t{std::forward<lambda_ts>(more_lambdas)...} { }
59 using lambda_t::operator();
60 using super_t::operator();
64 template <
typename... lambda_ts>
67 {
return {std::forward<lambda_ts>(lambdas)...}; }
77 namespace AIDA {
class IFunction ; }
81 namespace GaudiMathImplementation
105 double operator() (
double a )
const override;
107 double operator() (
const Argument& x )
const override;
164 double operator() (
double x ) const override;
166 double operator() ( const Argument& x ) const override;
168 unsigned int dimensionality()
const override {
return 2 ; }
174 double operator() (
const double x ,
const double y )
const ;
226 double operator() (
double x ) const override ;
228 double operator() ( const Argument& x ) const override ;
230 unsigned int dimensionality()
const override {
return 3 ; }
238 const double z )
const ;
259 typedef double (*Function1)(
const double ) ;
260 typedef double (*Function2)(
const double* ) ;
290 unsigned int dimensionality ()
const override {
292 [](Function1) {
return 1ul; },
293 [&](
auto) {
return m_arg.size(); } );
300 double operator() (
const Argument& )
const override ;
306 boost::variant<Function1,Function2,Function3>
m_func;
315 #if defined(__clang__) || defined(__CLING__) 316 #pragma clang diagnostic pop 317 #elif defined(__GNUC__) && __GNUC__ >= 5 318 #pragma GCC diagnostic pop 321 #endif // GAUDIMATH_FUNADAPTERS_H composer_t(lambda_t &&lambda, lambda_ts &&...more_lambdas)
composer_t< std::decay_t< lambda_ts >... > compose(lambda_ts &&...lambdas)
composer_t(const lambda_t &lambda)
bool hasAnalyticDerivative() const override
Does this function have an analytic derivative?
boost::variant< Function1, Function2, Function3 > m_func
mandatory macro from CLHEP/GenericFunctions
Genfun::AbsFunction Function
Genfun::GaudiMathImplementation::NumericalDerivative Derivative
bool hasAnalyticDerivative() const override
Does this function have an analytic derivative?
bool hasAnalyticDerivative() const override
Does this function have an analytic derivative?
PropertyMgr & operator=(const PropertyMgr &)=delete
mandatory macro from CLHEP/GenericFunctions
TupleObj.h GaudiAlg/TupleObj.h namespace with few technical implementations.
std::vector< double > m_arg
mandatory macro from CLHEP/GenericFunctions
composer_t(const lambda_t &lambda, lambda_ts &&...more_lambdas)
const AIDA::IFunction * m_fun
virtual Out operator()(const vector_of_const_< In > &inputs) const =0
std::vector< double > m_arg
double fun(const std::vector< double > &x)
composer_t(lambda_t &&lambda)
unsigned int dimensionality() const override
bool hasAnalyticDerivative() const override
Does this function have an analytic derivative?
constructor from the IFunction ( see AIDA/IFunction.h)