From ff844b0c2035142d3260fa5e002b30022b721a88 Mon Sep 17 00:00:00 2001
From: Whitney Armstrong <warmstrong@anl.gov>
Date: Wed, 24 Mar 2021 23:21:59 -0500
Subject: [PATCH] 	modified:   compact/definitions.xml

	modified:   compact/definitions.xml

	modified:   compact/definitions.xml
	modified:   compact/ecal.xml

	modified:   compact/definitions.xml

	modified:   compact/definitions.xml
	modified:   compact/ecal.xml

	modified:   compact/definitions.xml

	modified:   CMakeLists.txt
	modified:   compact/definitions.xml
	modified:   compact/ecal.xml
---
 CMakeLists.txt          |   2 +-
 compact/definitions.xml | 136 ++++++++++++++++++++++++++--------------
 compact/ecal.xml        |  26 ++++----
 3 files changed, 104 insertions(+), 60 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index b2d5e2d..f807d33 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,7 +16,7 @@ set(a_lib_name reference_detector)
 dd4hep_configure_output()
 
 dd4hep_add_plugin(${a_lib_name} SOURCES src/*.cpp
-        USES ActsCore ActsPluginDD4hep
+  #        USES ActsCore ActsPluginDD4hep
   )
 target_link_libraries(${a_lib_name}
   PUBLIC DD4hep::DDCore  DD4hep::DDRec
diff --git a/compact/definitions.xml b/compact/definitions.xml
index c23b1cc..f371c0a 100644
--- a/compact/definitions.xml
+++ b/compact/definitions.xml
@@ -237,13 +237,15 @@
     </comment>
 
     <comment>
-      --------------------------
-      Solenoid Magnet Parameters
-      --------------------------
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      Detector Definition Parameters 
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     </comment>
 
     <comment>
-      These cb_ parameters don't make sense
+      ==========================
+      Solenoid Magnet Parameters
+      ==========================
     </comment>
     <constant name="cb_Solenoid_rmin"  value="0.0 * cm"/>   <comment> Central Barrel Solenoid Inner diameter </comment>
     <constant name="cb_Solenoid_rmax"  value="137.0 * cm"/> <comment> Central Barrel Solenoid Outer diameter </comment>
@@ -253,7 +255,7 @@
     <constant name="Solenoid_thickness"      value="400*mm"/>
     <constant name="Solenoid_rmin"           value="2000.0*mm"/>
     <constant name="Solenoid_rmax"           value="Solenoid_rmin + Solenoid_thickness"/>
-    <constant name="SolenoidLength"          value="4050.0*mm"/>
+    <constant name="SolenoidLength"          value="6000.0*mm"/>
 
     <constant name="SolenoidBarrelCryostatThickness"      value=" 1.0 * cm"/>
     <constant name="SolenoidBarrelGapThickness"           value=" 3.3 * cm"/>
@@ -294,6 +296,24 @@
 
     <constant name="SolenoidYokeChamferAngle"    value="0.2"/>
 
+
+    <comment>
+      ---------------------------------
+      Other Central Detector parameters
+      --------------------------------
+      These are needed here to compute the dependent parameters.
+    </comment>
+    <constant name="RICHLength"       value="1.5*m"/>
+    <constant name="TRDLength"        value="40.0*cm"/>
+    <constant name="ForwardTOFLength" value="10.0*cm"/>
+    <constant name="ForwardPIDLength" value="RICHLength + TRDLength + ForwardTOFLength"/>
+    
+    <constant name="BackwardCherenkovLength"   value="50.0*cm"/>
+    <constant name="BackwardTOFLength"         value="10.0*cm"/>
+    <constant name="BackwardPIDLength"         value="BackwardCherenkovLength + BackwardTOFLength"/>
+
+    <constant name="BarrelPIDThickness"        value="25.0 * cm"/>
+
     <comment>
       ============================
       Tracking Parameters
@@ -308,8 +328,8 @@
       -------------------------
     </comment>
     <constant name="VertexTrackerInnerRadius"       value="30.0*mm"/>
-    <constant name="VertexTrackerOuterRadius"       value="Solenoid_rmin/2.0"/>
-    <constant name="VertexTrackerOuterBarrelLength" value="300.0*mm"/>
+    <constant name="VertexTrackerOuterRadius"       value="90.0*mm"/>
+    <constant name="VertexTrackerOuterBarrelLength" value="400.0*mm"/>
 
 
     <comment>
@@ -318,9 +338,9 @@
       --------------------------
     </comment>
     <constant name="SiliconTrackerInnerRadius"       value="95.0*mm"/>
-    <constant name="SiliconTrackerInnerBarrelLength" value="400.0*mm"/>
+    <constant name="SiliconTrackerInnerBarrelLength" value="500.0*mm"/>
     <constant name="SiliconTrackerOuterRadius"       value="Solenoid_rmax/2.0"/>
-    <constant name="SiliconTrackerOuterBarrelLength" value="SolenoidLength/2.0"/>
+    <constant name="SiliconTrackerOuterBarrelLength" value="SolenoidLength/3.0"/>
 
     <comment>
       -------------------------------
@@ -347,25 +367,37 @@
       ------------
       Calorimeters
       ------------
+      ======================
+      Calorimeter Parameters
+      ======================
+
     </comment>
-    <constant name="EcalBarrel_rmin"                       value="SiliconTrackerOuterRadius + 3.0 * cm"/>
-    <constant name="HcalBarrel_rmax"                       value="Solenoid_rmin - 5.0 *cm "/>
-    <constant name="AvailTotalBarrelCalorimetryThickness"  value="HcalBarrel_rmax - EcalBarrel_rmin"/>
-    <constant name="CalBarrelDivider"                      value="0.5"/> <comment> Ecal and Hcal have the same thickness </comment>
-    <constant name="EcalBarrelAvailTotalThickness"         value="AvailTotalBarrelCalorimetryThickness * CalBarrelDivider"/>
-    <constant name="HcalBarrelAvailTotalThickness"         value="AvailTotalBarrelCalorimetryThickness * (1.0 - CalBarrelDivider)"/>
+    <constant name="EcalBarrel_rmin"            value="SiliconTrackerOuterRadius + BarrelPIDThickness + 3.0 * cm"/>
+    <constant name="HcalBarrel_rmax"            value="Solenoid_rmin - 5.0 *cm "/>
+    <constant name="Barrel_TotalCalThickness"   value="HcalBarrel_rmax - EcalBarrel_rmin"/>
+    <constant name="CalBarrelDivider"           value="0.5"/> <comment> Ecal and Hcal have the same thickness </comment>
+    <constant name="EcalBarrel_TotalThickness"  value="Barrel_TotalCalThickness * CalBarrelDivider"/>
+    <constant name="HcalBarrel_TotalThickness"  value="Barrel_TotalCalThickness * (1.0 - CalBarrelDivider)"/>
+
+    <constant name="EcalBarrelLength"           value="SiliconTrackerOuterBarrelLength + ForwardPIDLength + BackwardPIDLength"/>
+    <constant name="EcalEndcapP_zmin"           value="SiliconTrackerOuterBarrelLength/2.0 + ForwardPIDLength"/>
+    <constant name="EcalEndcapN_zmin"           value="SiliconTrackerOuterBarrelLength/2.0 + BackwardPIDLength"/>
+
+    <constant name="EndcapP_TotalCalThickness"  value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - (EcalEndcapP_zmin + 10.0 * mm)"/>
+    <constant name="EndcapN_TotalCalThickness"  value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - (EcalEndcapN_zmin + 10.0 * mm)"/>
 
-    <constant name="EcalBarrelLength"                      value="SiliconTrackerOuterBarrelLength+50.0*cm"/>
-    <constant name="EcalEndcap_zmin"                       value="EcalBarrelLength/2.0"/>
+    <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="AvailTotalEndcapCalorimetryThickness"  value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - (EcalEndcap_zmin + 10.0 * mm)"/>
-    <constant name="CalEndcapDivider"                      value="0.5"/> <comment> Ecal and Hcal have the same thickness </comment>
-    <constant name="EcalEndcapAvailTotalThickness"         value="AvailTotalEndcapCalorimetryThickness * CalEndcapDivider"/>
-    <constant name="HcalEndcapAvailTotalThickness"         value="AvailTotalEndcapCalorimetryThickness * (1.0 - CalEndcapDivider)"/>
+    <constant name="EcalEndcapP_TotalThickness" value="EndcapP_TotalCalThickness * EndcapP_CalDivide"/>
+    <constant name="EcalEndcapN_TotalThickness" value="EndcapN_TotalCalThickness * EndcapN_CalDivide"/>
+
+    <constant name="HcalEndcapP_TotalThickness" value="EndcapP_TotalCalThickness * (1.0 - EndcapP_CalDivide)"/>
+    <constant name="HcalEndcapN_TotalThickness" value="EndcapN_TotalCalThickness * (1.0 - EndcapN_CalDivide)"/>
 
     <comment> These need to be set in sync with the forward and backward  detectors </comment>
-    <constant name="EcalEndcapP_rmin"                      value="250.0*mm"/>
-    <constant name="EcalEndcapN_rmin"                      value="350.0*mm"/>
+    <constant name="EcalEndcapP_rmin"                      value="200.0*mm"/>
+    <constant name="EcalEndcapN_rmin"                      value="300.0*mm"/>
 
     <constant name="HcalEndcapP_rmin"                      value="250.0 * mm"/>
     <constant name="HcalEndcapN_rmin"                      value="350.0 * mm"/>
@@ -374,6 +406,14 @@
       -------------------------
       EM Calorimeter Parameters
       -------------------------
+
+       ## Note about Calormieter parameterization.
+      
+       The logic goes like this: 
+       1. The space for the calorimeter is fixed via parameterization above.
+       2. The layer thicknesses are fixed (first parameters below)
+       3. From the space/thickness the number of layers is computed.
+
     </comment>
     <constant name="CaloSides"                  value="12"/>
 	    
@@ -388,30 +428,39 @@
 	    
     <comment> Layer Thickness  </comment>
     <constant name="EcalFirstLayerThickness"
-	    value="EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
+	      value="EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
     <constant name="EcalThinOneLayerThickness"   
-	    value="EcalThinTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
+	      value="EcalThinTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
     <constant name="EcalThickOneLayerThickness"   
-	    value="EcalThickTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
+	      value="EcalThickTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
 	    
     <comment> EM Barrel N Layer; same number of layers for EcalThin and EcalThick</comment>
     <constant name="EcalBarrelLayers" 
-	    value="floor((EcalBarrelAvailTotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/>
+	      value="floor((EcalBarrel_TotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/>
     <constant name="EcalBarrelThinLayers"       value="EcalBarrelLayers"/>
     <constant name="EcalBarrelThickLayers"      value="EcalBarrelLayers"/>
+
     <comment> EM Barrel Thickness </comment>
     <constant name="EcalBarrelThickness"
-	    value="EcalFirstLayerThickness + (EcalBarrelThinLayers * EcalThinOneLayerThickness) + (EcalBarrelThickLayers * EcalThickOneLayerThickness)"/>
+	      value="EcalFirstLayerThickness + (EcalBarrelThinLayers * EcalThinOneLayerThickness) + (EcalBarrelThickLayers * EcalThickOneLayerThickness)"/>
     <constant name="EcalBarrel_rmax"            value="EcalBarrel_rmin + EcalBarrelThickness"/>
 
     <comment> EM Endcap N Layer; same number of layers for EcalThin and EcalThick </comment>
-    <constant name="EcalEndcapLayers" 
-	    value="floor((EcalEndcapAvailTotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/>
-    <constant name="EcalEndcapThinLayers"       value="EcalEndcapLayers"/>
-    <constant name="EcalEndcapThickLayers"      value="EcalEndcapLayers"/>
+    <constant name="EcalEndcapPLayers" 
+	      value="floor((EcalEndcapP_TotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/>
+    <constant name="EcalEndcapNLayers" 
+	      value="floor((EcalEndcapN_TotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/>
+    <constant name="EcalEndcapP_NThinLayers"       value="EcalEndcapPLayers"/>
+    <constant name="EcalEndcapP_NThickLayers"      value="EcalEndcapPLayers"/>
+    <constant name="EcalEndcapN_NThinLayers"       value="EcalEndcapNLayers"/>
+    <constant name="EcalEndcapN_NThickLayers"      value="EcalEndcapNLayers"/>
+
     <comment> EM Endcap Thickness </comment>
-    <constant name="EcalEndcapThickness"        
-	    value="EcalFirstLayerThickness + (EcalEndcapThinLayers * EcalThinOneLayerThickness) + (EcalEndcapThickLayers * EcalThickOneLayerThickness)"/>
+    <constant name="EcalEndcapPThickness"        
+	      value="EcalFirstLayerThickness + (EcalEndcapP_NThinLayers * EcalThinOneLayerThickness) + (EcalEndcapP_NThickLayers * EcalThickOneLayerThickness)"/>
+    <constant name="EcalEndcapNThickness"        
+	      value="EcalFirstLayerThickness + (EcalEndcapN_NThinLayers * EcalThinOneLayerThickness) + (EcalEndcapN_NThickLayers * EcalThickOneLayerThickness)"/>
+
 
     <comment>
       -------------------------------
@@ -420,7 +469,7 @@
     </comment>
     <constant name="HcalBarrel_rmin"          value="EcalBarrel_rmax+10.0*mm"/>
     <constant name="HcalBarrelAvailThickness" value="HcalBarrel_rmax - HcalBarrel_rmin"/>
-    <constant name="HcalBarrelLength"         value="EcalBarrelLength+2.0*EcalEndcapThickness + 10.0*mm "/>
+    <constant name="HcalBarrelLength"         value="EcalBarrelLength + EcalEndcapP_TotalThickness + EcalEndcapN_TotalThickness + 10.0*mm "/>
     <constant name="HcalEndcap_zmin"          value="HcalBarrelLength/2.0"/>
     <constant name="HcalEndcapAvailThickness" value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - HcalEndcap_zmin"/>
 
@@ -489,10 +538,10 @@
       Gaseous RICH Parameters
       -----------------------
     </comment>
-    <constant name="RICHZMin" value="SolenoidYokeEndcap_zmin + 1 * cm"/>
-    <constant name="RICHRMin" value="15 * cm"/>
-    <constant name="RICHRMax" value="60 * cm"/>
-    <constant name="RICHDepth" value="1 * m"/>
+    <constant name="RICHZMin"  value="SiliconTrackerOuterBarrelLength/2.0 + 1 * cm"/>
+    <constant name="RICHRMin"  value="15 * cm"/>
+    <constant name="RICHRMax"  value="60 * cm"/>
+    <constant name="RICHDepth" value="1.0*m"/>
 
 
     <comment>
@@ -500,15 +549,6 @@
       Forward Tracker Parameters
       --------------------------
     </comment>
-    <constant name="TempForwardTrackerSpace" value="1.5 * m"/>
-    <constant name="ForwardEcalZMin" value="RICHZMin + RICHDepth + TempForwardTrackerSpace"/>
-    <constant name="ForwardCaloAngle" value="2 * SolenoidYokeChamferAngle"/>
-    <constant name="ForwardEcalRInner" value="10 * cm"/>
-    <constant name="ForwardEcalROuter" value="EcalBarrel_rmin + tan(SolenoidYokeChamferAngle) * (RICHDepth) + tan(ForwardCaloAngle) * (ForwardEcalZMin - RICHZMin - RICHDepth)"/>
-    <constant name="ForwardHcalZMin" value="RICHZMin + RICHDepth + TempForwardTrackerSpace + EcalEndcapThickness + 1 * mm"/>
-    <constant name="ForwardHcalAngle" value="ForwardCaloAngle"/>
-    <constant name="ForwardHcalRInner" value="10 * cm"/>
-    <constant name="ForwardHcalROuter" value="ForwardEcalROuter + tan(ForwardCaloAngle) * (ForwardHcalZMin - ForwardEcalZMin)"/>
 
     <comment>
       --------------------------
diff --git a/compact/ecal.xml b/compact/ecal.xml
index be2a125..a58ad10 100644
--- a/compact/ecal.xml
+++ b/compact/ecal.xml
@@ -9,7 +9,7 @@
     <constant name="CrystalBox_offset"   value="0.000001*mm"/>
     <constant name="CrystalEndcap_x_pos" value="0.0*m"/>
     <constant name="CrystalEndcap_y_pos" value="0.0*m"/>
-    <constant name="CrystalEndcap_z_pos" value="-EcalEndcap_zmin"/>
+    <constant name="CrystalEndcap_z_pos" value="-EcalEndcapN_zmin"/>
   </define>
 
 
@@ -69,21 +69,22 @@
     </detector>
 
     <comment>
-      -----------------------------
-      Forward Endcap EM Calorimeter
-      -----------------------------
+      ------------------------------------------
+      Forward (Positive Z) Endcap EM Calorimeter
+      ------------------------------------------
       A layered EM calorimeter with tungsten and silicon (or scintillator) strips
     </comment>
+    <!--
     <detector id="ECalEndcapP_ID" 
       name="EcalEndcapP" 
       reflect="false" 
-      type="DD4hep_PolyhedraEndcapCalorimeter2" 
+      type="refdet_PolyhedraEndcapCalorimeter2" 
       readout="EcalEndcapHits" 
       vis="EcalEndcapVis" 
       calorimeterType="EM_ENDCAP" >
       <dimensions 
         numsides="CaloSides" 
-        zmin="EcalEndcap_zmin" 
+        zmin="EcalEndcapP_zmin" 
         rmin="EcalEndcapP_rmin" 
         rmax="EcalBarrel_rmax " />
       <layer repeat="1">
@@ -92,7 +93,7 @@
         <slice material="Kapton" thickness="EcalKaptonThickness"/>
         <slice material="Air" thickness="EcalAir1Thickness"/>
       </layer>
-      <layer repeat="EcalEndcapThinLayers">
+      <layer repeat="EcalEndcapP_NThinLayers">
         <slice material="TungstenDens24" thickness="EcalThinTungstenThickness"/>
         <slice material="Air" thickness="EcalAir2Thickness"/>
         <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
@@ -100,7 +101,7 @@
         <slice material="Kapton" thickness="EcalKaptonThickness"/>
         <slice material="Air" thickness="EcalAir1Thickness"/>
       </layer>
-      <layer repeat="EcalEndcapThickLayers">
+      <layer repeat="EcalEndcapP_NThickLayers">
         <slice material="TungstenDens24" thickness="EcalThickTungstenThickness"/>
         <slice material="Air" thickness="EcalAir2Thickness"/>
         <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
@@ -110,6 +111,7 @@
       </layer>
     </detector>
 
+-->
 
     <comment>
       -------------------------------
@@ -117,6 +119,7 @@
       -------------------------------
       A layered EM calorimeter with tungsten and silicon (or scintillator) strips
     </comment>
+    <!--
     <detector id="ECalEndcapN_ID" 
       name="EcalEndcapN" 
       type="refdet_PolyhedraEndcapCalorimeter2" 
@@ -126,7 +129,7 @@
       calorimeterType="EM_ENDCAP">
       <dimensions 
         numsides="CaloSides" 
-        zmin="EcalEndcap_zmin" 
+        zmin="EcalEndcapN_zmin" 
         rmin="EcalEndcapN_rmin" 
         rmax="EcalBarrel_rmax " />
       <layer repeat="1">
@@ -135,7 +138,7 @@
         <slice material="Kapton" thickness="EcalKaptonThickness"/>
         <slice material="Air" thickness="EcalAir1Thickness"/>
       </layer>
-      <layer repeat="EcalEndcapThinLayers">
+      <layer repeat="EcalEndcapN_NThinLayers">
         <slice material="TungstenDens24" thickness="EcalThinTungstenThickness"/>
         <slice material="Air" thickness="EcalAir2Thickness"/>
         <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
@@ -143,7 +146,7 @@
         <slice material="Kapton" thickness="EcalKaptonThickness"/>
         <slice material="Air" thickness="EcalAir1Thickness"/>
       </layer>
-      <layer repeat="EcalEndcapThickLayers">
+      <layer repeat="EcalEndcapN_NThickLayers">
         <slice material="TungstenDens24" thickness="EcalThickTungstenThickness"/>
         <slice material="Air" thickness="EcalAir2Thickness"/>
         <slice material="Silicon" thickness="EcalSiliconThickness" sensitive="yes" limits="cal_limits"/>
@@ -152,6 +155,7 @@
         <slice material="Air" thickness="EcalAir1Thickness"/>
       </layer>
     </detector>
+    -->
   </detectors>
 
   <!--  Definition of the readout segmentation/definition  -->
-- 
GitLab