Gaudi Framework, version v21r4

Home   Generated: 7 Sep 2009

MinimalEventLoopMgr Class Reference

#include <MinimalEventLoopMgr.h>

Inheritance diagram for MinimalEventLoopMgr:

Inheritance graph
[legend]
Collaboration diagram for MinimalEventLoopMgr:

Collaboration graph
[legend]

List of all members.


Detailed Description

This is the default processing manager of the application manager.

This object handles the minimal requirements needed by the application manager. It also is capable of handling a bunch of algorithms and output streams. However, they list may as well be empty.

Author:
Markus Frank
Version:
1.0

Definition at line 26 of file MinimalEventLoopMgr.h.


Public Types

typedef std::list< SmartIF
< IAlgorithm > > 
ListAlg
 Creator friend class.
typedef std::list< IAlgorithm * > ListAlgPtrs
typedef std::list< std::stringListName
typedef std::vector< std::stringVectorName

Public Member Functions

 MinimalEventLoopMgr (const std::string &nam, ISvcLocator *svcLoc)
 Standard Constructor.
virtual ~MinimalEventLoopMgr ()
 Standard Destructor.
virtual StatusCode initialize ()
 implementation of IService::initialize
virtual StatusCode start ()
 implementation of IService::start
virtual StatusCode stop ()
 implementation of IService::stop
virtual StatusCode finalize ()
 implementation of IService::finalize
virtual StatusCode reinitialize ()
 implementation of IService::reinitialize
virtual StatusCode restart ()
 implementation of IService::restart
virtual StatusCode nextEvent (int maxevt)
 implementation of IEventProcessor::nextEvent
virtual StatusCode executeEvent (void *par)
 implementation of IEventProcessor::executeEvent(void* par)
virtual StatusCode executeRun (int maxevt)
 implementation of IEventProcessor::executeRun( )
virtual StatusCode stopRun ()
 implementation of IEventProcessor::stopRun( )
void topAlgHandler (Property &p)
 Top algorithm List handler.
StatusCode decodeTopAlgs ()
 decodeTopAlgNameList & topAlgNameListHandler
void outStreamHandler (Property &p)
 Output stream List handler.
StatusCode decodeOutStreams ()
 decodeOutStreamNameList & outStreamNameListHandler

Protected Types

enum  State { OFFLINE, CONFIGURED, FINALIZED, INITIALIZED }

Protected Attributes

SmartIF< IAppMgrUIm_appMgrUI
 Reference to the IAppMgrUI interface of the application manager.
SmartIF< IIncidentSvcm_incidentSvc
 Reference to the incident service.
ListAlg m_topAlgList
 List of top level algorithms.
ListAlg m_outStreamList
 List of output streams.
std::string m_outStreamType
 Out Stream type.
StringArrayProperty m_topAlgNames
 List of top level algorithms names.
StringArrayProperty m_outStreamNames
 List of output stream names.
State m_state
 State of the object.
bool m_scheduledStop
 Scheduled stop of event processing.
SmartIF< IIncidentListenerm_abortEventListener
 Instance of the incident listener waiting for AbortEvent.
bool m_abortEvent
 Flag signalling that the event being processedhas to be aborted (skip all following top algs).
std::string m_abortEventSource
 Source of the AbortEvent incident.

Private Member Functions

 MinimalEventLoopMgr (const MinimalEventLoopMgr &)
 Fake copy constructor (never implemented).
MinimalEventLoopMgroperator= (const MinimalEventLoopMgr &)
 Fake assignment operator (never implemented).

Member Typedef Documentation

Creator friend class.

Definition at line 30 of file MinimalEventLoopMgr.h.

Definition at line 31 of file MinimalEventLoopMgr.h.

Definition at line 32 of file MinimalEventLoopMgr.h.

Definition at line 33 of file MinimalEventLoopMgr.h.


Member Enumeration Documentation

enum MinimalEventLoopMgr::State [protected]

Enumerator:
OFFLINE 
CONFIGURED 
FINALIZED 
INITIALIZED 

Definition at line 37 of file MinimalEventLoopMgr.h.


Constructor & Destructor Documentation

MinimalEventLoopMgr::MinimalEventLoopMgr ( const std::string nam,
ISvcLocator svcLoc 
)

