From ca30332df0e60c7cd84fe479e1566be40efa4ad2 Mon Sep 17 00:00:00 2001
From: Marshall Scott <mbscott@anl.gov>
Date: Thu, 8 Apr 2021 21:04:47 -0400
Subject: [PATCH] stuff

---
 compact/ci_GEM.xml      | 19 +++++----
 compact/ci_HCAL.xml     | 64 ++++++++++------------------
 compact/definitions.xml |  1 +
 reference_detector.xml  | 13 +++++-
 src/ci_GEM.cpp          | 92 ++++++++++-------------------------------
 src/ci_HCAL.cpp         | 67 ++++++++++++------------------
 6 files changed, 93 insertions(+), 163 deletions(-)

diff --git a/compact/ci_GEM.xml b/compact/ci_GEM.xml
index 9fe3052..22c8bee 100644
--- a/compact/ci_GEM.xml
+++ b/compact/ci_GEM.xml
@@ -44,15 +44,16 @@
     </comment>
     <detector id="ci_GEM_id" name="ci_GEM" type="ci_GEM" insideTrackingVolume="false" vis="ci_GEMVis">
 	    <material name="Ar10CO2"/>  
-      <dimensions rmin="ci_GEM_rin" rmax="ci_GEM_rout" sizez="ci_GEM_sizez" delta="ci_GEM_shiftz"	z="ci_GEM_posz" x="ci_GEM_posx" nlayers="ci_GEM_nlayers"/>
-      <layer id="0" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
-      <layer id="1" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
-      <layer id="2" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
-      <layer id="3" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
-      <layer id="4" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
-      <layer id="5" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
-      <layer id="6" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
-      <layer id="7" z="-sizez * 0.5 + (5 + 3. * id) * cm" inner_r="rmin + (1. + 0.5 * id) * cm" outer_r="rmax + (-25. + 2. * id) * cm" dz="1 * cm" />
+      <dimensions rmin="ci_GEM_rin" rmax="ci_GEM_rout" z_length="ci_GEM_sizez" z_offset="ci_GEM_shiftz"	z="ci_GEM_posz" x="ci_GEM_posx" number="ci_GEM_nlayers"/>
+
+      <layer id="0" z="-ci_GEM_sizez * 0.5 + (5 + 3. * 0) * cm" inner_r="ci_GEM_rin + (1. + 0.5 * 0) * cm" outer_r="ci_GEM_rout + (-25. + 2. * 0) * cm" dz="1 * cm" />
+      <layer id="1" z="-ci_GEM_sizez * 0.5 + (5 + 3. * 1) * cm" inner_r="ci_GEM_rin + (1. + 0.5 * 1) * cm" outer_r="ci_GEM_rout + (-25. + 2. * 1) * cm" dz="1 * cm" />
+      <layer id="2" z="-ci_GEM_sizez * 0.5 + (5 + 3. * 2) * cm" inner_r="ci_GEM_rin + (1. + 0.5 * 2) * cm" outer_r="ci_GEM_rout + (-25. + 2. * 2) * cm" dz="1 * cm" />
+      <layer id="3" z="-ci_GEM_sizez * 0.5 + (5 + 3. * 3) * cm" inner_r="ci_GEM_rin + (1. + 0.5 * 3) * cm" outer_r="ci_GEM_rout + (-25. + 2. * 3) * cm" dz="1 * cm" />
+      <layer id="4" z="-ci_GEM_sizez * 0.5 + (5 + 3. * 4) * cm" inner_r="ci_GEM_rin + (1. + 0.5 * 4) * cm" outer_r="ci_GEM_rout + (-25. + 2. * 4) * cm" dz="1 * cm" />
+      <layer id="5" z="-ci_GEM_sizez * 0.5 + (5 + 3. * 5) * cm" inner_r="ci_GEM_rin + (1. + 0.5 * 5) * cm" outer_r="ci_GEM_rout + (-25. + 2. * 5) * cm" dz="1 * cm" />
+      <layer id="6" z="-ci_GEM_sizez * 0.5 + (5 + 3. * 6) * cm" inner_r="ci_GEM_rin + (1. + 0.5 * 6) * cm" outer_r="ci_GEM_rout + (-25. + 2. * 6) * cm" dz="1 * cm" />
+      <layer id="7" z="-ci_GEM_sizez * 0.5 + (5 + 3. * 7) * cm" inner_r="ci_GEM_rin + (1. + 0.5 * 7) * cm" outer_r="ci_GEM_rout + (-25. + 2. * 7) * cm" dz="1 * cm" />
     </detector>
   </detectors>
 
