From 2d3a664c9e47106d56d127f5708a066ec17a7b1f Mon Sep 17 00:00:00 2001
From: lintao <lintao51@gmail.com>
Date: Mon, 7 Sep 2020 13:04:12 +0800
Subject: [PATCH] WIP: construct both the inner and outer chambers.

---
 Detector/DetDriftChamber/compact/det.xml      | 16 ++++++
 .../src/driftchamber/DriftChamber.cpp         | 56 +++++++++++++++++--
 2 files changed, 67 insertions(+), 5 deletions(-)

diff --git a/Detector/DetDriftChamber/compact/det.xml b/Detector/DetDriftChamber/compact/det.xml
index 11474f9d..00500afe 100644
--- a/Detector/DetDriftChamber/compact/det.xml
+++ b/Detector/DetDriftChamber/compact/det.xml
@@ -20,6 +20,22 @@
     <constant name="world_x" value="world_size"/>
     <constant name="world_y" value="world_size"/>
     <constant name="world_z" value="world_size"/>
+
+    <!-- SDT -->
+    <constant name="SDT_radius_min" value="235*mm"/>
+    <constant name="SDT_radius_max" value="1716*mm"/>
+    <constant name="SDT_half_length" value="2225*mm"/>
+    <constant name="SDT_length" value="SDT_half_length*2"/>
+
+    <constant name="SDT_inner_chamber_radius_min" value="SDT_radius_min"/>
+    <constant name="SDT_inner_chamber_radius_max" value="909*mm"/>
+    <constant name="SDT_inner_chamber_length" value="SDT_length"/>
+
+    <constant name="SDT_outer_chamber_radius_min" value="1085*mm"/>
+    <constant name="SDT_outer_chamber_radius_max" value="SDT_radius_max"/>
+    <constant name="SDT_outer_chamber_length" value="SDT_length"/>
+    
+
   </define>
 
   <display>
diff --git a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
index 2f75d470..24aa4900 100644
--- a/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
+++ b/Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
@@ -18,30 +18,76 @@
 static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
                                      xml_h e,
                                      dd4hep::SensitiveDetector sens) {
+    // =======================================================================
+    // Parameter Definition
+    // =======================================================================
+
     xml_det_t x_det = e;
 
     std::string det_name = x_det.nameStr();
     std::string det_type = x_det.typeStr();
 
+    // - global 
+    double chamber_radius_min = theDetector.constant<double>("SDT_radius_min");
+    double chamber_radius_max = theDetector.constant<double>("SDT_radius_max");
+    double chamber_length     = theDetector.constant<double>("SDT_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");
+
+    // - 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");
+
+    // =======================================================================
+    // Detector Construction
+    // =======================================================================
+
     dd4hep::DetElement sdet(det_name, x_det.id());
 
     dd4hep::Volume motherVol = theDetector.pickMotherVolume(sdet);
 
     dd4hep::Material det_mat(theDetector.material("Air"));
     
-    dd4hep::Tube det_solid(23.5, 171.6, 222.5);
+    // - global 
+    dd4hep::Tube det_solid(chamber_radius_min, chamber_radius_max, chamber_length*0.5);
     dd4hep::Volume det_vol(det_name+"_vol", det_solid, det_mat);
 
-    dd4hep::Transform3D transform(dd4hep::Rotation3D(),
-                                  dd4hep::Position(0,0,0));
-    dd4hep::PlacedVolume phv = motherVol.placeVolume(det_vol,transform);
-
     if ( x_det.isSensitive() )   {
         dd4hep::SensitiveDetector sd = sens;
         det_vol.setSensitiveDetector(sens);
         sd.setType("tracker");
     }
 
+    // - inner
+    dd4hep::Tube det_inner_chamber_solid(inner_chamber_radius_min, inner_chamber_radius_max, inner_chamber_length*0.5);
+    dd4hep::Volume det_inner_chamber_vol(det_name+"_inner_chamber_vol", det_inner_chamber_solid, det_mat);
+
+    dd4hep::Transform3D transform_inner_chamber(dd4hep::Rotation3D(),
+                                                dd4hep::Position(0,0,0));
+    dd4hep::PlacedVolume det_inner_chamber_phy = det_vol.placeVolume(det_inner_chamber_vol,
+                                                                     transform_inner_chamber);
+
+    // - outer
+    dd4hep::Tube det_outer_chamber_solid(outer_chamber_radius_min, outer_chamber_radius_max, outer_chamber_length*0.5);
+    dd4hep::Volume det_outer_chamber_vol(det_name+"_outer_chamber_vol", det_outer_chamber_solid, det_mat);
+
+    dd4hep::Transform3D transform_outer_chamber(dd4hep::Rotation3D(),
+                                                dd4hep::Position(0,0,0));
+    dd4hep::PlacedVolume det_outer_chamber_phy = det_vol.placeVolume(det_outer_chamber_vol,
+                                                                     transform_outer_chamber);
+
+
+
+    // - place in world
+    dd4hep::Transform3D transform(dd4hep::Rotation3D(),
+                                  dd4hep::Position(0,0,0));
+    dd4hep::PlacedVolume phv = motherVol.placeVolume(det_vol,transform);
+
+
     if ( x_det.hasAttr(_U(id)) )  {
         phv.addPhysVolID("system",x_det.id());
     }
-- 
GitLab