Standard Constructor.

Definition at line 44 of file MinimalEventLoopMgr.cpp.

00045   : base_class(nam, svcLoc), m_appMgrUI(svcLoc)
00046 {
00047   declareProperty("TopAlg",         m_topAlgNames );
00048   declareProperty("OutStream",      m_outStreamNames );
00049   declareProperty("OutStreamType",  m_outStreamType = "OutputStream");
00050   m_topAlgNames.declareUpdateHandler   ( &MinimalEventLoopMgr::topAlgHandler, this );
00051   m_outStreamNames.declareUpdateHandler( &MinimalEventLoopMgr::outStreamHandler, this );
00052   m_state = OFFLINE;
00053   m_scheduledStop = false;
00054   m_abortEvent = false;
00055 }

MinimalEventLoopMgr::~MinimalEventLoopMgr (  )  [virtual]

Standard Destructor.

Definition at line 60 of file MinimalEventLoopMgr.cpp.

00060                                             {
00061   m_state = OFFLINE;
00062 }

MinimalEventLoopMgr::MinimalEventLoopMgr ( const MinimalEventLoopMgr  )  [private]

Fake copy constructor (never implemented).


Member Function Documentation

StatusCode MinimalEventLoopMgr::initialize (  )  [virtual]

implementation of IService::initialize

Reimplemented from Service.

Reimplemented in EventLoopMgr.

Definition at line 67 of file MinimalEventLoopMgr.cpp.

00067                                               {
00068 
00069   MsgStream log(msgSvc(), name());
00070 
00071   if ( !m_appMgrUI.isValid() ) {
00072     return StatusCode::FAILURE;
00073   }
00074 
00075   StatusCode sc = Service::initialize();
00076   if ( !sc.isSuccess() )   {
00077     log << MSG::ERROR << "Failed to initialize Service Base class." << endmsg;
00078     return StatusCode::FAILURE;
00079   }
00080 
00081   SmartIF<IProperty> prpMgr(serviceLocator());
00082   if ( ! prpMgr.isValid() )   {
00083     log << MSG::ERROR << "Error retrieving AppMgr interface IProperty." << endmsg;
00084     return StatusCode::FAILURE;
00085   }
00086   else {
00087     if ( m_topAlgNames.value().size() == 0 )    {
00088       setProperty(prpMgr->getProperty("TopAlg")).ignore();
00089     }
00090     if ( m_outStreamNames.value().size() == 0 )   {
00091       setProperty(prpMgr->getProperty("OutStream")).ignore();
00092     }
00093   }
00094 
00095   // Get the references to the services that are needed by the ApplicationMgr itself
00096   m_incidentSvc = serviceLocator()->service("IncidentSvc");
00097   if( !m_incidentSvc.isValid() )  {
00098     log << MSG::FATAL << "Error retrieving IncidentSvc." << endmsg;
00099     return StatusCode::FAILURE;
00100   }
00101 
00102   m_abortEventListener = new AbortEventListener(m_abortEvent,m_abortEventSource);
00103   m_incidentSvc->addListener(m_abortEventListener,IncidentType::AbortEvent);
00104 
00105   // The state is changed at this moment to allow decodeXXXX() to do something
00106   m_state = INITIALIZED;
00107 
00108   //--------------------------------------------------------------------------------------------
00109   // Create output streams. Do not initialize them yet.
00110   // The state is updated temporarily in order to enable the handler, which
00111   // is also triggered by a change to the "OutputStream" Property.
00112   //--------------------------------------------------------------------------------------------
00113   sc = decodeOutStreams();
00114   if ( !sc.isSuccess() )    {
00115     log << MSG::ERROR << "Failed to initialize Output streams." << endmsg;
00116     m_state = CONFIGURED;
00117     return sc;
00118   }
00119   //--------------------------------------------------------------------------------------------
00120   // Create all needed Top Algorithms. Do not initialize them yet.
00121   // The state is updated temporarily in order to enable the handler, which
00122   // is also triggered by a change to the "TopAlg" Property.
00123   //--------------------------------------------------------------------------------------------
00124   sc = decodeTopAlgs();
00125   if ( !sc.isSuccess() )    {
00126     log << MSG::ERROR << "Failed to initialize Top Algorithms streams." << endmsg;
00127     m_state = CONFIGURED;
00128     return sc;
00129   }
00130 
00131   ListAlg::iterator ita;
00132   // Initialize all the new TopAlgs. In fact Algorithms are protected against getting
00133   // initialized twice.
00134   for (ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ita++ ) {
00135     sc = (*ita)->sysInitialize();
00136     if( !sc.isSuccess() ) {
00137       log << MSG::ERROR << "Unable to initialize Algorithm: " << (*ita)->name() << endmsg;
00138       return sc;
00139     }
00140   }
00141   for (ita = m_outStreamList.begin(); ita != m_outStreamList.end(); ita++ ) {
00142     sc = (*ita)->sysInitialize();
00143     if( !sc.isSuccess() ) {
00144       log << MSG::ERROR << "Unable to initialize Output Stream: " << (*ita)->name() << endmsg;
00145       return sc;
00146     }
00147   }
00148 
00149   return StatusCode::SUCCESS;
00150 }

