| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

GaudiAlgorithm.h

Go to the documentation of this file.
00001 // $Id: GaudiAlgorithm.h,v 1.19 2008/11/04 22:49:25 marcocle Exp $
00002 // ============================================================================
00003 #ifndef GAUDIALG_GaudiAlgorithm_H
00004 #define GAUDIALG_GaudiAlgorithm_H 1
00005 // ============================================================================
00006 // Include files
00007 // ============================================================================
00008 #include <vector>
00009 #include <string>
00010 // ============================================================================
00011 // GaudiKernel
00012 // ============================================================================
00013 #include "GaudiKernel/Algorithm.h"
00014 // ============================================================================
00015 // GaudiAlg
00016 // ============================================================================
00017 #include "GaudiAlg/GaudiAlg.h"
00018 #include "GaudiAlg/GaudiCommon.h"
00019 // ============================================================================
00020 // forward declarations:
00021 // ============================================================================
00022 class                   INTupleSvc     ; // GaudiKernel
00023 class                   IAlgContextSvc ; // GaudiKernel
00024 template<class T> class  AlgFactory    ; // GaudiKernel
00025 // ============================================================================
00026 /* @file GaudiAlgorithm.h
00027  *
00028  * Header file for class GaudiAlgorithm.
00029  * The actual code is mainly imported from
00030  *   - LHCb Calorimeter software and
00031  *   - LHCb C++ toolkit for smart and friendly physics analysis "LoKi"
00032  *
00033  *  This base class allows "easy"(=="1 line") access to tools
00034  *  and services. This access is safe in the sense that there
00035  *  is no need to worry about the reference counts for tools
00036  *  and services.
00037  *
00038  *  The base class allows "easy" (=="1 line") access to data in
00039  *  Gaudi Transient Stores. The functionality includes the checking
00040  *  of the presence of the data at the given location, checking the
00041  *  validity of the data, retrieval of valid data and "forced" retrive
00042  *  of valid data (create if there is no data).
00043  *
00044  *  The base class allows to perform an easy error, warning and exception
00045  *  treatments, including the accumulated statistics of exceptions, errors
00046  *  and warnings.
00047  *
00048  *  The base class also includes utilities for general statistical counters.
00049  *
00050  *  It has been reported that usage of this base class results in
00051  *  significant shrinkage of existing code lines.
00052  *
00053  *  @attention
00054  *  See also the class GaudiCommon, which implements some of the common
00055  *  functionality between GaudiTool and GaudiAlgorithm.
00056  *
00057  *  @author Vanya BELYAEV Ivan.Belyaev@itep.ru
00058  *  @author Chris Jones   Christopher.Rob.Jones@cern.ch
00059  *  @date 30/06/2001
00060  */
00061 // ============================================================================
00095 // ============================================================================
00096 class GaudiAlgorithm : public GaudiCommon<Algorithm>
00097 {
00098   // friend factory for instantiation
00099   friend class AlgFactory<GaudiAlgorithm>;
00100 public:
00101   // ==========================================================================
00107   virtual StatusCode initialize();
00108   // ==========================================================================
00114   virtual StatusCode execute   ();
00115   // ==========================================================================
00121   virtual StatusCode finalize  ();
00122   // ==========================================================================
00129   virtual StatusCode sysExecute () ;
00130   // ==========================================================================  
00131 public:
00132 
00133   // following methods cannot go in GaudiCommon since they use methods ( evtSvc()
00134   // and detDvc() ) that are not members of AlgTool.
00135   // Also some methods seem which are members of the base class do not seem
00136   // to be found unless forwarding methods are put here ??
00137 
00170   inline void put ( IDataProviderSvc*  svc     ,
00171                     DataObject*        object  ,
00172                     const std::string& address ,
00173                     const bool useRootInTES = true ) const
00174   {
00175     GaudiCommon<Algorithm>::put ( svc , object , address , useRootInTES ) ;
00176   }
00177 
00209   inline void put ( DataObject*        object   ,
00210                     const std::string& address  ,
00211                     const bool useRootInTES = true ) const
00212   {
00213     GaudiCommon<Algorithm>::put ( evtSvc() , object , address , useRootInTES ) ;
00214   }
00215 
00248   template < class TYPE  >
00249   inline typename Gaudi::Utils::GetData<TYPE>::return_type  
00250   get  ( IDataProviderSvc*  svc       ,
00251          const std::string& location  ,
00252          const bool useRootInTES = true ) const
00253   {
00254     return GaudiCommon<Algorithm>::get<TYPE> ( svc , location , useRootInTES ) ;
00255   }
00256 
00283   template < class TYPE  >
00284   inline typename Gaudi::Utils::GetData<TYPE>::return_type  
00285   get  ( const std::string& location,
00286          const bool useRootInTES = true ) const
00287   {
00288     return GaudiCommon<Algorithm>::get<TYPE> ( evtSvc() , location , useRootInTES ) ;
00289   }
00290 
00309   template < class TYPE  >
00310   inline TYPE* getDet ( IDataProviderSvc*  svc        ,
00311                         const std::string& location   ) const
00312   {
00313     return GaudiCommon<Algorithm>::get<TYPE> ( svc , location , false ) ;
00314   }
00315 
00333   template < class TYPE  >
00334   inline TYPE* getDet ( const std::string& location   ) const
00335   {
00336     return GaudiCommon<Algorithm>::get<TYPE> ( detSvc() , location , false ) ;
00337   }
00338 
00365   template < class TYPE  >
00366   inline bool  exist    ( IDataProviderSvc*  svc      ,
00367                           const std::string& location ,
00368                           const bool useRootInTES = true ) const
00369   {
00370     return GaudiCommon<Algorithm>::exist<TYPE> ( svc , location , useRootInTES ) ;
00371   }
00372 
00398   template < class TYPE  >
00399   inline bool  exist    ( const std::string& location ,
00400                           const bool useRootInTES = true ) const
00401   {
00402     return GaudiCommon<Algorithm>::exist<TYPE> ( evtSvc() , location , useRootInTES ) ;
00403   }
00404 
00421   template < class TYPE  >
00422   inline bool  existDet    ( IDataProviderSvc*  svc      ,
00423                              const std::string& location ) const
00424   {
00425     return GaudiCommon<Algorithm>::exist<TYPE> ( svc , location , false ) ;
00426   }
00427 
00443   template < class TYPE  >
00444   inline bool  existDet    ( const std::string& location ) const
00445   {
00446     return GaudiCommon<Algorithm>::exist<TYPE> ( detSvc() , location , false ) ;
00447   }
00448 
00476   template < class TYPE , class TYPE2 >
00477   inline TYPE* getOrCreate ( IDataProviderSvc*  svc      ,
00478                              const std::string& location ,
00479                              const bool useRootInTES = true ) const
00480   {
00481     return GaudiCommon<Algorithm>::getOrCreate<TYPE,TYPE2> ( svc , location , useRootInTES ) ;
00482   }
00483 
00510   template < class TYPE , class TYPE2 >
00511   inline TYPE* getOrCreate ( const std::string& location ,
00512                              const bool useRootInTES = true ) const
00513   {
00514     return GaudiCommon<Algorithm>::getOrCreate<TYPE,TYPE2> ( evtSvc() , location , useRootInTES ) ;
00515   }
00516 public:
00517   // ==========================================================================
00523   GaudiAlgorithm ( const std::string& name        ,
00524                    ISvcLocator*       pSvcLocator );
00525   // ==========================================================================
00527   virtual ~GaudiAlgorithm();
00528   // ==========================================================================
00529 public:
00530   // ==========================================================================
00532   inline bool registerContext() const { return m_registerContext ; }
00533   // ==========================================================================  
00534 public:
00535   // ==========================================================================
00539   INTupleSvc*     evtColSvc  () const;
00540   // ==========================================================================
00544   IAlgContextSvc* contextSvc () const;
00545   // ==========================================================================
00546 private:
00547   // ==========================================================================
00548   // no public default constructor
00549   GaudiAlgorithm(); 
00550   // ==========================================================================
00551   // no public copy constructor
00552   GaudiAlgorithm             ( const GaudiAlgorithm& ); 
00553   // ==========================================================================
00554   // no public assignment operator
00555   GaudiAlgorithm& operator = ( const GaudiAlgorithm& ); 
00556   // ==========================================================================
00557 private:
00558   // ==========================================================================
00559   // Pointer to the Event Tag Collection Service
00560   mutable INTupleSvc*     m_evtColSvc      ; 
00561   // Pointer to the Algorithm Context Service 
00562   mutable IAlgContextSvc* m_contextSvc     ; 
00563   // The name of the Algorithm Context Service 
00564   std::string             m_contextSvcName ; 
00565   // enforce the algorithm registration for Algorithm Context Service
00566   bool    m_registerContext ; 
00567 
00568   std::vector<std::string> m_vetoObjs;
00570   std::vector<std::string> m_requireObjs;
00571   
00572   // ==========================================================================
00573 };
00574 // ============================================================================
00575 // The END
00576 // ============================================================================
00577 #endif // GAUDIALG_GaudiAlgorithm_H
00578 // ============================================================================
00579 
00580 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 19:58:13 2011 for GaudiAlg by doxygen 1.4.7