From c2004a126d28cea08e10a8cdb27e1e59c3972366 Mon Sep 17 00:00:00 2001 From: lintao <lintao51@gmail.com> Date: Fri, 18 Sep 2020 16:13:26 +0800 Subject: [PATCH] WIP: enable the dedx simtool. --- Examples/options/tut_detsim_SDT.py | 4 ++++ Simulation/DetSimDedx/src/DummyDedxSimTool.cpp | 2 +- .../DetSimSD/src/DriftChamberSensDetTool.cpp | 14 +++++++++++++- Simulation/DetSimSD/src/DriftChamberSensDetTool.h | 5 +++++ .../DetSimSD/src/DriftChamberSensitiveDetector.cpp | 6 ++++++ .../DetSimSD/src/DriftChamberSensitiveDetector.h | 7 +++++++ 6 files changed, 36 insertions(+), 2 deletions(-) diff --git a/Examples/options/tut_detsim_SDT.py b/Examples/options/tut_detsim_SDT.py index 1b2adeb7..1fd7773b 100644 --- a/Examples/options/tut_detsim_SDT.py +++ b/Examples/options/tut_detsim_SDT.py @@ -126,6 +126,10 @@ from Configurables import DriftChamberSensDetTool calo_sensdettool = CalorimeterSensDetTool("CalorimeterSensDetTool") driftchamber_sensdettool = DriftChamberSensDetTool("DriftChamberSensDetTool") +driftchamber_sensdettool.DedxSimTool = "DummyDedxSimTool" + +from Configurables import DummyDedxSimTool +dedx_simtool = DummyDedxSimTool("DummyDedxSimTool") ############################################################################## # POD I/O diff --git a/Simulation/DetSimDedx/src/DummyDedxSimTool.cpp b/Simulation/DetSimDedx/src/DummyDedxSimTool.cpp index df1aa692..291b8c20 100644 --- a/Simulation/DetSimDedx/src/DummyDedxSimTool.cpp +++ b/Simulation/DetSimDedx/src/DummyDedxSimTool.cpp @@ -17,7 +17,7 @@ StatusCode DummyDedxSimTool::finalize() { } double DummyDedxSimTool::dedx(const G4Step* aStep) { - double result = 0.0; + double result = aStep->GetTotalEnergyDeposit(); return result; diff --git a/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp b/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp index 2220500c..bf053216 100644 --- a/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp +++ b/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp @@ -17,6 +17,12 @@ StatusCode DriftChamberSensDetTool::initialize() { return StatusCode::FAILURE; } + m_dedx_simtool = ToolHandle<IDedxSimTool>(m_dedx_sim_option.value()); + if (!m_dedx_simtool) { + error() << "Failed to find dedx simtoo." << endmsg; + return StatusCode::FAILURE; + } + return sc; } @@ -30,7 +36,13 @@ G4VSensitiveDetector* DriftChamberSensDetTool::createSD(const std::string& name) { dd4hep::Detector* dd4hep_geo = m_geosvc->lcdd(); - G4VSensitiveDetector* sd = new DriftChamberSensitiveDetector(name, *dd4hep_geo); + G4VSensitiveDetector* sd = nullptr; + + if (name == "DriftChamber") { + DriftChamberSensitiveDetector* dcsd = new DriftChamberSensitiveDetector(name, *dd4hep_geo); + dcsd->setDedxSimTool(m_dedx_simtool); + } + return sd; } diff --git a/Simulation/DetSimSD/src/DriftChamberSensDetTool.h b/Simulation/DetSimSD/src/DriftChamberSensDetTool.h index 83e75aa7..ae727ed0 100644 --- a/Simulation/DetSimSD/src/DriftChamberSensDetTool.h +++ b/Simulation/DetSimSD/src/DriftChamberSensDetTool.h @@ -10,9 +10,12 @@ */ #include "GaudiKernel/AlgTool.h" +#include "GaudiKernel/ToolHandle.h" #include "DetSimInterface/ISensDetTool.h" +#include "DetSimInterface/IDedxSimTool.h" #include "DetInterface/IGeoSvc.h" + class DriftChamberSensDetTool: public extends<AlgTool, ISensDetTool> { public: @@ -30,6 +33,8 @@ private: // in order to initialize SD, we need to get the lcdd() SmartIF<IGeoSvc> m_geosvc; + ToolHandle<IDedxSimTool> m_dedx_simtool; + Gaudi::Property<std::string> m_dedx_sim_option{this, "DedxSimTool"}; }; diff --git a/Simulation/DetSimSD/src/DriftChamberSensitiveDetector.cpp b/Simulation/DetSimSD/src/DriftChamberSensitiveDetector.cpp index 9f5ce3e0..1ba9f7bf 100644 --- a/Simulation/DetSimSD/src/DriftChamberSensitiveDetector.cpp +++ b/Simulation/DetSimSD/src/DriftChamberSensitiveDetector.cpp @@ -12,6 +12,12 @@ DriftChamberSensitiveDetector::DriftChamberSensitiveDetector(const std::string& collectionName.insert(coll_name); } +bool DriftChamberSensitiveDetector::setDedxSimTool(ToolHandle<IDedxSimTool> simtool) { + m_dedx_simtool = simtool; + + return true; +} + void DriftChamberSensitiveDetector::Initialize(G4HCofThisEvent* HCE) { diff --git a/Simulation/DetSimSD/src/DriftChamberSensitiveDetector.h b/Simulation/DetSimSD/src/DriftChamberSensitiveDetector.h index ebe455de..638e146b 100644 --- a/Simulation/DetSimSD/src/DriftChamberSensitiveDetector.h +++ b/Simulation/DetSimSD/src/DriftChamberSensitiveDetector.h @@ -8,6 +8,8 @@ */ #include "DetSimSD/DDG4SensitiveDetector.h" +#include "DetSimInterface/IDedxSimTool.h" +#include "GaudiKernel/ToolHandle.h" class DriftChamberSensitiveDetector: public DDG4SensitiveDetector { public: @@ -16,6 +18,8 @@ public: public: DriftChamberSensitiveDetector(const std::string& name, dd4hep::Detector& description); + + bool setDedxSimTool(ToolHandle<IDedxSimTool>); public: // Geant4 interface @@ -28,6 +32,9 @@ protected: HitCollection* m_hc; + // this is passed from SensDetTool + ToolHandle<IDedxSimTool> m_dedx_simtool; + }; #endif -- GitLab