StatusCode MinimalEventLoopMgr::start (  )  [virtual]

implementation of IService::start

Reimplemented from Service.

Definition at line 154 of file MinimalEventLoopMgr.cpp.

00154                                          {
00155 
00156   StatusCode sc = Service::start();
00157   if ( ! sc.isSuccess() ) return sc;
00158 
00159   MsgStream log(msgSvc(), name());
00160 
00161   ListAlg::iterator ita;
00162   // Start all the new TopAlgs. In fact Algorithms are protected against getting
00163   // started twice.
00164   for (ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ita++ ) {
00165     sc = (*ita)->sysStart();
00166     if( !sc.isSuccess() ) {
00167       log << MSG::ERROR << "Unable to start Algorithm: " << (*ita)->name() << endmsg;
00168       return sc;
00169     }
00170   }
00171   for (ita = m_outStreamList.begin(); ita != m_outStreamList.end(); ita++ ) {
00172     sc = (*ita)->sysStart();
00173     if( !sc.isSuccess() ) {
00174       log << MSG::ERROR << "Unable to start Output Stream: " << (*ita)->name() << endmsg;
00175       return sc;
00176     }
00177   }
00178   return StatusCode::SUCCESS;
00179 }

StatusCode MinimalEventLoopMgr::stop (  )  [virtual]

implementation of IService::stop

Reimplemented from Service.

Reimplemented in EventLoopMgr.

Definition at line 183 of file MinimalEventLoopMgr.cpp.

00183                                         {
00184 
00185   StatusCode sc = StatusCode::SUCCESS;
00186 
00187   MsgStream log(msgSvc(), name());
00188 
00189   ListAlg::iterator ita;
00190   // Stop all the TopAlgs. In fact Algorithms are protected against getting
00191   // stopped twice.
00192   for (ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ita++ ) {
00193     sc = (*ita)->sysStop();
00194     if( !sc.isSuccess() ) {
00195       log << MSG::ERROR << "Unable to stop Algorithm: " << (*ita)->name() << endmsg;
00196       return sc;
00197     }
00198   }
00199   for (ita = m_outStreamList.begin(); ita != m_outStreamList.end(); ita++ ) {
00200     sc = (*ita)->sysStop();
00201     if( !sc.isSuccess() ) {
00202       log << MSG::ERROR << "Unable to stop Output Stream: " << (*ita)->name() << endmsg;
00203       return sc;
00204     }
00205   }
00206 
00207   return Service::stop();
00208 }

StatusCode MinimalEventLoopMgr::finalize ( void   )  [virtual]

implementation of IService::finalize

Reimplemented from Service.

Reimplemented in EventLoopMgr.

Definition at line 266 of file MinimalEventLoopMgr.cpp.

