diff --git a/Simulation/DetSimCore/src/ActionInitialization.cpp b/Simulation/DetSimCore/src/ActionInitialization.cpp index 515f975bfb960d8d3a8d87cc1ae0eb2d9c74edf7..7238d15bb92153421fb59bbd29c79683308f3cf2 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 6ad9791d4c71d5aa839295ef2d24655771abd407..ef33b470ad134dfcc5bcdc989a9ebb9016770cd4 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 8bd06abb4c7d5d23c147134c9b00e6cf800e0f69..70dde30cd133d2a7c77493b64526f53da424c223 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 d9c2a2f6b98606b9c6b7b20f25cf5cd2342f4932..08ee2489f09b4920c4aa00ab5514afd45230f550 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 c0a9ab3593b8dfd440d96dad6b961701989c2057..bbe00357b030b267ad3356508f7dc67823136ae6 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 af2bc93a78b4740525ec5dcbc00597886b7ff2e0..8cd9fb998ada1f9d645795f40ebcf6aa11b5ab81 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 b86ff14c215dccc43aa69f63437412d482b05243..81699bddbfa6b6f4ad736f968e07010ffda8da02 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 72b7601280fa87143d5bab613c02152cd479b573..ab98e54629dd60a2a7b5f5de55c64c424af2908f 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 3ad62235e749a866809d1964f13558f23a286ae8..30ef20f65d7d90360da12856a12d694d2797a2b8 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 9c18175381f4184749f4f2255ee10a6a522f9388..fd7e6ef7ab619f65100a6fce7bbdf35a94d9083e 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 7672c7d6703461ccbf6bc99f408368a540bec817..89b6d1ee46ee03a962b6f67643e6661ca40cc54f 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 5b7ff885a74e6ce094c4a374e8492523ee63cf5b..49cd8dce1a09090a2776d09ed255276aea3c2ea6 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 0000000000000000000000000000000000000000..9d7f7ab17619af8d81dc57db2f021a21b603e941 --- /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