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 >
194 inline double DoEval (
const double *
x)
const {
223template <
class ParentFunctor,
typename PointerToObj,
224 typename PointerToMemFn>
239 MemFunHandler(
unsigned int dim,
const PointerToObj& pObj, PointerToMemFn pMemFn)
262 inline double DoEval (
const double *
x)
const {
283template <
class ParentFunctor,
typename PointerToObj,
284 typename PointerToMemFn,
typename PointerToGradMemFn>
294 MemGradFunHandler(
const PointerToObj& pObj, PointerToMemFn pMemFn, PointerToGradMemFn pGradMemFn)
303 const PointerToObj& pObj,
304 PointerToMemFn pMemFn,
305 PointerToGradMemFn pGradMemFn )
331 inline double DoEval (
const double *
x)
const {
409 template <
class PtrObj,
typename MemFn>
410 Functor(
const PtrObj& p, MemFn memFn,
unsigned int dim )
420 template <
typename Func>
438 fImpl = std::unique_ptr<Impl>((rhs.
fImpl)->Copy());
462 inline double DoEval (
const double *
x)
const {
504 template <
typename Func>
513 template <
class PtrObj,
typename MemFn>
533 fImpl = std::unique_ptr<Impl>( (rhs.
fImpl)->Copy() );
596 template <
typename Func>
604 template <
class PtrObj,
typename MemFn,
typename GradMemFn>
605 GradFunctor(
const PtrObj& p, MemFn memFn, GradMemFn gradFn,
unsigned int dim )
614 template <
typename Func,
typename GradFunc>
633 fImpl = std::unique_ptr<Impl>(rhs.
fImpl->Copy());
655 inline double DoEval (
const double *
x)
const {
661 return fImpl->Derivative(
x,icoord);
708 template <
typename Func>
719 template <
class PtrObj,
typename MemFn,
typename GradMemFn>
729 template <
typename Func,
typename GradFunc>
748 fImpl = std::unique_ptr<Impl>( rhs.
fImpl->Copy() );
775 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.