00266                                             {
00267   MsgStream log( msgSvc(), name() );
00268   StatusCode sc = StatusCode::SUCCESS;
00269   StatusCode scRet = StatusCode::SUCCESS;
00270   // Call the finalize() method of all top algorithms
00271   ListAlg::iterator ita;
00272   for ( ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ita++ ) {
00273     sc = (*ita)->sysFinalize();
00274     if( !sc.isSuccess() ) {
00275       scRet = StatusCode::FAILURE;
00276       log << MSG::WARNING << "Finalization of algorithm " << (*ita)->name() << " failed" << endmsg;
00277     }
00278   }
00279   // Call the finalize() method of all Output streams
00280   for ( ita = m_outStreamList.begin(); ita != m_outStreamList.end(); ita++ ) {
00281     sc = (*ita)->sysFinalize();
00282     if( !sc.isSuccess() ) {
00283       scRet = StatusCode::FAILURE;
00284       log << MSG::WARNING << "Finalization of algorithm " << (*ita)->name() << " failed" << endmsg;
00285     }
00286   }
00287   // release all top algorithms
00288   SmartIF<IAlgManager> algMan(serviceLocator());
00289   for ( ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ita++ ) {
00290     if (algMan->removeAlgorithm(*ita).isFailure()) {
00291       scRet = StatusCode::FAILURE;
00292       log << MSG::ERROR << "Problems removing Algorithm " << (*ita)->name()
00293           << endmsg;
00294     }
00295     (*ita)->release();
00296   }
00297   m_topAlgList.clear();
00298 
00299   // release all output streams
00300   for ( ita = m_outStreamList.begin(); ita != m_outStreamList.end(); ita++ ) {
00301     (*ita)->release();
00302   }
00303   m_outStreamList.clear();
00304   if ( sc.isSuccess() ) m_state = FINALIZED;
00305 
00306   m_incidentSvc->removeListener(m_abortEventListener, IncidentType::AbortEvent);
00307   m_abortEventListener = 0; // release
00308 
00309   m_incidentSvc = 0; // release
00310   m_appMgrUI = 0; // release
00311 
00312   sc = Service::finalize();
00313 
00314   if (sc.isFailure()) {
00315     scRet = StatusCode::FAILURE;
00316     log << MSG::ERROR << "Problems finalizing Service base class" << endmsg;
00317   }
00318 
00319   return scRet;
00320 }

StatusCode MinimalEventLoopMgr::reinitialize (  )  [virtual]

implementation of IService::reinitialize

Reimplemented from Service.

Reimplemented in EventLoopMgr.

Definition at line 213 of file MinimalEventLoopMgr.cpp.

00213                                              {
00214   MsgStream log( msgSvc(), name() );
00215   StatusCode sc = StatusCode::SUCCESS;
00216   ListAlg::iterator ita;
00217 
00218   // Reinitialize all the TopAlgs.
00219   for (ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ita++ ) {
00220     sc = (*ita)->sysReinitialize();
00221     if( !sc.isSuccess() ) {
00222       log << MSG::ERROR << "Unable to reinitialize Algorithm: " << (*ita)->name() << endmsg;
00223       return sc;
00224     }
00225   }
00226   for (ita = m_outStreamList.begin(); ita != m_outStreamList.end(); ita++ ) {
00227     sc = (*ita)->sysReinitialize();
00228     if( !sc.isSuccess() ) {
00229       log << MSG::ERROR << "Unable to reinitialize Output Stream: " << (*ita)->name() << endmsg;
00230       return sc;
00231     }
00232   }
00233 
00234   return sc;
00235 }

StatusCode MinimalEventLoopMgr::restart (  )  [virtual]

implementation of IService::restart

Reimplemented from Service.

Definition at line 239 of file MinimalEventLoopMgr.cpp.

00239                                         {
00240   MsgStream log( msgSvc(), name() );
00241   StatusCode sc = StatusCode::SUCCESS;
00242   ListAlg::iterator ita;
00243 
00244   // Restart all the TopAlgs.
00245   for (ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ita++ ) {
00246     sc = (*ita)->sysRestart();
00247     if( !sc.isSuccess() ) {
00248       log << MSG::ERROR << "Unable to restart Algorithm: " << (*ita)->name() << endmsg;
00249       return sc;
00250     }
00251   }
00252   for (ita = m_outStreamList.begin(); ita != m_outStreamList.end(); ita++ ) {
00253     sc = (*ita)->sysRestart();
00254     if( !sc.isSuccess() ) {
00255       log << MSG::ERROR << "Unable to restart Output Stream: " << (*ita)->name() << endmsg;
00256       return sc;
00257     }
00258   }
00259 
00260   return sc;
00261 }

StatusCode MinimalEventLoopMgr::nextEvent ( int  maxevt  )  [virtual]

implementation of IEventProcessor::nextEvent

