From 6885e670f05fb2e84a2204172000c2cc84ddcb05 Mon Sep 17 00:00:00 2001
From: "lihn@ihep.ac.cn" <lihn@ihep.ac.cn>
Date: Tue, 15 Oct 2024 03:39:39 +0000
Subject: [PATCH] new 6 layers Muon Detector geometry

---
 .../CRD_common_v01/Muon_Barrel_v01_01.xml     | 22 +++++++++----------
 .../CRD_common_v01/Muon_Endcap_v01_02.xml     | 16 +++++++-------
 .../TDR_o1_v01/TDR_Dimensions_v01_01.xml      |  2 +-
 .../DetCRD/src/Muon/Muon_Barrel_v01_01.cpp    |  7 +++---
 Digitization/DigiMuon/src/MuonDigiAlg.cpp     | 20 ++++++++++++-----
 5 files changed, 39 insertions(+), 28 deletions(-)

diff --git a/Detector/DetCRD/compact/CRD_common_v01/Muon_Barrel_v01_01.xml b/Detector/DetCRD/compact/CRD_common_v01/Muon_Barrel_v01_01.xml
index a5dc0d51..2e29ac9c 100644
--- a/Detector/DetCRD/compact/CRD_common_v01/Muon_Barrel_v01_01.xml
+++ b/Detector/DetCRD/compact/CRD_common_v01/Muon_Barrel_v01_01.xml
@@ -12,15 +12,15 @@
 
   <define>
     <!--Muon Barrel-->
-    <constant name="Muon_barrel_superlayer_num" value="8"/>
-    <constant name="Muon_barrel_strip_num_0" value="17"/>
-    <constant name="Muon_barrel_strip_num_1" value="29"/>
-    <constant name="Muon_barrel_strip_num_2" value="41"/>
-    <constant name="Muon_barrel_strip_num_3" value="53"/>
-    <constant name="Muon_barrel_strip_num_4" value="65"/>
-    <constant name="Muon_barrel_strip_num_5" value="77"/>
-    <constant name="Muon_barrel_strip_num_6" value="89"/>
-    <constant name="Muon_barrel_strip_num_7" value="101"/>
+    <constant name="Muon_barrel_superlayer_num" value="6"/>
+    <constant name="Muon_barrel_strip_num_0" value="26"/>
+    <constant name="Muon_barrel_strip_num_1" value="38"/>
+    <constant name="Muon_barrel_strip_num_2" value="50"/>
+    <constant name="Muon_barrel_strip_num_3" value="62"/>
+    <constant name="Muon_barrel_strip_num_4" value="74"/>
+    <constant name="Muon_barrel_strip_num_5" value="86"/>
+    <!--constant name="Muon_barrel_strip_num_6" value="89"/>
+    <constant name="Muon_barrel_strip_num_7" value="101"/-->
     <constant name="Muon_barrel_strip_num_fixed_0" value="106"/>
     <constant name="Muon_barrel_strip_num_fixed_1" value="115"/>
 
@@ -32,7 +32,7 @@
     <constant name="Muon_barrel_barrel_y" value="Muon_barrel_iron_y"/>
     <constant name="Muon_barrel_barrel_posy" value="0.5*Muon_barrel_barrel_y"/>
 
-    <constant name="Muon_barrel_superlayer_init" value="-48*cm"/>
+    <constant name="Muon_barrel_superlayer_init" value="-35*cm"/>
     <constant name="Muon_barrel_superlayer_gap" value="14*cm"/>
     <constant name="Muon_barrel_superlayer_endcap_gap" value="10*cm"/>
     <constant name="Muon_barrel_superlayer_air_gap" value="1*cm"/>
@@ -42,7 +42,7 @@
     <!--constant name="Muon_barrel_superlayer_z" value="Muon_strip_z+2*Muon_strip_surf+2*Muon_barrel_superlayer_air_gap"/-->
 
     <!--Checkout-->
-    <constant name="Muon_barrel_inner_radius" value="4245*mm"/>
+    <!--constant name="Muon_barrel_inner_radius" value="4245*mm"/-->
     <constant name="Muon_barrel_barrel_num" value="2"/>
     <constant name="Muon_barrel_iron_part_num" value="12"/>
 
