From 47af658b041604a1ecda53bc7dfe3741a3330749 Mon Sep 17 00:00:00 2001
From: Whitney Armstrong <warmstrong@anl.gov>
Date: Thu, 22 Apr 2021 05:34:10 +0000
Subject: [PATCH] Fixing parameterization for putting the HCAL on the outside.

Fixed ce_GEM overlap
---
 .gitlab-ci.yml                 |   6 +-
 CMakeLists.txt                 |   1 +
 compact/cb_CTD_Si.xml          |   4 +
 compact/ce_GEM.xml             |  15 ++++
 compact/ce_mrich.xml           |   5 ++
 compact/definitions.xml        | 155 ++++++++++++++++-----------------
 compact/ecal.xml               |  14 +--
 compact/forward_rich.xml       |  12 ++-
 compact/forward_trd.xml        |   8 +-
 compact/gem_tracker_endcap.xml |  30 +++----
 compact/hcal.xml               |   3 +-
 compact/mm_tracker_barrel.xml  |  11 ++-
 reference_detector.xml         |  24 ++---
 src/ForwardRICH_geo.cpp        |   4 +-
 src/ce_GEM.cpp                 |   2 +-
 src/ref_DiskTracker_geo.cpp    |  90 +++++++++----------
 views/config.yml               |  25 ------
 17 files changed, 210 insertions(+), 199 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ee965541..b8446b46 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -90,8 +90,10 @@ report:
   stage: finalize
   needs: 
     - view_01
-    - dawn_view_02:detector
-    - dawn_view_03:detector
+    - view_02
+    - view_03
+    - view_06
+    - view_07
     - dump_constants
   artifacts:
     paths:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 11865bd4..f9e7f211 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,6 +5,7 @@ PROJECT(reference_detector
   DESCRIPTION "A template dd4hep+acts detector"
   )
 
+set(CMAKE_CXX_STANDARD 17)
 find_package( DD4hep REQUIRED COMPONENTS DDCore DDG4 )
 
 #find_package(Acts REQUIRED COMPONENTS Core IdentificationPlugin TGeoPlugin DD4hepPlugin PATHS /home/whit/lib/cmake NO_DEFAULT_PATH)
diff --git a/compact/cb_CTD_Si.xml b/compact/cb_CTD_Si.xml
index 3deea232..38e04cb4 100644
--- a/compact/cb_CTD_Si.xml
+++ b/compact/cb_CTD_Si.xml
@@ -3,6 +3,10 @@
   <comment> Central Barrel Tracker Silicon </comment>        
 
   <define>
+    <constant name="cb_CTD_rmin"   value="SiliconTrackerInnerRadius + 70.0 * mm"/>
+    <constant name="cb_CTD_rmax"   value="SiliconTrackerOuterRadius"/>
+    <constant name="cb_CTD_zmax"   value="SiliconTrackerOuterBarrel_zmax"/>
+    <constant name="cb_CTD_length" value="SiliconTrackerOuterBarrelLength"/>
     <comment> Si layer opiton </comment>
     <constant name="cb_CTD_Si_gap"    value="5.0 * cm"/>
     <constant name="cb_CTD_Si_layer"  value="15"/>
diff --git a/compact/ce_GEM.xml b/compact/ce_GEM.xml
index 6cbc9503..33d018d8 100644
--- a/compact/ce_GEM.xml
+++ b/compact/ce_GEM.xml
@@ -3,6 +3,21 @@
   <comment> Electron endcap GEM tracking </comment>        
 
   <define>
+    <comment>
+      ------------------
+      ce_GEM Parameters
+      ------------------
+    </comment>
+    <constant name="ce_GEM_rmin"            value="10.0 * cm"/> <comment> temporary number. Need beampipe radius  </comment>
+    <!--<constant name="ce_GEM_rmin"        value="0.0 * cm"/>-->
+    <constant name="ce_GEM_rmax"            value="HcalEndcapN_rmin + 0.0 * cm"/> <comment> temporary number to avoid overlaps  </comment>
+    <!--<constant name="ce_GEM_rmax"        value="45.0 * cm + 50.0 * cm"/>-->
+    <constant name="ce_GEM_length"          value="30.0 * cm"/>
+    <constant name="ce_GEM_x_pos"           value="0.0 * cm"/>
+    <constant name="ce_GEM_y_pos"           value="0.0 * cm"/>
+    <constant name="ce_GEM_z_pos"           value="-Solenoid_length/2.0 + ce_GEM_length/2.0"/>
+    <constant name="ce_GEM_layer"           value="8"/>
+    <constant name="ce_GEM_layer_thickness" value="1.0 * cm"/>
   </define>
 
   <limits>
diff --git a/compact/ce_mrich.xml b/compact/ce_mrich.xml
index e5be8bae..213b1aec 100644
--- a/compact/ce_mrich.xml
+++ b/compact/ce_mrich.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <lccdd>
   <define>
+    <constant name="ce_MRICHRMin"   value="15*cm"/>
+    <constant name="ce_MRICHRMax"   value="BarrelTrackingAndPID_rmax"/>
+    <constant name="ce_MRICHLength" value="BackwardCherenkovLength"/>
+    <constant name="ce_MRICHZMin"   value="-EcalEndcapN_zmin+ce_MRICHLength"/>
+
   </define>
 
   <detectors>
diff --git a/compact/definitions.xml b/compact/definitions.xml
index be61d003..ee5fc40b 100644
--- a/compact/definitions.xml
+++ b/compact/definitions.xml
@@ -304,7 +304,7 @@
     <constant name="Solenoid_length"           value="3600.0*mm"/>
     <constant name="Solenoid_rmin"             value="1600.0*mm"/>
     <constant name="Solenoid_thickness"        value="400*mm"/>
