|
Gaudi Framework, version v23r2 |
| Home | Generated: Thu Jun 28 2012 |
00001 // $Id: NumericalDerivative.h,v 1.2 2008/10/27 19:22:20 marcocle Exp $ 00002 // ============================================================================ 00003 #ifndef GAUDIMATH_NUMERICALDERIVATIVE_H 00004 #define GAUDIMATH_NUMERICALDERIVATIVE_H 1 00005 // ============================================================================ 00006 // Include files 00007 // ============================================================================ 00008 // GaudiKernel 00009 // ============================================================================ 00010 #include "GaudiKernel/StatusCode.h" 00011 // ============================================================================ 00012 // CLHEP 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 // default constructor is disabled 00137 NumericalDerivative (); 00138 // assignement operator is disabled 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 } // end of namespace GaudiMathImplementation 00153 } // end of namespace GenFun 00154 00155 // ============================================================================ 00156 // The END 00157 // ============================================================================ 00158 #endif // GAUDIMATH_NUMERICALDERIVATIVE_H 00159 // ============================================================================