Gaudi Framework, version v23r0

Home   Generated: Mon Jan 30 2012
Public Member Functions | Private Member Functions | Private Attributes | Friends

GaudiAlgorithm Class Reference

The useful base class for data processing algorithms. More...

#include <GaudiAlg/GaudiAlgorithm.h>

Inheritance diagram for GaudiAlgorithm:
Inheritance graph
[legend]
Collaboration diagram for GaudiAlgorithm:
Collaboration graph
[legend]

List of all members.

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 >
Gaudi::Utils::GetData< TYPE >
::return_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 >
Gaudi::Utils::GetData< TYPE >
::return_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 >
Gaudi::Utils::GetData< TYPE >
::return_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 >
Gaudi::Utils::GetData< TYPE >
::return_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
SmartIF< INTupleSvc > & evtColSvc () const
 Access the standard event collection service.

Private Member Functions

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

Private Attributes

SmartIF< INTupleSvcm_evtColSvc
 Event Tag Collection Service.
std::vector< std::stringm_vetoObjs
 skip the event if any of these objects are present in TES
std::vector< std::stringm_requireObjs
 process the event only if one or more of these objects are present in TES

Friends

class AlgFactory< GaudiAlgorithm >

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" retrieve 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 95 of file GaudiAlgorithm.h.


Constructor & Destructor Documentation

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

Standard constructor (protected)

See also:
Algorithm
Parameters:
namename of the algorithm
pSvcLocatorpointer to Service Locator

Definition at line 36 of file GaudiAlgorithm.cpp.

  : GaudiCommon<Algorithm> ( name , pSvcLocator )
  //
  , m_evtColSvc  ()  // pointer to Event Tag Collection Service
{
  m_vetoObjs.clear();
  m_requireObjs.clear();
  
  setProperty ( "RegisterForContextService" , true ).ignore() ;
  
  declareProperty( "VetoObjects", m_vetoObjs,
                   "Skip execute if one or more of these TES objects exists" );
  declareProperty( "RequireObjects", m_requireObjs,
                   "Execute only if one or more of these TES objects exists" );
}
GaudiAlgorithm::~GaudiAlgorithm (  ) [virtual]

destructor, virtual and protected

Definition at line 55 of file GaudiAlgorithm.cpp.

{ }
GaudiAlgorithm::GaudiAlgorithm (  ) [private]

no public default constructor

GaudiAlgorithm::GaudiAlgorithm ( const GaudiAlgorithm  ) [private]

no public copy


Member Function Documentation

SmartIF< INTupleSvc > & GaudiAlgorithm::evtColSvc (  ) const

Access the standard event collection service.

Returns:
pointer to the event collection service

Definition at line 94 of file GaudiAlgorithm.cpp.

{
  if ( !m_evtColSvc.isValid() )
  { m_evtColSvc = svc< INTupleSvc > ( "EvtTupleSvc" , true ) ; }
  //
  return m_evtColSvc ;
}
StatusCode GaudiAlgorithm::execute (  ) [virtual]

standard execution method

See also:
Algorithm
IAlgorithm
Returns:
status code

Reimplemented in GaudiSequencer, Prescaler, and EventNodeKiller.

Definition at line 87 of file GaudiAlgorithm.cpp.

{
  return Error ( "Default GaudiAlgorithm execute method called !!" ) ;
}
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 behavior can be suppressed by passing the argument useRootInTES = false
Parameters:
svcPointer to data service (data provider)
locationAddress in Gaudi Transient Event Store
useRootInTESFlag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Returns:
Boolean indicating status of the request
Return values:
trueData object or container exists and implements a proper interface
trueFailed to locate the data object or container

Reimplemented from GaudiCommon< Algorithm >.

Definition at line 365 of file GaudiAlgorithm.h.

  {
    return GaudiCommon<Algorithm>::exist<TYPE> ( svc , location , useRootInTES ) ;
  }
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 behavior can be suppressed by passing the argument useRootInTES = false
Parameters:
locationAddress in Gaudi Transient Event Store
useRootInTESFlag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Returns:
Boolean indicating status of the request
Return values:
trueData object or container exists and implements a proper interface
trueFailed to locate the data object or container

