Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

ChronoEntity.h

Go to the documentation of this file.
00001 #ifndef     __GAUDI_CHRONOSTATSVC_CHRONOENTITY_H__
00002 #define     __GAUDI_CHRONOSTATSVC_CHRONOENTITY_H__
00003 
00004 #include <string> 
00005 #include <vector> 
00006 #include <functional> 
00007 #include <cmath>
00008 
00009 #include "GaudiKernel/Kernel.h" 
00010 
00011 #include "GaudiKernel/IChronoStatSvc.h" 
00012 
00019 
00020 class ChronoEntity 
00021 {
00022  public:
00027   typedef  longlong  time_type; 
00030   ChronoEntity();
00033   ~ChronoEntity(){};
00035  public: 
00039   IChronoStatSvc::ChronoStatus      start() ;
00043   IChronoStatSvc::ChronoStatus      stop () ;
00044   
00048   inline  std::string                outputUserTime     () const; 
00049   inline  std::string                outputSystemTime   () const; 
00050   inline  std::string                outputEllapsedTime () const; 
00053   inline IChronoStatSvc::ChronoStatus      status() const { return m_ce_currentStatus; };
00056   inline bool operator<( const ChronoEntity& entity ) const; 
00060   inline unsigned long        nOfMeasurements() const { return m_ce_noOfMeasurements;}; 
00064   inline long double          uMinimalTime   () const { return m_ce_minimalUserTime         ; };
00067   inline long double          kMinimalTime   () const { return m_ce_minimalKernelTime       ; };
00070   inline long double          eMinimalTime   () const { return m_ce_minimalEllapsedTime     ; };
00073   inline long double          uMaximalTime   () const { return m_ce_maximalUserTime         ; };
00076   inline long double          kMaximalTime   () const { return m_ce_maximalKernelTime       ; };
00079   inline long double          eMaximalTime   () const { return m_ce_maximalEllapsedTime     ; };
00082   inline long double          uTotalTime     () const { return m_ce_totalUserTime           ; }; 
00085   inline long double          kTotalTime     () const { return m_ce_totalKernelTime         ; }; 
00088   inline long double          eTotalTime     () const { return m_ce_totalEllapsedTime       ; }; 
00091   inline long double          totalTime      () const { return uTotalTime() + kTotalTime()  ; };
00094   inline long double          uStatistics    () const { return m_ce_statisticsForUserTime   ; };
00097   inline long double          kStatistics    () const { return m_ce_statisticsForKernelTime ; };
00100   inline long double          eStatistics    () const { return m_ce_statisticsForEllapsedTime ; };
00104   inline long double          kMeanTime      () const { return ( 0 == nOfMeasurements() )  ? 0 : kTotalTime() / nOfMeasurements() ; } ;
00106   inline long double          uMeanTime      () const { return ( 0 == nOfMeasurements() )  ? 0 : uTotalTime() / nOfMeasurements() ; } ; 
00108   inline long double          eMeanTime      () const { return ( 0 == nOfMeasurements() )  ? 0 : eTotalTime() / nOfMeasurements() ; } ; 
00110   inline long double          kRMSTime       () const ; 
00112   inline long double          uRMSTime       () const ; 
00114   inline long double          eRMSTime       () const ; 
00116   inline long double          kMeanErrorTime () const ; 
00118   inline long double          uMeanErrorTime () const ; 
00120   inline long double          eMeanErrorTime () const ; 
00122  public:
00125   class ComparePairOfChronoEntityAndChronoTag;
00128  protected:
00130   std::string                 format( long double   total     , 
00131                                       long double   minimal   ,
00132                                       long double   mean      , 
00133                                       long double   rms       , 
00134                                       long double   maximal   , 
00135                                       unsigned long number    ) const;
00137  private:
00140   IChronoStatSvc::ChronoStatus  m_ce_currentStatus; 
00143   unsigned long                 m_ce_noOfMeasurements; 
00146   time_type                     m_ce_minimalUserTime;
00149   time_type                     m_ce_minimalKernelTime;
00152   time_type                     m_ce_minimalEllapsedTime;
00155   time_type                     m_ce_maximalUserTime;
00158   time_type                     m_ce_maximalKernelTime;
00161   time_type                     m_ce_maximalEllapsedTime;
00164   time_type                     m_ce_totalUserTime; 
00167   time_type                     m_ce_totalKernelTime; 
00170   time_type                     m_ce_totalEllapsedTime; 
00173   time_type                     m_ce_statisticsForUserTime;
00176   time_type                     m_ce_statisticsForKernelTime;
00179   time_type                     m_ce_statisticsForEllapsedTime;
00182   time_type                     m_ce_startOfCurrentMeasurementOfUserTime; 
00185   time_type                     m_ce_startOfCurrentMeasurementOfKernelTime; 
00188   time_type                     m_ce_startOfCurrentMeasurementOfEllapsedTime; 
00190 };
00191 
00196 inline long double                        ChronoEntity::kRMSTime       () const 
00197 { 
00198   long double D =
00199     ( 0 == nOfMeasurements() ) ? 0 : ( kStatistics() / ( long double ) nOfMeasurements() - kMeanTime() * kMeanTime() ) ; 
00200   return ( 0 > D ) ? 0 : sqrt( D ) ;  
00201 };
00205 inline long double                        ChronoEntity::uRMSTime       () const 
00206 {
00207   long double D = 
00208     ( 0 == nOfMeasurements() ) ? 0 : ( uStatistics() / ( long double ) nOfMeasurements() - uMeanTime() * uMeanTime() ) ; 
00209   return ( 0 > D ) ? 0 : sqrt( D ) ;  
00210 };
00214 inline long double                        ChronoEntity::eRMSTime       () const 
00215 {
00216   long double D = 
00217     ( 0 == nOfMeasurements() ) ? 0 : ( eStatistics() / ( long double ) nOfMeasurements() - eMeanTime() * eMeanTime() ) ; 
00218   return ( 0 > D ) ? 0 : sqrt( D ) ;  
00219 };
00223 inline long double                        ChronoEntity::kMeanErrorTime () const 
00224 { return ( 0 == nOfMeasurements() ) ? 0 : ( kRMSTime() / sqrt( ( long double ) nOfMeasurements() ) ) ; }
00228 inline long double                        ChronoEntity::uMeanErrorTime () const 
00229 { return ( 0 == nOfMeasurements() ) ? 0 : ( uRMSTime() / sqrt( ( long double ) nOfMeasurements() ) ) ; }
00233 inline long double                        ChronoEntity::eMeanErrorTime () const 
00234 { return ( 0 == nOfMeasurements() ) ? 0 : ( eRMSTime() / sqrt( ( long double ) nOfMeasurements() ) ) ; }
00238 inline bool ChronoEntity::operator<( const ChronoEntity& e ) const
00239 { 
00240   return 
00241     ( totalTime () < e.totalTime () ) ?  true :
00242     ( totalTime () > e.totalTime () ) ? false :    
00243     ( eTotalTime() < e.eTotalTime() ) ?  true : 
00244     ( eTotalTime() > e.eTotalTime() ) ? false : 
00245     ( uTotalTime() < e.uTotalTime() ) ?  true : 
00246     ( uTotalTime() > e.uTotalTime() ) ? false : false ; 
00247 }
00251 class ChronoEntity::ComparePairOfChronoEntityAndChronoTag 
00252 : public std::binary_function< const std::pair<ChronoEntity*,const IChronoStatSvc::ChronoTag*>& ,
00253                     const std::pair< ChronoEntity*,const IChronoStatSvc::ChronoTag*>& , bool > 
00254 {
00255  public: 
00256   inline bool operator() ( const  std::pair<ChronoEntity*,const IChronoStatSvc::ChronoTag*>& p1 , 
00257                            const  std::pair< ChronoEntity*,const IChronoStatSvc::ChronoTag*>& p2 ) const 
00258     {
00259       const ChronoEntity* e1 = p1.first; 
00260       const ChronoEntity* e2 = p2.first; 
00261       return ( ( 0 == e1 || 0 == e2 ) ? true : (*e1)<(*e2) ) ;
00262     }
00264 };
00265 
00269 
00270 inline std::string ChronoEntity::outputUserTime      () const 
00271 {
00272   std::string res ("Time User   : ") ;
00273   return res += format( uTotalTime     () , 
00274                         uMinimalTime   () , 
00275                         uMeanTime      () , 
00276                         uRMSTime       () , 
00277                         uMaximalTime   () , 
00278                         nOfMeasurements() );  
00279 }; 
00280 
00281 
00285 
00286 inline std::string ChronoEntity::outputSystemTime      () const 
00287 {
00288   std::string res ("Time System : ") ;
00289   return res += format( kTotalTime     () , 
00290                         kMinimalTime   () , 
00291                         kMeanTime      () , 
00292                         kRMSTime       () , 
00293                         kMaximalTime   () , 
00294                         nOfMeasurements() );  
00295 }; 
00296  
00300 
00301 inline std::string ChronoEntity::outputEllapsedTime      () const 
00302 {
00303   std::string res ("TimeEllapsed: ") ;
00304   return res += format( eTotalTime     () , 
00305                         eMinimalTime   () , 
00306                         eMeanTime      () , 
00307                         eRMSTime       () , 
00308                         eMaximalTime   () , 
00309                         nOfMeasurements() );  
00310 }; 
00311  
00315 #endif  //  __GAUDI_CHRONOSTATSVC_CHRONOENTITY_H__
00316 
00317 
00318 
00319 
00320 
00321 
00322 
00323 
00324 
00325 

Generated at Wed Nov 21 12:22:29 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000