diff --git a/Detector/DetCRD/compact/CRD_common_v01/Muon_Endcap_v01_02.xml b/Detector/DetCRD/compact/CRD_common_v01/Muon_Endcap_v01_02.xml
index 9825031c..e5d09a40 100644
--- a/Detector/DetCRD/compact/CRD_common_v01/Muon_Endcap_v01_02.xml
+++ b/Detector/DetCRD/compact/CRD_common_v01/Muon_Endcap_v01_02.xml
@@ -15,14 +15,14 @@
     <constant name="Muon_endcap_part_num" value="4"/>
     <constant name="Muon_endcap_superlayer_num" value="6"/>
     <constant name="Muon_endcap_layer_num" value="2"/>
-    <constant name="Muon_endcap_strip_num_1" value="72"/>
-    <constant name="Muon_endcap_strip_num_2" value="128"/>
-    <constant name="Muon_endcap_strip_num_cut_1" value="17"/>
-    <constant name="Muon_endcap_strip_num_cut_2" value="74"/>
-    <constant name="Muon_endcap_endcap_rmin" value="68*cm"/>
-    <constant name="Muon_endcap_length_cut_1" value="288*cm"/>
-    <constant name="Muon_endcap_length_cut_gap" value="296*cm"/>
-    <constant name="Muon_endcap_length_cut_2" value="512*cm"/>
+    <constant name="Muon_endcap_strip_num_1" value="68"/>
+    <constant name="Muon_endcap_strip_num_2" value="125"/>
+    <constant name="Muon_endcap_strip_num_cut_1" value="15"/>
+    <constant name="Muon_endcap_strip_num_cut_2" value="70"/>
+    <constant name="Muon_endcap_endcap_rmin" value="60*cm"/>
+    <constant name="Muon_endcap_length_cut_1" value="272*cm"/>
+    <constant name="Muon_endcap_length_cut_gap" value="280*cm"/>
+    <constant name="Muon_endcap_length_cut_2" value="500*cm"/>
     <constant name="Muon_endcap_gap" value="5*cm"/>
 
     <constant name="Muon_endcap_iron_gap" value="14*cm"/>
diff --git a/Detector/DetCRD/compact/TDR_o1_v01/TDR_Dimensions_v01_01.xml b/Detector/DetCRD/compact/TDR_o1_v01/TDR_Dimensions_v01_01.xml
index 263b3642..82ea958e 100644
--- a/Detector/DetCRD/compact/TDR_o1_v01/TDR_Dimensions_v01_01.xml
+++ b/Detector/DetCRD/compact/TDR_o1_v01/TDR_Dimensions_v01_01.xml
@@ -260,7 +260,7 @@
     <constant name="Muon_strip_cut2_posz" value="0"/>
 
     <!--standard scale-->
-    <constant name="Muon_standard_scale" value="124*cm"/>    
+    <constant name="Muon_standard_scale" value="94*cm"/>    
     <!--constant name="Muon_total_length" value="8950*mm"/--><!--overlap with coil and hcal-->
     <constant name="Muon_total_length" value="Yoke_endcap_zmin*2"/>
 
diff --git a/Detector/DetCRD/src/Muon/Muon_Barrel_v01_01.cpp b/Detector/DetCRD/src/Muon/Muon_Barrel_v01_01.cpp
index 77204c11..ef3fbc19 100644
--- a/Detector/DetCRD/src/Muon/Muon_Barrel_v01_01.cpp
+++ b/Detector/DetCRD/src/Muon/Muon_Barrel_v01_01.cpp
@@ -56,12 +56,13 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
       xml_dim_t Fe_pos(x_Fe.child(_U(position)));
       xml_dim_t Fe_dim(x_Fe.child(_U(dimensions)));
 
-      double Fe_halfX1 =  (theDetector.constant<double>("Muon_barrel_inner_radius") + theDetector.constant<double>("Muon_barrel_iron_z")) / ( 2 + std::sqrt(3) ) - theDetector.constant<double>("Muon_barrel_iron_z");
+      //double Fe_halfX1 =  (theDetector.constant<double>("Muon_barrel_inner_radius") + theDetector.constant<double>("Muon_barrel_iron_z")) / ( 2 + std::sqrt(3) ) - theDetector.constant<double>("Muon_barrel_iron_z");
+      double Fe_halfX1 = 0.5 * theDetector.constant<double>("Muon_standard_scale");
       double Fe_halfX2 = Fe_halfX1 + theDetector.constant<double>("Muon_barrel_iron_z") * std::sqrt(3);
       //double Fe_halfX1 = 0.5 * 459.403*dd4hep::mm;
       //double Fe_halfX2 = 0.5 * 4754.889 * dd4hep::mm;