diff --git a/compact/ci_HCAL.xml b/compact/ci_HCAL.xml
index ba4c846..923be2c 100644
--- a/compact/ci_HCAL.xml
+++ b/compact/ci_HCAL.xml
@@ -14,30 +14,10 @@
   <includes>
   </includes>
 
-
-  <!-- These definitons are in the definitions.xml file
-  <define>
-    <constant name="ci_HCAL_id"      value="1"/>
-    <constant name="ci_HCAL_rin"     value="0 * cm"/>
-    <constant name="ci_HCAL_rout"    value="300 * cm"/>
-    <constant name="ci_HCAL_sizez"   value="160 * cm"/>
-    <constant name="ci_HCAL_shiftz"  value="5 * cm"/>
-    <constant name="ci_HCAL_posz"    value="0 * cm"/>
-   
-    <constant name="ci_HCAL_nlayers"       value="20"/>
-    <constant name="ci_HCAL_lay_rin"       value="80 * cm"/>
-    <constant name="ci_HCAL_lay_rout"      value="ci_HCAL_rout - 1 * cm"/>
-    <constant name="ci_HCAL_lay_thickness" value="2* cm"/>
-    <constant name="ci_HCAL_lay_gapz"      value="2* cm"/>
-  </define>
-  -->
-
-   <limits>
-   	<comment>Not defined within the ci_HCAL.hh file</comment>
+  <limits>
   </limits>
 
   <regions>
-  	<comment>Not defined within the ci_HCAL.hh file</comment>
   </regions>
 
   <display>
@@ -50,27 +30,27 @@
     </comment>
     <detector id="ci_HCAL_id" name="ci_HCAL" type="ci_HCAL" insideTrackingVolume="false" vis="ci_HCALVis">
 	    <material name="Iron"/>	    