-    <constant name="Solenoid_offset"           value="600.0*mm"/>
+    <constant name="Solenoid_offset"           value="0.0*mm"/>
 
     <constant name="Solenoid_rmax"             value="Solenoid_rmin + Solenoid_thickness"/>
     <constant name="SolenoidBarrel_rmin"       value="Solenoid_rmin"/>
@@ -321,8 +321,8 @@
     </comment>
 
     <constant name="ForwardRICH_length"       value="1.1*m"/>
-    <constant name="ForwardTRD_length"        value="20.0*cm"/>
-    <constant name="ForwardTOF_length" value="10.0*cm"/>
+    <constant name="ForwardTRD_length"        value="10.0*cm"/>
+    <constant name="ForwardTOF_length"        value="10.0*mm"/>
     
     <constant name="BackwardCherenkovLength"   value="15.0*cm"/>
     <constant name="BackwardTOFLength"         value="10.0*cm"/>
@@ -331,23 +331,34 @@
     <constant name="ForwardPIDLength"    value="ForwardRICH_length + ForwardTRD_length + ForwardTOF_length"/>
     <constant name="BackwardPIDLength"   value="BackwardCherenkovLength + BackwardTOFLength"/>
 
+    <comment> For detectors adjacent to beam pipe.</comment>
+    <constant name="ForwardPID_rmin"  value="Beampipe_rmax + 10*mm"/>
+    <constant name="ForwardPID_rmin1"  value="Beampipe_rmax + 80*mm"/>
+
     <comment> Barrel PID thicknesses</comment>
     <constant name="BarrelExtraPIDThickness"  value="25.0 * cm"/>
-    <constant name="BarrelTRDThickness"  value="25.0 * cm"/>
+    <constant name="BarrelTRDThickness"  value="1.0 * cm"/>
     <constant name="BarrelTOFThickness"  value="1.0 * cm"/>
 
+
+
+
     <comment>
       ============================
       Tracking Detector Parameters
       ============================
     </comment>
 
+    <constant name="ForwardTrackingLength" value="30.0*cm"/>
+    <constant name="BackwardTrackingLength" value="30.0*cm"/>
+
     <comment>
       -------------------------
       GEM Tracker Parameters
       -------------------------
     </comment>
-    <constant name="ForwardTrackingGEMLength" value="30.0*cm"/>
+    <constant name="ForwardTrackingGEMLength" value="ForwardTrackingLength"/>
+    <constant name="BackwardTrackingGEMLength" value="BackwardTrackingLength"/>
 
     <comment>
       -------------------------
@@ -362,11 +373,12 @@
       --------------------------
       Silicon Tracker Parameters
       --------------------------
+      Note current values should be updated
     </comment>
     <constant name="SiliconTrackerInnerRadius"       value="95.0*mm"/>
     <constant name="SiliconTrackerInnerBarrelLength" value="300.0*mm"/>
-    <constant name="SiliconTrackerOuterRadius"       value="Solenoid_rmin-70*cm"/>
-    <constant name="SiliconTrackerOuterBarrelLength" value="Solenoid_length/2.5"/>
+    <constant name="SiliconTrackerOuterRadius"       value="Solenoid_rmax/3.0"/>
+    <constant name="SiliconTrackerOuterBarrelLength" value="1600.0*mm"/>
     <constant name="SiliconTrackerOuterBarrel_zmax"  value="SiliconTrackerOuterBarrelLength/2.0"/>
 
     <comment>
@@ -377,8 +389,11 @@
     </comment>
     <constant name="BarrelTracking_length"       value="SiliconTrackerOuterBarrelLength"/>
     <constant name="BarrelTracking_rmax"         value="SiliconTrackerOuterRadius"/>
+    <constant name="BarrelTrackingAndPID_rmax"   value="BarrelTracking_rmax+BarrelExtraPIDThickness"/>
+
+    <constant name="CentralTracking_length"      value="BarrelTracking_length + ForwardTrackingLength + BackwardTrackingLength"/>
     <constant name="CentralTracking_rmax"        value="SiliconTrackerOuterRadius"/>
-    <constant name="CentralTracking_length"      value="BarrelTracking_length + ForwardTrackingGEMLength"/>
+
     <constant name="VertexTrackingRegion_length" value="SiliconTrackerOuterBarrelLength"/>
 
     <comment> These are used by ddsim </comment>
@@ -386,40 +401,44 @@
     <constant name="tracker_region_zmax"   value="Solenoid_length/2.0"/>
 
 
-    <comment>
-      -------------------------------
-      Central Barrel Tracker - Global
-      -------------------------------
-
-      The cb_CTD_* parameters can probably be moved to the detector specific xml file.
-    </comment>
-    <constant name="cb_CTD_rmin"   value="SiliconTrackerInnerRadius + 70.0 * mm"/>
-    <constant name="cb_CTD_rmax"   value="SiliconTrackerOuterRadius"/>
-    <constant name="cb_CTD_zmax"   value="SiliconTrackerOuterBarrel_zmax"/>
-    <constant name="cb_CTD_length" value="SiliconTrackerOuterBarrelLength"/>
 
     <comment>
-      ------------
-      Calorimeters
-      ------------
-      ======================
+      ----------------------
       Calorimeter Parameters