Implements IEventProcessor.

Reimplemented in EventLoopMgr.

Definition at line 325 of file MinimalEventLoopMgr.cpp.

00325                                                             {
00326   MsgStream log(msgSvc(), name());
00327   log << MSG::ERROR << "This method cannot be called on an object of type "
00328       << System::typeinfoName(typeid(*this)) << endmsg;
00329   return StatusCode::FAILURE;
00330 }

StatusCode MinimalEventLoopMgr::executeEvent ( void *  par  )  [virtual]

implementation of IEventProcessor::executeEvent(void* par)

Implements IEventProcessor.

Reimplemented in EventLoopMgr.

Definition at line 376 of file MinimalEventLoopMgr.cpp.

00376                                                                {
00377   bool eventfailed = false;
00378 
00379   // Call the resetExecuted() method of ALL "known" algorithms
00380   // (before we were reseting only the topalgs)
00381   SmartIF<IAlgManager> algMan(serviceLocator());
00382   if ( algMan.isValid() ) {
00383     const ListAlgPtrs& allAlgs = algMan->getAlgorithms() ;
00384     for( ListAlgPtrs::const_iterator ialg = allAlgs.begin() ; allAlgs.end() != ialg ; ++ialg ) {
00385       if ( 0 != *ialg ) (*ialg)->resetExecuted();
00386     }
00387   }
00388 
00389   // Call the execute() method of all top algorithms
00390   for (ListAlg::iterator ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ita++ ) {
00391     StatusCode sc(StatusCode::FAILURE);
00392     try {
00393       if (m_abortEvent){
00394         MsgStream log ( msgSvc() , name() );
00395         log << MSG::DEBUG << "AbortEvent incident fired by "
00396                           << m_abortEventSource << endmsg;
00397         m_abortEvent = false;
00398         sc.ignore();
00399         break;
00400       }
00401       sc = (*ita)->sysExecute();
00402     } catch ( const GaudiException& Exception ) {
00403       MsgStream log ( msgSvc() , "MinimalEventLoopMgr.executeEvent()" );
00404       log << MSG::FATAL << " Exception with tag=" << Exception.tag()
00405           << " thrown by " << (*ita)->name() << endmsg;
00406       log << MSG::ERROR << Exception << endmsg;
00407     } catch ( const std::exception& Exception ) {
00408       MsgStream log ( msgSvc() , "MinimalEventLoopMgr.executeEvent()" );
00409       log << MSG::FATAL << " Standard std::exception thrown by "
00410           << (*ita)->name() << endmsg;
00411       log << MSG::ERROR << Exception.what()  << endmsg;
00412     } catch(...) {
00413       MsgStream log ( msgSvc() , "MinimalEventLoopMgr.executeEvent()" );
00414       log << MSG::FATAL << "UNKNOWN Exception thrown by "
00415           << (*ita)->name() << endmsg;
00416     }
00417 
00418     if( !sc.isSuccess() )  {
00419       MsgStream log( msgSvc(), name() );
00420       log << MSG::WARNING << "Execution of algorithm " << (*ita)->name() << " failed" << endmsg;
00421       eventfailed = true;
00422     }
00423   }
00424 
00425   // ensure that the abortEvent flag is cleared before the next event
00426   if (m_abortEvent){
00427     if (outputLevel() <= MSG::DEBUG) {
00428       MsgStream log ( msgSvc() , name() );
00429       log << MSG::DEBUG << "AbortEvent incident fired by "
00430                         << m_abortEventSource << endmsg;
00431     }
00432     m_abortEvent = false;
00433   }
00434 
00435   // Call the execute() method of all output streams
00436   for (ListAlg::iterator ito = m_outStreamList.begin(); ito != m_outStreamList.end(); ito++ ) {
00437     (*ito)->resetExecuted();
00438       StatusCode sc;
00439       sc = (*ito)->sysExecute();
00440     if( !sc.isSuccess() )  {
00441       MsgStream log( msgSvc(), name() );
00442       log << MSG::WARNING << "Execution of output stream " << (*ito)->name() << " failed" << endmsg;
00443       eventfailed = true;
00444     }
00445   }
00446 
00447   // Check if there was an error processing current event
00448   if( eventfailed ){
00449     MsgStream log( msgSvc(), name() );
00450     log << MSG::ERROR << "Error processing event loop." << endmsg;
00451     return StatusCode(StatusCode::FAILURE,true);
00452   }
00453   return StatusCode(StatusCode::SUCCESS,true);
00454 }