-      <dimensions rmin="ci_HCAL_rin" rmax="ci_HCAL_rout" sizez="ci_HCAL_sizez" delta="ci_HCAL_shiftz"	z="ci_HCAL_posz" x="ci_HCAL_posx" nlayers="ci_HCAL_nlayers"/>
-      <layer id="0"  z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="1"  z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="2"  z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="3"  z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="4"  z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="5"  z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="6"  z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="7"  z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="8"  z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="9"  z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="10" z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="11" z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="12" z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="13" z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="14" z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="15" z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="16" z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="17" z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="18" z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
-      <layer id="19" z="-sizez * 0.5 + (1 + id) * ci_HCAL_lay_thickness + (1 + id) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <dimensions rmin="ci_HCAL_rin" rmax="ci_HCAL_rout" z_length="ci_HCAL_sizez" z_offset="ci_HCAL_shiftz"	z="ci_HCAL_posz" x="ci_HCAL_posx" number="ci_HCAL_nlayers" rmin1="ci_HCAL_lay_rin" rmax1="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness"/>
+      <layer id="0"  z="-ci_HCAL_sizez * 0.5 + (1 + 0) * ci_HCAL_lay_thickness + (1 + 0) * 5 * cm"   inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="1"  z="-ci_HCAL_sizez * 0.5 + (1 + 1) * ci_HCAL_lay_thickness + (1 + 1) * 5 * cm"   inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="2"  z="-ci_HCAL_sizez * 0.5 + (1 + 2) * ci_HCAL_lay_thickness + (1 + 2) * 5 * cm"   inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="3"  z="-ci_HCAL_sizez * 0.5 + (1 + 3) * ci_HCAL_lay_thickness + (1 + 3) * 5 * cm"   inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="4"  z="-ci_HCAL_sizez * 0.5 + (1 + 4) * ci_HCAL_lay_thickness + (1 + 4) * 5 * cm"   inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="5"  z="-ci_HCAL_sizez * 0.5 + (1 + 5) * ci_HCAL_lay_thickness + (1 + 5) * 5 * cm"   inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="6"  z="-ci_HCAL_sizez * 0.5 + (1 + 6) * ci_HCAL_lay_thickness + (1 + 6) * 5 * cm"   inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="7"  z="-ci_HCAL_sizez * 0.5 + (1 + 7) * ci_HCAL_lay_thickness + (1 + 7) * 5 * cm"   inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="8"  z="-ci_HCAL_sizez * 0.5 + (1 + 8) * ci_HCAL_lay_thickness + (1 + 8) * 5 * cm"   inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="9"  z="-ci_HCAL_sizez * 0.5 + (1 + 9) * ci_HCAL_lay_thickness + (1 + 9) * 5 * cm"   inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="10" z="-ci_HCAL_sizez * 0.5 + (1 + 10) * ci_HCAL_lay_thickness + (1 + 10) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="11" z="-ci_HCAL_sizez * 0.5 + (1 + 11) * ci_HCAL_lay_thickness + (1 + 11) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="12" z="-ci_HCAL_sizez * 0.5 + (1 + 12) * ci_HCAL_lay_thickness + (1 + 12) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="13" z="-ci_HCAL_sizez * 0.5 + (1 + 13) * ci_HCAL_lay_thickness + (1 + 13) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="14" z="-ci_HCAL_sizez * 0.5 + (1 + 14) * ci_HCAL_lay_thickness + (1 + 14) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="15" z="-ci_HCAL_sizez * 0.5 + (1 + 15) * ci_HCAL_lay_thickness + (1 + 15) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="16" z="-ci_HCAL_sizez * 0.5 + (1 + 16) * ci_HCAL_lay_thickness + (1 + 16) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="17" z="-ci_HCAL_sizez * 0.5 + (1 + 17) * ci_HCAL_lay_thickness + (1 + 17) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="18" z="-ci_HCAL_sizez * 0.5 + (1 + 18) * ci_HCAL_lay_thickness + (1 + 18) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
+      <layer id="19" z="-ci_HCAL_sizez * 0.5 + (1 + 19) * ci_HCAL_lay_thickness + (1 + 19) * 5 * cm" inner_r="ci_HCAL_lay_rin" outer_r="ci_HCAL_lay_rout" dz="ci_HCAL_lay_thickness" />
     </detector>
   </detectors>
 
diff --git a/compact/definitions.xml b/compact/definitions.xml
index 80fc85d..000fc59 100644
--- a/compact/definitions.xml
+++ b/compact/definitions.xml
@@ -612,6 +612,7 @@
     <constant name="ci_GEM_posz"    value="0 * cm"/>
     <constant name="ci_GEM_posx"    value="0 * cm"/>
     <constant name="ci_GEM_nlayers" value="8"/>
+    
 
 
 >>>>>>> 57cf00b (Changed .xml files and ci_GEM.cpp)
diff --git a/reference_detector.xml b/reference_detector.xml
index 8209141..929ef29 100644
--- a/reference_detector.xml
+++ b/reference_detector.xml
@@ -114,11 +114,13 @@
   <include ref="reference_detector/vertex_tracker.xml"/>
   <include ref="compact/silicon_tracker.xml"/>
   -->
+
   <include ref="ip6/beampipe.xml"/>
   <include ref="compact/solenoid.xml"/>
   <include ref="compact/ecal.xml"/>
   <include ref="compact/cb_CTD_Si.xml"/>
   <include ref="compact/ce_mrich.xml"/>