-      ======================
+      ----------------------
+
+       Note on paramaeterization 
+
+      The HCal Barrel is outside of the solenoid magnet.  However,
+      there is an option to add some HCal barrel inside the magnet but this
+      is turned off below.
+
+      The space for the calorimeters inside the solenoid is assumed to be fixed by 
+      the solenoid inner diameter/length and by the central tracking and PID outer diameter/length.
+
+       Endcaps
+
+      The extra HCal endcap lengths are for offsetting the outside endcap surface (zmax) from the
+      end of the solenoid coils.
 
     </comment>
-    <comment>
-      Ecal and Hcal Barrel/Endcap 
-    </comment>
 
-    <constant name="ExtraHcalEndcapP_length"   value="0.0*cm"/>
-    <constant name="ExtraHcalEndcapN_length"   value="0.0*cm"/>
-    <constant name="SolenoidYokeEndcapP_zmin"  value="Solenoid_length/2.0 + Solenoid_offset+ExtraHcalEndcapP_length"/>
-    <constant name="SolenoidYokeEndcapN_zmin"  value="Solenoid_length/2.0 - Solenoid_offset+ExtraHcalEndcapN_length"/>
+    <comment> these offesets could be implemented differently for clarity. </comment>
+    <constant name="EcalEndcapPSolenoid_offset" value="800.0*mm" />
+    <constant name="EcalEndcapNSolenoid_offset" value="0.0*mm" />
+
+    <constant name="HcalEndcapPExtra_length"    value="40.0*cm"/>
+    <constant name="HcalEndcapNExtra_length"    value="40.0*cm"/>
+
+    <constant name="SolenoidYokeEndcapP_zmin"  value="Solenoid_length/2.0 + Solenoid_offset + HcalEndcapPExtra_length"/>
+    <constant name="SolenoidYokeEndcapN_zmin"  value="Solenoid_length/2.0 - Solenoid_offset + HcalEndcapNExtra_length"/>
 
     <constant name="EcalBarrel_rmin"            value="SiliconTrackerOuterRadius + BarrelExtraPIDThickness + 5.0 * mm"/>
-    <constant name="HcalBarrel_rmax"            value="Solenoid_rmin - 10.0 *cm "/>
-    <constant name="Barrel_TotalCalThickness"   value="HcalBarrel_rmax - EcalBarrel_rmin"/>
-    <constant name="CalBarrelDivider"           value="1.0"/> <comment> 100% Ecal, no HCAL inside of the solenoid for now </comment>
+    <constant name="Barrel_rmax"                value="Solenoid_rmin - 10.0 *cm "/>
+    <constant name="Barrel_TotalCalThickness"   value="Barrel_rmax - EcalBarrel_rmin"/>
+
+    <constant name="CalBarrelDivider"           value="0.8"/>
+    <comment> Leave room for TRD </comment>
 
     <constant name="EcalBarrel_TotalThickness"  value="Barrel_TotalCalThickness * CalBarrelDivider"/>
     <constant name="HcalBarrel_TotalThickness"  value="Barrel_TotalCalThickness * (1.0 - CalBarrelDivider)"/>
@@ -430,20 +449,22 @@
     <constant name="EcalEndcapP_zmin"           value="CentralTracking_length/2.0 + ForwardPIDLength"/>
     <constant name="EcalEndcapN_zmin"           value="CentralTracking_length/2.0 + BackwardPIDLength"/>
 
-    <constant name="BarrelLength"               value="SiliconTrackerOuterBarrelLength + ForwardPIDLength + BackwardPIDLength"/>
-    <constant name="Barrel_offset"              value="(EcalEndcapP_zmin-EcalEndcapN_zmin)/2.0"/>
+    <constant name="BarrelLength"               value="SiliconTrackerOuterBarrelLength + ForwardPIDLength + BackwardPIDLength" />
+    <constant name="Barrel_offset"              value="(EcalEndcapP_zmin-EcalEndcapN_zmin)/2.0" />
 
-    <constant name="EndcapPTotalCal_length"  value="(SolenoidYokeEndcapP_zmin - 0.0 * mm) - (EcalEndcapP_zmin + 20.0 * mm)"/>
-    <constant name="EndcapNTotalCal_length"  value="(SolenoidYokeEndcapN_zmin - 0.0 * mm) - (EcalEndcapN_zmin + 20.0 * mm)"/>
+    <comment>
+      Endcaps
+    </comment>
 
-    <constant name="EndcapP_CalDivide"          value="0.5"/> <comment> 0.5 means Ecal and Hcal have the same thickness </comment>
-    <constant name="EndcapN_CalDivide"          value="0.5"/> <comment> 0.5 means Ecal and Hcal have the same thickness </comment>
+    <constant name="EndcapPTotalCal_length"  value="(SolenoidYokeEndcapP_zmin + EcalEndcapPSolenoid_offset) - (EcalEndcapP_zmin)"/>
+    <constant name="EndcapNTotalCal_length"  value="(SolenoidYokeEndcapN_zmin + EcalEndcapNSolenoid_offset) - (EcalEndcapN_zmin)"/>
+
+    <constant name="EndcapP_CalDivide"          value="0.8"/> <comment> 0.5 means Ecal and Hcal have the same thickness </comment>
+    <constant name="EndcapN_CalDivide"          value="0.8"/> <comment> 0.5 means Ecal and Hcal have the same thickness </comment>
 
     <constant name="EcalEndcapP_length" value="EndcapPTotalCal_length * EndcapP_CalDivide"/>
     <constant name="EcalEndcapN_length" value="EndcapNTotalCal_length * EndcapN_CalDivide"/>
 
-    <constant name="HcalEndcapP_length" value="EndcapPTotalCal_length * (1.0 - EndcapP_CalDivide)"/>
-    <constant name="HcalEndcapN_length" value="EndcapNTotalCal_length * (1.0 - EndcapN_CalDivide)"/>
 
     <comment> These need to be set in sync with the forward and backward  detectors </comment>
     <constant name="EcalEndcapP_rmin"                      value="200.0*mm"/>
