From ce5758ec83fd9bebe5ce6044b217090fc567d628 Mon Sep 17 00:00:00 2001
From: Whitney Armstrong <warmstrong@anl.gov>
Date: Tue, 20 Apr 2021 00:08:25 -0500
Subject: [PATCH] Added detailed GEM layering

 - Added gem layer structure
 - Added support module and ability to change the module component TRD
 parameters from the default envelope values.

	modified:   compact/gem_tracker_endcap.xml
	modified:   src/TrapEndcapTracker_geo.cpp
---
 compact/gem_tracker_endcap.xml | 130 +++++++++++++++++++++++++++++----
 src/TrapEndcapTracker_geo.cpp  |   6 +-
 2 files changed, 122 insertions(+), 14 deletions(-)

diff --git a/compact/gem_tracker_endcap.xml b/compact/gem_tracker_endcap.xml
index 78b7f2d2..4c0a5592 100644
--- a/compact/gem_tracker_endcap.xml
+++ b/compact/gem_tracker_endcap.xml
@@ -3,12 +3,56 @@
   <comment> Endcap Tracker  </comment>        
 
   <define>
+    <constant name="GEMTrackerEndcap_zmin"            value="BarrelTracking_length/2.0"/>
+    <constant name="GEMTrackerEndcap_NLayers"         value="5"/>
+    <constant name="GEMTrackerEndcapLayer_thickness"  value="ForwardTrackingGEMLength/GEMTrackerEndcap_NLayers"/>
+
     <constant name="GEMTrackerEndcapFoilX1"           value="43.0 * mm"/>
     <constant name="GEMTrackerEndcapFoilY"            value="1020.0 * mm"/>
     <constant name="GEMTrackerEndcapFoilOpeningAngle" value="30.1*degree"/>
     <constant name="GEMTrackerEndcapFoilX2"           value="2*GEMTrackerEndcapFoilY*tan(GEMTrackerEndcapFoilOpeningAngle/2.0) +  GEMTrackerEndcapFoilX1"/>
     <constant name="GEMTrackerEndcapFoil_rmin"        value="GEMTrackerEndcapFoilX1/(tan(GEMTrackerEndcapFoilOpeningAngle/2.0)*2.0)"/>
     <constant name="GEMTrackerEndcapFoil_rmax"        value="(GEMTrackerEndcapFoilY+GEMTrackerEndcapFoil_rmin)/(cos(GEMTrackerEndcapFoilOpeningAngle/2.0))"/>
+
+
+      // Frame parameters accoring to Kondo's sbsCrossSection.pdf file),
+    <constant name="GEMTrackerEndcapFrame_thickness"     value="18.0 * mm"/>
+    <constant name="GEMTrackerEndcapFrameBotEdge_width"  value="30.0 * mm"/>
+    <constant name="GEMTrackerEndcapFrameTopEdge_width"  value="30.0 * mm"/>
+    <constant name="GEMTrackerEndcapFrameSideEdge_width" value=" 8.0 * mm"/>
+
+    <comment>
+      From https://github.com/eic/EicToyModel/blob/master/source/eicroot/GemGeoParData.cxx
+
+      // FIXME: put aluminum layer later as well),
+      mEntranceWindowMaterial     ( "GemKapton"),
+      mEntranceWindowThickness    (   50.0 * etm::um),
+
+      // Use evaristo.pdf p.10 for the foil parameters:
+      //  - drift foil    : 50um kapton + 3um copper)
+      //  - GEM foil      : 30um kapton + 3um copper (80% area fraction))
+      //  - readout foils : 30um kapton + 3um copper total)
+      mDriftFoilKaptonThickness   (   50.0 * etm::um),
+      mDriftFoilCopperThickness   (    3.0 * etm::um),
+      mGemFoilAreaFraction        (   0.80),
+      mGemFoilKaptonThickness     (   30.0 * etm::um),
+      mGemFoilCopperThickness     (    3.0 * etm::um),
+
+      mReadoutG10Thickness        (    0.0 * etm::mm),
+      mReadoutKaptonThickness     (   30.0 * etm::um), 
+      mReadoutCopperThickness     (    3.0 * etm::um),
+
+      // 3mm thick Nomex honeycomb for SBS GEMs),
+      mReadoutSupportMaterial     ( "GemNomex"),
+      mReadoutSupportThickness    (    3.0 * etm::mm),
+
+      mEntranceRegionLength       (    3.0 * etm::mm),
+      mDriftRegionLength          (    3.0 * etm::mm),
+      // Assume triple GEM layout),
+      mFirstTransferRegionLength  (    2.0 * etm::mm),
+      mSecondTransferRegionLength (    2.0 * etm::mm),
+      mInductionRegionLength      (    2.0 * etm::mm)
+    </comment>
   </define>
 
   <limits>
