Gaudi Internals

From Daya Bay
Jump to navigation Jump to search

An attempt to understand Gaudi Internals

Top Down

Main loop

The main loop is handled by an IEventProcessor (ApplicationMgr). This delegates to it's IRunable (AppMgrRunable) which then just calls back to ApplicationMgr::nextEvent(). This then delegates to m_processMgr which is and EventLoopMgr (ELM, below) which is a subclass of MinimalEventLoopMgr.

Action starts with EventLoopMgr::executeRun(int) which does

  1. (in MinimalELM) beginRun on the top level algs
  2. (in ELM) nextEvent(int)
    • clears store
    • getEventRoot() loads new event through EventSelector::createAddress (+ EventSelector::next + another createAddress???)
    • EventDataMgr::setRoot (comments say this also clears data store)
    • exectueEvent()
      • fires BeginEvent "incident"
      • delegates to MinimalELM::executeEvent()
        • walks top alg list calling their execute()
        • walks output alg list calling their execute()
      • fires EndEvent "incident
  3. (back in MinmalELM) walk top alg list calling endRun()

Notes:

  • The selection of the event selector in the ELM appears to only allow EventSelector class to be used (or nothing).
  • The wipeing of the TDS each "event" may mean we need our own ELM.

Bottom up

What do these do? What are the responsibilities of each implementation? What implementations exist, which ones should we use and which ones should we implement ourselves?

IDataManagerSvc

IDataProviderSvc

IEvtSelector

IEvtSelector::Context