@@ -520,12 +541,19 @@
       Hadronic Calorimeter Parameters
       -------------------------------
     </comment>
-    <constant name="HcalBarrel_rmin"          value="EcalBarrel_rmax"/>
-    <constant name="HcalBarrelAvailThickness" value="HcalBarrel_rmax - HcalBarrel_rmin"/>
-    <constant name="HcalBarrelLength"         value="Solenoid_length + ExtraHcalEndcapP_length + ExtraHcalEndcapN_length- HcalEndcapP_length- HcalEndcapN_length - 10*cm"/>
-                                                                     
-    <constant name="HcalEndcapP_zmin"          value="SolenoidYokeEndcapP_zmin - HcalEndcapP_length "/>
-    <constant name="HcalEndcapN_zmin"          value="SolenoidYokeEndcapN_zmin - HcalEndcapN_length "/>
+
+    <constant name="HcalEndcapP_length" value="50.0*cm"/>
+    <constant name="HcalEndcapN_length" value="50.0*cm"/>
+    <constant name="HcalBarrel_thickness" value="50.0*cm "/>
+
+    <constant name="HcalBarrel_rmin"          value="Solenoid_rmax"/>
+    <constant name="HcalBarrel_rmax"          value="HcalBarrel_rmin + HcalBarrel_thickness"/>
+
+    <constant name="HcalBarrelAvailThickness" value="HcalBarrel_thickness"/>
+
+    <constant name="HcalEndcapP_zmin"          value="EcalEndcapP_zmin + EcalEndcapP_length "/>
+    <constant name="HcalEndcapN_zmin"          value="EcalEndcapN_zmin + EcalEndcapN_length "/>
+    <constant name="HcalBarrelLength"          value="HcalEndcapP_zmin + HcalEndcapN_zmin "/>
 
     <comment> Material Thickness </comment>
     <constant name="HcalSteelThickness"       value="1.89 * cm"/>
@@ -594,12 +622,6 @@
       Gaseous RICH Parameters
       -----------------------
     </comment>
-    <constant name="ForwardRICH_zmin"  value="SiliconTrackerOuterBarrel_zmax + 1 * cm"/>
-    <constant name="ForwardRICH_rmin"  value="15 * cm"/>
-    <constant name="ForwardRICH_rmax0"  value="SiliconTrackerOuterRadius"/>
-    <constant name="ForwardRICH_rmax1"  value="EcalBarrel_rmin"/>
-    <constant name="ForwardRICH_rmax2"  value="SolenoidBarrel_rmin-2*cm"/>
-    <constant name="ForwardRICHDepth" value="0.9*m"/>
 
 
     <comment>
@@ -621,33 +643,8 @@
     </comment>
 
 
-    <comment>
-      --------------------------
-      ce_MRICH Parameters
-      --------------------------
-    </comment>
-    <constant name="ce_MRICHRMin"   value="15*cm"/>
-    <constant name="ce_MRICHRMax"   value="100*cm"/>
-    <constant name="ce_MRICHLength" value="BackwardCherenkovLength"/>
-    <constant name="ce_MRICHZMin"   value="-EcalEndcapN_zmin+ce_MRICHLength"/>
 
 
-    <comment>
-      ------------------
-      ce_GEM Parameters
-      ------------------
-    </comment>
-    <constant name="ce_GEM_rmin"            value="10.0 * cm"/> <comment> temporary number. Need beampipe radius  </comment>
-    <!--<constant name="ce_GEM_rmin"        value="0.0 * cm"/>-->
-    <constant name="ce_GEM_rmax"            value="HcalEndcapN_rmin + 8.0 * cm"/> <comment> temporary number to avoid overlaps  </comment>
-    <!--<constant name="ce_GEM_rmax"        value="45.0 * cm + 50.0 * cm"/>-->
-    <constant name="ce_GEM_length"          value="30.0 * cm"/>
-    <constant name="ce_GEM_x_pos"           value="0.0 * cm"/>
-    <constant name="ce_GEM_y_pos"           value="0.0 * cm"/>
-    <constant name="ce_GEM_z_pos"           value="-Solenoid_length/2.0 + ce_GEM_length/2.0"/>
-    <constant name="ce_GEM_layer"           value="8"/>
-    <constant name="ce_GEM_layer_thickness" value="1.0 * cm"/>
-
     <comment>
       --------------------------
       Central Ion HCal Parameters
diff --git a/compact/ecal.xml b/compact/ecal.xml
index 6e8c6398..42fd2fb4 100644
--- a/compact/ecal.xml
+++ b/compact/ecal.xml
@@ -10,6 +10,10 @@
     <constant name="CrystalEndcap_x_pos" value="0.0*m"/>
     <constant name="CrystalEndcap_y_pos" value="0.0*m"/>
     <constant name="CrystalEndcap_z_pos" value="-EcalEndcapN_zmin"/>
+
+
+
+    <constant name="EcalEndcapP_rmax" value="Solenoid_rmax "/>
   </define>
 
 
@@ -83,12 +87,12 @@
       readout="EcalEndcapHits" 
       vis="EcalEndcapVis" 
       calorimeterType="EM_ENDCAP" >
-      <position x="0" y="0" z="0"/>
+      <position x="0" y="0" z="-0"/>
       <dimensions 
         numsides="CaloSides" 
         zmin="EcalEndcapP_zmin" 
         rmin="EcalEndcapP_rmin" 
