Gaudi Framework, version v20r2

Generated: 18 Jul 2008

FunAdapters.h

Go to the documentation of this file.
00001 // $Id: FunAdapters.h,v 1.2 2005/11/25 10:27:03 mato Exp $
00002 // ============================================================================
00003 #ifndef GAUDIMATH_FUNADAPTERS_H 
00004 #define GAUDIMATH_FUNADAPTERS_H 1
00005 // ============================================================================
00006 // Include files
00007 // ============================================================================
00008 // from CLHEP
00009 // ============================================================================
00010 #include "CLHEP/GenericFunctions/GenericFunctions.hh"
00011 #include "CLHEP/GenericFunctions/Argument.hh"
00012 #include "CLHEP/GenericFunctions/AbsFunction.hh"
00013 // ============================================================================
00014 
00015 namespace AIDA { class IFunction ; };
00016 
00017 namespace Genfun 
00018 {
00019   namespace GaudiMathImplementation
00020   { 
00021     // ========================================================================
00029     // =========================================================================
00030     
00031     class AdapterIFunction : public AbsFunction
00032     {
00033     public:
00035       FUNCTION_OBJECT_DEF( AdapterIFunction ) ;      
00036     public:
00040       AdapterIFunction ( const AIDA::IFunction& fun) ;
00042       AdapterIFunction ( const AdapterIFunction& );
00044       virtual ~AdapterIFunction() ;
00045       
00046       virtual double operator() ( double a          ) const ;
00047       
00048       virtual double operator() ( const Argument& x ) const;
00049       
00050       virtual unsigned int dimensionality () const { return m_dim ; }
00051 
00053       virtual bool  hasAnalyticDerivative() const { return true ; }
00055       virtual Genfun::Derivative partial( unsigned int i  ) const ;
00056       
00057     private:
00058       AdapterIFunction();
00059       AdapterIFunction& operator=(const AdapterIFunction&);
00060     private:
00061       const AIDA::IFunction*      m_fun ;
00062       size_t                      m_dim ;
00063       mutable std::vector<double> m_arg ;
00064     };
00065     
00066     // ========================================================================
00090     // ========================================================================
00091     class Adapter2DoubleFunction : public AbsFunction
00092     {
00093     public:
00095       typedef double (*Function)( const double , 
00096                                   const double ) ;
00097     public:
00099       FUNCTION_OBJECT_DEF( Adapter2DoubleFunction ) ;      
00100     public:
00102       Adapter2DoubleFunction ( Function func );
00104       Adapter2DoubleFunction ( const Adapter2DoubleFunction& );
00106       virtual ~Adapter2DoubleFunction () ;
00107       
00108       virtual double operator() (       double    x ) const ;
00109       
00110       virtual double operator() ( const Argument& x ) const ;
00111       
00112       virtual unsigned int dimensionality() const { return 2    ; }
00114       virtual bool  hasAnalyticDerivative() const { return true ; }
00116       virtual Genfun::Derivative partial( unsigned int i  ) const ;
00117     public:
00118       double operator() ( const double x , const double y ) const ;
00119     private:
00120       // default constructor is disabled 
00121       Adapter2DoubleFunction();
00122       // assigmenet operator is disabled 
00123       Adapter2DoubleFunction& operator = ( const Adapter2DoubleFunction&);
00124     private:
00125       Function                 m_func  ;
00126     };
00127 
00128     // ========================================================================
00153     // ========================================================================
00154     class Adapter3DoubleFunction : public AbsFunction
00155     {
00156     public:
00158       typedef double (*Function)( const double , 
00159                                   const double ,
00160                                   const double ) ;
00161     public:
00163       FUNCTION_OBJECT_DEF( Adapter3DoubleFunction ) ;      
00164     public:
00166       Adapter3DoubleFunction ( Function func );
00168       Adapter3DoubleFunction ( const Adapter3DoubleFunction& );
00170       virtual ~Adapter3DoubleFunction () ;
00171       
00172       virtual double operator() (       double    x ) const ;
00173       
00174       virtual double operator() ( const Argument& x ) const ;
00175       
00176       virtual unsigned int dimensionality() const { return 3    ; }
00178       virtual bool  hasAnalyticDerivative() const { return true ; }
00180       virtual Genfun::Derivative partial( unsigned int i  ) const ;
00181     public:
00182       double operator() ( const double x , 
00183                           const double y , 
00184                           const double z ) const ;
00185     private:
00186       // default constructor is disabled 
00187       Adapter3DoubleFunction();
00188       // assigmenet operator is disabled 
00189       Adapter3DoubleFunction& operator = ( const Adapter3DoubleFunction&);
00190     private:
00191       Function                 m_func  ;
00192     };
00193     
00194     // ========================================================================
00201     // ========================================================================
00202     class SimpleFunction : public AbsFunction 
00203     {
00204     public:
00205       typedef double (*Function1)( const double               ) ;
00206       typedef double (*Function2)( const double*              ) ;
00207       typedef double (*Function3)( const std::vector<double>& ) ;
00208     protected:
00209       enum Case { TrivialArg , ArrayArg , VectorArg } ;
00210     public:
00212       FUNCTION_OBJECT_DEF( SimpleFunction ) ;
00213       
00214     public:
00215       
00219       SimpleFunction ( Function1 func ) ;
00220       
00225       SimpleFunction ( Function2    func , 
00226                        const size_t dim ) ;
00227       
00232       SimpleFunction ( Function3    func , 
00233                        const size_t dim ) ;
00234       
00236       SimpleFunction ( const SimpleFunction& ) ;
00237       
00238       // destructor 
00239       virtual ~SimpleFunction();
00240     public:
00241       
00243       virtual unsigned int dimensionality         () const { return m_DIM   ; }
00245       virtual bool  hasAnalyticDerivative         () const { return true    ; }
00247       virtual double             operator()  ( double          ) const ;
00249       virtual double             operator()  ( const Argument& ) const ;
00251       virtual Genfun::Derivative partial     ( unsigned int i  ) const ;     
00252       
00253     private:
00254       
00255       // the default constructor  is disabled 
00256       SimpleFunction() ;
00257       // the assignement operator is disabled 
00258       SimpleFunction& operator=(const SimpleFunction& );      
00259       
00260     private:
00261       
00262       Case                         m_case     ;
00263       size_t                       m_DIM      ;
00264       
00265       Function1                    m_func1    ;
00266       
00267       Function2                    m_func2    ;
00268       double*                      m_arg2     ;
00269       
00270       Function3                    m_func3    ;
00271       mutable std::vector<double>  m_arg3     ;
00272     };
00273     
00274   }; // end of namespace GaudiMathImeplementation
00275 }; // end of namespace Genfun
00276 
00277 
00278 #endif // GAUDIMATH_FUNADAPTERS_H
00279 // ============================================================================

Generated at Fri Jul 18 11:59:19 2008 for Gaudi Framework, version v20r2 by Doxygen version 1.5.1 written by Dimitri van Heesch, © 1997-2004