diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f542de902dab315afd91f6b6c5e0413dd005bd50..804c834b6a373d8c557c38150ba6cf537a1312c3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -12,6 +12,7 @@ default:
       dotenv: juggler.env
   before_script:
     - git clone https://eicweb.phy.anl.gov/EIC/NPDet.git
+      #- git clone https://eicweb.phy.anl.gov/EIC/NPDet.git && mkdir NPDet/build && cd NPDet/build && cmake ../. -DCMAKE_INSTALL_PREFIX=/usr/local && make -j20 install && cd ../..
     - git clone https://eicweb.phy.anl.gov/EIC/detectors/topside.git && mkdir topside/build && cd topside/build && cmake ../. -DCMAKE_INSTALL_PREFIX=/usr/local && make -j20 install && cd ../..
     - git clone https://eicweb.phy.anl.gov/EIC/detectors/accelerator.git && cd topside && ln -s ../accelerator/eic && cd ../.
 
diff --git a/calorimeters/CentralBarrel_AMEGOX.xml b/calorimeters/CentralBarrel_AMEGOX.xml
index 708ce6d8b4f46d2b2213d10d415cb2d889ec0c4f..ba8d8534cfd8253e36fed819421e7c350a053f03 100644
--- a/calorimeters/CentralBarrel_AMEGOX.xml
+++ b/calorimeters/CentralBarrel_AMEGOX.xml
@@ -24,16 +24,19 @@
     <constant name="world_y" value="world_side"/>
     <constant name="world_z" value="world_side"/>
 
+    <constant name="tracker_region_zmax" value="6.0 * m"/>
+    <constant name="tracker_region_rmax" value="6.0 * m"/>
+
     <constant name="cb_ECal_rmin" value="1.3*m" />
     <constant name="cb_ECal_length" value="4.0*m"/>
     <constant name="cb_ECal_mod_length" value="0.5*m"/>
     <constant name="cb_ECal_mod_width" value="0.5*m"/>
 
-    <constant name="cb_ECal_SiliconThickness" value="500*um"/>
-    <constant name="cb_ECal_ElectronicsThickness" value="150*um"/>
-    <constant name="cb_ECal_CopperThickness" value="100*um"/>
-    <constant name="cb_ECal_KaptonThickness" value="200*um"/>
-    <constant name="cb_ECal_EpoxyThickness" value="100*um"/>
+    <constant name="cb_ECal_SiliconThickness" value="0.5*mm"/>
+    <constant name="cb_ECal_ElectronicsThickness" value="0.15*mm"/>
+    <constant name="cb_ECal_CopperThickness" value="0.1*mm"/>
+    <constant name="cb_ECal_KaptonThickness" value="0.2*mm"/>
+    <constant name="cb_ECal_EpoxyThickness" value="0.1*mm"/>
     <constant name="cb_ECal_CarbonThickness" value="0.5*mm"/>
     <constant name="cb_ECal_CarbonSpacerWidth" value="4*mm"/>
     <constant name="cb_ECal_LayerSpacing" value="5*mm"/>
@@ -106,7 +109,7 @@
   <readouts>
     <readout name="EcalBarrelHits">
       <segmentation type="CartesianGridXY" grid_size_x="2.0 * cm" grid_size_y="2.0 * cm"/>
-      <id>system:8,barrel:3,module:4,layer:6,slice:5,x:32:-16,y:-16</id>
+      <id>system:8,barrel:3,module:4,layer:10,slice:5,x:32:-16,y:-16</id>
     </readout>
   </readouts>
 
diff --git a/calorimeters/options/emcal_barrel_reco.py b/calorimeters/options/emcal_barrel_reco.py
index b93775f72012259d06cb274f66185f91d643f287..8daa925316958a6e42eb60993f272118477b41be 100644
--- a/calorimeters/options/emcal_barrel_reco.py
+++ b/calorimeters/options/emcal_barrel_reco.py
@@ -44,7 +44,7 @@ from Configurables import Jug__Reco__SamplingECalHitsMerger as SamplingECalHitsM
 from Configurables import Jug__Reco__CalorimeterIslandCluster as IslandCluster
 from Configurables import Jug__Reco__ClusterRecoCoG as RecoCoG
 
