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