-        rmax="EcalBarrel_rmax " />
+        rmax="EcalEndcapP_rmax " />
       <layer repeat="EcalEndcapPLayer1_NRepeat">
         <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
         <slice material="Copper" thickness="EcalCopperThickness"/>
@@ -132,13 +136,13 @@
         zmin="EcalEndcapN_zmin" 
         rmin="EcalEndcapN_rmin" 
         rmax="EcalBarrel_rmax " />
-      <layer repeat="EcalEndcapPLayer1_NRepeat">
+      <layer repeat="EcalEndcapNLayer1_NRepeat">
         <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
         <slice material="Copper" thickness="EcalCopperThickness"/>
         <slice material="Kapton" thickness="EcalKaptonThickness"/>
         <slice material="Air" thickness="EcalAir1Thickness"/>
       </layer>
-      <layer repeat="EcalEndcapPLayer2_NRepeat">
+      <layer repeat="EcalEndcapNLayer2_NRepeat">
         <slice material="TungstenDens24" thickness="EcalThinTungstenThickness"/>
         <slice material="Air" thickness="EcalAir2Thickness"/>
         <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
@@ -146,7 +150,7 @@
         <slice material="Kapton" thickness="EcalKaptonThickness"/>
         <slice material="Air" thickness="EcalAir1Thickness"/>
       </layer>
-      <layer repeat="EcalEndcapPLayer3_NRepeat">
+      <layer repeat="EcalEndcapNLayer3_NRepeat">
         <slice material="TungstenDens24" thickness="EcalThickTungstenThickness"/>
         <slice material="Air" thickness="EcalAir2Thickness"/>
         <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
diff --git a/compact/forward_rich.xml b/compact/forward_rich.xml
index 8350f593..e35fe98e 100644
--- a/compact/forward_rich.xml
+++ b/compact/forward_rich.xml
@@ -1,10 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <lccdd>
   <define>
+    <constant name="ForwardRICH_zmin"   value="BarrelTracking_length/2.0 + ForwardTrackingLength "/>
+    <constant name="ForwardRICH_rmin"   value="ForwardPID_rmin1"/>
+    <constant name="ForwardRICH_rmax0"  value="SiliconTrackerOuterRadius"/>
+    <constant name="ForwardRICH_rmax1"  value="EcalBarrel_rmin"/>
+    <constant name="ForwardRICH_rmax2"  value="Solenoid_rmin-6*cm"/>
+    <constant name="ForwardRICHDepth"   value="0.9*m"/>
   </define>
 
   <detectors>
-    <detector id="ForwardRICH_ID" name="ForwardRICH" type="refdet_ForwardRICH" readout="ForwardRICHHits" vis="BlueVis">
+    <detector id="ForwardRICH_ID" name="ForwardRICH" type="refdet_ForwardRICH" readout="ForwardRICHHits" vis="RICHVis">
       <dimensions 
         z0="ForwardRICH_zmin" 
         snout_length="ForwardRICH_length - ForwardRICHDepth"
@@ -22,8 +28,8 @@
         rmax1="ForwardRICH_rmax1"
         rmax2="ForwardRICH_rmax2" />
       <comment> What are the following MCP-PMT parameters?</comment>
-      <mcppmt 
-        z0="-20.0*cm" 
+      <mcppmt
+        z0="0.0*cm"
         rmin="ForwardRICH_rmax1" 
         rmax="ForwardRICH_rmax2" 
         rtol="1.0*cm" 
diff --git a/compact/forward_trd.xml b/compact/forward_trd.xml
index 693f5333..680bbdc0 100644
--- a/compact/forward_trd.xml
+++ b/compact/forward_trd.xml
@@ -6,9 +6,9 @@
       Forward TRD Parameters
       --------------------------
     </comment>
-    <constant name="ForwardTRD_zmin" value="ForwardRICH_zmin + ForwardRICH_length+ 1*cm"/>
-    <constant name="ForwardTRD_rmin" value="ForwardRICH_rmin"/>
-    <constant name="ForwardTRD_rmax" value="EcalBarrel_rmax - 5*cm"/>
+    <constant name="ForwardTRD_zmin" value="BarrelTracking_length/2.0 + ForwardTrackingLength + ForwardRICH_length"/>
+    <constant name="ForwardTRD_rmin" value="ForwardPID_rmin1"/>
+    <constant name="ForwardTRD_rmax" value="Solenoid_rmin"/>
   </define>
 
   <detectors>
@@ -19,7 +19,7 @@
       insideTrackingVolume="true"
       reflect="false"
       vis="Argonne_Red">
-      <position x="0" y="0" z="0"/>
+      <position x="0" y="0" z="0.0"/>
       <layer id="1" 
         vis="Argonne_Blue"
         inner_z="ForwardTRD_zmin" 
diff --git a/compact/gem_tracker_endcap.xml b/compact/gem_tracker_endcap.xml
index 4c0a5592..7d0604e3 100644
--- a/compact/gem_tracker_endcap.xml
+++ b/compact/gem_tracker_endcap.xml
@@ -5,13 +5,13 @@
   <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="GEMTrackerEndcapFoilX1"           value="43.0 * mm"/>
+
+    <constant name="GEMTrackerEndcapLayer_thickness"  value="ForwardTrackingGEMLength/GEMTrackerEndcap_NLayers"/>
     <constant name="GEMTrackerEndcapFoil_rmin"        value="GEMTrackerEndcapFoilX1/(tan(GEMTrackerEndcapFoilOpeningAngle/2.0)*2.0)"/>