+<<<<<<< HEAD
   <include ref="compact/ce_GEM.xml"/>
   <include ref="compact/ffi_ZDC.xml"/>
 
@@ -127,13 +129,22 @@
   <include ref="compact/forward_rich.xml"/>
   <include ref="compact/hcal.xml"/>
 =======
+=======
+>>>>>>> 646cf72 (Finalized xml and cpp files for GEM and HCAL)
 	<include ref="compact/ci_HCAL.xml"/>
-   -->
+  <include ref="compact/ci_GEM.xml"/>
+  
   <!--
 >>>>>>> 0995649 (Just current)
   <include ref="compact/roman_pots.xml"/>
   -->
+
   <include ref="eic/forward_ion_beamline.xml"/>
+<<<<<<< HEAD
+=======
+  
+  
+>>>>>>> 646cf72 (Finalized xml and cpp files for GEM and HCAL)
 
   <detectors>
   </detectors>
diff --git a/src/ci_GEM.cpp b/src/ci_GEM.cpp
index 415721e..39f53b7 100644
--- a/src/ci_GEM.cpp
+++ b/src/ci_GEM.cpp
@@ -7,83 +7,35 @@ using namespace dd4hep;
 
 static Ref_t createDetector(Detector& desc, xml_h handle, SensitiveDetector sens)
 {
-	/*
+
   xml::DetElement detElem = handle;
   std::string     detName = detElem.nameStr();
   int             detID   = detElem.id();
-
-  xml::Component dims = detElem.dimensions();
-  double SizeZ  = dims.sizez();     // Size in Z direction
-  double ROut   = dims.rmax();  // Outer radius
-  double RIn    = dims.rmin();  // Inner radius
-  double ShiftZ = dims.delta();
-  double X      = dims.x();
-  double Z      = dims.z();
-  int Nlayers   = dims.nlayers();
-  Material mat  = desc.material(detElem.materialStr());
-  Material air  = desc.material("Air");
-  
-  Tube   ci_GEM_GVol_Solid(RIn, ROut, SizeZ / 2., 0., 360 * deg);
-  Volume detVol("ci_GEM_GVol_Logic", ci_GEM_GVol_Solid, air);
-  detVol.setVisAttributes(desc.visAttributes(detElem.visStr()));
-
-  DetElement   det(detName, detID);
-  Volume       motherVol = desc.pickMotherVolume(det);
-  Transform3D  tr(RotationZYX(0., 0., 0.), Position(0., 0., ShiftZ));
-  PlacedVolume detPV = motherVol.placeVolume(detVol, tr);
-  det.setPlacement(detPV);
-  
-  
-  //Adding layers to placed volume
-  for (cml_coll_t c(detElem, _U(layer)); c; c++)
-  {
-  	xml_comp_t x_layer = c;
-  	std::string layer_name = detName + _toString(c.id(), "_layer%d");
-  	Volume layer_vol(layer_name, Tube(c.rmin(), c.rmax(), c.z() ), mat );
-  	layer_vol.
-  	Position layer_pos(0, 0, 0);
-  	detPV.placeVolume(layer_vol, layer_pos);
-  }
-
-  det.setPlacement(detPV);
-
-  return det;
-  */
-  xml::DetElement detElem = handle;
-  std::string     detName = "ci_GEM";
-  int             detID   = 1;
-  xml_comp_t x_layer      = detElem.child(_U(layer));
-
-  xml::Component dims = detElem.dimensions();
-  double SizeZ  = 30. * dd4hep::cm;  // Size in Z direction
-  double ROut   = 95. * dd4hep::cm;  // Outer radius
-  double RIn    = 10. * dd4hep::cm;  // Inner radius
-  double ShiftZ = 0.  * dd4hep::cm;
-  double X      = 0.  * dd4hep::cm;
-  double Z      = 0.  * dd4hep::cm;
-  int Nlayers   = 8;
-  Material mat  = desc.material(detElem.materialStr());
-  Material air  = desc.material("Air");
-
-  
+  xml::Component dims     = detElem.dimensions();
+  double SizeZ            = dims.z_length();     // Size in Z direction
+  double ROut             = dims.rmax();         // Outer radius
+  double RIn              = dims.rmin();         // Inner radius
+  double ShiftZ           = dims.z_offset();     
+  double X                = dims.x();
+  double Z                = dims.z();
+  int Nlayers             = dims.number();
+  Material mat            = desc.material(detElem.materialStr());
+  Material vac            = desc.material("Vacuum");
+
+  //Outer Volume
   Tube         ci_GEM_GVol_Solid(RIn, ROut, SizeZ / 2., 0., 360 * deg);
-  Volume       detVol("ci_GEM_GVol_Logic", ci_GEM_GVol_Solid, air);
-  detVol.setVisAttributes(desc.visAttributes(detElem.visStr()));
+  Volume       detVol("ci_GEM_GVol_Logic", ci_GEM_GVol_Solid, vac);
   
   //Adding layers to placed volume
-  for (int lNum = 0; lNum < Nlayers; lNum++){
-  	std::string layer_name = detName + _toString(lNum, "_layer%d");
-  	double lrmin, lrmax, lz;
-  	lrmin = RIn + (1.0 + 0.5 * lNum) * dd4hep::cm;
-  	lrmax = ROut + (-25.0 + 2.0 * lNum) * dd4hep::cm;
-  	lz    = SizeZ * 0.5 + (5.0 + 3. * lNum) * dd4hep::cm; 
-  	Volume layer_vol(layer_name, Tube(lrmin, lrmax, 1.0 * dd4hep::cm), mat);
-  	Position layer_pos(0, 0, lz);
-  	//DetElement layer(x_layer, layer_name, detID);
-  	//layer_vol.setVisAttributes(desc.visAttributes(x_layer.visStr()));//no layer visable attributes
-  	//layer.setAttributes(desc, layer_vol, desc.region(), desc.limits(), );//(region, limits, visable).
+  for (xml_coll_t li(detElem,_U(layer)); li; ++li){
+  	xml_comp_t x_layer = li;
+  	std::string layer_name = detName + _toString(x_layer.id(), "_layer%d");
+
+  	Volume layer_vol(layer_name, Tube(x_layer.inner_r(), x_layer.outer_r(), x_layer.dz()), mat);
+  	layer_vol.setVisAttributes(desc.visAttributes(detElem.visStr()));
+  	Position layer_pos(0, 0, x_layer.z());
   	PlacedVolume layer_phv = detVol.placeVolume(layer_vol, layer_pos);
-  	layer_phv.addPhysVolID("layer", lNum);
+  	layer_phv.addPhysVolID("layer", x_layer.id());
   }
 
   DetElement   det(detName, detID);
diff --git a/src/ci_HCAL.cpp b/src/ci_HCAL.cpp
index 0efa0cc..bae5fd8 100644
--- a/src/ci_HCAL.cpp
+++ b/src/ci_HCAL.cpp
@@ -9,56 +9,41 @@ static Ref_t createDetector(Detector& desc, xml_h handle, SensitiveDetector sens
 {
 
   xml::DetElement detElem = handle;
-  std::string     detName = "ci_HCAL";
-  int             detID   = 1;
-
-  xml::Component dims = detElem.dimensions();
-  //Envelope volume specs
-  double RIn     = 0.   * dd4hep::cm;
-  double ROut    = 300. * dd4hep::cm;
-  double SizeZ   = 160. * dd4hep::cm;
-  double ShiftZ  = 5.   * dd4hep::cm;
-  double PosZ    = 0.   * dd4hep::cm;
-  double det_RIn = 80.  * dd4hep::cm;
-  Material mat_iron  = desc.material("Iron");
-  Material mat_air   = desc.material("Air");
-  Material mat_vac   = desc.material("Vacuum");
-  
-  
-  Tube         ci_Hcal_Solid(RIn, ROut, SizeZ / 2., 0., 360 * dd4hep::deg);
-  Volume       envelopeVol("ci_Hcal_Logic", ci_Hcal_Solid, mat_vac);//check that this one is iron
-
-  //Layer Specs
-  double det_ROut       = ROut - 1. * dd4hep::cm;
-  double det_ThicknessZ = 2.        * dd4hep::cm;
-  double det_GapZ       = 2.        * dd4hep::cm;
-  double Nlay           = 20;
-
-  //Iron tube
-  Tube         ci_Hcal_detSolid(det_RIn, det_ROut, det_ThicknessZ / 2., 0., 360 * deg);
-  //Volume       detVol("ci_Hcal_det_Logic", ci_Hcal_detSolid, mat_iron);//extraneous
-  //detVol.setVisAttributes(0.6, 0, 0.6, 1);
-
+  std::string     detName = detElem.nameStr();
+  int             detID   = detElem.id();
+  xml::Component  dims    = detElem.dimensions();
+  double RIn              = dims.rmin();
+  double ROut             = dims.rmax();
+  double SizeZ            = dims.z_length();
+  double ShiftZ           = dims.z_offset();
+  double PosZ             = dims.z();
+  double lay_RIn          = dims.rmin1();
+  double lay_ROut         = dims.rmax1();
+  double lay_dz           = dims.dz();
+  Material mat_iron       = desc.material("Iron");
+  Material mat_vac        = desc.material("Vacuum");
+
+  //Outer volume  
+  Tube    ci_Hcal_Solid(RIn, ROut, SizeZ / 2., 0., 360 * dd4hep::deg);
+  Volume  envelopeVol("ci_Hcal_Logic", ci_Hcal_Solid, mat_vac);
+
+  //Iron tube for the layers
+  Tube ci_Hcal_detSolid(lay_RIn, lay_ROut, lay_dz / 2., 0., 360 * dd4hep::deg);
 
   //Adding layers to placed detector volume
-  xml_comp_t x_layer = detElem.child(_U(layer));
-  for (int lNum = 0; lNum < Nlay; lNum++){
-  	std::string layer_name = detName + _toString(lNum, "_layer%d");
-  	double layer_Posz = -SizeZ / 2. + (lNum + 1) * det_ThicknessZ + (lNum + 1) * 5. * dd4hep::cm;
-  	
+  for (xml_coll_t li(detElem,_U(layer)); li; ++li){
+    xml_comp_t x_layer = li;
+  	std::string layer_name = detName + _toString(x_layer.id(), "_layer%d");
     Volume layer_vol(layer_name, ci_Hcal_detSolid, mat_iron);
     layer_vol.setVisAttributes(detElem.visStr());
-  	Position layer_pos(0, 0, layer_Posz);
-  	//DetElement layer(envelope_det, layer_name, detID);
-  	//layer.setVisAttributes(desc.visAttributes(det.visStr()));
-  	//layer.setAttributes(desc, layer_vol, desc.region(), desc.limits(), );//(region, limits, visable).
+  	Position layer_pos(0, 0, x_layer.z());
   	PlacedVolume layer_phv = envelopeVol.placeVolume(layer_vol, layer_pos);
-  	layer_phv.addPhysVolID("layer", lNum);
+  	layer_phv.addPhysVolID("layer", x_layer.id());
   }
   
   DetElement   det(detName, detID);
   Volume       motherVol = desc.pickMotherVolume(det);
-  Transform3D tr(RotationZYX(0,0,0), Position(0, 0, ShiftZ) );
+  Transform3D  tr(RotationZYX(0,0,0), Position(0, 0, ShiftZ));
   PlacedVolume detPV     = motherVol.placeVolume(envelopeVol, tr);
   det.setPlacement(detPV);
 
-- 
GitLab