Definition at line 398 of file GaudiAlgorithm.h.

  {
    return GaudiCommon<Algorithm>::exist<TYPE> ( evtSvc() , location , useRootInTES ) ;
  }
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:
svcPointer to data service (data provider)
locationAddress in Gaudi Transient Detector Store
Returns:
Boolean indicating status of the request
Return values:
trueDetector object exists and implements a proper interface
falseFailed to locate the data object

Definition at line 421 of file GaudiAlgorithm.h.

  {
    return GaudiCommon<Algorithm>::exist<TYPE> ( svc , location , false ) ;
  }
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:
locationAddress in Gaudi Transient Detector Store
Returns:
Boolean indicating status of the request
Return values:
trueDetector object exists and implements a proper interface
falseFailed to locate the data object

Definition at line 443 of file GaudiAlgorithm.h.

  {
    return GaudiCommon<Algorithm>::exist<TYPE> ( detSvc() , location , false ) ;
  }
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 73 of file GaudiAlgorithm.cpp.

{
  if ( msgLevel(MSG::DEBUG) )
    debug() << "Finalize base class GaudiAlgorithm" << endmsg;
  
  // reset pointers
  m_evtColSvc.reset() ;
  
  // finalize the base class and return
  return GaudiCommon<Algorithm>::finalize() ;
}
template<class TYPE >
Gaudi::Utils::GetData<TYPE>::return_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 behavior can be suppressed by passing the argument useRootInTES = false
Parameters:
locationData location/address in Gaudi Transient Store
useRootInTESFlag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Returns:
Pointer to the data object

Definition at line 284 of file GaudiAlgorithm.h.

  {
    return GaudiCommon<Algorithm>::get<TYPE> ( evtSvc() , location , useRootInTES ) ;
  }
template<class TYPE >
Gaudi::Utils::GetData<TYPE>::return_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 behavior can be suppressed by passing the argument useRootInTES = false
See also:
IDataProviderSvc
SmartDataPtr
Exceptions:
GaudiExceptionfor Invalid Data Provider Service
GaudiExceptionfor invalid/unavailable data
Parameters:
svcPointer to data service (data provider)
locationdata location/address in Gaudi Transient Store
useRootInTESFlag 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 249 of file GaudiAlgorithm.h.

  {
    return GaudiCommon<Algorithm>::get<TYPE> ( svc , location , useRootInTES ) ;
  }
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:
svcPointer to data service (data provider)
locationDetector location/address in Gaudi Transient Store
Returns:
Pointer to the detector object

Definition at line 309 of file GaudiAlgorithm.h.

  {
    return GaudiCommon<Algorithm>::get<TYPE> ( svc , location , false ) ;
  }
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:
locationDetector location/address in Gaudi Transient Store
Returns:
Pointer to the detector object

Definition at line 333 of file GaudiAlgorithm.h.

  {
    return GaudiCommon<Algorithm>::get<TYPE> ( detSvc() , location , false ) ;
  }
template<class TYPE , class TYPE2 >
Gaudi::Utils::GetData<TYPE>::return_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 behavior can be suppressed by passing the argument useRootInTES = false
Exceptions:
GaudiExceptionfor Invalid Data Provider Service
GaudiExceptionfor invalid/unavailable data
Parameters:
locationLocation in Gaudi Transient Event Store
useRootInTESFlag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Returns:
A valid pointer to the object

Definition at line 512 of file GaudiAlgorithm.h.

  {
    return GaudiCommon<Algorithm>::getOrCreate<TYPE,TYPE2> ( evtSvc() , location , useRootInTES ) ;
  }
template<class TYPE , class TYPE2 >
Gaudi::Utils::GetData<TYPE>::return_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 behavior can be suppressed by passing the argument useRootInTES = false
Exceptions:
GaudiExceptionfor Invalid Data Provider Service
GaudiExceptionfor invalid/unavailable data
Parameters:
svcPointer to data service (data provider)
locationLocation in Gaudi Transient Event Store
useRootInTESFlag 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 477 of file GaudiAlgorithm.h.

  {
    return GaudiCommon<Algorithm>::getOrCreate<TYPE,TYPE2> ( svc , location , useRootInTES ) ;
  }
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 59 of file GaudiAlgorithm.cpp.