StatusCode MinimalEventLoopMgr::executeRun ( int  maxevt  )  [virtual]

implementation of IEventProcessor::executeRun( )

Implements IEventProcessor.

Reimplemented in EventLoopMgr.

Definition at line 335 of file MinimalEventLoopMgr.cpp.

00335                                                        {
00336   StatusCode  sc;
00337   MsgStream log( msgSvc(), name() );
00338   ListAlg::iterator ita;
00339   bool eventfailed = false;
00340 
00341   // Call the beginRun() method of all top algorithms
00342   for (ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ita++ ) {
00343     sc = (*ita)->sysBeginRun();
00344     if( !sc.isSuccess() ) {
00345       log << MSG::WARNING << "beginRun() of algorithm " << (*ita)->name() << " failed" << endmsg;
00346       eventfailed = true;
00347     }
00348   }
00349 
00350   // Call now the nextEvent(...)
00351   sc = nextEvent(maxevt);
00352   if( !sc.isSuccess() ) {
00353     eventfailed = true;
00354   }
00355 
00356   // Call the endRun() method of all top algorithms
00357   for (ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ita++ ) {
00358     sc = (*ita)->sysEndRun();
00359     if( !sc.isSuccess() ) {
00360       log << MSG::WARNING << "endRun() of algorithm " << (*ita)->name() << " failed" << endmsg;
00361       eventfailed = true;
00362     }
00363   }
00364 
00365   if( eventfailed ){
00366     return StatusCode::FAILURE;
00367   }
00368   else {
00369     return StatusCode::SUCCESS;
00370   }
00371 }

StatusCode MinimalEventLoopMgr::stopRun (  )  [virtual]

implementation of IEventProcessor::stopRun( )

Implements IEventProcessor.

Definition at line 458 of file MinimalEventLoopMgr.cpp.

00458                                         {
00459   m_scheduledStop = true;
00460   return StatusCode::SUCCESS;
00461 }

void MinimalEventLoopMgr::topAlgHandler ( Property p  ) 

Top algorithm List handler.

Definition at line 466 of file MinimalEventLoopMgr.cpp.

00466                                                                   {
00467   if ( !(decodeTopAlgs( )).isSuccess() ) {
00468     throw GaudiException("Failed to initialize Top Algorithms streams.",
00469                          "MinimalEventLoopMgr::topAlgHandler",
00470                          StatusCode::FAILURE);
00471   }
00472 }

StatusCode MinimalEventLoopMgr::decodeTopAlgs (  ) 

decodeTopAlgNameList & topAlgNameListHandler

Definition at line 477 of file MinimalEventLoopMgr.cpp.

00477                                                  {
00478   StatusCode sc = StatusCode::SUCCESS;
00479   if ( CONFIGURED == m_state || INITIALIZED == m_state ) {
00480     SmartIF<IAlgManager> algMan(serviceLocator());
00481     MsgStream log(msgSvc(), name());
00482     if ( algMan.isValid())   {
00483       // Reset the existing Top Algorithm List
00484       m_topAlgList.clear( );
00485       const std::vector<std::string>& algNames = m_topAlgNames.value( );
00486       for (VectorName::const_iterator it = algNames.begin(); it != algNames.end(); it++) {
00487         Gaudi::Utils::TypeNameString item(*it);
00488         // Got the type and name. Now creating the algorithm, avoiding duplicate creation.
00489         std::string item_name = item.name() + getGaudiThreadIDfromName(name());
00490         const bool CREATE = false;
00491         SmartIF<IAlgorithm> alg = algMan->algorithm(item_name, CREATE);
00492         if (alg.isValid()) {
00493           log << MSG::DEBUG << "Top Algorithm " << item_name << " already exists" << endmsg;
00494         }
00495         else {
00496           log << MSG::DEBUG << "Creating Top Algorithm " << item.type() << " with name " << item_name << endmsg;
00497           IAlgorithm *ialg = 0;
00498           StatusCode sc = algMan->createAlgorithm(item.type(), item_name, ialg);
00499           if( !sc.isSuccess() ) {
00500             log << MSG::ERROR << "Unable to create Top Algorithm " << item.type() << " with name " << item_name << endmsg;
00501             return sc;
00502           }
00503           alg = ialg; // manage reference counting
00504         }
00505         m_topAlgList.push_back(alg);
00506       }
00507       return sc;
00508     }
00509     sc = StatusCode::FAILURE;
00510   }
00511   return sc;
00512 }

