1 #ifndef GAUDIMATH_SPLINES_H
2 #define GAUDIMATH_SPLINES_H 1
15 #include "CLHEP/GenericFunctions/GenericFunctions.hh"
16 #include "CLHEP/GenericFunctions/Argument.hh"
17 #include "CLHEP/GenericFunctions/AbsFunction.hh"
25 #include "gsl/gsl_interp.h"
26 #include "gsl/gsl_spline.h"
32 namespace GaudiMathImplementation
55 (
const Data2D& data ,
63 template <
class DATAX,
class DATAY>
69 : m_dim ( end_x - begin_x )
70 , m_x (
new double[ end_x - begin_x ] )
71 , m_y (
new double[ end_x - begin_x ] )
74 std::copy ( begin_x , end_x , m_x.get() ) ;
75 std::copy ( begin_y , begin_y + ( end_x - begin_x ) , m_y.get() ) ;
89 : m_dim ( end - begin )
90 , m_x (
new double[ end - begin ] )
91 , m_y (
new double[ end - begin ] )
94 double* _x = m_x.get() ;
95 double* _y = m_y.get() ;
96 for (
auto it = begin ; end != it ; ++ it )
108 double eval (
const double x )
const ;
110 double deriv (
const double x )
const ;
112 double deriv2 (
const double x )
const ;
114 double integ (
const double a ,
const double b )
const ;
124 mutable bool m_init =
false;
128 mutable gsl_spline* m_spline =
nullptr;
129 mutable gsl_interp_accel* m_accel =
nullptr;
185 ( const Data2D& data ,
220 , m_spline( type , begin_x , end_x , begin_y )
233 template <
class DATA>
239 , m_spline( type , begin , end )
249 virtual double operator() (
double a )
const ;
251 virtual double operator() (
const Argument& x )
const ;
324 ( const Data2D& data ,
359 , m_spline( type , begin_x , end_x , begin_y )
372 template <
class DATA>
378 , m_spline( type , begin , end )
388 double operator() (
double a )
const override;
390 double operator() (
const Argument& x )
const override;
463 ( const Data2D& data ,
498 , m_spline( type , begin_x , end_x , begin_y )
511 template <
class DATA>
517 , m_spline( type , begin , end )
527 double operator() (
double a )
const override;
529 double operator() (
const Argument& x )
const override;
584 const
double low = 0 ) ;
605 ( const Data2D& data ,
607 const
double low = 0 ) ;
643 , m_spline ( type , begin_x , end_x , begin_y )
658 template <
class DATA>
664 : m_spline ( type , std::forward<DATA>(
begin) , std::forward<DATA>(
end) )
669 const double low = 0 ) ;
676 double operator() (
double a )
const override;
678 double operator() (
const Argument& x )
const override;
703 #endif // GAUDIMATH_SPLINES_H
const SplineBase & spline() const
acess to the spline function
SplineBase::Data2D Data2D
SplineBase::Data2D Data2D
virtual unsigned int dimensionality() const
const SplineBase & spline() const
acess to the spline function
SplineBase::Data1D Data1D
const SplineBase & spline() const
acess to the spline function
virtual bool hasAnalyticDerivative() const
Does this function have an analytic derivative?
SplineBase::Data2D Data2D
std::unique_ptr< double[]> m_y
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?
auto begin(reverse_wrapper< T > &w)
SplineBase::Data1D Data1D
unsigned int dimensionality() const override
std::vector< double > Data1D
GaudiMath::Interpolation::Type m_type
std::unique_ptr< double[]> m_x
auto end(reverse_wrapper< T > &w)
bool hasAnalyticDerivative() const override
Does this function have an analytic derivative?
SplineBase::Data1D Data1D
SplineBase::Data2D Data2D
SplineBase::Data1D Data1D
unsigned int dimensionality() const override
GaudiMath.h GaudiMath/GaudiMath.h.
unsigned int dimensionality() const override
const SplineBase & spline() const
acess to the spline function
Type
the list of available types for ntuples
std::vector< std::pair< double, double > > Data2D