From 86db28b51f7117394179b10a65c9beed6a333312 Mon Sep 17 00:00:00 2001
From: myliu <201916234@mail.sdu.edu.cn>
Date: Mon, 29 Mar 2021 11:48:37 +0800
Subject: [PATCH] length is changed to half_length

---
 .../CRD_common_v01/DC_Simple_v01_01.xml       |  7 ++--
 Detector/DetDriftChamber/compact/det.xml      |  8 +++--
 .../src/driftchamber/DriftChamber.cpp         | 33 +++++++++++--------
 3 files changed, 29 insertions(+), 19 deletions(-)

diff --git a/Detector/DetCRD/compact/CRD_common_v01/DC_Simple_v01_01.xml b/Detector/DetCRD/compact/CRD_common_v01/DC_Simple_v01_01.xml
index 23e1fe96..2c5a3e5b 100644
--- a/Detector/DetCRD/compact/CRD_common_v01/DC_Simple_v01_01.xml
+++ b/Detector/DetCRD/compact/CRD_common_v01/DC_Simple_v01_01.xml
@@ -20,11 +20,11 @@
 
     <constant name="SDT_inner_chamber_radius_min" value="DC_inner_chamber_layer_rbegin-DC_safe_distance"/>
     <constant name="SDT_inner_chamber_radius_max" value="InnerTracker_outer_radius"/>
-    <constant name="SDT_inner_chamber_length" value="DC_length"/>
+    <constant name="SDT_inner_chamber_half_length" value="DC_half_length"/>
 
     <constant name="SDT_outer_chamber_radius_min" value="OuterTracker_inner_radius"/>
     <constant name="SDT_outer_chamber_radius_max" value="DC_outer_chamber_radius_max"/>
-    <constant name="SDT_outer_chamber_length" value="DC_length"/>
+    <constant name="SDT_outer_chamber_half_length" value="DC_half_length"/>
 
     <constant name="SDT_inner_chamber_layer_number" value="67"/>
     <constant name="SDT_outer_chamber_layer_number" value="63"/>
@@ -94,7 +94,8 @@
     <readout name="DriftChamberHitsCollection">
       <segmentation type="GridDriftChamber" cell_size="10*mm" epsilon0="Epsilon" detector_length="DC_length" identifier_phi="cellID" DC_inner_rbegin="DC_inner_chamber_layer_rbegin" DC_inner_rend="DC_inner_chamber_layer_rend" DC_outer_rbegin="DC_outer_chamber_layer_rbegin" DC_outer_rend="DC_outer_chamber_layer_rend" DC_inner_rmin="SDT_inner_chamber_radius_min" DC_inner_rmax="SDT_inner_chamber_radius_max" DC_outer_rmin="SDT_outer_chamber_radius_min" DC_outer_rmax="SDT_outer_chamber_radius_max" DC_inner_layer_number="SDT_inner_chamber_layer_number" DC_outer_layer_number="SDT_outer_chamber_layer_number" safe_distance="DC_safe_distance" layerID="layer" layer_width="SDT_chamber_layer_width"/>
 
-      <id>system:8,chamber:1,layer:8,cellID:16</id>
+      <!--<id>system:8,chamber:1,layer:8,cellID:16</id> -->
+      <id>system:5,side:-2,layer:9,chamber:8,sensor:8,cellID:16</id>
     </readout>
   </readouts>
 
diff --git a/Detector/DetDriftChamber/compact/det.xml b/Detector/DetDriftChamber/compact/det.xml
index 3b098e64..abe3bd76 100644
--- a/Detector/DetDriftChamber/compact/det.xml
+++ b/Detector/DetDriftChamber/compact/det.xml
@@ -32,6 +32,7 @@
     <constant name="DC_Endcap_dz" value="0.1*mm"/>
 
     <constant name="SDT_half_length" value="2225*mm+DC_Endcap_dz"/>
+    <constant name="DC_half_length" value="2225*mm"/>
     <constant name="SDT_length" value="SDT_half_length*2"/>
     <constant name="DC_length" value="SDT_length-DC_Endcap_dz*2"/>
 
@@ -51,11 +52,11 @@
 
     <constant name="SDT_inner_chamber_radius_min" value="DC_inner_chamber_layer_rbegin-DC_safe_distance"/>
     <constant name="SDT_inner_chamber_radius_max" value="DC_inner_chamber_radius_max"/>
-    <constant name="SDT_inner_chamber_length" value="DC_length"/>
+    <constant name="SDT_inner_chamber_half_length" value="DC_half_length"/>
 
     <constant name="SDT_outer_chamber_radius_min" value="DC_outer_chamber_layer_rbegin-DC_safe_distance"/>
     <constant name="SDT_outer_chamber_radius_max" value="DC_outer_chamber_radius_max"/>