void MinimalEventLoopMgr::outStreamHandler ( Property p  ) 

Output stream List handler.

Definition at line 517 of file MinimalEventLoopMgr.cpp.

00517                                                                             {
00518   if ( !(decodeOutStreams( )).isSuccess() ) {
00519     throw GaudiException("Failed to initialize output streams.",
00520                          "MinimalEventLoopMgr::outStreamHandler",
00521                          StatusCode::FAILURE);
00522   }
00523 }

StatusCode MinimalEventLoopMgr::decodeOutStreams (  ) 

decodeOutStreamNameList & outStreamNameListHandler

Definition at line 528 of file MinimalEventLoopMgr.cpp.

00528                                                      {
00529   StatusCode sc = StatusCode::SUCCESS;
00530   if ( CONFIGURED == m_state || INITIALIZED == m_state ) {
00531     MsgStream log(msgSvc(), name());
00532     SmartIF<IAlgManager> algMan(serviceLocator());
00533     if ( algMan.isValid() )   {
00534       // Reset the existing Top Algorithm List
00535       m_outStreamList.clear();
00536       const std::vector<std::string>& algNames = m_outStreamNames.value( );
00537       for (VectorName::const_iterator it = algNames.begin(); it != algNames.end(); it++) {
00538         Gaudi::Utils::TypeNameString item(*it, m_outStreamType);
00539         log << MSG::DEBUG << "Creating " << m_outStreamType <<  (*it) << endmsg;
00540         const bool CREATE = false;
00541         SmartIF<IAlgorithm> os = algMan->algorithm( item, CREATE );
00542         if (os.isValid()) {
00543           log << MSG::DEBUG << "Output Stream " << item.name() << " already exists" << endmsg;
00544         }
00545         else {
00546           log << MSG::DEBUG << "Creating Output Stream " << (*it) << endmsg;
00547           IAlgorithm* ios = 0;
00548           StatusCode sc = algMan->createAlgorithm( item.type(), item.name(), ios );
00549           if( !sc.isSuccess() ) {
00550             log << MSG::ERROR << "Unable to create Output Stream " << (*it) << endmsg;
00551             return sc;
00552           }
00553           os = ios; // manage reference counting
00554         }
00555         m_outStreamList.push_back( os );
00556       }
00557      return sc;
00558     }
00559     sc = StatusCode::FAILURE;
00560   }
00561   return sc;
00562 }

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

Fake assignment operator (never implemented).


Member Data Documentation

Reference to the IAppMgrUI interface of the application manager.

Definition at line 39 of file MinimalEventLoopMgr.h.

Reference to the incident service.

Definition at line 41 of file MinimalEventLoopMgr.h.

List of top level algorithms.

Definition at line 43 of file MinimalEventLoopMgr.h.

List of output streams.

Definition at line 45 of file MinimalEventLoopMgr.h.

Out Stream type.

Definition at line 47 of file MinimalEventLoopMgr.h.

List of top level algorithms names.

Definition at line 49 of file MinimalEventLoopMgr.h.

List of output stream names.

Definition at line 51 of file MinimalEventLoopMgr.h.

State of the object.

Reimplemented from Service.

Definition at line 53 of file MinimalEventLoopMgr.h.

Scheduled stop of event processing.

Definition at line 55 of file MinimalEventLoopMgr.h.

Instance of the incident listener waiting for AbortEvent.

Definition at line 57 of file MinimalEventLoopMgr.h.

Flag signalling that the event being processedhas to be aborted (skip all following top algs).

Definition at line 60 of file MinimalEventLoopMgr.h.

Source of the AbortEvent incident.

Definition at line 62 of file MinimalEventLoopMgr.h.


The documentation for this class was generated from the following files:

Generated at Mon Sep 7 18:20:49 2009 for Gaudi Framework, version v21r4 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004