-podioinput = PodioInput("PodioReader", collections=["mcparticles","EcalBarrelHits"], OutputLevel=DEBUG)
+podioinput = PodioInput("PodioReader", collections=["mcparticles","EcalBarrelAstroPixHits"], OutputLevel=DEBUG)
 
 # Thrown Information
 copier = MCCopier("MCCopier", 
@@ -53,44 +53,49 @@ copier = MCCopier("MCCopier",
         OutputLevel=DEBUG) 
 # Geant4 Information
 embarrelcopier = CalCopier("CalBarrelCopier", 
-        inputCollection="EcalBarrelHits", 
-        outputCollection="EcalBarrelHits2",
+        inputCollection="EcalBarrelAstroPixHits", 
+        outputCollection="EcalBarrelAstroPixHits2",
         OutputLevel=DEBUG)
 # Digitization
 embarreldigi = EcalTungstenSamplingDigi("ecal_barrel_digi", 
-        inputHitCollection="EcalBarrelHits", 
-        outputHitCollection="RawEcalBarrelHits",
+        inputHitCollection="EcalBarrelAstroPixHits", 
+        outputHitCollection="RawEcalBarrelAstroPixHits",
         inputEnergyUnit=units.GeV,
         inputTimeUnit=units.ns,
+        dynamicRangeADC=700*units.keV, 
+        energyResolutions=[0., 0.02, 0.], 
+        pedestalSigma=40,
         OutputLevel=DEBUG)
 # Reconstruction
 embarrelreco = EcalTungstenSamplingReco("ecal_barrel_reco", 
-        inputHitCollection="RawEcalBarrelHits", 
-        outputHitCollection="RecoEcalBarrelHits",
+        inputHitCollection="RawEcalBarrelAstroPixHits", 
+        outputHitCollection="RecoEcalBarrelAstroPixHits",
+        dynamicRangeADC=700*units.keV, 
+        pedestalSigma=40,
         OutputLevel=DEBUG)
 # 2D+1 Clusterings
 # readout id definition for barrel ecal
-# <id>system:8,barrel:3,module:4,layer:6,slice:5,x:32:-16,y:-16</id>
-# xy_merger sum layers/slices, masking (8+3+4, 8+3+4+5+6-1)
+# <id>system:8,barrel:3,module:4,layer:10,slice:5,x:32:-16,y:-16</id>
+# xy_merger sum layers/slices, masking (8+3+4, 8+3+4+5+10-1)
 embarrelxymerger = SamplingECalHitsMerger("ecal_barrel_xy_merger",
-        cellIDMaskRanges=[(15, 25)],
-        inputHitCollection="RecoEcalBarrelHits",
-        outputHitCollection="RecoEcalBarrelHitsXY")
-# xy_merger sum modules, masking (8+3+4+5+6, 8+3+4+5+6+32-1)
+        cellIDMaskRanges=[(15, 29)],
+        inputHitCollection="RecoEcalBarrelAstroPixHits",
+        outputHitCollection="RecoEcalBarrelAstroPixHitsXY")
+# xy_merger sum modules, masking (8+3+4+5+10, 8+3+4+5+10+32-1)
 embarrelzmerger = SamplingECalHitsMerger("ecal_barrel_z_merger",
-        cellIDMaskRanges=[(26, 57)],
-        inputHitCollection="RecoEcalBarrelHits",
-        outputHitCollection="RecoEcalBarrelHitsZ")
+        cellIDMaskRanges=[(30, 61)],
+        inputHitCollection="RecoEcalBarrelAstroPixHits",
+        outputHitCollection="RecoEcalBarrelAstroPixHitsZ")
 # Clustering
 embarrelcluster = IslandCluster("ecal_barrel_cluster",
-        inputHitCollection="RecoEcalBarrelHitsXY",
-        outputClusterCollection="EcalBarrelClusters",
-        minClusterCenterEdep=5.0*units.MeV,
+        inputHitCollection="RecoEcalBarrelAstroPixHitsXY",
+        outputClusterCollection="EcalBarrelAstroPixClusters",
+        minClusterCenterEdep=0.5*units.MeV,
         splitCluster=False,
-        groupRange=5.0)
+        groupRanges=[2.0*units.cm, 2.0*units.cm, 2.0*units.cm])
 # Reconstruct the cluster with Center of Gravity method
 embarrelclusterreco = RecoCoG("ecal_barrel_clusterreco",
-        clusterCollection="EcalBarrelClusters", 
+        clusterCollection="EcalBarrelAstroPixClusters", 
         logWeightBase=6.2) 
 
 out = PodioOutput("out", filename=output_rec_file)
diff --git a/calorimeters/run_emcal_barrel_electrons.sh b/calorimeters/run_emcal_barrel_electrons.sh
index 3634a1cb5fdf79d6ac3572263e1de32696ddc281..b735f190f2cd8f60cb7d8bac11e80d2440bbbd81 100755
--- a/calorimeters/run_emcal_barrel_electrons.sh
+++ b/calorimeters/run_emcal_barrel_electrons.sh
@@ -47,7 +47,7 @@ npsim --runType batch \
       -v WARNING \
       --part.minimalKineticEnergy 0.5*GeV  \
       --numberOfEvents ${JUGGLER_N_EVENTS} \
-      --compactFile topside/${JUGGLER_DETECTOR}.xml \
+      --compactFile ${JUGGLER_DETECTOR}/${JUGGLER_DETECTOR}.xml \
       --inputFiles ${JUGGLER_FILE_NAME_TAG}.hepmc \
       --outputFile sim_output/${JUGGLER_SIM_FILE}
 