-      //double Fe_posZ = -1 * theDetector.constant<double>("Muon_barrel_iron_x1") * ( 2.5 + 1.5 * std::sqrt(3) );
-      double Fe_posZ = -1 * ( theDetector.constant<double>("Muon_barrel_inner_radius") + 0.5 * theDetector.constant<double>("Muon_barrel_iron_z") );
+      double Fe_posZ = -1 * theDetector.constant<double>("Muon_standard_scale") * ( 2.5 + 1.5 * std::sqrt(3) );
+      //double Fe_posZ = -1 * ( theDetector.constant<double>("Muon_barrel_inner_radius") + 0.5 * theDetector.constant<double>("Muon_barrel_iron_z") );
       dd4hep::Assembly env_vol(env_name);
       double env_rot = i0 * 360 * dd4hep::degree / x_env.id();
       dd4hep::Transform3D env_transform(dd4hep::Rotation3D(dd4hep::RotationY(env_rot)),dd4hep::Position(env_pos.x(), 0,env_pos.z()));
diff --git a/Digitization/DigiMuon/src/MuonDigiAlg.cpp b/Digitization/DigiMuon/src/MuonDigiAlg.cpp
index 17703c2f..800b0762 100644
--- a/Digitization/DigiMuon/src/MuonDigiAlg.cpp
+++ b/Digitization/DigiMuon/src/MuonDigiAlg.cpp
@@ -143,7 +143,9 @@ StatusCode MuonDigiAlg::execute()
   debug() << m_inputMuonBarrel.fullKey() << " has SimTrackerHit "<< STHCol->size() << endmsg;
   
 
-  int strip_length[8] = {17, 29, 41, 53, 65, 77, 89, 101};
+  // number of strips parallel to beam direction 
+  // in each slayer, each strip width=4cm, so 
+  int strip_length[6] = {26, 38, 50, 62, 74, 86};
 
   // define variables to be repeatedly used later
   unsigned long long cellid; 
@@ -167,7 +169,7 @@ StatusCode MuonDigiAlg::execute()
     debug() << "Position::   " << ddpos.x() << " " << ddpos.y() << " " << ddpos.z() << endmsg;
 
     // if not satisfy energy requirement, skip this hit
-    if ( Edep>0.01 || Edep<0.0001 ) continue;
+    //if ( Edep>0.01 || Edep<0.0001 ) continue;
     
     //calculate hit strip length
     double hit_strip_length = std::sqrt((ddpos.x()-pos[0]*0.1)*(ddpos.x()-pos[0]*0.1)+(ddpos.y()-pos[1]*0.1)*(ddpos.y()-pos[1]*0.1)+(ddpos.z()-pos[2]*0.1)*(ddpos.z()-pos[2]*0.1));
@@ -178,16 +180,24 @@ StatusCode MuonDigiAlg::execute()
       int tempnum = Env + slayer;
       if(tempnum%2 == 0)
       {
-        hit_sipm_length = 115 * 2 - hit_strip_length;
+        // 115 is the number of strips parpendicular 
+        // to the beam axis in long-half-barrel
+        hit_sipm_length = (115 * 4.0)/2 - hit_strip_length;
       }
       else
       {
-        hit_sipm_length = 106 * 2 - hit_strip_length;
+        // 106 is the number of strips parpendicular 
+        // to the beam axis in short-half-barrel
+        hit_sipm_length = (106 * 4.0)/2 - hit_strip_length;
       }
     } 
     if(layer == 2)
     {
-      hit_sipm_length = strip_length[slayer-1] * 2 - hit_strip_length;
+      // number of strips parallel to beam direction 
+      // in each slayer, each strip width=4cm, so 
+      // the number * 4 cm gives the length of strips 
+      // in each slayer parpendicular to the beam axis
+      hit_sipm_length = (strip_length[slayer-1] * 4)/2 - hit_strip_length;
     }
 
     // digitize to ADC 
-- 
GitLab