From 43d8db0394a4f0dc55e964cd9a14ac4a0c0b90f9 Mon Sep 17 00:00:00 2001 From: lintao <lintao51@gmail.com> Date: Mon, 12 Aug 2019 15:11:29 +0800 Subject: [PATCH] WIP: add IAnaElemTool interface. --- .../DetSimCore/src/ActionInitialization.cpp | 13 +++--- .../DetSimCore/src/ActionInitialization.h | 9 +++- Simulation/DetSimCore/src/DetSimAlg.cpp | 5 ++- Simulation/DetSimCore/src/DetSimAlg.h | 7 ++++ Simulation/DetSimCore/src/EventAction.cpp | 5 ++- Simulation/DetSimCore/src/EventAction.h | 8 +++- Simulation/DetSimCore/src/RunAction.cpp | 5 ++- Simulation/DetSimCore/src/RunAction.h | 8 +++- Simulation/DetSimCore/src/SteppingAction.cpp | 3 +- Simulation/DetSimCore/src/SteppingAction.h | 8 +++- Simulation/DetSimCore/src/TrackingAction.cpp | 5 ++- Simulation/DetSimCore/src/TrackingAction.h | 11 +++-- .../DetSimInterface/IAnaElemTool.h | 42 +++++++++++++++++++ 13 files changed, 108 insertions(+), 21 deletions(-) create mode 100644 Simulation/DetSimInterface/DetSimInterface/IAnaElemTool.h diff --git a/Simulation/DetSimCore/src/ActionInitialization.cpp b/Simulation/DetSimCore/src/ActionInitialization.cpp index 515f975b..7238d15b 100644 --- a/Simulation/DetSimCore/src/ActionInitialization.cpp +++ b/Simulation/DetSimCore/src/ActionInitialization.cpp @@ -5,8 +5,9 @@ #include "TrackingAction.h" #include "SteppingAction.h" -ActionInitialization::ActionInitialization() - : G4VUserActionInitialization() { +ActionInitialization::ActionInitialization(ToolHandleArray<IAnaElemTool>& anatools) + : G4VUserActionInitialization(), + m_anaelemtools(anatools) { } @@ -23,16 +24,16 @@ void ActionInitialization::Build() const { - RunAction* runAction = new RunAction(); + RunAction* runAction = new RunAction(m_anaelemtools); SetUserAction(runAction); - EventAction* eventAction = new EventAction(); + EventAction* eventAction = new EventAction(m_anaelemtools); SetUserAction(eventAction); - TrackingAction* trackingAction = new TrackingAction(); + TrackingAction* trackingAction = new TrackingAction(m_anaelemtools); SetUserAction(trackingAction); - SteppingAction* steppingAction = new SteppingAction(); + SteppingAction* steppingAction = new SteppingAction(m_anaelemtools); SetUserAction(steppingAction); } diff --git a/Simulation/DetSimCore/src/ActionInitialization.h b/Simulation/DetSimCore/src/ActionInitialization.h index 6ad9791d..ef33b470 100644 --- a/Simulation/DetSimCore/src/ActionInitialization.h +++ b/Simulation/DetSimCore/src/ActionInitialization.h @@ -1,17 +1,24 @@ #ifndef ActionInitialization_h #define ActionInitialization_h +#include <GaudiKernel/ToolHandle.h> + +#include <DetSimInterface/IAnaElemTool.h> + + #include "G4VUserActionInitialization.hh" class ActionInitialization: public G4VUserActionInitialization { public: - ActionInitialization(); + ActionInitialization(ToolHandleArray<IAnaElemTool>&); ~ActionInitialization(); void BuildForMaster() const override; void Build() const override; +private: + ToolHandleArray<IAnaElemTool>& m_anaelemtools; }; diff --git a/Simulation/DetSimCore/src/DetSimAlg.cpp b/Simulation/DetSimCore/src/DetSimAlg.cpp index 8bd06abb..70dde30c 100644 --- a/Simulation/DetSimCore/src/DetSimAlg.cpp +++ b/Simulation/DetSimCore/src/DetSimAlg.cpp @@ -56,7 +56,10 @@ DetSimAlg::initialize() { runmgr->SetUserAction(new PrimaryGeneratorAction()); // User Actions - runmgr->SetUserInitialization(new ActionInitialization()); + for (auto anaelem: m_ana_elems.value()) { + m_anaelemtools.push_back(anaelem); + } + runmgr->SetUserInitialization(new ActionInitialization(m_anaelemtools)); // Vis Mac bool hasVis = false; diff --git a/Simulation/DetSimCore/src/DetSimAlg.h b/Simulation/DetSimCore/src/DetSimAlg.h index d9c2a2f6..08ee2489 100644 --- a/Simulation/DetSimCore/src/DetSimAlg.h +++ b/Simulation/DetSimCore/src/DetSimAlg.h @@ -6,8 +6,10 @@ #include <GaudiKernel/Algorithm.h> #include <GaudiKernel/Property.h> +#include <GaudiKernel/ToolHandle.h> #include <DetSimInterface/IDetSimSvc.h> +#include <DetSimInterface/IAnaElemTool.h> class DetSimAlg: public Algorithm { public: @@ -19,6 +21,7 @@ public: private: SmartIF<IDetSimSvc> m_detsimsvc; + ToolHandleArray<IAnaElemTool> m_anaelemtools; private: @@ -27,6 +30,10 @@ private: Gaudi::Property<std::vector<std::string>> m_vis_macs{this, "VisMacs"}; Gaudi::Property<std::string> m_physics_lists_name{this, "PhysicsList", "QGSP_BERT"}; + + Gaudi::Property<std::vector<std::string>> m_ana_elems{this, "AnaElems"}; + + private: int i_event; }; diff --git a/Simulation/DetSimCore/src/EventAction.cpp b/Simulation/DetSimCore/src/EventAction.cpp index c0a9ab35..bbe00357 100644 --- a/Simulation/DetSimCore/src/EventAction.cpp +++ b/Simulation/DetSimCore/src/EventAction.cpp @@ -1,7 +1,8 @@ #include "EventAction.h" -EventAction::EventAction() - : G4UserEventAction() { +EventAction::EventAction(ToolHandleArray<IAnaElemTool>& anatools) + : G4UserEventAction(), + m_anaelemtools(anatools) { } diff --git a/Simulation/DetSimCore/src/EventAction.h b/Simulation/DetSimCore/src/EventAction.h index af2bc93a..8cd9fb99 100644 --- a/Simulation/DetSimCore/src/EventAction.h +++ b/Simulation/DetSimCore/src/EventAction.h @@ -1,6 +1,10 @@ #ifndef EventAction_h #define EventAction_h +#include <GaudiKernel/ToolHandle.h> + +#include <DetSimInterface/IAnaElemTool.h> + #include "G4UserEventAction.hh" class G4Event; @@ -8,12 +12,14 @@ class G4Event; class EventAction: public G4UserEventAction { public: - EventAction(); + EventAction(ToolHandleArray<IAnaElemTool>&); ~EventAction(); void BeginOfEventAction(const G4Event*) override; void EndOfEventAction(const G4Event*) override; +private: + ToolHandleArray<IAnaElemTool>& m_anaelemtools; }; #endif diff --git a/Simulation/DetSimCore/src/RunAction.cpp b/Simulation/DetSimCore/src/RunAction.cpp index b86ff14c..81699bdd 100644 --- a/Simulation/DetSimCore/src/RunAction.cpp +++ b/Simulation/DetSimCore/src/RunAction.cpp @@ -2,8 +2,9 @@ #include "G4Run.hh" -RunAction::RunAction() - : G4UserRunAction() { +RunAction::RunAction(ToolHandleArray<IAnaElemTool>& anatools) + : G4UserRunAction(), + m_anaelemtools(anatools) { } diff --git a/Simulation/DetSimCore/src/RunAction.h b/Simulation/DetSimCore/src/RunAction.h index 72b76012..ab98e546 100644 --- a/Simulation/DetSimCore/src/RunAction.h +++ b/Simulation/DetSimCore/src/RunAction.h @@ -1,6 +1,10 @@ #ifndef RunAction_h #define RunAction_h +#include <GaudiKernel/ToolHandle.h> + +#include <DetSimInterface/IAnaElemTool.h> + #include "G4UserRunAction.hh" class G4Run; @@ -9,11 +13,13 @@ class G4Run; class RunAction: public G4UserRunAction { public: - RunAction(); + RunAction(ToolHandleArray<IAnaElemTool>&); ~RunAction(); virtual void BeginOfRunAction(const G4Run*); virtual void EndOfRunAction(const G4Run*); +private: + ToolHandleArray<IAnaElemTool>& m_anaelemtools; }; diff --git a/Simulation/DetSimCore/src/SteppingAction.cpp b/Simulation/DetSimCore/src/SteppingAction.cpp index 3ad62235..30ef20f6 100644 --- a/Simulation/DetSimCore/src/SteppingAction.cpp +++ b/Simulation/DetSimCore/src/SteppingAction.cpp @@ -1,6 +1,7 @@ #include "SteppingAction.h" -SteppingAction::SteppingAction() { +SteppingAction::SteppingAction(ToolHandleArray<IAnaElemTool>& anatools) + : m_anaelemtools(anatools) { } diff --git a/Simulation/DetSimCore/src/SteppingAction.h b/Simulation/DetSimCore/src/SteppingAction.h index 9c181753..fd7e6ef7 100644 --- a/Simulation/DetSimCore/src/SteppingAction.h +++ b/Simulation/DetSimCore/src/SteppingAction.h @@ -1,6 +1,10 @@ #ifndef SteppingAction_h #define SteppingAction_h +#include <GaudiKernel/ToolHandle.h> + +#include <DetSimInterface/IAnaElemTool.h> + #include "G4UserSteppingAction.hh" class G4Step; @@ -8,11 +12,13 @@ class G4Step; class SteppingAction: public G4UserSteppingAction { public: - SteppingAction(); + SteppingAction(ToolHandleArray<IAnaElemTool>&); ~SteppingAction(); void UserSteppingAction(const G4Step*) override; +private: + ToolHandleArray<IAnaElemTool>& m_anaelemtools; }; #endif diff --git a/Simulation/DetSimCore/src/TrackingAction.cpp b/Simulation/DetSimCore/src/TrackingAction.cpp index 7672c7d6..89b6d1ee 100644 --- a/Simulation/DetSimCore/src/TrackingAction.cpp +++ b/Simulation/DetSimCore/src/TrackingAction.cpp @@ -1,7 +1,8 @@ #include "TrackingAction.h" -TrackingAction::TrackingAction() - : G4UserTrackingAction() { +TrackingAction::TrackingAction(ToolHandleArray<IAnaElemTool>& anatools) + : G4UserTrackingAction(), + m_anaelemtools(anatools) { } diff --git a/Simulation/DetSimCore/src/TrackingAction.h b/Simulation/DetSimCore/src/TrackingAction.h index 5b7ff885..49cd8dce 100644 --- a/Simulation/DetSimCore/src/TrackingAction.h +++ b/Simulation/DetSimCore/src/TrackingAction.h @@ -1,20 +1,25 @@ #ifndef TrackingAction_h #define TrackingAction_h +#include <GaudiKernel/ToolHandle.h> + +#include <DetSimInterface/IAnaElemTool.h> + #include "G4UserTrackingAction.hh" class TrackingAction: public G4UserTrackingAction { public: - TrackingAction(); + TrackingAction(ToolHandleArray<IAnaElemTool>&); ~TrackingAction(); void PreUserTrackingAction(const G4Track*); void PostUserTrackingAction(const G4Track*); - - +private: + ToolHandleArray<IAnaElemTool>& m_anaelemtools; + }; #endif diff --git a/Simulation/DetSimInterface/DetSimInterface/IAnaElemTool.h b/Simulation/DetSimInterface/DetSimInterface/IAnaElemTool.h new file mode 100644 index 00000000..9d7f7ab1 --- /dev/null +++ b/Simulation/DetSimInterface/DetSimInterface/IAnaElemTool.h @@ -0,0 +1,42 @@ +#ifndef IAnaElemTool_h +#define IAnaElemTool_h + +#include "GaudiKernel/IAlgTool.h" + +class G4Run; +class G4Event; +class G4Track; +class G4Step; + +#include "G4ClassificationOfNewTrack.hh" + +class IAnaElemTool : virtual public IAlgTool { +public: + DeclareInterfaceID(IAnaElemTool, 0, 1); + + virtual ~IAnaElemTool() {} + + // Run + virtual void BeginOfRunAction(const G4Run*) {} + virtual void EndOfRunAction(const G4Run*) {} + + // Event + virtual void BeginOfEventAction(const G4Event*) {} + virtual void EndOfEventAction(const G4Event*) {} + + // Stacking + virtual G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track*) {return fUrgent;} + virtual void NewStage() {} + virtual void PrepareNewEvent() {} + + // Tracking + virtual void PreUserTrackingAction(const G4Track*) {} + virtual void PostUserTrackingAction(const G4Track*) {} + + // Stepping + virtual void UserSteppingAction(const G4Step*) {} + +}; + + +#endif -- GitLab