@@ -31,23 +75,83 @@
       <module name="GEMModule1" vis="Argonne_Process_Blue">
         <trd x1="GEMTrackerEndcapFoilX1/2.0" x2="GEMTrackerEndcapFoilX2/2.0" z="GEMTrackerEndcapFoilY/2"/>
         <comment> Going from HV side to readout side</comment>
-        <module_component thickness="1.127 * mm" material="Mylar"/>
-        <module_component thickness="3*mm" material="Ar10CO2"/>
-        <module_component thickness="0.127 * mm" material="Mylar"/>
-        <module_component thickness="2*mm" material="Ar10CO2"/>
-        <module_component thickness="0.127 * mm" material="Mylar"/>
-        <module_component thickness="2*mm" material="Ar10CO2"/>
         <module_component thickness="0.127 * mm" material="Mylar"/>
-        <module_component thickness="2*mm" material="Ar10CO2"/>
-        <module_component thickness="0.175 * mm" material="Epoxy" sensitive="true" vis="Argonne_Process_Blue"/>
+        <module_component thickness="50.0*um" material="Kapton" name="entrance_window"/>
+        <module_component thickness=" 3.0*mm" material="Ar10CO2" name="entrance region" />
+        <module_component thickness="50.0*um" material="Kapton"/>
+        <module_component thickness=" 3.0*um" material="Copper"/>
+        <module_component thickness=" 3.0*mm" material="Ar10CO2" name="drift region"/>
+        <module_component thickness="30.0*um" material="Kapton"  name="gem_foil"/>
+        <module_component thickness=" 3.0*um" material="Copper"  name="gem_foil_Cu"/>
+        <module_component thickness=" 2.0*mm" material="Ar10CO2" name="transfer region I"/>
+        <module_component thickness="30.0*um" material="Kapton"  name="gem_foil"/>
+        <module_component thickness=" 3.0*um" material="Copper"  name="gem_foil_Cu"/>
+        <module_component thickness=" 2.0*mm" material="Ar10CO2" name="transfer region II"/>
+        <module_component thickness="30.0*um" material="Kapton"  name="gem_foil"/>
+        <module_component thickness=" 3.0*um" material="Copper"  name="gem_foil_Cu"/>
+        <module_component thickness=" 2.0*mm" material="Ar10CO2" name="induction region"/>
+        <module_component thickness="30.0*um" material="Kapton"  name="readout"     sensitive="true"/>
+        <module_component thickness=" 3.0*um" material="Copper"  name="readout_Cu"/>
+        <module_component thickness="127.0*um" material="Mylar"/>
+        <module_component thickness="200.0*um" material="Epoxy" sensitive="true" vis="Argonne_Process_Blue"/>
+      </module>
+      <module name="GEMSupportModule1" vis="Argonne_Process_Blue">
+        <trd x1="GEMTrackerEndcapFoilX2/2.0" x2="GEMTrackerEndcapFoilX1/2.0" z="GEMTrackerEndcapFrameBotEdge_width"/>
+        <module_component thickness="GEMTrackerEndcapFrame_thickness" material="Mylar"/>
+      </module>
+      <module name="GEMSupportModule2" vis="Argonne_Process_Blue">
+        <trd x1="GEMTrackerEndcapFrameSideEdge_width" x2="GEMTrackerEndcapFrameSideEdge_width" z="GEMTrackerEndcapFoilY/2"/>
+        <module_component thickness="4.0*mm" material="Mylar"/>
       </module>
       <layer id="1" >