-    <constant name="SDT_outer_chamber_length" value="DC_length"/>
+    <constant name="SDT_outer_chamber_half_length" value="DC_half_length"/>
 
     <constant name="SDT_inner_chamber_layer_number" value="67"/>
     <constant name="SDT_outer_chamber_layer_number" value="63"/>
@@ -131,7 +132,8 @@
     <readout name="DriftChamberHitsCollection">
       <segmentation type="GridDriftChamber" cell_size="10*mm" epsilon0="Epsilon" detector_length="DC_length" identifier_phi="cellID" DC_inner_rbegin="DC_inner_chamber_layer_rbegin" DC_inner_rend="DC_inner_chamber_layer_rend" DC_outer_rbegin="DC_outer_chamber_layer_rbegin" DC_outer_rend="DC_outer_chamber_layer_rend" DC_inner_rmin="SDT_inner_chamber_radius_min" DC_inner_rmax="SDT_inner_chamber_radius_max" DC_outer_rmin="SDT_outer_chamber_radius_min" DC_outer_rmax="SDT_outer_chamber_radius_max" DC_inner_layer_number="SDT_inner_chamber_layer_number" DC_outer_layer_number="SDT_outer_chamber_layer_number" safe_distance="DC_safe_distance" layerID="layer" layer_width="SDT_chamber_layer_width"/>
 
-      <id>system:8,chamber:1,layer:8,cellID:16</id>
+      <!-- <id>system:8,chamber:1,layer:8,cellID:16</id> -->
+      <id>system:5,side:-2,layer:9,chamber:8,sensor:8,cellID:16</id>
     </readout>
   </readouts>
 
diff --git a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
index 9ca01521..0d7170c4 100644
--- a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
+++ b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
@@ -41,17 +41,17 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
     dd4hep::SensitiveDetector sd = sens;
 
     // - global
-    double chamber_length     = theDetector.constant<double>("DC_length");
+    double chamber_half_length     = theDetector.constant<double>("DC_half_length");
 
     // - inner chamber
     double inner_chamber_radius_min = theDetector.constant<double>("SDT_inner_chamber_radius_min");
     double inner_chamber_radius_max = theDetector.constant<double>("SDT_inner_chamber_radius_max");
-    double inner_chamber_length     = theDetector.constant<double>("SDT_inner_chamber_length");
+    double inner_chamber_half_length     = theDetector.constant<double>("SDT_inner_chamber_half_length");
 
     // - outer chamber
     double outer_chamber_radius_min = theDetector.constant<double>("SDT_outer_chamber_radius_min");
     double outer_chamber_radius_max = theDetector.constant<double>("SDT_outer_chamber_radius_max");
-    double outer_chamber_length     = theDetector.constant<double>("SDT_outer_chamber_length");
+    double outer_chamber_half_length     = theDetector.constant<double>("SDT_outer_chamber_half_length");
 
     // - layer
     int inner_chamber_layer_number = theDetector.constant<int>("SDT_inner_chamber_layer_number");
@@ -89,7 +89,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
     Assembly det_vol( det_name+"_assembly" ) ;
 
     // - inner
-    dd4hep::Tube det_inner_chamber_solid(inner_chamber_radius_min, inner_chamber_radius_max, inner_chamber_length*0.5);
+    dd4hep::Tube det_inner_chamber_solid(inner_chamber_radius_min, inner_chamber_radius_max, inner_chamber_half_length);
     dd4hep::Volume det_inner_chamber_vol(det_name+"_inner_chamber_vol", det_inner_chamber_solid, chamber_mat);
     if ( x_det.isSensitive() )   {
        det_inner_chamber_vol.setRegion(theDetector,x_det.regionStr());
@@ -99,10 +99,11 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
     }
 
      // - outer
-     dd4hep::Tube det_outer_chamber_solid(outer_chamber_radius_min, outer_chamber_radius_max, outer_chamber_length*0.5);
+     dd4hep::Tube det_outer_chamber_solid(outer_chamber_radius_min, outer_chamber_radius_max, outer_chamber_half_length);
      dd4hep::Volume det_outer_chamber_vol(det_name+"_outer_chamber_vol", det_outer_chamber_solid, chamber_mat);
      if ( x_det.isSensitive() )   {
         det_outer_chamber_vol.setRegion(theDetector,x_det.regionStr());
+        det_outer_chamber_vol.setLimitSet(theDetector,x_det.limitsStr());
         det_outer_chamber_vol.setSensitiveDetector(sens);
         sd.setType("tracker");
      }
