From aa93522d11c759f2de0fca5d96d2244b95e2e667 Mon Sep 17 00:00:00 2001
From: lintao <lintao51@gmail.com>
Date: Fri, 18 Sep 2020 14:02:01 +0800
Subject: [PATCH] WIP: use the DriftChamberSensDetTool to create the Sensitive
 Detector.

---
 Examples/options/tut_detsim_SDT.py                 |  5 +++++
 Simulation/DetSimGeom/src/AnExampleDetElemTool.cpp | 14 ++++++++++++++
 Simulation/DetSimGeom/src/AnExampleDetElemTool.h   |  1 +
 .../DetSimSD/src/DriftChamberSensDetTool.cpp       |  4 +++-
 4 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/Examples/options/tut_detsim_SDT.py b/Examples/options/tut_detsim_SDT.py
index 027d5813..1b2adeb7 100644
--- a/Examples/options/tut_detsim_SDT.py
+++ b/Examples/options/tut_detsim_SDT.py
@@ -121,6 +121,11 @@ detsimalg.RootDetElem = "WorldDetElemTool"
 from Configurables import AnExampleDetElemTool
 example_dettool = AnExampleDetElemTool("AnExampleDetElemTool")
 
+from Configurables import CalorimeterSensDetTool
+from Configurables import DriftChamberSensDetTool
+
+calo_sensdettool = CalorimeterSensDetTool("CalorimeterSensDetTool")
+driftchamber_sensdettool = DriftChamberSensDetTool("DriftChamberSensDetTool")
 
 ##############################################################################
 # POD I/O
diff --git a/Simulation/DetSimGeom/src/AnExampleDetElemTool.cpp b/Simulation/DetSimGeom/src/AnExampleDetElemTool.cpp
index 87ad61b3..0212a0e3 100644
--- a/Simulation/DetSimGeom/src/AnExampleDetElemTool.cpp
+++ b/Simulation/DetSimGeom/src/AnExampleDetElemTool.cpp
@@ -110,6 +110,17 @@ AnExampleDetElemTool::ConstructSDandField() {
                 }
             } else if (typ=="tracker") {
 
+                // if drift chamber
+                if (nam == "DriftChamber") {
+                    m_driftchamber_sdtool = ToolHandle<ISensDetTool>("DriftChamberSensDetTool");
+                    if (m_driftchamber_sdtool) {
+                        info() << "Find the DriftChamberSensDetTool" << endmsg;
+                        g4sd = m_calo_sdtool->createSD(nam);
+                    } else {
+                        warning() << "DriftChamberSensDetTool is not found. " << endmsg;
+                    }
+                }
+
             }
         }
         
@@ -186,6 +197,9 @@ AnExampleDetElemTool::initialize() {
         return StatusCode::FAILURE;
     }
 
+    m_calo_sdtool = ToolHandle<ISensDetTool>("CalorimeterSensDetTool");
+    m_driftchamber_sdtool = ToolHandle<ISensDetTool>("DriftChamberSensDetTool");
+
     return sc;
 }
 
diff --git a/Simulation/DetSimGeom/src/AnExampleDetElemTool.h b/Simulation/DetSimGeom/src/AnExampleDetElemTool.h
index b0b22861..ba199071 100644
--- a/Simulation/DetSimGeom/src/AnExampleDetElemTool.h
+++ b/Simulation/DetSimGeom/src/AnExampleDetElemTool.h
@@ -33,6 +33,7 @@ private:
 
     SmartIF<IGeoSvc> m_geosvc;
     ToolHandle<ISensDetTool> m_calo_sdtool;
+    ToolHandle<ISensDetTool> m_driftchamber_sdtool;
 };
 
 #endif
diff --git a/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp b/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp
index e3c2e98a..2220500c 100644
--- a/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp
+++ b/Simulation/DetSimSD/src/DriftChamberSensDetTool.cpp
@@ -4,6 +4,8 @@
 
 #include "DD4hep/Detector.h"
 
+#include "DriftChamberSensitiveDetector.h"
+
 DECLARE_COMPONENT(DriftChamberSensDetTool);
 
 StatusCode DriftChamberSensDetTool::initialize() {
@@ -28,7 +30,7 @@ G4VSensitiveDetector*
 DriftChamberSensDetTool::createSD(const std::string& name) {
     dd4hep::Detector* dd4hep_geo = m_geosvc->lcdd();
 
-    G4VSensitiveDetector* sd = nullptr;
+    G4VSensitiveDetector* sd = new DriftChamberSensitiveDetector(name, *dd4hep_geo);
 
     return sd;
 }
-- 
GitLab