-        <envelope vis="Argonne_Red"
-          rmin="GEMTrackerEndcapFoil_rmin" rmax="GEMTrackerEndcapFoil_rmax"
-          zstart="SiliconTrackerOuterBarrelLength/2+15*mm" length="30.0*mm"  />
-        <ring r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
-          zstart="SiliconTrackerOuterBarrelLength/2+20*mm"
+        <ring vis="Argonne_Red"
+          r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
+          zstart="GEMTrackerEndcap_zmin+0*GEMTrackerEndcapLayer_thickness"
+          nmodules="12" dz="10 * mm" module="GEMModule1" />
+        <ring vis="Argonne_Blue" phi0="15.0*degree"
+          r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
+          zstart="GEMTrackerEndcap_zmin+0*GEMTrackerEndcapLayer_thickness"
+          nmodules="12" dz="0 * mm" module="GEMSupportModule2" />
+      </layer>
+      <layer id="2" >
+        <ring vis="Argonne_Red"
+          r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
+          zstart="GEMTrackerEndcap_zmin+1*GEMTrackerEndcapLayer_thickness"
+          nmodules="12" dz="10 * mm" module="GEMModule1" />
+        <ring vis="Argonne_Blue" phi0="15.0*degree"
+          r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
+          zstart="GEMTrackerEndcap_zmin+1*GEMTrackerEndcapLayer_thickness"
+          nmodules="12" dz="0 * mm" module="GEMSupportModule2" />
+      </layer>
+      <layer id="3" >
+        <ring vis="Argonne_Red"
+          r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
+          zstart="GEMTrackerEndcap_zmin+2*GEMTrackerEndcapLayer_thickness"
+          nmodules="12" dz="10 * mm" module="GEMModule1" />
+        <ring vis="Argonne_Blue" phi0="15.0*degree"
+          r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
+          zstart="GEMTrackerEndcap_zmin+2*GEMTrackerEndcapLayer_thickness"
+          nmodules="12" dz="0 * mm" module="GEMSupportModule2" />
+      </layer>
+      <layer id="4" >
+        <ring vis="Argonne_Red"
+          r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
+          zstart="GEMTrackerEndcap_zmin+3*GEMTrackerEndcapLayer_thickness"
+          nmodules="12" dz="10 * mm" module="GEMModule1" />
+        <ring vis="Argonne_Blue" phi0="15.0*degree"
+          r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
+          zstart="GEMTrackerEndcap_zmin+3*GEMTrackerEndcapLayer_thickness"
+          nmodules="12" dz="0 * mm" module="GEMSupportModule2" />
+      </layer>
+      <layer id="5" >
+        <ring vis="Argonne_Red"
+          r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
+          zstart="GEMTrackerEndcap_zmin+4*GEMTrackerEndcapLayer_thickness"
           nmodules="12" dz="10 * mm" module="GEMModule1" />
+        <ring vis="Argonne_Blue" phi0="15.0*degree"
+          r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
+          zstart="GEMTrackerEndcap_zmin+4*GEMTrackerEndcapLayer_thickness"
+          nmodules="12" dz="0 * mm" module="GEMSupportModule2" />
       </layer>
     </detector>
 
diff --git a/src/TrapEndcapTracker_geo.cpp b/src/TrapEndcapTracker_geo.cpp
index ea0c961c..30251db0 100644
--- a/src/TrapEndcapTracker_geo.cpp
+++ b/src/TrapEndcapTracker_geo.cpp
@@ -59,9 +59,13 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
         for (ci.reset(), n_sensor = 1, c_id = 0, posY = -y1; ci; ++ci, ++c_id) {
             xml_comp_t c = ci;
             double c_thick = c.thickness();
+            auto comp_x1   = getAttrOrDefault(c, _Unicode(x1), x1);
+            auto comp_x2   = getAttrOrDefault(c, _Unicode(x2), x2);
+            auto comp_height   = getAttrOrDefault(c, _Unicode(height), z);
+
             Material c_mat = description.material(c.materialStr());
             string c_name = _toString(c_id, "component%d");
-            Volume c_vol(c_name, Trapezoid(x1, x2, c_thick / 2e0, c_thick / 2e0, z), c_mat);
+            Volume c_vol(c_name, Trapezoid(comp_x1, comp_x2, c_thick / 2e0, c_thick / 2e0, comp_height), c_mat);
 
             c_vol.setVisAttributes(description.visAttributes(c.visStr()));
             pv = m_volume.placeVolume(c_vol, Position(0, posY + c_thick / 2, 0));
-- 
GitLab