14#ifndef ROOT_Math_Functor
15#define ROOT_Math_Functor
42template<
class IBaseFunc>
75template<
class ParentFunctor,
class Func >
119 inline double DoEval (
const double *
x)
const {
124 return fFunc.Derivative(
x);
128 return fFunc.Derivative(
x,icoord);
151template<
class ParentFunctor,
class Func,
class GradFunc >
186 typename ParentFunctor::ImplBase*
Clone()
const {
return Copy(); }
202 inline double DoEval (
const double *
x)
const {
231template <
class ParentFunctor,
typename PointerToObj,
232 typename PointerToMemFn>
247 MemFunHandler(
unsigned int dim,
const PointerToObj& pObj, PointerToMemFn pMemFn)
270 inline double DoEval (
const double *
x)
const {
291template <
class ParentFunctor,
typename PointerToObj,
292 typename PointerToMemFn,
typename PointerToGradMemFn>
302 MemGradFunHandler(
const PointerToObj& pObj, PointerToMemFn pMemFn, PointerToGradMemFn pGradMemFn)
311 const PointerToObj& pObj,
312 PointerToMemFn pMemFn,
313 PointerToGradMemFn pGradMemFn )
339 inline double DoEval (
const double *
x)
const {
417 template <
class PtrObj,
typename MemFn>
418 Functor(
const PtrObj& p, MemFn memFn,
unsigned int dim )
428 template <
typename Func>
446 fImpl = std::unique_ptr<Impl>((rhs.
fImpl)->Copy());
470 inline double DoEval (
const double *
x)
const {
512 template <
typename Func>
521 template <
class PtrObj,
typename MemFn>
541 fImpl = std::unique_ptr<Impl>( (rhs.
fImpl)->Copy() );
604 template <
typename Func>
612 template <
class PtrObj,
typename MemFn,
typename GradMemFn>
613 GradFunctor(
const PtrObj& p, MemFn memFn, GradMemFn gradFn,
unsigned int dim )
622 template <
typename Func,
typename GradFunc>
641 fImpl = std::unique_ptr<Impl>(rhs.
fImpl->Copy());
663 inline double DoEval (
const double *
x)
const {
669 return fImpl->Derivative(
x,icoord);
716 template <
typename Func>
727 template <
class PtrObj,
typename MemFn,
typename GradMemFn>
737 template <
typename Func,
typename GradFunc>
756 fImpl = std::unique_ptr<Impl>( rhs.
fImpl->Copy() );
783 return fImpl->Derivative(
x);
Functor1D class for one-dimensional functions.
double DoEval(double x) const
implementation of the evaluation function. Must be implemented by derived classes
IBaseFunctionOneDim::BaseFunc ImplBase
virtual ~Functor1D()
Destructor (no operations)
Functor1D & operator=(const Functor1D &rhs)
Assignment operator.
FunctorImpl< IBaseFunctionOneDim > Impl
Functor1D(const Functor1D &rhs)
Copy constructor for Functor based on ROOT::Math::IGenFunction.
ImplBase * Clone() const
Clone a function.
Functor1D(const PtrObj &p, MemFn memFn)
construct from a pointer to member function (1D type)
Functor1D(const Func &f)
construct from a callable object with the right signature implementing operator() (double x)
std::unique_ptr< Impl > fImpl
Functor1D()
Default constructor.
Functor Handler class for gradient functions where both callable objects are provided for the functio...
FunctorGradHandler(const Func &fun, const GradFunc &gfun)
virtual ~FunctorGradHandler()
FunctorGradHandler(unsigned int dim, const Func &fun, const GradFunc &gfun)
double DoEval(const double *x) const
unsigned int NDim() const
double DoDerivative(double x) const
ParentFunctor::Impl ImplFunc
double DoDerivative(const double *x, unsigned int icoord) const
double DoEval(double x) const
ImplFunc::BaseFunc BaseFunc
Functor Handler class is responsible for wrapping any other functor and pointer to free C functions.
unsigned int NDim() const
FunctorHandler(unsigned int dim, const Func &fun)
double DoEval(const double *x) const
double DoDerivative(const double *x, unsigned int icoord) const
ParentFunctor::Impl ImplFunc
double DoDerivative(double x) const
double DoEval(double x) const
virtual ~FunctorHandler()
ImplFunc::BaseFunc BaseFunc
FunctorHandler(const Func &fun)
FunctorImpl is a base class for the functor handler implementation class.
virtual FunctorImpl * Copy() const =0
Documentation for class Functor class.
Functor(const Functor &rhs)
Copy constructor for functor based on ROOT::Math::IMultiGenFunction.
Functor()
Default constructor.
unsigned int NDim() const
Retrieve the dimension of the function.
virtual ~Functor()
Destructor (no operations)
FunctorImpl< IBaseFunctionMultiDim > Impl
ImplBase * Clone() const
Clone a function.
Functor & operator=(const Functor &rhs)
Assignment operator.
double DoEval(const double *x) const
Implementation of the evaluation function.
Functor(const Func &f, unsigned int dim)
construct from a callable object of multi-dimension with the right signature (implementing operator()...
std::unique_ptr< Impl > fImpl
IBaseFunctionMultiDim::BaseFunc ImplBase
Functor(const PtrObj &p, MemFn memFn, unsigned int dim)
construct from a pointer to member function (multi-dim type)
GradFunctor1D class for one-dimensional gradient functions.
IGradientFunctionOneDim::BaseFunc ImplBase
GradFunctor1D(const Func &f, const GradFunc &g)
construct from two 1D function objects
ImplBase * Clone() const
Clone a function.
FunctorImpl< IGradientFunctionOneDim > Impl
GradFunctor1D(const PtrObj &p, MemFn memFn, GradMemFn gradFn)
construct from a pointer to class and two pointers to member functions, one for the function evaluati...
GradFunctor1D(const Func &f)
construct from an object with the right signature implementing both operator() (double x) and Derivat...
std::unique_ptr< Impl > fImpl
GradFunctor1D()
Default constructor.
GradFunctor1D & operator=(const GradFunctor1D &rhs)
Assignment operator.
double DoEval(double x) const
implementation of the evaluation function. Must be implemented by derived classes
virtual ~GradFunctor1D()
Destructor (no operations)
double DoDerivative(double x) const
function to evaluate the derivative with respect each coordinate.
GradFunctor1D(const GradFunctor1D &rhs)
Copy constructor for Functor based on ROOT::Math::IGradFunction.
GradFunctor class for Multidimensional gradient functions.
GradFunctor & operator=(const GradFunctor &rhs)
Assignment operator.
GradFunctor(const Func &f, const GradFunc &g, int dim)
construct for Gradient Functions of multi-dimension Func gives the function evaluatiion,...
virtual ~GradFunctor()
Destructor (no operations)
IGradientFunctionMultiDim::BaseFunc ImplBase
double DoDerivative(const double *x, unsigned int icoord) const
ImplBase * Clone() const
Clone a function.
GradFunctor(const GradFunctor &rhs)
Copy constructor for functor based on ROOT::Math::IMultiGradFunction.
GradFunctor()
Default constructor.
std::unique_ptr< Impl > fImpl
unsigned int NDim() const
Retrieve the dimension of the function.
GradFunctor(const Func &f, unsigned int dim)
construct from a callable object of multi-dimension implementing operator()(const double *x) and Deri...
FunctorImpl< IGradientFunctionMultiDim > Impl
double DoEval(const double *x) const
GradFunctor(const PtrObj &p, MemFn memFn, GradMemFn gradFn, unsigned int dim)
construct from a pointer to member function and member function types for function and derivative eva...
Interface (abstract class) for generic functions objects of one-dimension Provides a method to evalua...
Interface (abstract class) for multi-dimensional functions providing a gradient calculation.
Interface (abstract class) for one-dimensional functions providing a gradient calculation.
Functor Handler to Wrap pointers to member functions The member function type must be (XXX means any ...
ImplFunc::BaseFunc BaseFunc
ParentFunctor::Impl ImplFunc
unsigned int NDim() const
MemFunHandler(const PointerToObj &pObj, PointerToMemFn pMemFn)
constructor from a pointer to the class and a pointer to the function
double DoEval(const double *x) const
MemFunHandler(unsigned int dim, const PointerToObj &pObj, PointerToMemFn pMemFn)
constructor from a pointer to the class and a pointer to the function
double DoEval(double x) const
Functor Handler to Wrap pointers to member functions for the evaluation of the function and the gradi...
double DoEval(double x) const
MemGradFunHandler(unsigned int dim, const PointerToObj &pObj, PointerToMemFn pMemFn, PointerToGradMemFn pGradMemFn)
constructor from a pointer to the class and a pointer to the function
double DoDerivative(double x) const
double DoDerivative(const double *x, unsigned int icoord) const
ImplFunc::BaseFunc BaseFunc
virtual ~MemGradFunHandler()
ParentFunctor::Impl ImplFunc
PointerToGradMemFn fGradMemFn
unsigned int NDim() const
double DoEval(const double *x) const
MemGradFunHandler(const PointerToObj &pObj, PointerToMemFn pMemFn, PointerToGradMemFn pGradMemFn)
constructor from a pointer to the class and a pointer to the function
Namespace for new Math classes and functions.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...