1 #ifndef GAUDIMATH_NUMERICALINDEFINITEINTEGRAL_H
2 #define GAUDIMATH_NUMERICALINDEFINITEINTEGRAL_H 1
20 #include "CLHEP/GenericFunctions/AbsFunction.hh"
22 #include "gsl/gsl_integration.h"
29 namespace GaudiMathImplementation
156 ( const AbsFunction& function ,
165 const
double epsabs = 1e-10 ,
166 const
double epsrel = 1.e-7 ,
167 const
size_t size = 1000 );
211 ( const AbsFunction& function ,
214 const Points& points ,
217 const
double epsabs = 1e-9 ,
218 const
double epsrel = 1.e-6 ,
219 const
size_t size = 1000 ) ;
259 ( const AbsFunction& function ,
263 const
double epsabs = 1e-9 ,
264 const
double epsrel = 1.e-6 ,
265 const
size_t size = 1000 ) ;
272 virtual ~NumericalIndefiniteIntegral() =
default;
277 virtual
unsigned int dimensionality()
const {
return m_DIM ; }
280 virtual double operator() (
double argument )
const ;
282 virtual double operator() (
const Argument& argument )
const ;
293 const AbsFunction&
function ()
const {
return *m_function ; }
295 double a ()
const {
return m_a ; }
297 const Points&
points ()
const {
return m_points ; }
299 double epsabs ()
const {
return m_epsabs ; }
301 double epsrel ()
const {
return m_epsrel ; }
304 double result ()
const {
return m_result ; }
306 double error ()
const {
return m_error ; }
309 size_t size ()
const {
return m_size ; }
316 type ()
const {
return m_type ; }
322 rule ()
const {
return m_rule ; }
327 double QAGI ( _Function*
fun )
const ;
329 double QAGP ( _Function*
fun )
const ;
331 double QNG ( _Function*
fun )
const ;
333 double QAG ( _Function*
fun )
const ;
335 double QAGS ( _Function*
fun )
const ;
338 _Workspace* allocate ()
const ;
341 {
return m_ws.get(); }
360 if (p) gsl_integration_workspace_free ( p->
ws ) ;
399 #endif // GAUDIMATH_NUMERICALINDEFINITEINTEGRAL_H
std::unique_ptr< _Workspace, gsl_ws_deleter > m_ws
double epsrel() const
relatiove precision
Category
integration category
double result() const
previous result
std::unique_ptr< double[]> m_pdata
double error() const
evaluate of previous error
GaudiMath::Integration::Limit limit() const
integration limit
Genfun::GaudiMathImplementation::NumericalDerivative Derivative
gsl_integration_workspace * ws
virtual bool hasAnalyticDerivative() const
Does this function have an analytic derivative?
GaudiMath::Integration::Category category() const
integration category
GaudiMath::Integration::KronrodRule rule() const
integration rule
This class is used for returning status codes from appropriate routines.
Type
type of integration (for finite limits)
double epsabs() const
absolute precision
GaudiMath::Integration::Limit m_limit
GaudiMath::Integration::Category m_category
GaudiMath::Integration::Type type() const
integration type
std::unique_ptr< const AbsFunction > m_function
double a() const
integration limit
GaudiMath::Integration::Type m_type
Limit
how to distinguish variable low and variable high limits
double fun(const std::vector< double > &x)
GaudiMath.h GaudiMath/GaudiMath.h.
KronrodRule
integration rule
std::vector< double > Points
typedef for vector of singular points
GaudiMath::Integration::KronrodRule m_rule
The simple class for numerical integrations.
Type
the list of available types for ntuples
const Points & points() const
known singularities
void operator()(_Workspace *p) const
collection of common types for classes NumericalIndefiniteIntegral and NumericalDefiniteIntegral ...