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

In This Package:

GaudiSequencer Class Reference

Sequencer for executing several algorithms, stopping when one is faulty. More...

#include <GaudiSequencer.h>

Inheritance diagram for GaudiSequencer:

[legend]
Collaboration diagram for GaudiSequencer:
[legend]
List of all members.

Public Types

 SUCCESS
 NO_INTERFACE
 VERSMISMATCH
 LAST_ERROR
enum  Status

Public Member Functions

 GaudiSequencer (const std::string &name, ISvcLocator *pSvcLocator)
 Standard constructor.
virtual ~GaudiSequencer ()
 Destructor.
virtual StatusCode initialize ()
 Algorithm initialization.
virtual StatusCode execute ()
 Algorithm execution.
virtual StatusCode finalize ()
 Algorithm finalization.
virtual StatusCode beginRun ()
 Algorithm beginRun.
virtual StatusCode endRun ()
 Algorithm endRun.
void resetExecuted ()
 Called before an event processing.
void membershipHandler (Property &theProp)
 for asynchronous changes in the list of algorithms
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>
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.
bool registerContext () const
 register for Algorithm Context Service ?
INTupleSvcevtColSvc () const
 Access the standard event collection service.
IAlgContextSvccontextSvc () const
 Access the standard Algorithm Context Service.
TOOL * tool (const std::string &type, const std::string &name, const IInterface *parent=0, bool create=true) const
 Useful method for the easy location of tools.
TOOL * tool (const std::string &type, const IInterface *parent=0, bool create=true) const
 A useful method for the easy location of tools.
SERVICE * svc (const std::string &name, const bool create=true) const
 A useful method for the easy location of services.
IUpdateManagerSvcupdMgrSvc () const
 Short-cut to locate the Update Manager Service.
IDataProviderSvcfastContainersSvc () const
 Short-cut to locate the Fast Containers Service.
StatusCode Error (const std::string &msg, const StatusCode st=StatusCode::FAILURE, const size_t mx=10) const
 Print the error message and return with the given StatusCode.
StatusCode Warning (const std::string &msg, const StatusCode st=StatusCode::FAILURE, const size_t mx=10) const
 Print the warning message and return with the given StatusCode.
StatusCode Print (const std::string &msg, const StatusCode st=StatusCode::SUCCESS, const MSG::Level lev=MSG::INFO) const
 Print the message and return with the given StatusCode.