+    <constant name="GEMTrackerEndcapFoilY"            value="BarrelTrackingAndPID_rmax- GEMTrackerEndcapFoil_rmin- 1.0*cm"/>
+    <constant name="GEMTrackerEndcapFoilX2"           value="2*GEMTrackerEndcapFoilY*tan(GEMTrackerEndcapFoilOpeningAngle/2.0) +  GEMTrackerEndcapFoilX1"/>
     <constant name="GEMTrackerEndcapFoil_rmax"        value="(GEMTrackerEndcapFoilY+GEMTrackerEndcapFoil_rmin)/(cos(GEMTrackerEndcapFoilOpeningAngle/2.0))"/>
 
 
@@ -106,51 +106,51 @@
       <layer id="1" >
         <ring vis="Argonne_Red"
           r="GEMTrackerEndcapFoil_rmin+GEMTrackerEndcapFoilY/2.0"
-          zstart="GEMTrackerEndcap_zmin+0*GEMTrackerEndcapLayer_thickness"
+          zstart="GEMTrackerEndcap_zmin + 0.5*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"
+          zstart="GEMTrackerEndcap_zmin + 0.5*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"
+          zstart="GEMTrackerEndcap_zmin+1.5*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"
+          zstart="GEMTrackerEndcap_zmin+1.5*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"
+          zstart="GEMTrackerEndcap_zmin+2.5*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"
+          zstart="GEMTrackerEndcap_zmin+2.5*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"
+          zstart="GEMTrackerEndcap_zmin+3.5*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"
+          zstart="GEMTrackerEndcap_zmin+3.5*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"
+          zstart="GEMTrackerEndcap_zmin+4.5*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"
+          zstart="GEMTrackerEndcap_zmin+4.5*GEMTrackerEndcapLayer_thickness"
           nmodules="12" dz="0 * mm" module="GEMSupportModule2" />
       </layer>
     </detector>
diff --git a/compact/hcal.xml b/compact/hcal.xml
index a05bfe72..ad16a15e 100644
--- a/compact/hcal.xml
+++ b/compact/hcal.xml
@@ -1,6 +1,7 @@
 <lccdd>
 
   <define>
+    <constant name="HcalBarrel_offset"              value="(HcalEndcapP_zmin-HcalEndcapN_zmin)/2.0" />
   </define>
 
   <limits>
@@ -21,7 +22,7 @@
       type="refdet_EcalBarrel"
       readout="HcalBarrelHits"
       calorimeterType="HAD_BARREL"
-      offset="Barrel_offset"
+      offset="HcalBarrel_offset"
       gap="0.*cm"
       material="Steel235">
       <dimensions 
diff --git a/compact/mm_tracker_barrel.xml b/compact/mm_tracker_barrel.xml
index 4029b912..483b8914 100644
--- a/compact/mm_tracker_barrel.xml
+++ b/compact/mm_tracker_barrel.xml
@@ -3,12 +3,11 @@
   <comment>Micromegas tracker barrel</comment>        
 
   <define>
-    <constant name="MMTrackerBarrelLayer1_rmin"      value="800.0 * mm"/>
-    <constant name="MMTrackerBarrelLayer1_length"    value="500.0 * mm"/>
-    <constant name="MMTrackerBarrelLayer1_thickness" value="10.0 * mm"/>
-    <constant name="MMTrackerBarrel_NZModules"       value="floor(BarrelTracking_length/MMTrackerBarrelLayer1_length)"/>
-
-    <constant name="MMTrackerBarrelModulesTotal_length"       value="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer1_length"/>
+    <constant name="MMTrackerBarrelLayer1_rmin"          value="800.0 * mm"/>
+    <constant name="MMTrackerBarrelLayer1_length"        value="100.0 * mm"/>
+    <constant name="MMTrackerBarrelLayer1_thickness"     value="10.0 * mm"/>
+    <constant name="MMTrackerBarrel_NZModules"           value="floor(BarrelTracking_length/MMTrackerBarrelLayer1_length)"/>
+    <constant name="MMTrackerBarrelModulesTotal_length"  value="MMTrackerBarrel_NZModules*MMTrackerBarrelLayer1_length"/>
 
 
   </define>
diff --git a/reference_detector.xml b/reference_detector.xml
index 4abed83b..c04c3e60 100644
--- a/reference_detector.xml
+++ b/reference_detector.xml
@@ -12,8 +12,8 @@
   </info>
 
   <define>
+    <include ref="ip6/ip6_defs.xml" /> <comment> IP definitions should be first</comment>
     <include ref="compact/definitions.xml" />
-    <include ref="ip6/ip6_defs.xml" />
     <!--
     <include ref="eic/eic_defs.xml" />
     -->
@@ -110,33 +110,33 @@
   <include ref="compact/display.xml" />
   </display>
 
-  <!--
-  <include ref="reference_detector/vertex_tracker.xml"/>
-  <include ref="compact/silicon_tracker.xml"/>
-  -->
+  <comment> Include the IP components first </comment>
   <include ref="ip6/beampipe.xml"/>
+
   <include ref="compact/solenoid.xml"/>
   <include ref="compact/ecal.xml"/>
-  <include ref="compact/far_forward_detectors.xml"/>
   <include ref="compact/ce_mrich.xml"/>
   <include ref="compact/ce_GEM.xml"/>
-  <!--include ref="compact/hcal.xml"/-->
   <include ref="compact/forward_trd.xml"/>
-  <include ref="compact/B0_tracker.xml"/>
-  <include ref="compact/forward_romanpot.xml"/>
-  <include ref="compact/forward_offM_tracker.xml"/>
   <include ref="compact/vertex_tracker.xml"/>
   <include ref="compact/gem_tracker_endcap.xml"/>
   <include ref="compact/mm_tracker_barrel.xml"/>
