Gaudi Framework, version v20r2

Generated: 18 Jul 2008

GaudiAlgorithm Class Reference

#include <GaudiAlg/GaudiAlgorithm.h>

Inheritance diagram for GaudiAlgorithm:

Inheritance graph
[legend]
Collaboration diagram for GaudiAlgorithm:

Collaboration graph
[legend]
List of all members.

Detailed Description

The useful base class for data processing algorithms.

Small extension of ordinary the Algorithm base class.

This base class allows "easy"(=="1 line") access to tools and services. This access is safe in the sense that there is no need to worry about the reference counts for tools and services.

The base class allows "easy" (=="1 line") access to data in Gaudi Transient Stores. The functionality includes the checking of the presence of the data at the given location, checking the validity of the data, retrieval of valid data and "forced" retrive of valid data (create if there is no data).

The base class allows to perform an easy error, warning and exception treatments, including the accumulated statistics of exceptions, errors and warnings.

The base class also includes utilities for general statistical counters.

It has been reported that usage of this base class results in significant shrinkage of existing code lines.

Attention:
See also the class GaudiCommon, which implements some of the common functionality between GaudiTool and GaudiAlgorithm.
Author:
Vanya BELYAEV Ivan.Belyaev@itep.ru

Chris Jones Christopher.Rob.Jones@cern.ch

Date:
30/06/2001

Definition at line 93 of file GaudiAlgorithm.h.

Public Member Functions

virtual StatusCode initialize ()
 standard initialization method
virtual StatusCode execute ()
 standard execution method
virtual StatusCode finalize ()
 standard finalization method
virtual StatusCode sysExecute ()
 the generic actions for the execution.
void put (IDataProviderSvc *svc, DataObject *object, const std::string &address, const bool useRootInTES=true) const
 Register a data object or container into Gaudi Event Transient Store.
void put (DataObject *object, const std::string &address, const bool useRootInTES=true) const
 Register a data object or container into Gaudi Event Transient Store.