StatusCode Assert (const bool ok, const std::string &message="", const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
 Assertion - throw exception if the given condition is not fulfilled.
StatusCode Assert (const bool ok, const char *message, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
 Assertion - throw exception if the given condition is not fulfilled.
StatusCode Exception (const std::string &msg, const GaudiException &exc, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
 Create and (re)-throw a given GaudiException.
StatusCode Exception (const std::string &msg, const std::exception &exc, const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
 Create and (re)-throw a given exception.
StatusCode Exception (const std::string &msg="no message", const StatusCode sc=StatusCode(StatusCode::FAILURE, true)) const
 Create and throw an exception with the given message.
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts.
MsgStreamalways () const
 shortcut for the method msgStream ( MSG::ALWAYS )
MsgStreamfatal () const
 shortcut for the method msgStream ( MSG::FATAL )
MsgStreamerr () const
 shortcut for the method msgStream ( MSG::ERROR )
MsgStreamerror () const
 shortcut for the method msgStream ( MSG::ERROR )
MsgStreamwarning () const
 shortcut for the method msgStream ( MSG::WARNING )
MsgStreaminfo () const
 shortcut for the method msgStream ( MSG::INFO )
MsgStreamdebug () const
 shortcut for the method msgStream ( MSG::DEBUG )
MsgStreamverbose () const
 shortcut for the method msgStream ( MSG::VERBOSE )
MsgStreammsg () const
 shortcut for the method msgStream ( MSG::INFO )
const Statisticscounters () const
 accessor to all counters
StatEntitycounter (const std::string &tag) const
 accessor to certain counter by name
MSG::Level msgLevel () const
 The current message service output level.
bool msgLevel (const MSG::Level level) const
 Test the output level.
void resetMsgStream () const
 Reset (delete) the current message stream object.
bool typePrint () const
 Insert the actual C++ type of the algorithm/tool in the messages ?
bool propsPrint () const
 Print properties at initalization ?
bool statPrint () const
 Print statistical counters at finalization ?
bool errorsPrint () const
 Print error counters at finalization ?
long printStat (const MSG::Level level=MSG::ALWAYS) const
 perform the actual printout of statistical counters
long printErrors (const MSG::Level level=MSG::ALWAYS) const
 perform the actual printout of error counters
long printProps (const MSG::Level level=MSG::ALWAYS) const
 perform the actual printout of properties
void registerCondition (const std::string &condition, StatusCode(CallerClass::*mf)()=NULL)
 register the current instance to the UpdateManagerSvc as a consumer for a condition.
void registerCondition (const std::string &condition, CondType *&condPtrDest, StatusCode(CallerClass::*mf)()=NULL)
 register the current instance to the UpdateManagerSvc as a consumer for a condition.
void registerCondition (char *condition, StatusCode(CallerClass::*mf)()=NULL)
 just to avoid conflicts with the version using a pointer to a template class.
void registerCondition (TargetClass *condition, StatusCode(CallerClass::*mf)()=NULL)
 register the current instance to the UpdateManagerSvc as a consumer for a condition.
StatusCode runUpdate ()
 asks the UpdateManagerSvc to perform an update of the instance (if needed) without waiting the next BeginEvent incident.
TransientFastContainer< T > * getFastContainer (const std::string &location, typename TransientFastContainer< T >::size_type initial=0)
 Return a new TransientFastContainer for objects of type T.
StatusCode release (const IInterface *interface) const
 Manual forced (and 'safe') release of the active tool or service.
unsigned long release ()
const std::string & context () const
 Returns the "context" string. Used to indentify different processing states.
const std::string & rootInTES () const
 Returns the "rootInTES" string.
double globalTimeOffset () const
 Returns the "globalTimeOffset" double.
virtual StatusCode sysStart ()
virtual StatusCode sysInitialize ()
virtual StatusCode sysReinitialize ()
virtual StatusCode sysRestart ()
virtual StatusCode sysStop ()
virtual StatusCode sysFinalize ()
virtual StatusCode sysBeginRun ()
virtual StatusCode sysEndRun ()
virtual const std::string & name () const
virtual const std::string & version () const
virtual StatusCode configure ()
virtual StatusCode terminate ()
virtual StatusCode start ()
virtual StatusCode stop ()
virtual StatusCode reinitialize ()
virtual StatusCode restart ()
virtual bool isExecuted () const
virtual void setExecuted (bool state)
virtual Gaudi::StateMachine::State FSMState () const
virtual Gaudi::StateMachine::State targetFSMState () const
virtual bool isEnabled () const
virtual bool filterPassed () const
virtual void setFilterPassed (bool state)
StatusCode service (const std::string &name, T *&psvc, bool createIf=true) const
StatusCode service (const std::string &svcType, const std::string &svcName, T *&psvc) const
void setOutputLevel (int level)
IAuditorSvcauditorSvc () const
IChronoStatSvcchronoSvc () const
IChronoStatSvcchronoStatService () const
IDataProviderSvcdetSvc () const
IDataProviderSvcdetDataService () const
IConversionSvcdetCnvSvc () const
IConversionSvcdetDataCnvService () const
IDataProviderSvceventSvc () const
IDataProviderSvcevtSvc () const
IDataProviderSvceventDataService () const
IConversionSvceventCnvSvc () const
IConversionSvceventDataCnvService () const
IHistogramSvchistoSvc () const
IHistogramSvchistogramDataService () const
IMessageSvcmsgSvc () const
IMessageSvcmessageService () const
INTupleSvcntupleSvc () const
INTupleSvcntupleService () const
IRndmGenSvcrandSvc () const
IToolSvctoolSvc () const
IExceptionSvcexceptionSvc () const
ISvcLocatorserviceLocator () const
ISvcLocatorsvcLoc () const
StatusCode createSubAlgorithm (const std::string &type, const std::string &name, Algorithm *&pSubAlg)
std::vector< Algorithm * > * subAlgorithms () const
virtual StatusCode setProperty (const Property &p)
virtual StatusCode setProperty (const std::string &s)
virtual StatusCode setProperty (const std::string &n, const std::string &v)
StatusCode setProperty (const std::string &name, const TYPE &value)
virtual StatusCode getProperty (Property *p) const
virtual const PropertygetProperty (const std::string &name) const
virtual StatusCode getProperty (const std::string &n, std::string &v) const
virtual const std::vector<
Property * > & 
getProperties () const
StatusCode setProperties ()
PropertydeclareProperty (const std::string &name, T &property, const std::string &doc="none") const
PropertydeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="") const
IMonitorSvcmonitorSvc () const
void declareInfo (const std::string &name, const T &var, const std::string &desc) const
void declareInfo (const std::string &name, const std::string &format, const void *var, int size, const std::string &desc) const
unsigned long addRef ()
StatusCode queryInterface (const InterfaceID &riid, void **)

Static Public Member Functions

static const InterfaceIDinterfaceID ()
static const InterfaceIDinterfaceID ()
static const InterfaceIDinterfaceID ()

Public Attributes

 SUCCESS
 NO_INTERFACE
 VERSMISMATCH
 LAST_ERROR

Protected Types

typedef std::map< std::string,
StatEntity
Statistics
 the actual type of general counters
typedef std::map< std::string,
unsigned int > 
Counter
 the actual type error/warning counter
typedef std::vector< IAlgTool * > AlgTools
 storage for active tools
typedef std::pair< IInterface *,
std::string > 
ServiceEntry
 Service pointer and name.
typedef std::vector< ServiceEntryServices
 storage for active services

Protected Member Functions

StatusCode decodeNames ()
 Decode a vector of string.
StatusCode releaseTool (const IAlgTool *tool) const
 manual forced (and 'safe') release of the tool
StatusCode releaseSvc (const IInterface *svc) const
 manual forced (and 'safe') release of the service
bool isInitialized () const
bool isFinalized () const
int outputLevel () const
IntegerPropertyoutputLevelProperty ()
void initOutputLevel (Property &prop)

Static Protected Attributes

static const bool IgnoreRootInTES
 Simple definition to be used with the new useRootInTES argument get<TYPE> and put methods.
static const bool UseRootInTES
 Simple definition to be used with the new useRootInTES argument get<TYPE> and put methods.

Private Member Functions

 GaudiSequencer (const GaudiSequencer &a)
 Private copy, copy not allowed.
GaudiSequenceroperator= (const GaudiSequencer &a)
 Private assignment operator: This is not allowed.

Private Attributes

StringArrayProperty m_names
 Input string, list of algorithms.
std::vector< AlgorithmEntrym_entries
 List of algorithms to process.
bool m_modeOR
 Indicates that the OR is wanted instead of AND.
bool m_shortCircuit
 Indicates whether to stop processing as soon as possible, or to always execute _all_ subalgorithms.
bool m_ignoreFilter
 True if one continues always.
bool m_isInitialized
 Indicate that we are ready.
bool m_measureTime
 Flag to measure time.
bool m_returnOK
 Forces the sequencer to return a good status.
ISequencerTimerToolm_timerTool
 Pointer to the timer tool.
int m_timer
 Timer number for the sequencer.

Classes

class  AlgorithmEntry

Detailed Description

Sequencer for executing several algorithms, stopping when one is faulty.

Author:
Olivier Callot
Date:
2004-05-13

Definition at line 18 of file GaudiSequencer.h.


Member Typedef Documentation

typedef std::map<std::string,StatEntity> GaudiCommon< Algorithm >::Statistics [protected, inherited]

the actual type of general counters

Definition at line 83 of file GaudiCommon.h.

typedef std::map<std::string,unsigned int> GaudiCommon< Algorithm >::Counter [protected, inherited]

the actual type error/warning counter

Definition at line 85 of file GaudiCommon.h.

typedef std::vector<IAlgTool*> GaudiCommon< Algorithm >::AlgTools [protected, inherited]

storage for active tools

Definition at line 87 of file GaudiCommon.h.

typedef std::pair<IInterface*,std::string> GaudiCommon< Algorithm >::ServiceEntry [protected, inherited]

Service pointer and name.

Definition at line 89 of file GaudiCommon.h.

typedef std::vector<ServiceEntry> GaudiCommon< Algorithm >::Services [protected, inherited]

storage for active services

Definition at line 91 of file GaudiCommon.h.


Constructor & Destructor Documentation

GaudiSequencer::GaudiSequencer ( const std::string &  name,
ISvcLocator pSvcLocator 
)

Standard constructor.

Definition at line 20 of file GaudiSequencer.cpp.

00022   : GaudiAlgorithm ( name , pSvcLocator )
00023   , m_timerTool( 0 )
00024 {
00025   declareProperty( "Members"             , m_names                  );
00026   declareProperty( "ModeOR"              , m_modeOR         = false );
00027   declareProperty( "IgnoreFilterPassed"  , m_ignoreFilter   = false );
00028   declareProperty( "MeasureTime"         , m_measureTime    = false );
00029   declareProperty( "ReturnOK"            , m_returnOK       = false );
00030   declareProperty( "ShortCircuit"        , m_shortCircuit   = true  );
00031 
00032   m_names.declareUpdateHandler (& GaudiSequencer::membershipHandler, this );
00033 }

GaudiSequencer::~GaudiSequencer (  )  [virtual]

Destructor.

Definition at line 37 of file GaudiSequencer.cpp.

00037 {};

GaudiSequencer::GaudiSequencer ( const GaudiSequencer a  )  [private]

Private copy, copy not allowed.


Member Function Documentation

StatusCode GaudiSequencer::initialize (  )  [virtual]

Algorithm initialization.

Reimplemented from GaudiAlgorithm.

Definition at line 42 of file GaudiSequencer.cpp.

00042                                       {
00043   GaudiAlgorithm::initialize();
00044 
00045   debug() << "==> Initialise" << endreq;
00046 
00047   StatusCode status = decodeNames();
00048   if ( !status.isSuccess() ) return status;
00049 
00050   m_timerTool = tool<ISequencerTimerTool>( "SequencerTimerTool" );
00051   if ( m_timerTool->globalTiming() ) m_measureTime = true;
00052 
00053   if ( m_measureTime ) {
00054     m_timer = m_timerTool->addTimer( name() );
00055     m_timerTool->increaseIndent();
00056   } else {
00057     release( m_timerTool );
00058     m_timerTool = 0;
00059   }
00060 
00061   //== Initialize the algorithms
00062   std::vector<AlgorithmEntry>::iterator itE;
00063   for ( itE = m_entries.begin(); m_entries.end() != itE; itE++ ) {
00064     if ( m_measureTime ) {
00065       itE->setTimer( m_timerTool->addTimer( itE->algorithm()->name() ) );
00066     }
00067 
00068     status = itE->algorithm()->sysInitialize();
00069     if ( !status.isSuccess() ) {
00070       return Error( "Can not initialize " + itE->algorithm()->name(),
00071                     status );
00072     }
00073   }
00074   if ( m_measureTime ) m_timerTool->decreaseIndent();
00075 
00076   return StatusCode::SUCCESS;
00077 };

StatusCode GaudiSequencer::execute (  )  [virtual]

Algorithm execution.

Reimplemented from GaudiAlgorithm.

Definition at line 82 of file GaudiSequencer.cpp.

00082                                    {
00083 
00084   if ( m_measureTime ) m_timerTool->start( m_timer );
00085 
00086   debug() << "==> Execute" << endreq;
00087 
00088   StatusCode result = StatusCode::SUCCESS;
00089 
00090   bool seqPass = !m_modeOR; //  for OR, result will be false, unless (at least) one is true
00091                             //  for AND, result will be true, unless (at least) one is false
00092                             //    also see comment below ....
00093 
00094   std::vector<AlgorithmEntry>::const_iterator itE;
00095   for ( itE = m_entries.begin(); m_entries.end() != itE; ++itE ) {
00096     Algorithm* myAlg = itE->algorithm();
00097     if ( ! myAlg->isEnabled() ) continue;
00098       if ( ! myAlg->isExecuted() ) {
00099       if ( m_measureTime ) m_timerTool->start( itE->timer() );
00100         result = myAlg->sysExecute();
00101       if ( m_measureTime ) m_timerTool->stop( itE->timer() );
00102         myAlg->setExecuted( true );
00103         if ( ! result.isSuccess() ) break;  //== Abort and return bad status
00104 
00105       }
00106       //== Check the returned status
00107       if ( !m_ignoreFilter ) {
00108         bool passed = myAlg->filterPassed();
00109       if ( itE->reverse() ) passed = !passed;
00110 
00111         //== indicate our own result. For OR, exit as soon as true.
00112         //        If no more, will exit with false.
00113         //== for AND, exit as soon as false. Else, will be true (default)
00114 
00115       // if not short-circuiting, make sure we latch iPass to 'true' in 
00116       // OR mode (i.e. it is sufficient for one item to be true in order
00117       // to be true at the end, and thus we start out at 'false'), and latch 
00118       // to 'false' in AND mode (i.e. it is sufficient for one item to 
00119       // be false to the false in the end, and thus we start out at 'true')
00120       // -- i.e. we should not just blindly return the 'last' passed status!
00121 
00122       // or to put it another way: in OR mode, we don't care about things
00123       // which are false, as they leave our current state alone (provided
00124       // we stared as 'false'!), and in AND mode, we keep our current 
00125       // state until someone returns 'false' (provided we started as 'true')
00126       if ( m_modeOR ? passed : !passed ) {
00127         seqPass = passed;
00128         if (m_shortCircuit) break;
00129       }
00130     }
00131     
00132   }
00133   if ( !m_ignoreFilter && !m_entries.empty() ) setFilterPassed( seqPass );
00134   setExecuted( true );
00135 
00136   if ( m_measureTime ) m_timerTool->stop( m_timer );
00137 
00138   return m_returnOK ? StatusCode::SUCCESS : result;
00139 };

StatusCode GaudiSequencer::finalize (  )  [virtual]

Algorithm finalization.

Reimplemented from GaudiAlgorithm.

Definition at line 144 of file GaudiSequencer.cpp.

00144                                     {
00145 
00146   debug() << "==> Finalize" << endreq;
00147   return  GaudiAlgorithm::finalize();
00148 }

StatusCode GaudiSequencer::beginRun (  )  [virtual]

Algorithm beginRun.

Reimplemented from Algorithm.

Definition at line 153 of file GaudiSequencer.cpp.

00153                                       {
00154 
00155   if ( !isEnabled() ) return StatusCode::SUCCESS;
00156 
00157   debug() << "==> beginRun" << endreq;
00158   return StatusCode::SUCCESS;
00159 }

StatusCode GaudiSequencer::endRun (  )  [virtual]

Algorithm endRun.

Reimplemented from Algorithm.

Definition at line 164 of file GaudiSequencer.cpp.

00164                                     {
00165 
00166   if ( !isEnabled() ) return StatusCode::SUCCESS;
00167 
00168   debug() << "==> endRun" << endreq;
00169   return StatusCode::SUCCESS;
00170 }

void GaudiSequencer::resetExecuted (  )  [virtual]

Called before an event processing.

Reimplemented from Algorithm.

Definition at line 175 of file GaudiSequencer.cpp.

00175                                      {
00176   Algorithm::resetExecuted();
00177   // algorithm doesn't call resetExecuted of subalgos! should it???
00178   std::vector<AlgorithmEntry>::const_iterator itE;
00179   for ( itE = m_entries.begin(); m_entries.end() != itE; ++itE ) {
00180     itE->algorithm()->resetExecuted();
00181   }
00182 }

void GaudiSequencer::membershipHandler ( Property theProp  ) 

for asynchronous changes in the list of algorithms

Definition at line 333 of file GaudiSequencer.cpp.

00333                                                    {
00334   if ( isInitialized() ) decodeNames().ignore();
00335 }

StatusCode GaudiSequencer::decodeNames (  )  [protected]

Decode a vector of string.

Definition at line 186 of file GaudiSequencer.cpp.

00186                                          {
00187 
00188   StatusCode final = StatusCode::SUCCESS;
00189   m_entries.clear();
00190 
00191   //== Get the "Context" option if in the file...
00192   IJobOptionsSvc* jos = svc<IJobOptionsSvc>( "JobOptionsSvc" );
00193   bool addedContext = false;  //= Have we added the context ?
00194   bool addedRootInTES = false;  //= Have we added the rootInTES ?
00195   bool addedGlobalTimeOffset = false;  //= Have we added the globalTimeOffset ?
00196 
00197 
00198   //= Get the Application manager, to see if algorithm exist
00199   IAlgManager* appMgr = svc<IAlgManager>("ApplicationMgr");
00200   const std::vector<std::string>& nameVector = m_names.value();
00201   std::vector<std::string>::const_iterator it;
00202   for ( it = nameVector.begin(); nameVector.end() != it; it++ ) {
00203     std::string theName( *it );
00204     std::string theType( *it );
00205     std::string::size_type slash = it->find_first_of( '/' );
00206     if ( slash != std::string::npos ) {
00207       theType = it->substr( 0, slash );
00208       theName = it->substr( slash+1 );
00209     }
00210     //== handling of extensions to the name ???
00211 
00212     //== Check wether the specified algorithm already exists. If not, create it
00213 
00214     IAlgorithm* myIAlg;
00215     StatusCode result = appMgr->getAlgorithm( theName, myIAlg );
00216     if ( !result.isSuccess() ) {
00217       //== Set the Context if not in the jobOptions list
00218       if ( ""  != context() ||
00219            ""  != rootInTES() ||
00220            0.0 != globalTimeOffset() ) {
00221         bool foundContext = false;
00222         bool foundRootInTES = false;
00223         bool foundGlobalTimeOffset = false;
00224         const std::vector<const Property*>* properties = jos->getProperties( theName );
00225         if ( 0 != properties ) {
00226           // Iterate over the list to set the options
00227           for ( std::vector<const Property*>::const_iterator itProp = properties->begin();
00228                itProp != properties->end();
00229                itProp++ )   {
00230             const StringProperty* sp = dynamic_cast<const StringProperty*>(*itProp);
00231             if ( 0 != sp )    {
00232               if ( "Context" == (*itProp)->name() ) {
00233                 foundContext = true;
00234               }
00235               if ( "RootInTES" == (*itProp)->name() ) {
00236                 foundRootInTES = true;
00237               }
00238               if ( "GlobalTimeOffset" == (*itProp)->name() ) {
00239                 foundGlobalTimeOffset = true;
00240               }
00241             }
00242           }
00243         }
00244         if ( !foundContext && "" != context() ) {
00245           StringProperty contextProperty( "Context", context() );
00246           jos->addPropertyToCatalogue( theName, contextProperty ).ignore();
00247           addedContext = true;
00248         }
00249         if ( !foundRootInTES && "" != rootInTES() ) {
00250           StringProperty rootInTESProperty( "RootInTES", rootInTES() );
00251           jos->addPropertyToCatalogue( theName, rootInTESProperty ).ignore();
00252           addedRootInTES = true;
00253         }
00254         if ( !foundGlobalTimeOffset && 0.0 != globalTimeOffset() ) {
00255           DoubleProperty globalTimeOffsetProperty( "GlobalTimeOffset", globalTimeOffset() );
00256           jos->addPropertyToCatalogue( theName, globalTimeOffsetProperty ).ignore();
00257           addedGlobalTimeOffset = true;
00258         }
00259       }
00260 
00261       Algorithm *myAlg = 0;
00262       result = createSubAlgorithm( theType, theName, myAlg );
00263       // (MCl) this should prevent bug #35199... even if I didn't manage to
00264       // reproduce it with a simple test.
00265       if (result.isSuccess())
00266         myIAlg = myAlg;
00267     }
00268 
00269     //== Remove the property, in case this is not a GaudiAlgorithm...
00270     if ( addedContext ) {
00271       jos->removePropertyFromCatalogue( theName, "Context" ).ignore();
00272       addedContext = false;
00273     }
00274     if ( addedRootInTES ) {
00275       jos->removePropertyFromCatalogue( theName, "RootInTES" ).ignore();
00276       addedRootInTES = false;
00277     }
00278     if ( addedGlobalTimeOffset ) {
00279       jos->removePropertyFromCatalogue( theName, "GlobalTimeOffset" ).ignore();
00280       addedGlobalTimeOffset = false;
00281     }
00282 
00283     //== Is it an Algorithm ?  Strange test...
00284     if ( result.isSuccess() ) {
00285       // TODO: (MCl) it is possible to avoid the dynamic_cast in most of the
00286       //             cases by keeping the result of createSubAlgorithm. 
00287       Algorithm*  myAlg = dynamic_cast<Algorithm*>( myIAlg );
00288       if (myAlg!=0) {
00289         m_entries.push_back( AlgorithmEntry( myAlg ) );
00290         myAlg->addRef();                  //== Indicate it is used.
00291         debug () << "Added algorithm " << theName << endreq;
00292       } else {
00293         warning() << theName << " is not an Algorithm - failed dynamic_cast"
00294                   << endreq;
00295         final = StatusCode::FAILURE;
00296       }
00297     } else {
00298       warning() << "Unable to find or create " << theName << endreq;
00299       final = result;
00300     }
00301 
00302   }
00303   release(appMgr).ignore();
00304   release(jos).ignore();
00305   
00306   //== Print the list of algorithms
00307   MsgStream& msg = info();
00308   if ( m_modeOR ) msg << "OR ";
00309   msg << "Member list: ";
00310   std::vector<AlgorithmEntry>::iterator itE;
00311   for ( itE = m_entries.begin(); m_entries.end() != itE; itE++ ) {
00312     Algorithm* myAlg = (*itE).algorithm();
00313     std::string myAlgType = System::typeinfoName( typeid( *myAlg) ) ;
00314     if ( myAlg->name() == myAlgType ) {
00315       msg << myAlg->name();
00316     } else {
00317       msg << myAlgType << "/" << myAlg->name();
00318     }
00319     if ( itE+1 != m_entries.end() ) msg << ", ";
00320   }
00321   if ( "" != context() ) msg << ", with context '" << context() << "'";
00322   if ( "" != rootInTES() ) msg << ", with rootInTES '" << rootInTES() << "'";
00323   if ( 0.0 != globalTimeOffset() ) msg << ", with globalTimeOffset " << globalTimeOffset();
00324   msg << endreq;
00325 
00326   return final;
00327 
00328 }

GaudiSequencer& GaudiSequencer::operator= ( const GaudiSequencer a  )  [private]

Private assignment operator: This is not allowed.

StatusCode GaudiAlgorithm::sysExecute (  )  [virtual, inherited]

the generic actions for the execution.

See also:
Algorithm

IAlgorithm

Algorithm::sysExecute

Returns:
status code

< guard/sentry

Reimplemented from Algorithm.

Definition at line 131 of file GaudiAlgorithm.cpp.

00132 {
00133   IAlgContextSvc* ctx = 0 ;
00134   if ( registerContext() ) { ctx = contextSvc() ; }
00135   // Lock the context 
00136   Gaudi::Utils::AlgContext cnt ( ctx , this ) ;  
00137 
00138   // Do not execute if one or more of the m_vetoObjs exist in TES
00139   for( std::vector<std::string>::iterator it  = m_vetoObjs.begin();
00140                                           it != m_vetoObjs.end(); it++ ) {
00141     if( exist<DataObject>(*it) ) {
00142       debug() << *it << " found, skipping event " << endmsg;
00143       return StatusCode::SUCCESS;
00144     }
00145   }
00146 
00147   // Execute if m_requireObjs is empty
00148   bool doIt = m_requireObjs.empty() ? true : false;
00149 
00150   // Execute also if one or more of the m_requireObjs exist in TES
00151   for( std::vector<std::string>::iterator it  = m_requireObjs.begin();
00152                                           it != m_requireObjs.end(); it++ ) {
00153     if( exist<DataObject>(*it) ) {
00154       doIt = true;
00155       break;
00156     }
00157   }
00158 
00159   if( doIt )
00160     // execute the generic method:
00161     return Algorithm::sysExecute() ;
00162   else
00163     return StatusCode::SUCCESS;
00164 }

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

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 170 of file GaudiAlgorithm.h.

00174   {
00175     GaudiCommon<Algorithm>::put ( svc , object , address , useRootInTES ) ;
00176   }

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

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 209 of file GaudiAlgorithm.h.

00212   {
00213     GaudiCommon<Algorithm>::put ( evtSvc() , object , address , useRootInTES ) ;
00214   }

template<class TYPE>
Gaudi::Utils::GetData<TYPE>::return_type GaudiAlgorithm::get ( IDataProviderSvc svc,
const std::string &  location,
const bool  useRootInTES = true 
) const [inline, inherited]

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 250 of file GaudiAlgorithm.h.

00253   {
00254     return GaudiCommon<Algorithm>::get<TYPE> ( svc , location , useRootInTES ) ;
00255   }

template<class TYPE>
Gaudi::Utils::GetData<TYPE>::return_type GaudiAlgorithm::get ( const std::string &  location,
const bool  useRootInTES = true 
) const [inline, inherited]

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 285 of file GaudiAlgorithm.h.

00287   {
00288     return GaudiCommon<Algorithm>::get<TYPE> ( evtSvc() , location , useRootInTES ) ;
00289   }

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

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 310 of file GaudiAlgorithm.h.

00312   {
00313     return GaudiCommon<Algorithm>::get<TYPE> ( svc , location , false ) ;
00314   }

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

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 334 of file GaudiAlgorithm.h.

00335   {
00336     return GaudiCommon<Algorithm>::get<TYPE> ( detSvc() , location , false ) ;
00337   }

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

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 366 of file GaudiAlgorithm.h.

00369   {
00370     return GaudiCommon<Algorithm>::exist<TYPE> ( svc , location , useRootInTES ) ;
00371   }

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

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 399 of file GaudiAlgorithm.h.

00401   {
00402     return GaudiCommon<Algorithm>::exist<TYPE> ( evtSvc() , location , useRootInTES ) ;
00403   }

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

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 422 of file GaudiAlgorithm.h.

00424   {
00425     return GaudiCommon<Algorithm>::exist<TYPE> ( svc , location , false ) ;
00426   }

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

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 444 of file GaudiAlgorithm.h.

00445   {
00446     return GaudiCommon<Algorithm>::exist<TYPE> ( detSvc() , location , false ) ;
00447   }

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

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 477 of file GaudiAlgorithm.h.

00480   {
00481     return GaudiCommon<Algorithm>::getOrCreate<TYPE,TYPE2> ( svc , location , useRootInTES ) ;
00482   }

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

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 511 of file GaudiAlgorithm.h.

00513   {
00514     return GaudiCommon<Algorithm>::getOrCreate<TYPE,TYPE2> ( evtSvc() , location , useRootInTES ) ;
00515   }

bool GaudiAlgorithm::registerContext (  )  const [inline, inherited]

register for Algorithm Context Service ?

Definition at line 532 of file GaudiAlgorithm.h.

00532 { return m_registerContext ; }

INTupleSvc * GaudiAlgorithm::evtColSvc (  )  const [inherited]

Access the standard event collection service.

Returns:
pointer to the event collection service

Definition at line 104 of file GaudiAlgorithm.cpp.

00105 {
00106   if ( 0 == m_evtColSvc )
00107   {
00108     m_evtColSvc = svc< INTupleSvc > ( "EvtTupleSvc" , true ) ;
00109   }
00110   return m_evtColSvc ;
00111 }

IAlgContextSvc * GaudiAlgorithm::contextSvc (  )  const [inherited]

Access the standard Algorithm Context Service.

Returns:
pointer to the Algorithm Context Service

Definition at line 115 of file GaudiAlgorithm.cpp.

00116 {
00117   if ( 0 == m_contextSvc )
00118   {
00119     m_contextSvc = svc< IAlgContextSvc > ( m_contextSvcName , true ) ;
00120   }
00121   return m_contextSvc ;
00122 }

TOOL* GaudiCommon< Algorithm >::tool ( const std::string &  type,
const std::string &  name,
const IInterface parent = 0,
bool  create = true 
) const [inherited]

Useful method for the easy location of tools.

  IMyTool* myTool =
      tool<IMyTool>( "MyToolType", "MyToolName", this );

Attention:
The tools located with this method will be released automatically
See also:
IToolSvc

IAlgTool

Exceptions:
GaudiException for invalid Tool Service
GaudiException for error from Tool Service
GaudiException for invalid tool
Parameters:
type Tool type
name Tool name
parent Tool parent
create Flag for creation of nonexisting tools
Returns:
A pointer to the tool

TOOL* GaudiCommon< Algorithm >::tool ( const std::string &  type,
const IInterface parent = 0,
bool  create = true 
) const [inherited]

A useful method for the easy location of tools.

  IMyTool* myTool = tool<IMyTool>( "PublicToolType" );

Attention:
The tools located with this method will be released automatically
See also:
IToolSvc

IAlgTool

Exceptions:
GaudiException for invalid Tool Service
GaudiException for error from Tool Service
GaudiException for invalid tool
Parameters:
type Tool type, could be of "Type/Name" format
parent Tool parent
create Flag for creation of nonexisting tools
Returns:
A pointer to the tool

SERVICE* GaudiCommon< Algorithm >::svc ( const std::string &  name,
const bool  create = true 
) const [inherited]

A useful method for the easy location of services.

  IMyService* mySvc = svc<IMyService>( "MyServiceType" );

Attention:
The services located with this method will be released automatically
See also:
IService

ISevcLocator

Service

Exceptions:
GaudiException for error in Algorithms::service
GaudiException for invalid service
Parameters:
name service type name
create Flag for creation of non-existing services
Returns:
A pointer to the service

IUpdateManagerSvc* GaudiCommon< Algorithm >::updMgrSvc (  )  const [inline, inherited]

Short-cut to locate the Update Manager Service.

IDataProviderSvc* GaudiCommon< Algorithm >::fastContainersSvc (  )  const [inline, inherited]

Short-cut to locate the Fast Containers Service.

StatusCode GaudiCommon< Algorithm >::Error ( const std::string &  msg,
const StatusCode  st = StatusCode::FAILURE,
const size_t  mx = 10 
) const [inherited]

Print the error message and return with the given StatusCode.

Also performs statistical analysis of the error messages and suppression after the defined number of error instances.

   if( a < 0 ) { return Error("a is negative!") ;}
   if( b < 0 ) { return Error("b is illegal!" , StatusCode(25) );
   if( c < 0 )
      { return Error("c is negative" , StatusCode(35) , 50 );

See also:
MsgStream

IMessageSvc

StatusCode

Parameters:
msg Error message
st StatusCode to return
mx Maximum number of printouts for this message
Returns:
StatusCode

StatusCode GaudiCommon< Algorithm >::Warning ( const std::string &  msg,
const StatusCode  st = StatusCode::FAILURE,
const size_t  mx = 10 
) const [inherited]

Print the warning message and return with the given StatusCode.

Also performs statistical analysis of the error messages and suppression after the defined number of error instances.

   if( a < 0 ) { return Warning("a is negative!") ;}
   if( b < 0 ) { return Warning("b is illegal!" , StatusCode(25) );
   if( c < 0 )
      { return Warning("c is negative" , StatusCode(35) , 50 );

See also:
MsgStream

IMessageSvc

StatusCode

Parameters:
msg Warning message
st StatusCode to return
mx Maximum number of printouts for this message
Returns:
The given StatusCode

StatusCode GaudiCommon< Algorithm >::Print ( const std::string &  msg,
const StatusCode  st = StatusCode::SUCCESS,
const MSG::Level  lev = MSG::INFO 
) const [inherited]

Print the message and return with the given StatusCode.

See also:
MsgStream

IMessageSvc

StatusCode

Parameters:
msg Message to print
st StatusCode to return
lev Printout level for the given message
Returns:
The given StatusCode

StatusCode GaudiCommon< Algorithm >::Assert ( const bool  ok,
const std::string &  message = "",
const StatusCode  sc = StatusCode(StatusCode::FAILURE, true) 
) const [inline, inherited]

Assertion - throw exception if the given condition is not fulfilled.

See also:
GaudiException
Exceptions:
Exception for invalid condition
Parameters:
ok Condition which should be "true"
message Message to be associated with the exception
sc StatusCode to be returned (artificial)
Returns:
StatusCode

StatusCode GaudiCommon< Algorithm >::Assert ( const bool  ok,
const char *  message,
const StatusCode  sc = StatusCode(StatusCode::FAILURE, true) 
) const [inline, inherited]

Assertion - throw exception if the given condition is not fulfilled.

See also:
GaudiException
Exceptions:
Exception for invalid condition
Parameters:
ok Condition which should be "true"
message Message to be associated with the exception
sc StatusCode to be returned (artificial)
Returns:
StatusCode

StatusCode GaudiCommon< Algorithm >::Exception ( const std::string &  msg,
const GaudiException exc,
const StatusCode  sc = StatusCode(StatusCode::FAILURE, true) 
) const [inherited]

Create and (re)-throw a given GaudiException.

See also:
GaudiException
Exceptions:
CaudiException always thrown!
Parameters:
msg Exception message
exc (previous) exception of type GaudiException
sc StatusCode
Returns:
StatusCode (fictive)

StatusCode GaudiCommon< Algorithm >::Exception ( const std::string &  msg,
const std::exception &  exc,
const StatusCode  sc = StatusCode(StatusCode::FAILURE, true) 
) const [inherited]

Create and (re)-throw a given exception.

See also:
GaudiException
Exceptions:
std::exception always thrown!
Parameters:
msg Exception message
exc (previous) exception of type std::exception
sc StatusCode
Returns:
StatusCode (fictive)

StatusCode GaudiCommon< Algorithm >::Exception ( const std::string &  msg = "no message",
const StatusCode  sc = StatusCode(StatusCode::FAILURE, true) 
) const [inherited]

Create and throw an exception with the given message.

See also:
GaudiException
Exceptions:
GaudiException always thrown!
Parameters:
msg Exception message
sc StatusCode
Returns:
StatusCode (fictive)

MsgStream& GaudiCommon< Algorithm >::msgStream ( const MSG::Level  level  )  const [inline, inherited]

Predefined configurable message stream for the efficient printouts.

  if ( a < 0 ) { msgStream( MSG::ERROR ) << "a = " << endreq ; }

Returns:
Reference to the predefined stream

MsgStream& GaudiCommon< Algorithm >::always (  )  const [inline, inherited]

shortcut for the method msgStream ( MSG::ALWAYS )

Definition at line 457 of file GaudiCommon.h.

00457 { return msgStream ( MSG::  ALWAYS ) ; }

MsgStream& GaudiCommon< Algorithm >::fatal (  )  const [inline, inherited]

shortcut for the method msgStream ( MSG::FATAL )

Definition at line 459 of file GaudiCommon.h.

00459 { return msgStream ( MSG::   FATAL ) ; }

MsgStream& GaudiCommon< Algorithm >::err (  )  const [inline, inherited]

shortcut for the method msgStream ( MSG::ERROR )

Definition at line 461 of file GaudiCommon.h.

00461 { return msgStream ( MSG::   ERROR ) ; }

MsgStream& GaudiCommon< Algorithm >::error (  )  const [inline, inherited]

shortcut for the method msgStream ( MSG::ERROR )

Definition at line 463 of file GaudiCommon.h.

00463 { return msgStream ( MSG::   ERROR ) ; }

MsgStream& GaudiCommon< Algorithm >::warning (  )  const [inline, inherited]

shortcut for the method msgStream ( MSG::WARNING )

Definition at line 465 of file GaudiCommon.h.

00465 { return msgStream ( MSG:: WARNING ) ; }

MsgStream& GaudiCommon< Algorithm >::info (  )  const [inline, inherited]

shortcut for the method msgStream ( MSG::INFO )

Definition at line 467 of file GaudiCommon.h.

00467 { return msgStream ( MSG::    INFO ) ; }

MsgStream& GaudiCommon< Algorithm >::debug (  )  const [inline, inherited]

shortcut for the method msgStream ( MSG::DEBUG )

Definition at line 469 of file GaudiCommon.h.

00469 { return msgStream ( MSG::   DEBUG ) ; }

MsgStream& GaudiCommon< Algorithm >::verbose (  )  const [inline, inherited]

shortcut for the method msgStream ( MSG::VERBOSE )

Definition at line 471 of file GaudiCommon.h.

00471 { return msgStream ( MSG:: VERBOSE ) ; }

MsgStream& GaudiCommon< Algorithm >::msg (  )  const [inline, inherited]

shortcut for the method msgStream ( MSG::INFO )

Definition at line 473 of file GaudiCommon.h.

00473 { return msgStream ( MSG::    INFO ) ; }

const Statistics& GaudiCommon< Algorithm >::counters (  )  const [inline, inherited]

accessor to all counters

Definition at line 476 of file GaudiCommon.h.

00476 { return m_counters ; }

StatEntity& GaudiCommon< Algorithm >::counter ( const std::string &  tag  )  const [inline, inherited]

accessor to certain counter by name

  if ( OK ) { ++counter("OK") ; }

  // additive counter ('Flag')
  counter("#Tracks") += tracks->size() ;

  // multiplicative counter  ('Weight')
  counter("ProbTot") *= probability ;

See also:
StatEntuty
Parameters:
tag counter name
Returns:
the counter itself

Definition at line 495 of file GaudiCommon.h.

00495 { return m_counters[tag] ; }

MSG::Level GaudiCommon< Algorithm >::msgLevel (  )  const [inline, inherited]

The current message service output level.

Returns:
The current message level

Definition at line 500 of file GaudiCommon.h.

00500 { return m_msgLevel ; }

bool GaudiCommon< Algorithm >::msgLevel ( const MSG::Level  level  )  const [inline, inherited]

Test the output level.

Parameters:
level The message level to test against
Returns:
boolean Indicting if messages at given level will be printed
Return values:
true Messages at level "level" will be printed
true Messages at level "level" will NOT be printed

Definition at line 507 of file GaudiCommon.h.

00507 { return msgLevel() <= level ; }

void GaudiCommon< Algorithm >::resetMsgStream (  )  const [inherited]

Reset (delete) the current message stream object.

Useful for example to force a new object following a change in the message level settings

bool GaudiCommon< Algorithm >::typePrint (  )  const [inline, inherited]

Insert the actual C++ type of the algorithm/tool in the messages ?

Definition at line 514 of file GaudiCommon.h.

00514 { return m_typePrint    ; }

bool GaudiCommon< Algorithm >::propsPrint (  )  const [inline, inherited]

Print properties at initalization ?

Definition at line 516 of file GaudiCommon.h.

00516 { return m_propsPrint   ; }

bool GaudiCommon< Algorithm >::statPrint (  )  const [inline, inherited]

Print statistical counters at finalization ?

Definition at line 518 of file GaudiCommon.h.

00518 { return m_statPrint    ; }

bool GaudiCommon< Algorithm >::errorsPrint (  )  const [inline, inherited]

Print error counters at finalization ?

Definition at line 520 of file GaudiCommon.h.

00520 { return m_errorsPrint  ; }

long GaudiCommon< Algorithm >::printStat ( const MSG::Level  level = MSG::ALWAYS  )  const [inherited]

perform the actual printout of statistical counters

Parameters:
level The message level to print at
Returns:
number of active statistical counters

long GaudiCommon< Algorithm >::printErrors ( const MSG::Level  level = MSG::ALWAYS  )  const [inherited]

perform the actual printout of error counters

Parameters:
level The message level to print at
Returns:
number of error counters

long GaudiCommon< Algorithm >::printProps ( const MSG::Level  level = MSG::ALWAYS  )  const [inherited]

perform the actual printout of properties

Parameters:
level The message level to print at
Returns:
number of properties

void GaudiCommon< Algorithm >::registerCondition ( const std::string &  condition,
StatusCode(CallerClass::*)()  mf = NULL 
) [inline, inherited]

register the current instance to the UpdateManagerSvc as a consumer for a condition.

Parameters:
condition the path inside the Transient Detector Store to the condition object.
mf optional pointer to the member function to call when the condition object is updated. If the pointer is omitted the user must explicitely provide the class name to the method.
  StatusCode MyAlg::initialize(){
     // ...
     registerCondition("/dd/Conditions/Readout/MyDet/MyCond",&MyAlg::i_CallBack);
     registerCondition<MyAlg>("/dd/Conditions/Readout/MyDet/MyOtherCond");
     // ...
     return StatusCode.SUCCESS;
  }

Definition at line 560 of file GaudiCommon.h.

00560                                                                                                   {
00561     updMgrSvc()->registerCondition(dynamic_cast<CallerClass*>(this),condition,mf);
00562   }

void GaudiCommon< Algorithm >::registerCondition ( const std::string &  condition,
CondType *&  condPtrDest,
StatusCode(CallerClass::*)()  mf = NULL 
) [inline, inherited]

register the current instance to the UpdateManagerSvc as a consumer for a condition.

This version of the method allow the user to specify where to put a copy of the pointer to the condition object.

Parameters:
condition the path inside the Transient Detector Store to the condition object.
condPtrDest pointer to fill with the location of the condition object. Note: the pointer can be safely used only in the execute method or in the member function triggered by the update.
mf optional pointer to the member function to call when the condition object is updated. If the pointer is omitted the user must explicitely provide the class name to the method.
  class MyAlg: public GaudiAlgorithm {
     // ...
  public:
     virtual StatusCode i_CallBack();
  private:
     Condition *m_MyCond;
     SpecialCondition *m_MyOtherCond;
     // ...
  };

  StatusCode MyAlg::initialize(){
     // ...
     registerCondition("/dd/Conditions/Readout/MyDet/MyCond",m_MyCond,&MyAlg::i_CallBack);
     registerCondition<MyAlg>("/dd/Conditions/Readout/MyDet/MyOtherCond",m_MyOtherCond);
     // ...
     return StatusCode.SUCCESS;
  }

Definition at line 594 of file GaudiCommon.h.

00595                                                                       {
00596     updMgrSvc()->registerCondition(dynamic_cast<CallerClass*>(this),condition,mf,condPtrDest);
00597   }

void GaudiCommon< Algorithm >::registerCondition ( char *  condition,
StatusCode(CallerClass::*)()  mf = NULL 
) [inline, inherited]

just to avoid conflicts with the version using a pointer to a template class.

Definition at line 600 of file GaudiCommon.h.

00600                                                                                        {
00601     updMgrSvc()->registerCondition(dynamic_cast<CallerClass*>(this),std::string(condition),mf);
00602   }

void GaudiCommon< Algorithm >::registerCondition ( TargetClass *  condition,
StatusCode(CallerClass::*)()  mf = NULL 
) [inline, inherited]

register the current instance to the UpdateManagerSvc as a consumer for a condition.

Parameters:
condition the path inside the Transient Detector Store to the condition object.
mf optional pointer to the member function to call when the condition object is updated. If the pointer is omitted the user must explicitely provide the class name to the method.
  StatusCode MyAlg::initialize(){
     // ...
     registerCondition("/dd/Conditions/Readout/MyDet/MyCond",&MyAlg::i_CallBack);
     registerCondition<MyAlg>("/dd/Conditions/Readout/MyDet/MyOtherCond");
     // ...
     return StatusCode.SUCCESS;
  }

Definition at line 619 of file GaudiCommon.h.

00619                                                                                               {
00620     updMgrSvc()->registerCondition(dynamic_cast<CallerClass*>(this),condition,mf);
00621   }

StatusCode GaudiCommon< Algorithm >::runUpdate (  )  [inline, inherited]

asks the UpdateManagerSvc to perform an update of the instance (if needed) without waiting the next BeginEvent incident.

It is useful if the instance can be instantiated after a BeginEvent incident, and used before the next one (for example with tools).

  StatusCode MyTool::initialize(){
    // ...
    return runUpdate();
  }

Definition at line 633 of file GaudiCommon.h.

00633 { return updMgrSvc()->update(this); }

TransientFastContainer<T>* GaudiCommon< Algorithm >::getFastContainer ( const std::string &  location,
typename TransientFastContainer< T >::size_type  initial = 0 
) [inherited]

Return a new TransientFastContainer for objects of type T.

The container is created if it is not in the transient store. If a container with the same name but a different type

StatusCode GaudiCommon< Algorithm >::releaseTool ( const IAlgTool tool  )  const [protected, inherited]

manual forced (and 'safe') release of the tool

StatusCode GaudiCommon< Algorithm >::releaseSvc ( const IInterface svc  )  const [protected, inherited]

manual forced (and 'safe') release of the service

StatusCode GaudiCommon< Algorithm >::release ( const IInterface interface  )  const [inherited]

Manual forced (and 'safe') release of the active tool or service.

  IMyTool* mytool = tool<IMyTool>( .... ) ;
  mytool->spendCPUtime() ;
  release ( mytool ) ;

  IMySvc* msvc = svc<IMySvc>( .... ) ;
  msvc->spendCPUtime() ;
  release ( msvc ) ;

Parameters:
interface Interface pointer to the interface to be released
Returns:
StatusCode
Return values:
StatusCode::SUCCESS Tool or service was successfully released
StatusCode::FAILURE Error releasing too or service

const std::string& GaudiCommon< Algorithm >::context (  )  const [inline, inherited]

Returns the "context" string. Used to indentify different processing states.

Definition at line 696 of file GaudiCommon.h.

00696 { return m_context; }

const std::string& GaudiCommon< Algorithm >::rootInTES (  )  const [inline, inherited]

Returns the "rootInTES" string.

Used as the directory root in the TES for which all data access refers to (both saving and retrieving).

Definition at line 700 of file GaudiCommon.h.

00700 { return m_rootInTES; }

double GaudiCommon< Algorithm >::globalTimeOffset (  )  const [inline, inherited]

Returns the "globalTimeOffset" double.

Definition at line 702 of file GaudiCommon.h.

00702 { return m_globalTimeOffset; }


Member Data Documentation

StringArrayProperty GaudiSequencer::m_names [private]

Input string, list of algorithms.

Definition at line 72 of file GaudiSequencer.h.

std::vector<AlgorithmEntry> GaudiSequencer::m_entries [private]

List of algorithms to process.

Definition at line 73 of file GaudiSequencer.h.

bool GaudiSequencer::m_modeOR [private]

Indicates that the OR is wanted instead of AND.

Definition at line 74 of file GaudiSequencer.h.

bool GaudiSequencer::m_shortCircuit [private]

Indicates whether to stop processing as soon as possible, or to always execute _all_ subalgorithms.

Definition at line 75 of file GaudiSequencer.h.

bool GaudiSequencer::m_ignoreFilter [private]

True if one continues always.

Definition at line 77 of file GaudiSequencer.h.

bool GaudiSequencer::m_isInitialized [private]

Indicate that we are ready.

Definition at line 78 of file GaudiSequencer.h.

bool GaudiSequencer::m_measureTime [private]

Flag to measure time.

Definition at line 79 of file GaudiSequencer.h.

bool GaudiSequencer::m_returnOK [private]

Forces the sequencer to return a good status.

Definition at line 80 of file GaudiSequencer.h.

ISequencerTimerTool* GaudiSequencer::m_timerTool [private]

Pointer to the timer tool.

Definition at line 81 of file GaudiSequencer.h.

int GaudiSequencer::m_timer [private]

Timer number for the sequencer.

Definition at line 82 of file GaudiSequencer.h.

const bool GaudiCommon< Algorithm >::IgnoreRootInTES [static, protected, inherited]

Simple definition to be used with the new useRootInTES argument get<TYPE> and put methods.

If used with cause the RootInTES option to be IGNORED.

Useful to aid with code readablity. e.g.

  // Get data, ignoring the setting of rootInTES()
  MyData * data = get<MyData>( "/Event/MyData", IgnoreRootInTES );

Definition at line 68 of file GaudiCommon.h.

const bool GaudiCommon< Algorithm >::UseRootInTES [static, protected, inherited]

Simple definition to be used with the new useRootInTES argument get<TYPE> and put methods.

If used with cause the RootInTES option to be USED

Useful to aid with code readablity. e.g.

  // Get data, using the setting of rootInTES()
  MyData * data = get<MyData>( "/Event/MyData", UseRootInTES );
  // note the default setting is true, so this is equivalent to
  MyData * data = get<MyData>( "/Event/MyData" );

Definition at line 80 of file GaudiCommon.h.


The documentation for this class was generated from the following files:
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

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