+
+  <include ref="compact/B0_tracker.xml"/>
+  <include ref="compact/forward_offM_tracker.xml"/>
+  <include ref="compact/forward_romanpot.xml"/>
+  <include ref="compact/far_forward_detectors.xml"/>
+  <include ref="eic/forward_ion_beamline.xml"/>
+  <include ref="compact/hcal.xml"/>
+  <include ref="compact/forward_rich.xml"/>
+
   <!--
   <include ref="compact/ci_GEM.xml"/>
   <include ref="compact/cb_CTD_Si.xml"/>
   <include ref="compact/cb_VTX_Barrel.xml"/>
   <include ref="compact/ci_HCAL.xml"/>
-  <include ref="compact/forward_rich.xml"/>
   <include ref="compact/roman_pots.xml"/>
   -->
-  <include ref="eic/forward_ion_beamline.xml"/>
 
 
   <detectors>
diff --git a/src/ForwardRICH_geo.cpp b/src/ForwardRICH_geo.cpp
index b88bcd7c..d7156622 100644
--- a/src/ForwardRICH_geo.cpp
+++ b/src/ForwardRICH_geo.cpp
@@ -118,7 +118,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
             double mTheta1 = std::asin(mRmin/curve);
             double mTheta2 = std::asin(mRmax/curve);
             double rotY = -std::asin(focus/curve);
-            mirVol.setSolid(Sphere(curve, curve + mThick, mTheta1, mTheta2, 0., wphi));
+            mirVol.setSolid(Sphere(curve, curve + mThick, mTheta1*1.01, mTheta2*0.99, 0., wphi));
             // action is in a reverse order
             Transform3D tr = Translation3D(0., 0., mirZ - front_offset)   // move for z position
                            * RotationZ(rotZ)                            // rotate phi angle
@@ -179,7 +179,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
         pdPV.addPhysVolID("layer", ilayer).addPhysVolID("piece", ipd + 1);
     }
     Volume motherVol = desc.pickMotherVolume(det);
-    PlacedVolume envPV = motherVol.placeVolume(envVol, Position(0, 0, z0 + halfLength));
+    PlacedVolume envPV = motherVol.placeVolume(envVol, Position(0, 0, z0 + front_offset));
     envPV.addPhysVolID("system", detID);
     det.setPlacement(envPV);
 