{
  // initialize the base class
  const StatusCode sc = GaudiCommon<Algorithm>::initialize() ;
  if ( sc.isFailure() ) { return sc; }

  // Add any customisations here, that cannot go in GaudiCommon

  // return
  return sc;
}
GaudiAlgorithm& GaudiAlgorithm::operator= ( const GaudiAlgorithm  ) [private]

no public assignment

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 behavior can be suppressed by passing the argument useRootInTES = false
Parameters:
objectData object or container to be registered
addressAddress in Gaudi Event Transient Store ("/Event" could be omitted )
useRootInTESFlag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Exceptions:
GaudiExceptionfor invalid event data service
GaudiExceptionfor invalid object
GaudiExceptionfor error result from event data service
Returns:
StatusCode
Return values:
StatusCode::SUCCESSData was successfully placed in the TES.
StatusCode::FAILUREFailed to store data in the TES.

Definition at line 208 of file GaudiAlgorithm.h.

  {
    GaudiCommon<Algorithm>::put ( evtSvc() , object , address , useRootInTES ) ;
  }
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 behavior can be suppressed by passing the argument useRootInTES = false
See also:
IDataProviderSvc
Parameters:
svcPointer to data provider service
objectData object or container to be registered
addressAddress in Gaudi Event Transient Store ("/Event" could be omitted )
useRootInTESFlag to turn on(TRUE) off(FALSE) the use of the RootInTES location property
Exceptions:
GaudiExceptionfor invalid event data service
GaudiExceptionfor invalid object
GaudiExceptionfor error result from event data service
Returns:
StatusCode
Return values:
StatusCode::SUCCESSData was successfully placed in the TES.
StatusCode::FAILUREFailed to store data in the TES.

Reimplemented from GaudiCommon< Algorithm >.

Definition at line 169 of file GaudiAlgorithm.h.

  {
    GaudiCommon<Algorithm>::put ( svc , object , address , useRootInTES ) ;
  }
StatusCode GaudiAlgorithm::sysExecute (  ) [virtual]

the generic actions for the execution.

See also:
Algorithm
IAlgorithm
Algorithm::sysExecute
Returns:
status code

< guard/sentry

Reimplemented from Algorithm.

Definition at line 109 of file GaudiAlgorithm.cpp.

{
  IAlgContextSvc* ctx = 0 ;
  if ( registerContext() ) { ctx = contextSvc() ; }
  // Lock the context
  Gaudi::Utils::AlgContext cnt ( ctx , this ) ;  

  // Do not execute if one or more of the m_vetoObjs exist in TES
  for( std::vector<std::string>::iterator it  = m_vetoObjs.begin();
                                          it != m_vetoObjs.end(); it++ ) {
    if( exist<DataObject>(*it) ) {
      debug() << *it << " found, skipping event " << endmsg;
      return StatusCode::SUCCESS;
    }
  }

  // Execute if m_requireObjs is empty
  bool doIt = m_requireObjs.empty() ? true : false;

  // Execute also if one or more of the m_requireObjs exist in TES
  for( std::vector<std::string>::iterator it  = m_requireObjs.begin();
                                          it != m_requireObjs.end(); it++ ) {
    if( exist<DataObject>(*it) ) {
      doIt = true;
      break;
    }
  }

  if( doIt )
    // execute the generic method:
    return Algorithm::sysExecute() ;
  else
    return StatusCode::SUCCESS;
}

Friends And Related Function Documentation

friend class AlgFactory< GaudiAlgorithm > [friend]

Definition at line 98 of file GaudiAlgorithm.h.


Member Data Documentation

Event Tag Collection Service.

Definition at line 551 of file GaudiAlgorithm.h.

process the event only if one or more of these objects are present in TES

Definition at line 555 of file GaudiAlgorithm.h.

skip the event if any of these objects are present in TES

Definition at line 553 of file GaudiAlgorithm.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Mon Jan 30 2012 13:53:13 for Gaudi Framework, version v23r0 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004