From 4a7c3ea27d68de0b7333b1bd4fac7cde364b6af3 Mon Sep 17 00:00:00 2001 From: lintao <lintao51@gmail.com> Date: Sun, 8 Sep 2019 11:04:43 +0800 Subject: [PATCH] WIP: add an implementation of primary cnv tool. --- Simulation/DetSimCore/CMakeLists.txt | 1 + Simulation/DetSimCore/src/DetSimAlg.cpp | 6 +++++- Simulation/DetSimCore/src/DetSimAlg.h | 2 ++ Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp | 11 +++++++++++ Simulation/DetSimCore/src/G4PrimaryCnvTool.h | 16 ++++++++++++++++ .../DetSimCore/src/PrimaryGeneratorAction.cpp | 8 +++++++- .../DetSimCore/src/PrimaryGeneratorAction.h | 6 +++++- .../DetSimInterface/IG4PrimaryCnvTool.h | 2 +- 8 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 Simulation/DetSimCore/src/G4PrimaryCnvTool.cpp create mode 100644 Simulation/DetSimCore/src/G4PrimaryCnvTool.h diff --git a/Simulation/DetSimCore/CMakeLists.txt b/Simulation/DetSimCore/CMakeLists.txt index e25301fa..57f82000 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 34420d42..17385cf7 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 ff484969..0f66b74c 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 00000000..4f34751e --- /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 00000000..00c225a5 --- /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 6454963b..067bd8ce 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 fa34d7a4..f8ac0ebe 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 83caf9d5..3eba505c 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 -- GitLab