@@ -130,7 +131,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
       double  module_rmin = x_module.rmin();
       double  module_rmax = x_module.rmax();
       std::string module_name = x_module.nameStr();
-      dd4hep::Tube module_solid(module_rmin,module_rmax,chamber_length*0.5);
+      dd4hep::Tube module_solid(module_rmin,module_rmax,chamber_half_length);
       if(x_module.id()==0) {
          module_vol = dd4hep::Volume(module_name,module_solid,det_mat);
          module_vol.setVisAttributes(theDetector.visAttributes(x_module.visStr()));
@@ -146,7 +147,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
          std::string tube_name = x_tube.nameStr();
          std::string wire_name= module_name + tube_name;
          dd4hep::Material tube_mat = theDetector.material(x_tube.materialStr());
-         dd4hep::Tube wire_solid(tube_rmin,tube_rmax,chamber_length*0.5);
+         dd4hep::Tube wire_solid(tube_rmin,tube_rmax,chamber_half_length);
          dd4hep::Volume wire_vol(wire_name,wire_solid,tube_mat);
          dd4hep::Transform3D transform_wire(dd4hep::Rotation3D(),dd4hep::Position(0.,0.,0.));
          dd4hep::PlacedVolume wire_phy;
@@ -174,6 +175,8 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
     auto DCHseg = dynamic_cast<dd4hep::DDSegmentation::GridDriftChamber*>(_geoSeg->segmentation());
 
     // - layer
+    int chamber_id = -1;
+    int layerIndex = -1;
     for(int layer_id = 0; layer_id < (inner_chamber_layer_number+outer_chamber_layer_number); layer_id++) {
         double rmin,rmax,offset=0;
         dd4hep::Volume* current_vol_ptr = nullptr;
@@ -181,10 +184,14 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
            current_vol_ptr = &det_inner_chamber_vol;
            rmin = inner_chamber_layer_rbegin+(layer_id*chamber_layer_width);
            rmax = rmin+chamber_layer_width;
+           chamber_id = 0;
+           layerIndex = layer_id;
         } else if(outer_chamber_enabled && (layer_id >= inner_chamber_layer_number)) {
            current_vol_ptr = &det_outer_chamber_vol;
            rmin = outer_chamber_layer_rbegin+((layer_id-inner_chamber_layer_number)*chamber_layer_width);
            rmax = rmin+chamber_layer_width;
+           chamber_id = 1;
+           layerIndex = layer_id - inner_chamber_layer_number;
         } else continue;
 
         //Construction of drift chamber layers
@@ -198,8 +205,8 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
         if(layer_id %2 ==0){ offset = 0.; }
         else { offset = 0.5 * layer_Phi; }
 
-        DCHseg->setGeomParams(layer_id, layer_Phi, rmid, epsilon, offset);
-        DCHseg->setWiresInLayer(layer_id, numWire);
+        DCHseg->setGeomParams(chamber_id, layerIndex, layer_Phi, rmid, epsilon, offset);
+        DCHseg->setWiresInLayer(chamber_id, layerIndex, numWire);
 
         // - wire vol
         //phi <-------------------> -phi
@@ -209,7 +216,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
         //    |                     |
         //    |   F0    F1   F2   F3|
         //    -----------------------
-//     if(layer_id == -1) {
+     if(layer_id == -1) {
         for(int icell=0; icell< numWire; icell++) {
             double wire_phi = (icell+0.5)*layer_Phi + offset;
             // - signal wire
@@ -230,7 +237,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
         }
   }
 
-//  }
+  }
 
     // - place in det
     // inner
@@ -258,14 +265,14 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
     // - place wall
     dd4hep::PlacedVolume wall_phy;
     for(int i=0; i<4; i++) {
-       dd4hep::Tube wall_solid(wall_rmin[i],wall_rmax[i],chamber_length*0.5);
+       dd4hep::Tube wall_solid(wall_rmin[i],wall_rmax[i],chamber_half_length);
        dd4hep::Volume wall_vol(det_name+"_wall_vol",wall_solid,wall_mat);
        wall_vol.setVisAttributes(theDetector,"VisibleGreen");
        wall_phy = envelope.placeVolume(wall_vol,transform);
     }
 
     // - place Endcap
-    double endcap_pos[2] = {chamber_length*0.5+Endcap_z*0.5,-chamber_length*0.5-Endcap_z*0.5};
+    double endcap_pos[2] = {chamber_half_length+Endcap_z*0.5,-chamber_half_length-Endcap_z*0.5};
     dd4hep::PlacedVolume endcap_phy;
     for(int i=0; i<2; i++) {
         dd4hep::Transform3D Endcap_transform(dd4hep::Rotation3D(),dd4hep::Position(0,0,endcap_pos[i]));
-- 
GitLab