diff --git a/Simulation/DetSimCore/CMakeLists.txt b/Simulation/DetSimCore/CMakeLists.txt index e25301fad3e6d60a3648fe1f86a8ba1d7b35f03f..57f82000cd42384b801d52b9f796619610d6ca85 100644 --- a/Simulation/DetSimCore/CMakeLists.txt +++ b/Simulation/DetSimCore/CMakeLists.txt @@ -14,6 +14,7 @@ set(DetSimCore_srcs src/DetSimSvc.cpp src/DetectorConstruction.cpp src/PrimaryGeneratorAction.cpp + src/G4PrimaryCnvTool.cpp src/ActionInitialization.cpp src/RunAction.cpp src/EventAction.cpp diff --git a/Simulation/DetSimCore/src/DetSimAlg.cpp b/Simulation/DetSimCore/src/DetSimAlg.cpp index 34420d42268573bf7519bc4966c30dfb163f39ca..17385cf701b1a40ce8370d7c86d17ae8c325e668 100644 --- a/Simulation/DetSimCore/src/DetSimAlg.cpp +++ b/Simulation/DetSimCore/src/DetSimAlg.cpp @@ -54,7 +54,11 @@ DetSimAlg::initialize() { assert(physicsList); runmgr->SetUserInitialization(physicsList); // Primary Generator Action - runmgr->SetUserAction(new PrimaryGeneratorAction()); + if (!m_prim_cnvtool) { + error() << "Failed to get the primary cnvtool." << endmsg; + return StatusCode::FAILURE; + } + runmgr->SetUserAction(new PrimaryGeneratorAction(m_prim_cnvtool)); // User Actions for (auto anaelem: m_ana_elems.value()) { diff --git a/Simulation/DetSimCore/src/DetSimAlg.h b/Simulation/DetSimCore/src/DetSimAlg.h index ff484969a9cca814e35f7ea77981ae07b549f8a5..0f66b74ccc89b9dc0d4d65f3bb590914d2ec249a 100644 --- a/Simulation/DetSimCore/src/DetSimAlg.h +++ b/Simulation/DetSimCore/src/DetSimAlg.h @@ -9,6 +9,7 @@ #include <GaudiKernel/ToolHandle.h> #include <DetSimInterface/IDetSimSvc.h> +#include <DetSimInterface/IG4PrimaryCnvTool.h> #include <DetSimInterface/IAnaElemTool.h> #include <DetSimInterface/IDetElemTool.h> @@ -24,6 +25,7 @@ private: SmartIF<IDetSimSvc> m_detsimsvc; ToolHandleArray<IAnaElemTool> m_anaelemtools; ToolHandle<IDetElemTool> m_root_detelem; + ToolHandle<IG4PrimaryCnvTool> m_prim_cnvtool{"G4PrimaryCnvTool", this}; private: diff --git a/Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp b/Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4f34751eb03ab8e499972bc7393c41a3b8f04aec --- /dev/null +++ b/Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp @@ -0,0 +1,11 @@ +#include "G4PrimaryCnvTool.h" + +#include "G4Event.hh" + +DECLARE_COMPONENT(G4PrimaryCnvTool) + +bool G4PrimaryCnvTool::mutate(G4Event* anEvent) { + + + return true; +} diff --git a/Simulation/DetSimCore/src/G4PrimaryCnvTool.h b/Simulation/DetSimCore/src/G4PrimaryCnvTool.h new file mode 100644 index 0000000000000000000000000000000000000000..00c225a52bc85da53f1f9ad8a91864116ed39084 --- /dev/null +++ b/Simulation/DetSimCore/src/G4PrimaryCnvTool.h @@ -0,0 +1,16 @@ +#ifndef G4PrimaryCnvTool_h +#define G4PrimaryCnvTool_h + +#include "GaudiKernel/AlgTool.h" +#include "DetSimInterface/IG4PrimaryCnvTool.h" + +class G4PrimaryCnvTool: public extends<AlgTool, IG4PrimaryCnvTool> { +public: + + using extends::extends; + + bool mutate(G4Event* anEvent) override; + +}; + +#endif diff --git a/Simulation/DetSimCore/src/PrimaryGeneratorAction.cpp b/Simulation/DetSimCore/src/PrimaryGeneratorAction.cpp index 6454963b6dd2b9214b9d07c89c462023d2c8c0b1..067bd8ce9abb3154176621293b8796951f568126 100644 --- a/Simulation/DetSimCore/src/PrimaryGeneratorAction.cpp +++ b/Simulation/DetSimCore/src/PrimaryGeneratorAction.cpp @@ -6,7 +6,9 @@ #include "G4ParticleDefinition.hh" -PrimaryGeneratorAction::PrimaryGeneratorAction() { +PrimaryGeneratorAction::PrimaryGeneratorAction(ToolHandle<IG4PrimaryCnvTool>& cnvtool) + : G4VUserPrimaryGeneratorAction(), + tool(cnvtool) { } @@ -17,6 +19,10 @@ PrimaryGeneratorAction::~PrimaryGeneratorAction() { void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) { // Generate Vertex (G4PrimaryVertex) and Particle (G4PrimaryParticle). + if (tool) { + tool->mutate(anEvent); + } + // Following is an example: double x = 0.0; diff --git a/Simulation/DetSimCore/src/PrimaryGeneratorAction.h b/Simulation/DetSimCore/src/PrimaryGeneratorAction.h index fa34d7a421b4d7579c8b6606eda9b4523ade6cba..f8ac0ebeb4522f0a5a1f444413ed7d45804cbde4 100644 --- a/Simulation/DetSimCore/src/PrimaryGeneratorAction.h +++ b/Simulation/DetSimCore/src/PrimaryGeneratorAction.h @@ -1,17 +1,21 @@ #ifndef PrimaryGeneratorAction_h #define PrimaryGeneratorAction_h +#include <GaudiKernel/ToolHandle.h> #include "G4VUserPrimaryGeneratorAction.hh" +#include <DetSimInterface/IG4PrimaryCnvTool.h> class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: - PrimaryGeneratorAction(); + PrimaryGeneratorAction(ToolHandle<IG4PrimaryCnvTool>& cnvtool); ~PrimaryGeneratorAction(); public: void GeneratePrimaries(G4Event* anEvent); +private: + ToolHandle<IG4PrimaryCnvTool> tool; }; #endif diff --git a/Simulation/DetSimInterface/DetSimInterface/IG4PrimaryCnvTool.h b/Simulation/DetSimInterface/DetSimInterface/IG4PrimaryCnvTool.h index 83caf9d5b97d05c2826570c70c4c44ec16a5e785..3eba505cd43681ad3910641f007eca50080350c1 100644 --- a/Simulation/DetSimInterface/DetSimInterface/IG4PrimaryCnvTool.h +++ b/Simulation/DetSimInterface/DetSimInterface/IG4PrimaryCnvTool.h @@ -16,7 +16,7 @@ public: virtual ~IG4PrimaryCnvTool() {}; - virtual mutate(G4Event* anEvent) = 0; + virtual bool mutate(G4Event* anEvent) = 0; }; #endif