template<class TYPE>
TYPE * get (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
 Templated access to the data in Gaudi Transient Store.
template<class TYPE>
TYPE * get (const std::string &location, const bool useRootInTES=true) const
 Templated access to the data from Gaudi Event Transient Store.
template<class TYPE>
TYPE * getDet (IDataProviderSvc *svc, const std::string &location) const
 Templated access to the detector data from the Gaudi Detector Transient Store.
template<class TYPE>
TYPE * getDet (const std::string &location) const
 Templated access to the detector data from the Gaudi Detector Transient Store.
template<class TYPE>
bool exist (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
 Check the existence of a data object or container in the Gaudi Transient Event Store.
template<class TYPE>
bool exist (const std::string &location, const bool useRootInTES=true) const
 Check the existence of a data object or container in the Gaudi Transient Event Store.
template<class TYPE>
bool existDet (IDataProviderSvc *svc, const std::string &location) const
 Check the existence of detector objects in the Gaudi Transient Detector Store.
template<class TYPE>
bool existDet (const std::string &location) const
 Check the existence of detector objects in the Gaudi Transient Detector Store.
template<class TYPE, class TYPE2>
TYPE * getOrCreate (IDataProviderSvc *svc, const std::string &location, const bool useRootInTES=true) const
 Get the existing data object from Gaudi Event Transient store.
template<class TYPE, class TYPE2>
TYPE * getOrCreate (const std::string &location, const bool useRootInTES=true) const
 Get the existing data object from Gaudi Event Transient store.
 GaudiAlgorithm (const std::string &name, ISvcLocator *pSvcLocator)
 Standard constructor (protected).
virtual ~GaudiAlgorithm ()
 destructor, virtual and protected
bool registerContext () const
 register for Algorithm Context Service ?
INTupleSvcevtColSvc () const
 Access the standard event collection service.
IAlgContextSvccontextSvc () const
 Access the standard Algorithm Context Service.

Private Member Functions

 GaudiAlgorithm ()
 no public default constructor
 GaudiAlgorithm (const GaudiAlgorithm &)
 no public copy
GaudiAlgorithmoperator= (const GaudiAlgorithm &)
 no public assignment

Private Attributes

INTupleSvcm_evtColSvc
 Event Tag Collection Service.
IAlgContextSvcm_contextSvc
 Algorithm Context Service.
std::string m_contextSvcName
 Algorithm Context Service.
bool m_registerContext
 register in Algorithm Context Service

Friends

class AlgFactory< GaudiAlgorithm >


Constructor & Destructor Documentation

GaudiAlgorithm::GaudiAlgorithm ( const std::string name,
ISvcLocator pSvcLocator 
)

Standard constructor (protected).

See also:
Algorithm
Parameters:
name name of the algorithm
pSvcLocator poinetr to Service Locator

Definition at line 35 of file GaudiAlgorithm.cpp.

References Algorithm::declareProperty(), m_contextSvcName, and m_registerContext.

00037   : GaudiCommon<Algorithm> ( name , pSvcLocator )
00038   //
00039   , m_evtColSvc  ( 0        ) // pointer to Event Tag Collection Service
00040   , m_contextSvc ( 0        ) // pointer to Algorithm Context Service
00041   , m_contextSvcName ( "AlgContextSvc" ) // Algorithm Context Service name 
00042   // enforce the algorithm registration for Algorithm Context Service
00043   , m_registerContext ( true )
00044 {
00045   declareProperty 
00046     ( "ContextService" , 
00047       m_contextSvcName , 
00048       "The name of Algorithm Context Service" ) ;
00049   declareProperty 
00050     ( "RegisterForContextService" , 
00051       m_registerContext  , 
00052       "The flag to enforce the registration for Algorithm Context Service") ;
00053 }

GaudiAlgorithm::~GaudiAlgorithm (  )  [virtual]

destructor, virtual and protected

Definition at line 57 of file GaudiAlgorithm.cpp.

00057 { }

GaudiAlgorithm::GaudiAlgorithm (  )  [private]

no public default constructor

GaudiAlgorithm::GaudiAlgorithm ( const GaudiAlgorithm  )  [private]

no public copy


Member Function Documentation

StatusCode GaudiAlgorithm::initialize (  )  [virtual]

standard initialization method

See also:
Algorithm

IAlgorithm

Returns:
status code

Reimplemented from GaudiCommon< Algorithm >.

Reimplemented in GaudiHistoAlg, GaudiSequencer, GaudiTupleAlg, Prescaler, GaudiHistos< GaudiAlgorithm >, and GaudiTuples< GaudiHistoAlg >.

Definition at line 61 of file GaudiAlgorithm.cpp.

References GaudiCommon< PBASE >::initialize(), and StatusCode::isFailure().

Referenced by Prescaler::initialize(), and GaudiSequencer::initialize().

00062 {
00063   // initialize the base class
00064   const StatusCode sc = GaudiCommon<Algorithm>::initialize() ;
00065   if ( sc.isFailure() ) { return sc; }
00066 
00067   // Add any customisations here, that cannot go in GaudiCommon
00068 
00069   // return
00070   return sc;
00071 }

StatusCode GaudiAlgorithm::execute (  )  [virtual]

standard execution method

See also:
Algorithm

IAlgorithm

Returns:
status code

Implements IAlgorithm.

Reimplemented in GaudiSequencer, and Prescaler.

Definition at line 89 of file GaudiAlgorithm.cpp.

References GaudiCommon< Algorithm >::Error().

00090 {
00091   return Error ( "Default GaudiAlgorithm execute method called !!" ) ;
00092 }

StatusCode GaudiAlgorithm::finalize (  )  [virtual]

standard finalization method

See also:
Algorithm

IAlgorithm

Returns:
status code

Reimplemented from GaudiCommon< Algorithm >.

Reimplemented in GaudiHistoAlg, GaudiSequencer, GaudiTupleAlg, Prescaler, GaudiHistos< GaudiAlgorithm >, and GaudiTuples< GaudiHistoAlg >.

Definition at line 75 of file GaudiAlgorithm.cpp.

References GaudiCommon< Algorithm >::debug(), MSG::DEBUG, endreq(), GaudiCommon< PBASE >::finalize(), m_evtColSvc, and GaudiCommon< Algorithm >::msgLevel().

Referenced by Prescaler::finalize(), and GaudiSequencer::finalize().

00076 {
00077   if ( msgLevel(MSG::DEBUG) )
00078     debug() << "Finalize base class GaudiAlgorithm" << endreq;
00079 
00080   // reset pointers
00081   m_evtColSvc = 0 ;
00082 
00083   // finalize the base class and return
00084   return GaudiCommon<Algorithm>::finalize() ;
00085 }

StatusCode GaudiAlgorithm::sysExecute (  )  [virtual]

the generic actions for the execution.

See also:
Algorithm

IAlgorithm

Algorithm::sysExecute

Returns:
status code

< guard/sentry

execute the generic method:

Reimplemented from Algorithm.

Definition at line 123 of file GaudiAlgorithm.cpp.

References contextSvc(), registerContext(), and Algorithm::sysExecute().

00124 {
00125   IAlgContextSvc* ctx = 0 ;
00126   if ( registerContext() ) { ctx = contextSvc() ; }
00127   // Lock the context 
00128   Gaudi::Utils::AlgContext cnt ( ctx , this ) ;  
00129 
00130   return Algorithm::sysExecute() ;
00131 }

void GaudiAlgorithm::put ( IDataProviderSvc svc,
DataObject object,
const std::string address,
const bool  useRootInTES = true 
) const [inline]

Register a data object or container into Gaudi Event Transient Store.

  MCHits * hits = new MCHits();
  put( evtSvc(), hits, "/Event/MC/Hits" );

Attention:
The method respects the setting of the job option RootInTES by prepending the value of this to the data location that is passed. The default setting for RootInTES is "" so has no effect. This behaviour can be suppressed by passing the arguement useRootInTES = false
See also:
IDataProviderSvc
Parameters:
svc Pointer to data provider service
object Data object or container to be registered
address Address in Gaudi Event Transient Store ("/Event" could be omitted )
useRootInTES Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Exceptions:
GaudiException for invalid event data service
GaudiException for invalid object
GaudiException for error result from event data service
Returns:
StatusCode
Return values:
StatusCode::SUCCESS Data was successfully placed in the TES.
StatusCode::FAILURE Failed to store data in the TES.

Reimplemented from GaudiCommon< Algorithm >.

Definition at line 167 of file GaudiAlgorithm.h.

References GaudiCommon< PBASE >::put(), and GaudiCommon< Algorithm >::svc().

00171   {
00172     GaudiCommon<Algorithm>::put ( svc , object , address , useRootInTES ) ;
00173   }

void GaudiAlgorithm::put ( DataObject object,
const std::string address,
const bool  useRootInTES = true 
) const [inline]

Register a data object or container into Gaudi Event Transient Store.

See also:
IDataProviderSvc
  MCHits * hits = new MCHits();
  put( hits, "/Event/MC/Hits" );

Attention:
The method respects the setting of the job option RootInTES by prepending the value of this to the data location that is passed. The default setting for RootInTES is "" so has no effect. This behaviour can be suppressed by passing the arguement useRootInTES = false
Parameters:
object Data object or container to be registered
address Address in Gaudi Event Transient Store ("/Event" could be omitted )
useRootInTES Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Exceptions:
GaudiException for invalid event data service
GaudiException for invalid object
GaudiException for error result from event data service
Returns:
StatusCode
Return values:
StatusCode::SUCCESS Data was successfully placed in the TES.
StatusCode::FAILURE Failed to store data in the TES.

Definition at line 206 of file GaudiAlgorithm.h.

References Algorithm::evtSvc(), and GaudiCommon< PBASE >::put().

00209   {
00210     GaudiCommon<Algorithm>::put ( evtSvc() , object , address , useRootInTES ) ;
00211   }

template<class TYPE>
TYPE* GaudiAlgorithm::get ( IDataProviderSvc svc,
const std::string location,
const bool  useRootInTES = true 
) const [inline]

Templated access to the data in Gaudi Transient Store.

Quick and safe access to the data in Gaudi transient store. The method located the data at given address and perform the debug printout about located data

  MCHits* hits = get<MCHits>( evtSvc() , "/Event/MC/Hits" );

Attention:
The method respects the setting of the job option RootInTES by prepending the value of this to the data location that is passed. The default setting for RootInTES is "" so has no effect. This behaviour can be suppressed by passing the arguement useRootInTES = false
See also:
IDataProviderSvc

SmartDataPtr

Exceptions:
GaudiException for Invalid Data Provider Service
GaudiException for invalid/unavailable data
Parameters:
svc Pointer to data service (data provider)
location data location/address in Gaudi Transient Store
useRootInTES Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Returns:
pointer to the data object

Reimplemented from GaudiCommon< Algorithm >.

Definition at line 246 of file GaudiAlgorithm.h.

References GaudiCommon< Algorithm >::svc().

00249   {
00250     return GaudiCommon<Algorithm>::get<TYPE> ( svc , location , useRootInTES ) ;
00251   }

template<class TYPE>
TYPE* GaudiAlgorithm::get ( const std::string location,
const bool  useRootInTES = true 
) const [inline]

Templated access to the data from Gaudi Event Transient Store.

Quick and safe access to the data in Gaudi transient store.

The method located the data at the given address and perform the debug printout about located data.

  MCParticles* mcps = get<MCParticles>( MCParticleLocation::Default );

Attention:
The method respects the setting of the job option RootInTES by prepending the value of this to the data location that is passed. The default setting for RootInTES is "" so has no effect. This behaviour can be suppressed by passing the arguement useRootInTES = false
Parameters:
location Data location/address in Gaudi Transient Store
useRootInTES Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Returns:
Pointer to the data object

Definition at line 280 of file GaudiAlgorithm.h.

References Algorithm::evtSvc().

00282   {
00283     return GaudiCommon<Algorithm>::get<TYPE> ( evtSvc() , location , useRootInTES ) ;
00284   }

template<class TYPE>
TYPE* GaudiAlgorithm::getDet ( IDataProviderSvc svc,
const std::string location 
) const [inline]

Templated access to the detector data from the Gaudi Detector Transient Store.

Quick and safe access to the detector data in Gaudi transient store.

The method located the detector at the given address and perform the debug printout about located detector.

  MyDet* mdet = getDet<MyDet>( detSvc() , "/dd/Structure/LHCb/MyDet" );

Parameters:
svc Pointer to data service (data provider)
location Detector location/address in Gaudi Transient Store
Returns:
Pointer to the detector object

Definition at line 305 of file GaudiAlgorithm.h.

References GaudiCommon< Algorithm >::svc().

00307   {
00308     return GaudiCommon<Algorithm>::get<TYPE> ( svc , location , false ) ;
00309   }

template<class TYPE>
TYPE* GaudiAlgorithm::getDet ( const std::string location  )  const [inline]

Templated access to the detector data from the Gaudi Detector Transient Store.

Quick and safe access to the detector data in Gaudi transient store.

The method located the detector at the given address and perform the debug printout about located detector.

  MyDet* mdet = getDet<MyDet>( "/dd/Structure/LHCb/MyDet" );

Parameters:
location Detector location/address in Gaudi Transient Store
Returns:
Pointer to the detector object

Definition at line 329 of file GaudiAlgorithm.h.

References Algorithm::detSvc().

00330   {
00331     return GaudiCommon<Algorithm>::get<TYPE> ( detSvc() , location , false ) ;
00332   }

template<class TYPE>
bool GaudiAlgorithm::exist ( IDataProviderSvc svc,
const std::string location,
const bool  useRootInTES = true 
) const [inline]

Check the existence of a data object or container in the Gaudi Transient Event Store.

  bool a1 = exist<DataObject>( evtSvc(), "/Event/MyObject" ) ;
  bool a2 = exist<MyHits>    ( evtSvc(), "/Event/MyHits"   ) ;

Attention:
The method respects the setting of the job option RootInTES by prepending the value of this to the data location that is passed. The default setting for RootInTES is "" so has no effect. This behaviour can be suppressed by passing the arguement useRootInTES = false
Parameters:
svc Pointer to data service (data provider)
location Address in Gaudi Transient Event Store
useRootInTES Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Returns:
Boolean indicating status of the request
Return values:
true Data object or container exists and implements a proper interface
true Failed to locate the data object or container

Reimplemented from GaudiCommon< Algorithm >.

Definition at line 361 of file GaudiAlgorithm.h.

References GaudiCommon< Algorithm >::svc().

00364   {
00365     return GaudiCommon<Algorithm>::exist<TYPE> ( svc , location , useRootInTES ) ;
00366   }

template<class TYPE>
bool GaudiAlgorithm::exist ( const std::string location,
const bool  useRootInTES = true 
) const [inline]

Check the existence of a data object or container in the Gaudi Transient Event Store.

  bool a1 = exist<DataObject>( "/Event/MyObject" ) ;
  bool a2 = exist<MyHits>    ( "/Event/MyHits"   ) ;

Attention:
The method respects the setting of the job option RootInTES by prepending the value of this to the data location that is passed. The default setting for RootInTES is "" so has no effect. This behaviour can be suppressed by passing the arguement useRootInTES = false
Parameters:
location Address in Gaudi Transient Event Store
useRootInTES Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Returns:
Boolean indicating status of the request
Return values:
true Data object or container exists and implements a proper interface
true Failed to locate the data object or container

Definition at line 394 of file GaudiAlgorithm.h.

References Algorithm::evtSvc().

00396   {
00397     return GaudiCommon<Algorithm>::exist<TYPE> ( evtSvc() , location , useRootInTES ) ;
00398   }

template<class TYPE>
bool GaudiAlgorithm::existDet ( IDataProviderSvc svc,
const std::string location 
) const [inline]

Check the existence of detector objects in the Gaudi Transient Detector Store.

  bool a1 = existDet<DataObject> ( detSvc(), "/dd/Structure/MyObject"     ) ;
  bool a2 = existDet<Material>   ( detSvc(), "/dd/Structure/Material/Air" ) ;

Parameters:
svc Pointer to data service (data provider)
location Address in Gaudi Transient Detector Store
Returns:
Boolean indicating status of the request
Return values:
true Detector object exists and implements a proper interface
false Failed to locate the data object

Definition at line 417 of file GaudiAlgorithm.h.

References GaudiCommon< Algorithm >::svc().

00419   {
00420     return GaudiCommon<Algorithm>::exist<TYPE> ( svc , location , false ) ;
00421   }

template<class TYPE>
bool GaudiAlgorithm::existDet ( const std::string location  )  const [inline]

Check the existence of detector objects in the Gaudi Transient Detector Store.

  bool a1 = existDet<DataObject> ( "/dd/Structure/MyObject"     ) ;
  bool a2 = existDet<Material>   ( "/dd/Structure/Material/Air" ) ;

Parameters:
location Address in Gaudi Transient Detector Store
Returns:
Boolean indicating status of the request
Return values:
true Detector object exists and implements a proper interface
false Failed to locate the data object

Definition at line 439 of file GaudiAlgorithm.h.

References Algorithm::detSvc().

00440   {
00441     return GaudiCommon<Algorithm>::exist<TYPE> ( detSvc() , location , false ) ;
00442   }

template<class TYPE, class TYPE2>
TYPE* GaudiAlgorithm::getOrCreate ( IDataProviderSvc svc,
const std::string location,
const bool  useRootInTES = true 
) const [inline]

Get the existing data object from Gaudi Event Transient store.

Alternatively, create new object and register it in TES and return if object does not exist.

  MyHits* hits = getOrCreate<MyHits,MyHits>( evtSvc() , "/Event/MyHits" ) ;

Attention:
The method respects the setting of the job option RootInTES by prepending the value of this to the data location that is passed. The default setting for RootInTES is "" so has no effect. This behaviour can be suppressed by passing the arguement useRootInTES = false
Exceptions:
GaudiException for Invalid Data Provider Service
GaudiException for invalid/unavailable data
Parameters:
svc Pointer to data service (data provider)
location Location in Gaudi Transient Event Store
useRootInTES Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Returns:
A valid pointer to the object

Reimplemented from GaudiCommon< Algorithm >.

Definition at line 472 of file GaudiAlgorithm.h.

References GaudiCommon< Algorithm >::svc().

00475   {
00476     return GaudiCommon<Algorithm>::getOrCreate<TYPE,TYPE2> ( svc , location , useRootInTES ) ;
00477   }

template<class TYPE, class TYPE2>
TYPE* GaudiAlgorithm::getOrCreate ( const std::string location,
const bool  useRootInTES = true 
) const [inline]

Get the existing data object from Gaudi Event Transient store.

Alternatively, create new object and register it in TES and return if object does not exist.

  MyHits* hits = getOrCreate<MyHits,MyHits>( "/Event/MyHits" ) ;

Attention:
The method respects the setting of the job option RootInTES by prepending the value of this to the data location that is passed. The default setting for RootInTES is "" so has no effect. This behaviour can be suppressed by passing the arguement useRootInTES = false
Exceptions:
GaudiException for Invalid Data Provider Service
GaudiException for invalid/unavailable data
Parameters:
location Location in Gaudi Transient Event Store
useRootInTES Flag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Returns:
A valid pointer to the object

Definition at line 506 of file GaudiAlgorithm.h.

References Algorithm::evtSvc().

00508   {
00509     return GaudiCommon<Algorithm>::getOrCreate<TYPE,TYPE2> ( evtSvc() , location , useRootInTES ) ;
00510   }

bool GaudiAlgorithm::registerContext (  )  const [inline]

register for Algorithm Context Service ?

Definition at line 527 of file GaudiAlgorithm.h.

References m_registerContext.

Referenced by sysExecute().

00527 { return m_registerContext ; }

INTupleSvc * GaudiAlgorithm::evtColSvc (  )  const

Access the standard event collection service.

Returns:
pointer to the event collection service

Definition at line 96 of file GaudiAlgorithm.cpp.

References m_evtColSvc.

00097 {
00098   if ( 0 == m_evtColSvc )
00099   {
00100     m_evtColSvc = svc< INTupleSvc > ( "EvtTupleSvc" , true ) ;
00101   }
00102   return m_evtColSvc ;
00103 }

IAlgContextSvc * GaudiAlgorithm::contextSvc (  )  const

Access the standard Algorithm Context Service.

Returns:
pointer to the Algorithm Context Service

Definition at line 107 of file GaudiAlgorithm.cpp.

References m_contextSvc, and m_contextSvcName.

Referenced by sysExecute().

00108 {
00109   if ( 0 == m_contextSvc )
00110   {
00111     m_contextSvc = svc< IAlgContextSvc > ( m_contextSvcName , true ) ;
00112   }
00113   return m_contextSvc ;
00114 }

GaudiAlgorithm& GaudiAlgorithm::operator= ( const GaudiAlgorithm  )  [private]

no public assignment


Friends And Related Function Documentation

friend class AlgFactory< GaudiAlgorithm > [friend]

Definition at line 96 of file GaudiAlgorithm.h.


Member Data Documentation

INTupleSvc* GaudiAlgorithm::m_evtColSvc [mutable, private]

Event Tag Collection Service.

Definition at line 555 of file GaudiAlgorithm.h.

Referenced by evtColSvc(), and finalize().

IAlgContextSvc* GaudiAlgorithm::m_contextSvc [mutable, private]

Algorithm Context Service.

Definition at line 557 of file GaudiAlgorithm.h.

Referenced by contextSvc().

std::string GaudiAlgorithm::m_contextSvcName [private]

Algorithm Context Service.

Definition at line 559 of file GaudiAlgorithm.h.

Referenced by contextSvc(), and GaudiAlgorithm().

bool GaudiAlgorithm::m_registerContext [private]

register in Algorithm Context Service

Definition at line 561 of file GaudiAlgorithm.h.

Referenced by GaudiAlgorithm(), and registerContext().


The documentation for this class was generated from the following files:
Generated at Fri Jul 18 12:07:29 2008 for Gaudi Framework, version v20r2 by Doxygen version 1.5.1 written by Dimitri van Heesch, © 1997-2004