NumericalDerivative.h
Go to the documentation of this file.00001
00002
00003 #ifndef GAUDIMATH_NUMERICALDERIVATIVE_H
00004 #define GAUDIMATH_NUMERICALDERIVATIVE_H 1
00005
00006
00007
00008
00009
00010 #include "GaudiKernel/StatusCode.h"
00011
00012
00013
00014 #include "CLHEP/GenericFunctions/AbsFunction.hh"
00015
00016
00017 namespace Genfun
00018 {
00019 namespace GaudiMathImplementation
00020 {
00036 class GAUDI_API NumericalDerivative : public AbsFunction
00037 {
00038 public:
00040 enum Type
00041 { Central ,
00042 Forward ,
00043 Backward } ;
00044 public:
00046 FUNCTION_OBJECT_DEF( NumericalDerivative ) ;
00047
00048 public:
00049
00085 NumericalDerivative
00086 ( const AbsFunction& function ,
00087 const size_t index ,
00088 const Type& type = Central ) ;
00089
00091 NumericalDerivative
00092 ( const NumericalDerivative& right ) ;
00093
00095 virtual ~NumericalDerivative () ;
00096
00098 virtual unsigned int dimensionality() const { return m_DIM ; }
00099
00101 virtual double operator() ( double argument ) const ;
00103 virtual double operator() ( const Argument& argument ) const ;
00104
00106 virtual bool hasAnalyticDerivative() const { return true ;}
00107
00109 virtual Derivative partial ( unsigned int index ) const;
00110
00111 public:
00112
00114 const AbsFunction& function () const { return *m_function ; }
00116 size_t index () const { return m_index ; }
00118 const Type& type () const { return m_type ; }
00119
00121 const Type& setType ( const Type& value );
00122
00124 double result () const { return m_result ; }
00126 double error () const { return m_error ; }
00127
00128 protected:
00129
00130 StatusCode Exception
00131 ( const std::string& message ,
00132 const StatusCode& sc = StatusCode::FAILURE ) const ;
00133
00134 private:
00135
00136
00137 NumericalDerivative ();
00138
00139 NumericalDerivative& operator=( const NumericalDerivative& ) ;
00140
00141 private:
00142 const AbsFunction* m_function ;
00143 size_t m_index ;
00144 size_t m_DIM ;
00145 Type m_type ;
00146
00147 mutable Argument m_argument ;
00148 mutable double m_result ;
00149 mutable double m_error ;
00150 };
00151
00152 };
00153 };
00154
00155
00156
00157
00158 #endif // GAUDIMATH_NUMERICALDERIVATIVE_H
00159