diff --git a/calorimeters/run_emcal_barrel_pions.sh b/calorimeters/run_emcal_barrel_pions.sh
index 8ce7ee4a7db64172f7284d7c42be0d1ed6eb2ffb..f82bfaa9bc974a5b4207b137d964738f51d311d8 100755
--- a/calorimeters/run_emcal_barrel_pions.sh
+++ b/calorimeters/run_emcal_barrel_pions.sh
@@ -47,7 +47,7 @@ npsim --runType batch \
       -v WARNING \
       --part.minimalKineticEnergy 0.5*GeV  \
       --numberOfEvents ${JUGGLER_N_EVENTS} \
-      --compactFile topside/${JUGGLER_DETECTOR}.xml \
+      --compactFile ${JUGGLER_DETECTOR}/${JUGGLER_DETECTOR}.xml \
       --inputFiles ${JUGGLER_FILE_NAME_TAG}.hepmc \
       --outputFile sim_output/${JUGGLER_SIM_FILE}
 
diff --git a/calorimeters/scripts/emcal_barrel_electrons_analysis.cxx b/calorimeters/scripts/emcal_barrel_electrons_analysis.cxx
index 1ad13946f5f6c29c09d57a651ceb45da70ab001e..828ba6130046a3ab2fd2667024099fbc86570ced 100644
--- a/calorimeters/scripts/emcal_barrel_electrons_analysis.cxx
+++ b/calorimeters/scripts/emcal_barrel_electrons_analysis.cxx
@@ -92,10 +92,10 @@ void emcal_barrel_electrons_analysis(const char* input_fname = "sim_output/rec_e
 
   // Define variables
   auto d1 = d0.Define("Ethr",      Ethr,       {"mcparticles2"})
-	      .Define("ErecXY",    ErecXY,     {"RecoEcalBarrelHitsXY"})
-	      .Define("ErecZ",     ErecZ,      {"RecoEcalBarrelHitsZ"})
-	      .Define("ncluster",  ncluster,   {"EcalBarrelClusters"})
-	      .Define("Ecluster",  Ecluster,   {"EcalBarrelClusters"})
+	      .Define("ErecXY",    ErecXY,     {"RecoEcalBarrelAstroPixHitsXY"})
+	      .Define("ErecZ",     ErecZ,      {"RecoEcalBarrelAstroPixHitsZ"})
+	      .Define("ncluster",  ncluster,   {"EcalBarrelAstroPixClusters"})
+	      .Define("Ecluster",  Ecluster,   {"EcalBarrelAstroPixClusters"})
 	      .Define("fsam",      fsam,       {"Ecluster","Ethr"})
 	      ;
 
@@ -105,7 +105,7 @@ void emcal_barrel_electrons_analysis(const char* input_fname = "sim_output/rec_e
   auto hErecZ    = d1.Histo1D({"hErecZ",    "Reconstructed Energy in Z merger; Reconstructed Energy [GeV]; Events",  100, -0.5, 10.5}, "ErecZ");
   auto hNCluster = d1.Histo1D({"hNCluster", "Number of Clusters; # of Clusters; Events",                              20, -0.5, 20.5}, "ncluster");
   auto hEcluster = d1.Histo1D({"hEcluster", "Cluster Energy; Cluster Energy [GeV]; Events",                          100, -0.5, 10.5}, "Ecluster");
-  auto hfsam     = d1.Histo1D({"hfsam",     "Sampling Fraction; Sampling Fraction; Events",                          100,  0.0,  1.0}, "fsam");
+  auto hfsam     = d1.Histo1D({"hfsam",     "Sampling Fraction; Sampling Fraction; Events",                          100,  0.0,  0.1}, "fsam");
 
   // Event Counts
   auto nevents_thrown      = d1.Count();
@@ -162,7 +162,7 @@ void emcal_barrel_electrons_analysis(const char* input_fname = "sim_output/rec_e
   hfsam->GetYaxis()->SetTitleOffset(1.4);
   hfsam->SetLineWidth(2);
   hfsam->SetLineColor(kBlue);
-  hfsam->Fit("gaus","","",0.1,1.0);
+  hfsam->Fit("gaus","","",0.01,0.1);
   hfsam->GetFunction("gaus")->SetLineWidth(2);
   hfsam->GetFunction("gaus")->SetLineColor(kRed);
   hfsam->DrawClone();
diff --git a/calorimeters/scripts/emcal_barrel_pions_analysis.cxx b/calorimeters/scripts/emcal_barrel_pions_analysis.cxx
index 01c9ac7fb00b0a1d44a4098cc7524a1b0ee181d2..5a91f99a147416417ed84f24f3d4073a9e6a3974 100644
--- a/calorimeters/scripts/emcal_barrel_pions_analysis.cxx
+++ b/calorimeters/scripts/emcal_barrel_pions_analysis.cxx
@@ -92,10 +92,10 @@ void emcal_barrel_pions_analysis(const char* input_fname = "sim_output/rec_emcal
 
   // Define variables
   auto d1 = d0.Define("Ethr",      Ethr,       {"mcparticles2"})
-	      .Define("ErecXY",    ErecXY,     {"RecoEcalBarrelHitsXY"})
-	      .Define("ErecZ",     ErecZ,      {"RecoEcalBarrelHitsZ"})
-	      .Define("ncluster",  ncluster,   {"EcalBarrelClusters"})
-	      .Define("Ecluster",  Ecluster,   {"EcalBarrelClusters"})
+	      .Define("ErecXY",    ErecXY,     {"RecoEcalBarrelAstroPixHitsXY"})
+	      .Define("ErecZ",     ErecZ,      {"RecoEcalBarrelAstroPixHitsZ"})
+	      .Define("ncluster",  ncluster,   {"EcalBarrelAstroPixClusters"})
+	      .Define("Ecluster",  Ecluster,   {"EcalBarrelAstroPixClusters"})
 	      .Define("fsam",      fsam,       {"Ecluster","Ethr"})
 	      ;
 
@@ -105,7 +105,7 @@ void emcal_barrel_pions_analysis(const char* input_fname = "sim_output/rec_emcal
   auto hErecZ    = d1.Histo1D({"hErecZ",    "Reconstructed Energy in Z merger; Reconstructed Energy [GeV]; Events",  100, -0.5, 10.5}, "ErecZ");
   auto hNCluster = d1.Histo1D({"hNCluster", "Number of Clusters; # of Clusters; Events",                              20, -0.5, 20.5}, "ncluster");
   auto hEcluster = d1.Histo1D({"hEcluster", "Cluster Energy; Cluster Energy [GeV]; Events",                          100, -0.5, 10.5}, "Ecluster");
-  auto hfsam     = d1.Histo1D({"hfsam",     "Sampling Fraction; Sampling Fraction; Events",                          100,  0.0,  1.0}, "fsam");
+  auto hfsam     = d1.Histo1D({"hfsam",     "Sampling Fraction; Sampling Fraction; Events",                          100,  0.0,  0.1}, "fsam");
 
   // Event Counts
   auto nevents_thrown      = d1.Count();
@@ -162,7 +162,7 @@ void emcal_barrel_pions_analysis(const char* input_fname = "sim_output/rec_emcal
   hfsam->GetYaxis()->SetTitleOffset(1.4);
   hfsam->SetLineWidth(2);
   hfsam->SetLineColor(kBlue);
-  hfsam->Fit("gaus","","",0.1,1.0);
+  hfsam->Fit("gaus","","",0.01,0.1);
   hfsam->GetFunction("gaus")->SetLineWidth(2);
   hfsam->GetFunction("gaus")->SetLineColor(kRed);
   hfsam->DrawClone();
diff --git a/calorimeters/topside_defs.xml b/calorimeters/topside_defs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7bc0cc49ef3c3b2aaefcee4e491d4248b4b9de5f
--- /dev/null
+++ b/calorimeters/topside_defs.xml
@@ -0,0 +1,462 @@
+  <define>
+    <comment>Although not explicit in the design study, the eRHIC crossing angle is not symmetric.</comment>
+    <constant name="CrossingAngle" value="0.025"/>
+    <constant name="ionCrossingAngle" value="0.0166667"/>
+    <constant name="electronCrossingAngle" value="0.00833333"/>
+    <constant name="CrossingSlope" value="0.0166682"/>
+
+    <constant name="Pi" value="3.14159265359"/>
+    <constant name="world_side" value="30*m"/>
+    <constant name="world_x" value="world_side"/>
+    <constant name="world_y" value="world_side"/>
+    <constant name="world_z" value="100*m"/>
+
+    <constant name="mil" value="0.0254*mm"/>
+
+    <comment>
+      ------------
+      Detector IDs
+      ------------
+
+      Note about ACTS tracking geometry construction
+      ----------------------------------------------
+
+      The tracking surfaces need to be structured in a barrel + endcapP + endcapN where 
+      endcapP/endcapN are the endcaps at positive/negative z values. 
+      See https://acts.readthedocs.io/en/latest/plugins/dd4hep.html for more details.
+
+      The tracking geometry needs to beconstructed from cylinders from the inside out. For this reason
+      each layer needs its own subsystem assembly. This increases the number of top level system IDs. 
+      For example the silicon tracker needs 3 IDs for each area (endcap+barrel+endcap) and a subassembly for each
+      layer. Therefore it needs a minimum of 20 IDs. Therefore we will allocate blocks of ~25 for each major subsystem.
+      Note, future improvements will likely include a more sophisticated ACTS-dd4hep plugin, 
+      eliminating the need for so many system IDs at construction time.
+
+      This barrel/endcap structure needs IDs to be in increasing order going outward. 
+      The space of IDs for the subassemblies starts at (Subassembly_ID*10+101).
+
+      The unused IDs below are saved for future use.
+    </comment>
+
+
+    <comment> 
+      ===================
+      (1-9) Reserved IDs
+      ===================
+      Unused IDs: 1-9 
+
+      ====================================
+      (10-24) Interaction region beamline 
+      ====================================
+
+      Beampipe ID : 10
+      Unused   IDs: 11-24
+
+    </comment> 
+    <constant name="BeamPipe_ID" value="10"/>
+
+
+    <comment> 
+      ===============================
+      (25-49) Silicon Vertex Tracker
+      ===============================
+      SiVertex subsystem  ID: 25 
+      Layer 1 subassembly ID: 26
+      Layer 2 subassembly ID: 27
+      Layer 3 subassembly ID: 28
+      Layer 4 subassembly ID: 29
+      Layer 5 subassembly ID: 30
+    </comment>
+    <constant name="SiVertexSubAssembly_ID" value="25"/>
+    <comment>
+      Unused values reserved for vertex:
+      constant name="SiVertexSubAssemblyLayer1_ID" value="121"
+      constant name="SiVertexSubAssemblyLayer2_ID" value="122"
+      constant name="SiVertexSubAssemblyLayer3_ID" value="123"
+      constant name="SiVertexSubAssemblyLayer4_ID" value="124"
+      constant name="SiVertexSubAssemblyLayer5_ID" value="125"
+    </comment>
+
+    <comment>
+      ===============================
+      (50-74) Silicon Tracker System
+      ===============================
+
+      SiTracker subsystem  ID: 50
+      Layer 1 subassembly  ID: 51      
+      Layer 2 subassembly  ID: 52      
+      Layer 3 subassembly  ID: 53
+      Layer 4 subassembly  ID: 54
+      Layer 5 subassembly  ID: 55
+
+      (56-70) etc...
+
+      Unused IDs: 71-74
+
+    </comment>
+
+    <constant name="SiTrackerSubAssembly_ID" value="50"/>
+    <constant name="SiTrackerSubAssemblyLayer1_ID" value="51"/>
+    <constant name="SiTrackerSubAssemblyLayer2_ID" value="52"/>
+    <constant name="SiTrackerSubAssemblyLayer3_ID" value="53"/>
+    <constant name="SiTrackerSubAssemblyLayer4_ID" value="54"/>
+    <constant name="SiTrackerSubAssemblyLayer5_ID" value="55"/>
+
+    <constant name="SiTrackerBarrel_Layer1_ID"      value="56"/>
+    <constant name="SiTrackerEndcapP_Layer1_ID"     value="57"/>
+    <constant name="SiTrackerEndcapN_Layer1_ID"     value="58"/>
+
+    <constant name="SiTrackerBarrel_Layer2_ID"      value="59"/>
+    <constant name="SiTrackerEndcapP_Layer2_ID"     value="60"/>
+    <constant name="SiTrackerEndcapN_Layer2_ID"     value="61"/>
+
+    <constant name="SiTrackerBarrel_Layer3_ID"      value="62"/>
+    <constant name="SiTrackerEndcapP_Layer3_ID"     value="63"/>
+    <constant name="SiTrackerEndcapN_Layer3_ID"     value="64"/>
+
+    <constant name="SiTrackerBarrel_Layer4_ID"      value="65"/>
+    <constant name="SiTrackerEndcapP_Layer4_ID"     value="66"/>
+    <constant name="SiTrackerEndcapN_Layer4_ID"     value="67"/>
+
+    <constant name="SiTrackerBarrel_Layer5_ID"      value="68"/>
+    <constant name="SiTrackerEndcapP_Layer5_ID"     value="69"/>
+    <constant name="SiTrackerEndcapN_Layer5_ID"     value="70"/>
+
+    <comment> 
+    ===================
+    (75-99 Reserved IDs
+    ===================
+
+    Unused IDs: 75-99 
+    TBD 
+    </comment>
+
+    <comment> 
+      =====================================
+      (100-109) Electromagnetic Calorimeter
+      =====================================
+
+      ECal     subsystem  ID:  100
+      Barrel   subassembly ID: 101
+      EndcapP  subassembly ID: 102
+      EndcapN  subassembly ID: 103
+      Crystal  subassembly ID: 104
+
+      Unused IDs: 105-109
+
+    </comment>
+    <constant name="ECalSubAssembly_ID" value="100"/>
+    <constant name="ECalBarrel_ID"      value="101"/>
+    <constant name="ECalEndcapP_ID"     value="102"/>
+    <constant name="ECalEndcapN_ID"     value="103"/>
+    <constant name="CrystalEndcap_ID"   value="104"/>
+
+    <comment> 
+      =====================================
+      (110-119Hadronic Calorimeter
+      =====================================
+
+      HCal     subsystem  ID:  110
+      Barrel   subassembly ID: 111
+      EndcapP  subassembly ID: 112
+      EndcapN  subassembly ID: 113
+
+      Unused IDs: 114-119
+    </comment>
+    <constant name="HCalSubAssembly_ID" value="110"/>
+    <constant name="HCalBarrel_ID"      value="111"/>
+    <constant name="HCalEndcapP_ID"     value="112"/>
+    <constant name="HCalEndcapN_ID"     value="113"/>
+
+    <comment> 
+      =====================================
+      (120-129) (near) Forward reserved
+      =====================================
+
+      Forwardtracking ID: 120
+      Forward RICH    ID: 121
+
+      Unused IDs: 122-129
+    </comment>
+    <constant name="ForwardTracking_ID" value="120"/>
+    <constant name="ForwardRICH_ID"     value="121"/>
+
+    <comment> 
+      =====================================
+      (130-139) Backward reserved
+      =====================================
+
+      TBD
+
+    </comment>
+
+    <comment> 
+      =====================================
+      (140-149) Central Magnet
+      =====================================
+
+      Solenoid         ID: 140
+      Solenoid support ID: 141
+      Solenoid Yoke    ID: 142
+
+      Unused IDs: 143-149
+
+    </comment>
+    <constant name="Solenoid_ID"             value="140"/>
+    <constant name="SolenoidSupport_ID"      value="141"/>
+    <constant name="SolenoidYoke_ID"         value="142"/>
+
+    <comment> 
+      =====================================
+      (150-169) Far Forward  Detectors
+      =====================================
+
+      Forward Roman Pot ID: 150
+      Zero Degree Cal.  ID: 160
+
+    </comment>
+    <constant name="ForwardRomanPot_ID" value="150"/>
+    <constant name="ZDC_ID"             value="160"/>
+
+    <comment> 
+      =====================================
+      (170-189) Forward Beamline Magnets
+      =====================================
+    </comment>
+
+    <comment> 
+      =====================================
+      (190-199) Backward Beamline Magnets
+      =====================================
+    </comment>
+
+
+
+    <comment> 
+      For reference, here are the sPhenix solenoid and calorimeter Parameters.
+    </comment>
+    <constant name="sPhenixCoilInnerRadius" value="1420.0*mm"/>
+    <constant name="sPhenixCoilOuterRadius" value="1800.0*mm"/><!-- guestimate -->
+    <constant name="sPhenixCoilLength" value="4050.0*mm"/> <!-- guestimate -->
+    <constant name="sPhenixEMCalInnerRadius" value="890.00*mm"/>
+    <constant name="sPhenixEMCalOuterRadius" value="1155.8*mm"/>
+    <constant name="sPhenixEMCalLength"      value="1727.2*2*mm"/>
+    <constant name="sPhenixInnerHCalInnerRadius" value="sPhenixEMCalOuterRadius - 1.0*cm"/> <!-- guestimate -->
+    <constant name="sPhenixInnerHCalOuterRadius" value="1370.0*mm"/>
+    <constant name="sPhenixInnerHCalLength" value="2175*2*mm"/>
+
+    <comment>
+      --------------------------
+      Solenoid Magnet Parameters
+      --------------------------
+    </comment>
+    <constant name="Solenoid_rmin"           value="1420.0*mm"/>
+    <constant name="Solenoid_rmax"           value="1800.0*mm"/>
+    <constant name="SolenoidLength"          value="4050.0*mm"/>
+
+    <constant name="SolenoidBarrelCryostatThickness"      value=" 1.0 * cm"/>
+    <constant name="SolenoidBarrelGapThickness"           value=" 3.3 * cm"/>
+    <constant name="SolenoidBarrelAlConductorThickness"   value="12.0 * cm"/>
+    <constant name="SolenoidBarrelQuenchbackThickness"    value=" 1.5 * cm"/>
+    <constant name="SolenoidBarrelOuterGapThickness"      value=" 5.6 * cm"/>
+    <constant name="SolenoidBarrelOuterCryostatThickness" value=" 1.2 * cm"/>
+
+    <constant name="SolenoidEndPlateGapThickness"           value=" 5.7 * cm"/>
+    <constant name="SolenoidEndPlateCryostatThickness"      value=" 1.5 * cm"/>
+
+    <constant name="SolenoidBarrel_rmin"     value="Solenoid_rmin"/>
+    <constant name="SolenoidBarrelLenth"     value="SolenoidLength"/>
+    <constant name="SolenoidBarrel_zmax"     value="SolenoidBarrelLenth/2.0"/>
+
+    <constant name="SolenoidCoilConductor_rmin" 
+              value="SolenoidBarrel_rmin + SolenoidBarrelCryostatThickness + SolenoidBarrelGapThickness"/>
+    <constant name="SolenoidCoilConductor_rmax" 
+              value="SolenoidCoilConductor_rmin + SolenoidBarrelAlConductorThickness + SolenoidBarrelQuenchbackThickness"/>
+    <constant name="SolenoidBarrel_rmax" 
+              value="SolenoidCoilConductor_rmax + SolenoidBarrelOuterGapThickness + SolenoidBarrelOuterCryostatThickness"/>
+
+    <constant name="SolenoidCoil_zmax" 
+              value="SolenoidBarrel_zmax - SolenoidEndPlateCryostatThickness - SolenoidEndPlateGapThickness"/>
+
+    <constant name="SolenoidalFieldRadius" 
+              value="SolenoidCoilConductor_rmin + SolenoidBarrelAlConductorThickness / 2.0"/>
+
+    <constant name="SolenoidCoilLength" value="SolenoidCoil_zmax*2.0"/>
+
+    <constant name="SolenoidThickness"           value="Solenoid_rmax - Solenoid_rmin"/>
+
+    <constant name="SolenoidYokeEndcapP_rmin"     value="800*mm"/>
+    <constant name="SolenoidYokeEndcapN_rmin"     value="800*mm"/>
+    <constant name="SolenoidYokeEndcapThickness"  value="0.2 * m"/>
+    <constant name="SolenoidYokeEndcap_zmin"      value="SolenoidBarrel_zmax"/>
+    <constant name="SolenoidYokeEndcap_zmax"      value="SolenoidYokeEndcap_zmin + SolenoidYokeEndcapThickness"/>
+
+    <constant name="SolenoidYokeChamferAngle"    value="0.2"/>
+
+    <comment>
+      -------------------------
+      Vertex Tracker Parameters
+      -------------------------
+    </comment>
+    <constant name="VertexTrackerInnerRadius"       value="30.0*mm"/>
+    <constant name="VertexTrackerOuterRadius"       value="90.0*mm"/>
+    <constant name="VertexTrackerOuterBarrelLength" value="300.0*mm"/>
+    <constant name="tracker_region_rmax"            value="Solenoid_rmax"/>
+    <constant name="tracker_region_zmax"            value="SolenoidLength/2.0"/>
+
+    <comment>
+      --------------------------
+      Silicon Tracker Parameters
+      --------------------------
+    </comment>
+    <constant name="SiliconTrackerInnerRadius"       value="95.0*mm"/>
+    <constant name="SiliconTrackerInnerBarrelLength" value="400.0*mm"/>
+    <constant name="SiliconTrackerOuterRadius"       value="860.0*mm"/>
+    <constant name="SiliconTrackerOuterBarrelLength" value="SiliconTrackerOuterRadius*2"/>
+
+    <comment>
+      ------------
+      Calorimeters
+      ------------
+    </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"/> <!-- Ecal and Hcal have the same thickness -->
+    <constant name="EcalBarrelAvailTotalThickness"         value="AvailTotalBarrelCalorimetryThickness * CalBarrelDivider"/>
+    <constant name="HcalBarrelAvailTotalThickness"         value="AvailTotalBarrelCalorimetryThickness * (1.0 - CalBarrelDivider)"/>
+
+    <constant name="EcalBarrelLength"                      value="SiliconTrackerOuterBarrelLength+50.0*cm"/>
+    <constant name="EcalEndcap_zmin"                       value="EcalBarrelLength/2.0"/>
+
+    <constant name="AvailTotalEndcapCalorimetryThickness"  value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - (EcalEndcap_zmin + 10.0 * mm)"/>
+    <constant name="CalEndcapDivider"                      value="0.5"/> <!-- Ecal and Hcal have the same thickness -->
+    <constant name="EcalEndcapAvailTotalThickness"         value="AvailTotalEndcapCalorimetryThickness * CalEndcapDivider"/>
+    <constant name="HcalEndcapAvailTotalThickness"         value="AvailTotalEndcapCalorimetryThickness * (1.0 - CalEndcapDivider)"/>
+
+    <constant name="EcalEndcapP_rmin"                      value="250.0*mm"/>
+    <constant name="EcalEndcapN_rmin"                      value="350.0*mm"/>
+
+    <constant name="HcalEndcapP_rmin"                      value="250.0 * mm"/>
+    <constant name="HcalEndcapN_rmin"                      value="350.0 * mm"/>
+
+    <comment>
+      -------------------------
+      EM Calorimeter Parameters
+      -------------------------
+    </comment>
+    <constant name="CaloSides"                  value="12"/>
+	    
+    <!-- Material Thickness --> 
+    <constant name="EcalSiliconThickness"       value="9.00 * mm"/>
+    <constant name="EcalCopperThickness"        value="0.05 * mm"/>
+    <constant name="EcalKaptonThickness"        value="0.30 * mm"/>
+    <constant name="EcalAir1Thickness"          value="0.33 * mm"/>
+    <constant name="EcalAir2Thickness"          value="0.25 * mm"/>
+    <constant name="EcalThinTungstenThickness"  value="2.50 * mm"/>
+    <constant name="EcalThickTungstenThickness" value="5.00 * mm"/>
+	    
+    <!-- Layer Thickness  -->
+    <constant name="EcalFirstLayerThickness"
+	    value="EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
+    <constant name="EcalThinOneLayerThickness"   
+	    value="EcalThinTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
+    <constant name="EcalThickOneLayerThickness"   
+	    value="EcalThickTungstenThickness + EcalAir2Thickness + EcalSiliconThickness + EcalCopperThickness + EcalKaptonThickness + EcalAir1Thickness"/>
+	    
+    <!-- EM Barrel N Layer; same number of layers for EcalThin and EcalThick -->
+    <constant name="EcalBarrelLayers" 
+	    value="floor((EcalBarrelAvailTotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/>
+    <constant name="EcalBarrelThinLayers"       value="EcalBarrelLayers"/>
+    <constant name="EcalBarrelThickLayers"      value="EcalBarrelLayers"/>
+    <!-- EM Barrel Thickness -->
+    <constant name="EcalBarrelThickness"
+	    value="EcalFirstLayerThickness + (EcalBarrelThinLayers * EcalThinOneLayerThickness) + (EcalBarrelThickLayers * EcalThickOneLayerThickness)"/>
+    <constant name="EcalBarrel_rmax"            value="EcalBarrel_rmin + EcalBarrelThickness"/>
+
+    <!-- EM Endcap N Layer; same number of layers for EcalThin and EcalThick -->
+    <constant name="EcalEndcapLayers" 
+	    value="floor((EcalEndcapAvailTotalThickness - EcalFirstLayerThickness) / (EcalThinOneLayerThickness + EcalThickOneLayerThickness))"/>
+    <constant name="EcalEndcapThinLayers"       value="EcalEndcapLayers"/>
+    <constant name="EcalEndcapThickLayers"      value="EcalEndcapLayers"/>
+    <!-- EM Endcap Thickness -->
+    <constant name="EcalEndcapThickness"        
+	    value="EcalFirstLayerThickness + (EcalEndcapThinLayers * EcalThinOneLayerThickness) + (EcalEndcapThickLayers * EcalThickOneLayerThickness)"/>
+
+    <comment>
+      -------------------------------
+      Hadronic Calorimeter Parameters
+      -------------------------------
+    </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="HcalEndcap_zmin"          value="HcalBarrelLength/2.0"/>
+    <constant name="HcalEndcapAvailThickness" value="(SolenoidYokeEndcap_zmin - 10.0 * mm) - HcalEndcap_zmin"/>
+
+    <!-- Material Thickness -->
+    <constant name="HcalSteelThickness"       value="1.89 * cm"/>
+    <constant name="HcalPyrexThickness"       value="1.10 * mm"/>
+    <constant name="HcalRPCGasThickness"      value="1.20 * mm"/>
+    <constant name="HcalG10Thickness"         value="3.00 * mm"/>
+    <constant name="HcalAirThickness"         value="1.60 * mm"/>
+
+    <!-- Layer Thickness -->
+    <constant name="HcalOneLayerThickness"
+	    value="HcalSteelThickness + (2 * HcalPyrexThickness) + HcalRPCGasThickness + HcalG10Thickness + HcalAirThickness"/>
+	    
+    <!-- H Barrel Layers and Thickness -->
+    <constant name="HcalBarrelLayers" value="floor(HcalBarrelAvailThickness / HcalOneLayerThickness)"/>
+    <constant name="HcalBarrelThickness" value="HcalBarrelLayers * HcalOneLayerThickness"/>
+
+    <!-- H Endcap Layers and Thickness -->
+    <constant name="HcalEndcapLayers" value="floor(HcalEndcapAvailThickness / HcalOneLayerThickness)"/>
+    <constant name="HcalEndcapThickness" value="HcalEndcapLayers * HcalOneLayerThickness"/>
+
+    <comment>
+      -----------------------
+      Gaseous RICH Parameters
+      -----------------------
+    </comment>
+    <constant name="RICHZMin" value="SolenoidYokeEndcap_zmin + 1 * cm"/>
+    <constant name="RICHRMin" value="15 * cm"/>
+    <constant name="RICHDepth" value="1 * m"/>
+
+
+    <comment>
+      --------------------------
+      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>
+      --------------------------
+      Forward ECal Parameters
+      --------------------------
+    </comment>
+
+    <comment>
+      --------------------------
+      Forward HCal Parameters
+      --------------------------
+    </comment>
+
+    <comment>
+      For DDsim. See ddsim --help for details.
+    </comment>
+    <constant name="tracker_region_zmax" value="SiliconTrackerOuterBarrelLength/2.0"/>
+    <constant name="tracker_region_rmax" value="SiliconTrackerOuterRadius"/>
+
+
+
+  </define>
+