diff --git a/src/ce_GEM.cpp b/src/ce_GEM.cpp
index 24e4bff1..f0a0227b 100644
--- a/src/ce_GEM.cpp
+++ b/src/ce_GEM.cpp
@@ -44,7 +44,7 @@ static Ref_t createDetector(Detector& desc, xml_h e, SensitiveDetector sens)
   // Loop over layers
   for(int i = 0; i < repeat; i++) {
     layerRIn  = RIn + 1.0 * cm + ((double)i * 0.5) * cm;
-    layerROut = ROut - 25.0 * cm + ((double)i * 2.0) * cm;
+    layerROut = ROut;//RIn + ((double)i * 0.5) * cm;
     layerPosZ = SizeZ / 2.0 - 5.0 * cm - ((double)i * 3.0) * cm;
     layerSizeZ = 1.0 * cm;
 
diff --git a/src/ref_DiskTracker_geo.cpp b/src/ref_DiskTracker_geo.cpp
index 8f60a3a5..4431e881 100644
--- a/src/ref_DiskTracker_geo.cpp
+++ b/src/ref_DiskTracker_geo.cpp
@@ -1,5 +1,5 @@
 //==========================================================================
-//  AIDA Detector description implementation 
+//  AIDA Detector description implementation
 //--------------------------------------------------------------------------
 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
 // All rights reserved.
@@ -12,7 +12,7 @@
 //==========================================================================
 //
 // Specialized generic detector constructor
-// 
+//
 //==========================================================================
 #include "DD4hep/DetFactoryHelper.h"
 
@@ -20,47 +20,49 @@ using namespace std;
 using namespace dd4hep;
 using namespace dd4hep::detail;
 
-static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector sens)  {
-  xml_det_t  x_det     = e;
-  Material   air       = description.air();
-  string     det_name  = x_det.nameStr();
-  bool       reflect   = x_det.reflect();
-  DetElement sdet(det_name,x_det.id());
-  Assembly   assembly(det_name);
-  PlacedVolume pv;
-  int l_num = 0;
-  xml::Component  pos  = x_det.position();
+static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector sens)
+{
+  xml_det_t      x_det    = e;
+  Material       air      = description.air();
+  string         det_name = x_det.nameStr();
+  bool           reflect  = x_det.reflect();
+  DetElement     sdet(det_name, x_det.id());
+  Assembly       assembly(det_name);
+  PlacedVolume   pv;
+  int            l_num = 0;
+  xml::Component pos   = x_det.position();
+
+  for (xml_coll_t i(x_det, _U(layer)); i; ++i, ++l_num) {
+    xml_comp_t x_layer    = i;
+    string     l_nam      = det_name + _toString(l_num, "_layer%d");
+    double     zmin       = x_layer.inner_z();
+    double     rmin       = x_layer.inner_r();
+    double     rmax       = x_layer.outer_r();
+    double     z          = zmin;
+    double     layerWidth = 0.;
+    int        s_num      = 0;
 
-  for(xml_coll_t i(x_det,_U(layer)); i; ++i, ++l_num)  {
-    xml_comp_t x_layer = i;
-    string l_nam = det_name+_toString(l_num,"_layer%d");
-    double  zmin = x_layer.inner_z();
-    double  rmin = x_layer.inner_r();
-    double  rmax = x_layer.outer_r();
-    double  z    = zmin, layerWidth = 0.;
-    int     s_num = 0;
-      
-    for(xml_coll_t j(x_layer,_U(slice)); j; ++j)  {
+    for (xml_coll_t j(x_layer, _U(slice)); j; ++j) {
       double thickness = xml_comp_t(j).thickness();
       layerWidth += thickness;
     }
-    Tube    l_tub(rmin,rmax,layerWidth,2*M_PI);
-    Volume  l_vol(l_nam,l_tub,air);
-    l_vol.setVisAttributes(description,x_layer.visStr());
-    for(xml_coll_t j(x_layer,_U(slice)); j; ++j, ++s_num)  {
+    Tube   l_tub(rmin, rmax, layerWidth/2.0, 2 * M_PI);
+    Volume l_vol(l_nam, l_tub, air);
+    l_vol.setVisAttributes(description, x_layer.visStr());
+    for (xml_coll_t j(x_layer, _U(slice)); j; ++j, ++s_num) {
       xml_comp_t x_slice = j;
-      double thick = x_slice.thickness();
-      Material mat = description.material(x_slice.materialStr());
-      string s_nam = l_nam+_toString(s_num,"_slice%d");
-      Volume s_vol(s_nam, Tube(rmin,rmax,thick), mat);
-        
-      if ( x_slice.isSensitive() ) {
+      double     thick   = x_slice.thickness();
+      Material   mat     = description.material(x_slice.materialStr());
+      string     s_nam   = l_nam + _toString(s_num, "_slice%d");
+      Volume     s_vol(s_nam, Tube(rmin, rmax, thick/2.0), mat);
+
+      if (x_slice.isSensitive()) {
         sens.setType("tracker");
         s_vol.setSensitiveDetector(sens);
       }
-      s_vol.setAttributes(description,x_slice.regionStr(),x_slice.limitsStr(),x_slice.visStr());
-      pv = l_vol.placeVolume(s_vol,Position(0,0,z-zmin-layerWidth/2+thick/2));
-      pv.addPhysVolID("slice",s_num);
+      s_vol.setAttributes(description, x_slice.regionStr(), x_slice.limitsStr(), x_slice.visStr());
+      pv = l_vol.placeVolume(s_vol, Position(0, 0, z - zmin - layerWidth / 2 + thick / 2));
+      pv.addPhysVolID("slice", s_num);
     }
 
     if (!reflect) {
@@ -71,22 +73,22 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
       layer.setPlacement(pv);
     } else {
       DetElement layer(sdet, l_nam + "_neg", l_num);
-      pv = assembly.placeVolume(l_vol,Transform3D(RotationY(M_PI),Position(0,0,-zmin-layerWidth/2)));
-      pv.addPhysVolID("layer",l_num);
-      pv.addPhysVolID("barrel",1);
+      pv = assembly.placeVolume(l_vol, Transform3D(RotationY(M_PI), Position(0, 0, -zmin - layerWidth / 2)));
+      pv.addPhysVolID("layer", l_num);
+      pv.addPhysVolID("barrel", 1);
       layer.setPlacement(pv);
       // DetElement layerR = layer.clone(l_nam+"_neg");
       // sdet.add(layerR.setPlacement(pv));
     }
   }
-  if ( x_det.hasAttr(_U(combineHits)) ) {
-    sdet.setCombineHits(x_det.attr<bool>(_U(combineHits)),sens);
+  if (x_det.hasAttr(_U(combineHits))) {
+    sdet.setCombineHits(x_det.attr<bool>(_U(combineHits)), sens);
   }
-  pv = description.pickMotherVolume(sdet).placeVolume(assembly,Position(pos.x(),pos.y(),pos.z()));
-  pv.addPhysVolID("system", x_det.id());      // Set the subdetector system ID.
+  pv = description.pickMotherVolume(sdet).placeVolume(assembly, Position(pos.x(), pos.y(), pos.z()));
+  pv.addPhysVolID("system", x_det.id()); // Set the subdetector system ID.
   sdet.setPlacement(pv);
   return sdet;
 }
 
-DECLARE_DETELEMENT(ref_DiskTracker,create_detector)
-DECLARE_DETELEMENT(ref_SolenoidEndcap,create_detector)
+DECLARE_DETELEMENT(ref_DiskTracker, create_detector)
+DECLARE_DETELEMENT(ref_SolenoidEndcap, create_detector)
diff --git a/views/config.yml b/views/config.yml
index 1004a27c..21d6d1e8 100644
--- a/views/config.yml
+++ b/views/config.yml
@@ -1,28 +1,3 @@
-
-#dawn_view_03:detector:
-#  extends: .views
-#  script:
-#    - ./bin/make_dawn_views -t view03 -d scripts/view3 -D
-#dawn_view_03:ev001:
-#  extends: .views
-#  script:
-#    - ./bin/make_dawn_views -t view03_ev001 -d scripts/view3 -s 2
-#dawn_view_03:ev003:
-#  extends: .views
-#  script:
-#    - ./bin/make_dawn_views -t view03_ev100 -d scripts/view3 -s 3
-#dawn_view_03:ev004:
-#  extends: .views
-#  script:
-#    - ./bin/make_dawn_views -t view03_ev001 -d scripts/view3 -s 4
-#dawn_view_06:detector:
-#  extends: .views
-#  script:
-#    - ./bin/make_dawn_views -t view06 -d scripts/view6 -D
-#dawn_view_07:detector:
-#  extends: .views
-#  script:
-#    - ./bin/make_dawn_views -t view07 -d scripts/view7 -D
 dawn_view_11:detector:
   extends: .views
   script:
-- 
GitLab