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 {
 
  418   template <
class PtrObj, 
typename MemFn>
 
  419   Functor(
const PtrObj& p, MemFn memFn, 
unsigned int dim )
 
  429   template <
typename Func>
 
  441   Functor(
const std::function<
double(
double const *)> &
f, 
unsigned int dim)
 
  457         fImpl = std::unique_ptr<Impl>((rhs.
fImpl)->Copy());
 
  481   inline double DoEval (
const double * 
x)
 const {
 
  523   template <
typename Func>
 
  532   template <
class PtrObj, 
typename MemFn>
 
  560         fImpl = std::unique_ptr<Impl>( (rhs.
fImpl)->Copy() );
 
  623   template <
typename Func>
 
  631   template <
class PtrObj, 
typename MemFn, 
typename GradMemFn>
 
  632   GradFunctor(
const PtrObj& p, MemFn memFn, GradMemFn gradFn, 
unsigned int dim )
 
  641   template <
typename Func, 
typename GradFunc>
 
  656           const std::function<
double(
double const *, 
unsigned int)> &
g, 
unsigned int dim)
 
  674         fImpl = std::unique_ptr<Impl>(rhs.
fImpl->Copy());
 
  696   inline double DoEval (
const double * 
x)
 const {
 
  702      return fImpl->Derivative(
x,icoord);
 
  749   template <
typename Func>
 
  760   template <
class PtrObj, 
typename MemFn, 
typename GradMemFn>
 
  770   template <
typename Func, 
typename GradFunc>
 
  782   GradFunctor1D(
const std::function<
double(
double)> &
f, 
const std::function<
double(
double)> &
g )
 
  800         fImpl = std::unique_ptr<Impl>( rhs.
fImpl->Copy()  );
 
  827      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.
 
Functor1D(const std::function< double(double)> &f)
specialized constructor from a std::function implementing the function evaluation.
 
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()...
 
Functor(const std::function< double(double const *)> &f, unsigned int dim)
specialized constructor from a std::function of multi-dimension with the right signature (double oper...
 
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)
 
GradFunctor1D(const std::function< double(double)> &f, const std::function< double(double)> &g)
specialized constructor from 2 std::function objects implementing double operator()(double x).
 
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 std::function< double(double const *)> &f, const std::function< double(double const *, unsigned int)> &g, unsigned int dim)
specialized constructor from 2 std::functions with the right signature (the first one implementing do...
 
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...