14 #ifndef ROOT_Math_Functor
15 #define ROOT_Math_Functor
42 template<
class IBaseFunc>
75 template<
class ParentFunctor,
class Func >
119 inline double DoEval (
const double *
x)
const {
124 return fFunc.Derivative(x);
128 return fFunc.Derivative(x,icoord);
151 template<
class ParentFunctor,
class Func,
class GradFunc >
194 inline double DoEval (
const double *
x)
const {
223 template <
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 {
283 template <
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>
467 inline double DoEval (
const double *
x)
const {
509 template <
typename Func>
518 template <
class PtrObj,
typename MemFn>
610 template <
typename Func>
618 template <
class PtrObj,
typename MemFn,
typename GradMemFn>
619 GradFunctor(
const PtrObj& p, MemFn memFn, GradMemFn gradFn,
unsigned int dim )
628 template <
typename Func,
typename GradFunc>
647 fImpl = std::unique_ptr<Impl>( rhs.
fImpl->Copy() );
673 inline double DoEval (
const double *
x)
const {
679 return fImpl->Derivative(x,icoord);
726 template <
typename Func>
737 template <
class PtrObj,
typename MemFn,
typename GradMemFn>
747 template <
typename Func,
typename GradFunc>
766 fImpl = std::unique_ptr<Impl>( rhs.
fImpl->Copy() );
797 return fImpl->Derivative(x);
FunctorHandler(const Func &fun)
Interface (abstract class) for multi-dimensional functions providing a gradient calculation.
GradFunctor1D(const Func &f, const GradFunc &g)
construct from two 1D function objects
Functor & operator=(const Functor &rhs)
Assignment operator.
FunctorImpl< IBaseFunctionMultiDim > Impl
Functor Handler class is responsible for wrapping any other functor and pointer to free C functions...
Interface (abstract class) for generic functions objects of one-dimension Provides a method to evalua...
FunctorImpl< IGradientFunctionMultiDim > Impl
double DoEval(const double *x) const
MemFunHandler(const PointerToObj &pObj, PointerToMemFn pMemFn)
constructor from a pointer to the class and a pointer to the function
virtual ~FunctorGradHandler()
GradFunctor class for Multidimensional gradient functions.
double DoEval(const double *x) const
double DoEval(const double *x) const
GradFunctor1D class for one-dimensional gradient functions.
FunctorImpl< IGradientFunctionOneDim > Impl
GradFunctor1D(const GradFunctor1D &rhs)
Copy constructor for Functor based on ROOT::Math::IGradFunction.
Documentation for class Functor class.
unsigned int NDim() const
Retrieve the dimension of the function.
virtual FunctorImpl * Copy() const =0
double DoEval(const double *x) const
IBaseFunctionOneDim::BaseFunc ImplBase
GradFunctor1D(const Func &f)
construct from an object with the right signature implementing both operator() (double x) and Derivat...
virtual ~MemGradFunHandler()
double DoEval(double x) const
unsigned int NDim() const
GradFunctor()
Default constructor.
Functor1D & operator=(const Functor1D &rhs)
Assignment operator.
double DoDerivative(const double *x, unsigned int icoord) const
std::unique_ptr< Impl > fImpl
GradFunctor & operator=(const GradFunctor &rhs)
Assignment operator.
FunctorHandler(unsigned int dim, const Func &fun)
MemGradFunHandler(const PointerToObj &pObj, PointerToMemFn pMemFn, PointerToGradMemFn pGradMemFn)
constructor from a pointer to the class and a pointer to the function
Interface (abstract class) for one-dimensional functions providing a gradient calculation.
GradFunctor(const Func &f, const GradFunc &g, int dim)
construct for Gradient Functions of multi-dimension Func gives the function evaluatiion, GradFunc the partial derivatives The function dimension is required
GradFunctor(const Func &f, unsigned int dim)
construct from a callable object of multi-dimension implementing operator()(const double *x) and Deri...
ImplFunc::BaseFunc BaseFunc
FunctorGradHandler(unsigned int dim, const Func &fun, const GradFunc &gfun)
virtual ~GradFunctor()
Destructor (no operations)
Functor(const Func &f, unsigned int dim)
construct from a callable object of multi-dimension with the right signature (implementing operator()...
ImplBase * Clone() const
Clone a function.
double DoEval(const double *x) const
ParentFunctor::Impl ImplFunc
Functor1D(const Functor1D &rhs)
Copy constructor for Functor based on ROOT::Math::IGenFunction.
ParentFunctor::Impl ImplFunc
GradFunctor1D & operator=(const GradFunctor1D &rhs)
Assignment operator.
GradFunctor1D()
Default constructor.
Functor Handler to Wrap pointers to member functions The member function type must be (XXX means any ...
Functor1D(const PtrObj &p, MemFn memFn)
construct from a pointer to member function (1D type)
Functor(const PtrObj &p, MemFn memFn, unsigned int dim)
construct from a pointer to member function (multi-dim type)
Documentation for the abstract class IBaseFunctionMultiDim.
ImplBase * Clone() const
Clone a function.
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(const double *x, unsigned int icoord) const
function to evaluate the derivative with respect each coordinate.
Functor(const Functor &rhs)
Copy constructor for functor based on ROOT::Math::IMultiGenFunction.
FunctorImpl is a base class for the functor handler implementation class.
Functor1D()
Default constructor.
GradFunctor(const GradFunctor &rhs)
Copy constructor for functor based on ROOT::Math::IMultiGradFunction.
std::unique_ptr< Impl > fImpl
unsigned int NDim() 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...
double DoDerivative(double x) const
Functor()
Default constructor.
virtual ~FunctorHandler()
std::unique_ptr< Impl > fImpl
virtual ~Functor1D()
Destructor (no operations)
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...
void Copy(void *source, void *dest)
IGradientFunctionOneDim::BaseFunc ImplBase
double DoEval(double x) const
ImplBase * Clone() const
Clone a function.
double DoDerivative(const double *x, unsigned int icoord) const
double DoDerivative(double x) const
function to evaluate the derivative with respect each coordinate.
double DoEval(double x) const
Functor1D(const Func &f)
construct from a callable object with the right signature implementing operator() (double x) ...
double DoDerivative(double x) const
virtual ~Functor()
Destructor (no operations)
PointerToGradMemFn fGradMemFn
ImplFunc::BaseFunc BaseFunc
ParentFunctor::Impl ImplFunc
MemFunHandler(unsigned int dim, const PointerToObj &pObj, PointerToMemFn pMemFn)
constructor from a pointer to the class and a pointer to the function
double DoEval(const double *x) const
unsigned int NDim() const
double DoDerivative(const double *x, unsigned int icoord) const
virtual ~GradFunctor1D()
Destructor (no operations)
ParentFunctor::Impl ImplFunc
std::unique_ptr< Impl > fImpl
Functor Handler to Wrap pointers to member functions for the evaluation of the function and the gradi...
FunctorGradHandler(const Func &fun, const GradFunc &gfun)
ImplBase * Clone() const
Clone a function.
double DoEval(double x) const
implementation of the evaluation function. Must be implemented by derived classes ...
unsigned int NDim() const
double DoEval(double x) const
implementation of the evaluation function. Must be implemented by derived classes ...
Functor1D class for one-dimensional functions.
IGradientFunctionMultiDim::BaseFunc ImplBase
unsigned int NDim() const
Retrieve the dimension of the function.
ImplFunc::BaseFunc BaseFunc
ImplFunc::BaseFunc BaseFunc
IBaseFunctionMultiDim::BaseFunc ImplBase
double DoDerivative(double x) const
double DoEval(double x) const
FunctorImpl< IBaseFunctionOneDim > Impl
Functor Handler class for gradient functions where both callable objects are provided for the functio...