diff --git a/Simulation/src/DetSimCore/DetSimAlg.cpp b/Simulation/src/DetSimCore/DetSimAlg.cpp index db328fce42c66c8acea38701fb08e6c69dc0cb9d..81aab60f0dd173e752370a1eb7e0784887c28aaf 100644 --- a/Simulation/src/DetSimCore/DetSimAlg.cpp +++ b/Simulation/src/DetSimCore/DetSimAlg.cpp @@ -1,10 +1,12 @@ #include "DetSimAlg.h" +#include "G4RunManager.hh" + DECLARE_COMPONENT(DetSimAlg) DetSimAlg::DetSimAlg(const std::string& name, ISvcLocator* pSvcLocator) : Algorithm(name, pSvcLocator) { - + i_event = -1; } StatusCode @@ -13,18 +15,47 @@ DetSimAlg::initialize() { info() << "Initialize DetSimAlg... " << endmsg; + m_detsimsvc = service("DetSimSvc"); + if (!m_detsimsvc) { + error() << "Failed to find DetSimSvc. " << endmsg; + return StatusCode::FAILURE; + } + + // Initialize the Run Manager + G4RunManager* runmgr = m_detsimsvc->getRM(); + if (!runmgr) { + error() << "Failed to get Run Manager. " << endmsg; + return StatusCode::FAILURE; + } + + runmgr->SetUserInitialization((G4VUserDetectorConstruction*)0); + runmgr->SetUserInitialization((G4VUserPhysicsList*)0); + runmgr->SetUserAction((G4VUserPrimaryGeneratorAction*)0); + + // after set up the user initialization and user actions, start the initialization. + m_detsimsvc->initializeRM(); + return sc; } StatusCode DetSimAlg::execute() { StatusCode sc; + + m_detsimsvc->simulateEvent(++i_event); + return sc; } StatusCode DetSimAlg::finalize() { StatusCode sc; + if (!m_detsimsvc) { + return StatusCode::FAILURE; + } + m_detsimsvc->finalizeRM(); + + return sc; } diff --git a/Simulation/src/DetSimCore/DetSimAlg.h b/Simulation/src/DetSimCore/DetSimAlg.h index 683456f4ffc2867f189e97cc910a18fff50ed863..5c7371e3fb213d83df7779b2fa2350ff7dba3f89 100644 --- a/Simulation/src/DetSimCore/DetSimAlg.h +++ b/Simulation/src/DetSimCore/DetSimAlg.h @@ -25,6 +25,9 @@ private: Gaudi::Property<std::vector<std::string>> m_run_macs{this, "RunMacs"}; Gaudi::Property<std::vector<std::string>> m_run_cmds{this, "RunCmds"}; Gaudi::Property<std::vector<std::string>> m_vis_macs{this, "VisMacs"}; + +private: + int i_event; };