From 96e1d0da562a884298d4aa03706c3cba970e588c Mon Sep 17 00:00:00 2001
From: Chengdong Fu <fucd@ihep.ac.cn>
Date: Sun, 22 May 2022 21:01:26 +0800
Subject: [PATCH] add apply BirksLaw for scintillator

---
 .../CRD_common_v01/Ecal_Rotated_Crystal_v01_01.xml        | 1 +
 .../src/Calorimeter/RotatedCrystalCalorimeter_v01_geo.cpp | 8 ++++++--
 Simulation/DetSimGeom/src/AnExampleDetElemTool.cpp        | 2 +-
 .../DetSimSD/include/DetSimSD/CaloSensitiveDetector.h     | 1 +
 4 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/Detector/DetCRD/compact/CRD_common_v01/Ecal_Rotated_Crystal_v01_01.xml b/Detector/DetCRD/compact/CRD_common_v01/Ecal_Rotated_Crystal_v01_01.xml
index eef2ba3c..1301bd43 100644
--- a/Detector/DetCRD/compact/CRD_common_v01/Ecal_Rotated_Crystal_v01_01.xml
+++ b/Detector/DetCRD/compact/CRD_common_v01/Ecal_Rotated_Crystal_v01_01.xml
@@ -22,6 +22,7 @@
           <shape type="Tube" rmin="Ecal_barrel_inner_radius" rmax="Ecal_barrel_outer_radius_redef" dz="Ecal_barrel_half_length" material="Air"/>
 	<!--/shape-->
       </envelope>
+      <sensitive type="scintillator"/>
       <dimensions rmin="Ecal_barrel_inner_radius" rmax="Ecal_barrel_outer_radius_redef" zhalf="Ecal_barrel_half_length_correct" alpha="Ecal_crystal_rotate_angle" nphi="1368" nz="numberZ" gap="0"/>
       <crystal material="G4_BGO" vis="ECALVis"/>
     </detector>
diff --git a/Detector/DetCRD/src/Calorimeter/RotatedCrystalCalorimeter_v01_geo.cpp b/Detector/DetCRD/src/Calorimeter/RotatedCrystalCalorimeter_v01_geo.cpp
index ec6e9fa5..9de1e8a0 100644
--- a/Detector/DetCRD/src/Calorimeter/RotatedCrystalCalorimeter_v01_geo.cpp
+++ b/Detector/DetCRD/src/Calorimeter/RotatedCrystalCalorimeter_v01_geo.cpp
@@ -97,9 +97,13 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
   Volume crystalVol("crystal_whole", crystalTrap, crystalMat);
   crystalVol.setVisAttributes(description, crystalVis);
 
-  sens.setType("calorimeter");
+  if ( x_det.isSensitive() )   {
+    xml_dim_t sd_typ = x_det.child(_U(sensitive));
+    sens.setType(sd_typ.typeStr());
+    crystalVol.setSensitiveDetector(sens);
+  }
   // TODO: crystal pack
-  crystalVol.setSensitiveDetector(sens);
+
   for (xml_coll_t xp(x_crystal, _U(slice)); xp; ++xp){
     //
     xml_comp_t x_slice = xp;
diff --git a/Simulation/DetSimGeom/src/AnExampleDetElemTool.cpp b/Simulation/DetSimGeom/src/AnExampleDetElemTool.cpp
index ff20af31..e7ea4394 100644
--- a/Simulation/DetSimGeom/src/AnExampleDetElemTool.cpp
+++ b/Simulation/DetSimGeom/src/AnExampleDetElemTool.cpp
@@ -101,7 +101,7 @@ AnExampleDetElemTool::ConstructSDandField() {
 
         // try to use SD tool to find the SD
         if (!g4sd) {
-            if (typ=="calorimeter") {
+            if (typ=="calorimeter" || typ=="scintillator") {
                 m_calo_sdtool = ToolHandle<ISensDetTool>("CalorimeterSensDetTool");
                 if (m_calo_sdtool) {
                     info() << "Find the CalorimeterSensDetTool." << endmsg;
diff --git a/Simulation/DetSimSD/include/DetSimSD/CaloSensitiveDetector.h b/Simulation/DetSimSD/include/DetSimSD/CaloSensitiveDetector.h
index db161be4..ca7d15de 100644
--- a/Simulation/DetSimSD/include/DetSimSD/CaloSensitiveDetector.h
+++ b/Simulation/DetSimSD/include/DetSimSD/CaloSensitiveDetector.h
@@ -32,6 +32,7 @@ protected:
     HitCollection* m_hc;
     std::map<unsigned long, CalorimeterHit*> m_hitMap;
     bool                                     m_isMergeEnabled;
+    bool                                     m_applyBirksLaw = false;
 };
 
 
-- 
GitLab