From b3588d659040cc2e9c4e31dc762fb34f38fbea20 Mon Sep 17 00:00:00 2001
From: Simon Gardner <simon.gardner@glasgow.ac.uk>
Date: Sat, 12 Oct 2024 16:58:54 +0100
Subject: [PATCH 1/3] Add functionality to track in a BeamPipeChain (#768)

### Briefly, what does this PR introduce?
An option had been added to include sensitive elements at the start
and/or end of beam pipe vacuum. This allows easy tracking of the shape
and position of beam electrons/protons to compare with accelerator group
and stand alone simulations. The segment in which scattered electrons of
different kinematics can also be studied/verified.

### What kind of change does this PR introduce?
- [ ] Bug fix (issue #__)
- [x] New feature (issue #__)
- [ ] Documentation update
- [ ] Other: __

### Please check if this PR fulfills the following:
- [ ] Tests for the changes have been added
- [ ] Documentation has been added / updated
- [ ] Changes have been communicated to collaborators

### Does this PR introduce breaking changes? What changes might users
need to make to their code?
No
### Does this PR change default behavior?
No

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
---
 compact/definitions.xml                       |  1 +
 .../beamline_extension_electron.xml           |  3 +-
 compact/far_backward/beamline_tracking.xml    | 80 +++++++++++++++++
 compact/far_backward/extended.xml             |  2 +
 src/BeamPipeChain_geo.cpp                     | 10 ++-
 src/BeamPipeStop_geo.cpp                      | 68 +++++++++++++++
 src/BeamPipeTracking_geo.cpp                  | 86 +++++++++++++++++++
 templates/epic.xml.jinja2                     |  3 +
 8 files changed, 250 insertions(+), 3 deletions(-)
 create mode 100644 compact/far_backward/beamline_tracking.xml
 create mode 100644 src/BeamPipeStop_geo.cpp
 create mode 100644 src/BeamPipeTracking_geo.cpp

diff --git a/compact/definitions.xml b/compact/definitions.xml
index a6f0d5567..2bee4296f 100644
--- a/compact/definitions.xml
+++ b/compact/definitions.xml
@@ -314,6 +314,7 @@ The unused IDs below are saved for future use.
     <constant name="LumiSpecCAL_ID"          value="194"/>
     <constant name="LumiDirectPCAL_ID"       value="195"/>
 
+    <constant name="BackwardsBeamline_ID"    value="197"/>
     <constant name="TaggerTracker_ID"        value="198"/>
     <constant name="TaggerCalorimeter_ID"    value="199"/>
 
diff --git a/compact/far_backward/beamline_extension_electron.xml b/compact/far_backward/beamline_extension_electron.xml
index 9a47d3f38..e1346df24 100644
--- a/compact/far_backward/beamline_extension_electron.xml
+++ b/compact/far_backward/beamline_extension_electron.xml
@@ -25,7 +25,8 @@
       <pipe id="2" name="Pipe_in_Q4eR"
         xcenter="Q4eR_CenterX" zcenter="Q4eR_CenterZ"
         length="Q4eR_Length" theta="Q4eR_Theta"
-        rout1="Q4eR_InnerRadius" rout2="Q4eR_InnerRadius">
+        rout1="Q4eR_InnerRadius" rout2="Q4eR_InnerRadius"
+        limits="kill_limits">
       </pipe>
       <pipe id="3" name="Pipe_Q4eR_to_B3eR"/>
       <pipe id="4" name="Pipe_in_B3eR"
diff --git a/compact/far_backward/beamline_tracking.xml b/compact/far_backward/beamline_tracking.xml
new file mode 100644
index 000000000..f2f4b601f
--- /dev/null
+++ b/compact/far_backward/beamline_tracking.xml
@@ -0,0 +1,80 @@
+
+<lccdd>
+
+  <detectors>
+    <detector
+    id="BackwardsBeamline_ID"
+    type="BeamPipeTracking"
+    name="Pipe_tracker"
+    readout="BackwardsBeamlineHits">
+
+        <slice
+        pipe_id="0"
+        grandmother="Pipe_Q1eR_to_B2BeR"
+        mother="Pipe_to_Q1eR_vacuum"
+        name="Pipe_to_Q1eR_tracker"/>
+
+        <slice
+        pipe_id="1"
+        grandmother="Pipe_Q1eR_to_B2BeR"
+        mother="Pipe_in_Q1eR_vacuum"
+        name="Pipe_in_Q1eR_tracker"/>
+
+        <slice
+        pipe_id="2"
+        grandmother="Pipe_Q1eR_to_B2BeR"
+        mother="Pipe_in_Q2eR_vacuum"
+        name="Pipe_in_Q2eR_tracker"/>
+
+        <slice
+        pipe_id="3"
+        grandmother="Pipe_Q1eR_to_B2BeR"
+        mother="Pipe_in_B2AeR_vacuum"
+        name="Pipe_in_B2AeR_tracker"/>
+
+        <slice
+        pipe_id="4"
+        grandmother="Pipe_Q1eR_to_B2BeR"
+        mother="Pipe_in_B2BeR_vacuum"
+        name="Pipe_in_B2BeR_tracker"/>
+
+        <slice
+        pipe_id="5"
+        grandmother="Pipe_Q3eR_to_B7eR"
+        mother="Pipe_in_Q3eR_vacuum"
+        name="Pipe_in_Q3eR_tracker_start"
+        end="false"/>
+
+        <slice
+        pipe_id="6"
+        grandmother="Pipe_Q3eR_to_B7eR"
+        mother="Pipe_in_Q3eR_vacuum"
+        name="Pipe_in_Q3eR_tracker_end"/>
+
+        <slice
+        pipe_id="7"
+        grandmother="Pipe_Q3eR_to_B7eR"
+        mother="Pipe_in_Q4eR_vacuum"
+        name="Pipe_in_Q4eR_tracker"/>
+
+    </detector>
+
+    <detector
+        type="BeamPipeStop"
+        name="Backwards_Pipe_Stop"
+        grandmother="Pipe_Q3eR_to_B7eR"
+        mother="Pipe_Q4eR_to_B3eR_vacuum"
+    />
+
+  </detectors>
+
+  <readouts>
+
+    <readout name="BackwardsBeamlineHits">
+      <segmentation type="NoSegmentation"/>
+      <id>system:8,pipe:8,end:2</id>
+    </readout>
+
+  </readouts>
+
+</lccdd>
diff --git a/compact/far_backward/extended.xml b/compact/far_backward/extended.xml
index bcbb157de..dbd48fc5b 100644
--- a/compact/far_backward/extended.xml
+++ b/compact/far_backward/extended.xml
@@ -13,4 +13,6 @@
   <!-- Luminosity detector -->
   <include ref="lumi.xml"/>
 
+  <include ref="beamline_tracking.xml"/>
+
 </lccdd>
diff --git a/src/BeamPipeChain_geo.cpp b/src/BeamPipeChain_geo.cpp
index 8da51d510..706c7e810 100644
--- a/src/BeamPipeChain_geo.cpp
+++ b/src/BeamPipeChain_geo.cpp
@@ -31,6 +31,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector /
   double thickness  = getAttrOrDefault<double>(x_det, _Unicode(wall_thickness), 0);
 
   vector<string> names;
+  vector<int> ids;
   vector<double> xCenters;
   vector<double> zCenters;
   vector<double> lengths;
@@ -44,6 +45,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector /
     xml_comp_t pipe(pipe_coll);
 
     names.push_back(getAttrOrDefault<string>(pipe, _Unicode(name), ""));
+    ids.push_back(getAttrOrDefault<int>(pipe, _Unicode(id), 0));
 
     // Vectors momentarily filled with zeros for pipes in between magnets
     xCenters.push_back(getAttrOrDefault<double>(pipe, _Unicode(xcenter), 0));
@@ -108,8 +110,12 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector /
 
     assembly.placeVolume(v_tube, Transform3D(RotationY(thetas[pipeN]),
                                              Position(xCenters[pipeN], 0, zCenters[pipeN])));
-    assembly.placeVolume(v_vacuum, Transform3D(RotationY(thetas[pipeN]),
-                                               Position(xCenters[pipeN], 0, zCenters[pipeN])));
+    auto placed_vacuum =
+        assembly.placeVolume(v_vacuum, Transform3D(RotationY(thetas[pipeN]),
+                                                   Position(xCenters[pipeN], 0, zCenters[pipeN])));
+
+    DetElement vacuum_element(sdet, names[pipeN] + "_vacuum", ids[pipeN]);
+    vacuum_element.setPlacement(placed_vacuum);
   }
 
   // Final placement
diff --git a/src/BeamPipeStop_geo.cpp b/src/BeamPipeStop_geo.cpp
new file mode 100644
index 000000000..5b42e33d9
--- /dev/null
+++ b/src/BeamPipeStop_geo.cpp
@@ -0,0 +1,68 @@
+// SPDX-License-Identifier: LGPL-3.0-or-later
+// Copyright (C) 2024 Simon Gardner
+
+//==========================================================================
+//
+// Places a small sensitive disk of vacuum at the end of beam pipes
+//
+//==========================================================================
+
+#include "DD4hep/DetFactoryHelper.h"
+#include "DD4hep/Printout.h"
+#include "TMath.h"
+#include <XML/Helper.h>
+
+using namespace std;
+using namespace dd4hep;
+
+static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector /* sens */) {
+
+  using namespace ROOT::Math;
+  xml_det_t x_det   = e;
+  string det_name   = x_det.nameStr();
+  int det_id        = x_det.id();
+  Material m_Vacuum = description.material("Vacuum");
+  string vis_name   = dd4hep::getAttrOrDefault<std::string>(x_det, _Unicode(vis), "BeamPipeVis");
+
+  string grandmotherName = x_det.attr<string>(_Unicode(grandmother));
+  string motherName      = x_det.attr<string>(_Unicode(mother));
+  bool detStart          = getAttrOrDefault<bool>(x_det, _Unicode(end), true);
+  DetElement mother      = description.detector(grandmotherName).child(motherName);
+
+  DetElement sdet(det_name, det_id);
+
+  // Get the mother volume
+  Volume mother_vol = mother.volume();
+
+  // Get mother volume shape as cone segment
+  ConeSegment mother_shape = mother_vol.solid();
+
+  // Get the parameters of the mother volume
+  double rOuter1 = mother_shape.rMax1();
+  double rOuter2 = mother_shape.rMax2();
+  double length  = 2 * mother_shape.dZ();
+
+  double sensitive_thickness = 100 * mm;
+
+  //Calculate R or cone after sensitive layer
+  double rEnd = rOuter2 - (rOuter2 - rOuter1) * sensitive_thickness / length;
+  double zPos = length / 2.0 - sensitive_thickness / 2.0;
+  if (detStart) {
+    rEnd = rOuter1 - (rOuter1 - rOuter2) * sensitive_thickness / length;
+    zPos = -length / 2.0 + sensitive_thickness / 2.0;
+  }
+
+  ConeSegment s_start_disk(sensitive_thickness / 2, 0.0, rOuter2, 0.0, rEnd);
+  Volume v_start_disk("stop_disk_" + motherName, s_start_disk, m_Vacuum);
+
+  v_start_disk.setLimitSet(description, "kill_limits");
+
+  auto disk_placement = mother_vol.placeVolume(v_start_disk, Position(0.0, 0.0, zPos));
+
+  sdet.setPlacement(disk_placement);
+  description.declareParent(det_name, mother);
+
+  return sdet;
+}
+
+DECLARE_DETELEMENT(BeamPipeStop, create_detector)
diff --git a/src/BeamPipeTracking_geo.cpp b/src/BeamPipeTracking_geo.cpp
new file mode 100644
index 000000000..d8f4d2953
--- /dev/null
+++ b/src/BeamPipeTracking_geo.cpp
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: LGPL-3.0-or-later
+// Copyright (C) 2024 Simon Gardner
+
+//==========================================================================
+//
+// Places a small sensitive disk of vacuum at the end of beam pipes
+//
+//==========================================================================
+
+#include "DD4hep/DetFactoryHelper.h"
+#include "DD4hep/Printout.h"
+#include "TMath.h"
+#include <XML/Helper.h>
+
+using namespace std;
+using namespace dd4hep;
+
+static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector sens) {
+
+  using namespace ROOT::Math;
+  xml_det_t x_det   = e;
+  string det_name   = x_det.nameStr();
+  int det_id        = x_det.id();
+  Material m_Vacuum = description.material("Vacuum");
+  string vis_name   = dd4hep::getAttrOrDefault<std::string>(x_det, _Unicode(vis), "BeamPipeVis");
+
+  sens.setType("tracker");
+
+  DetElement sdet(det_name, det_id);
+  Assembly assembly(det_name + "_assembly");
+
+  // Grab info for beamline magnets
+  for (xml_coll_t slice_coll(x_det, _Unicode(slice)); slice_coll; slice_coll++) { // pipes
+
+    string grandmotherName = slice_coll.attr<string>(_Unicode(grandmother));
+    string motherName      = slice_coll.attr<string>(_Unicode(mother));
+    bool detStart          = getAttrOrDefault<bool>(slice_coll, _Unicode(end), true);
+    int pipe_id            = getAttrOrDefault<int>(slice_coll, _Unicode(pipe_id), 0);
+    string slice_name      = slice_coll.attr<string>(_Unicode(name));
+    DetElement mother      = description.detector(grandmotherName).child(motherName);
+
+    // Get the mother volume
+    Volume mother_vol = mother.volume();
+
+    // Get mother volume shape as cone segment
+    ConeSegment mother_shape = mother_vol.solid();
+
+    // Get the parameters of the mother volume
+    double rOuter1 = mother_shape.rMax1();
+    double rOuter2 = mother_shape.rMax2();
+    double length  = 2 * mother_shape.dZ();
+
+    double sensitive_thickness = 0.1 * mm;
+
+    //Calculate R or cone after sensitive layer
+
+    double rEnd = rOuter2 - (rOuter2 - rOuter1) * sensitive_thickness / length;
+    double zPos = length / 2.0 - sensitive_thickness / 2.0;
+    if (detStart) {
+      rEnd = rOuter1 - (rOuter1 - rOuter2) * sensitive_thickness / length;
+      zPos = -length / 2.0 + sensitive_thickness / 2.0;
+    }
+
+    ConeSegment s_start_disk(sensitive_thickness / 2, 0.0, rOuter2, 0.0, rEnd);
+    Volume v_start_disk("v_start_disk_" + motherName, s_start_disk, m_Vacuum);
+    v_start_disk.setSensitiveDetector(sens);
+
+    auto disk_placement = mother_vol.placeVolume(v_start_disk, Position(0.0, 0.0, zPos));
+    disk_placement.addPhysVolID("end", detStart);
+    disk_placement.addPhysVolID("pipe", pipe_id);
+    disk_placement.addPhysVolID("system", det_id);
+
+    DetElement slice_element(sdet, slice_name, pipe_id);
+
+    slice_element.setPlacement(disk_placement);
+    description.declareParent(slice_name, mother);
+  }
+
+  auto pv_assembly = description.worldVolume().placeVolume(assembly, Position(0.0, 0.0, 0.0));
+  pv_assembly.addPhysVolID("system", det_id);
+  sdet.setPlacement(pv_assembly);
+
+  return sdet;
+}
+
+DECLARE_DETELEMENT(BeamPipeTracking, create_detector)
diff --git a/templates/epic.xml.jinja2 b/templates/epic.xml.jinja2
index 0472526f2..c3729f8f5 100644
--- a/templates/epic.xml.jinja2
+++ b/templates/epic.xml.jinja2
@@ -71,6 +71,9 @@
       <limit name="ekin_min" particles="*" value="0.001" unit="MeV" />
       <limit name="range_min" particles="*" value="0.1" unit="mm" />
     </limitset>
+    <limitset name="kill_limits">
+      <limit name="time_max" particles="*" value="0.0" unit="ns"/>
+    </limitset>
     <limitset name="cal_limits">
       <limit name="step_length_max" particles="*" value="5.0" unit="mm"/>
     </limitset>

From dbff9d07e360818f9fa89a04c76d2fbfeb9b54e0 Mon Sep 17 00:00:00 2001
From: Dmitry Kalinkin <dmitry.kalinkin@gmail.com>
Date: Wed, 16 Oct 2024 09:21:23 -0400
Subject: [PATCH 2/3] Add fEMCal to the inner_detector config (#793)

Would be nice to have that available for faster benchmarks.
---
 configurations/inner_detector.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/configurations/inner_detector.yml b/configurations/inner_detector.yml
index 597019b24..1f8281e04 100644
--- a/configurations/inner_detector.yml
+++ b/configurations/inner_detector.yml
@@ -15,6 +15,7 @@ features:
     tof_barrel:
     tof_endcap:
   ecal:
+    forward_homogeneous:
     bic_default:
     backward_PbWO4:
   pid:

From 21add614bd6603e3ca9b07881d245abda434789e Mon Sep 17 00:00:00 2001
From: Alex Jentsch <alexmichaeljentsch@gmail.com>
Date: Wed, 16 Oct 2024 11:25:43 -0400
Subject: [PATCH 3/3] Update sensor geometry for rp (#791)

### Briefly, what does this PR introduce?

This PR introduces changing RP geometry for the various beam energies,
and updates the sensor size for the AC-LGADs to what we are planning to
build.

### What kind of change does this PR introduce?
- [ ] Bug fix (issue #__)
- [ x] New feature (issue #__)
- [ ] Documentation update
- [ ] Other: __

### Please check if this PR fulfills the following:
- [ x] Tests for the changes have been added (see PDF)
- [ x] Documentation has been added / updated
- [x ] Changes have been communicated to collaborators

Changes will be presented at meetings on Monday and Tuesday (Oct 14th
and 15th)

See slides here:
https://www.dropbox.com/scl/fi/43mhwxeyvluku0w1ojqfr/new_roman_pots_geometry_10_9_2024.pdf?rlkey=w0wc0gzrk4d03e8uh9w8s0tq5&dl=0

### Does this PR introduce breaking changes? What changes might users
need to make to their code?

No changes to user code needed, but users need to be careful to select
the correct geometry when running dd4hep AND EICrecon.
(https://chat.epic-eic.org/main/pl/rptqecge1jyctkkwa1454zy1mw)

I will hopefully address this issue in a PR immediately following this
one.

### Does this PR change default behavior?

Yes, the low-pT acceptances at the Roman pots will be much closer to
reality now, and will vary with beam energy, as they should.

---------

Co-authored-by: Alexander Jentsch <ajentsch@bnl.gov>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
---
 compact/display.xml                           |   8 +-
 .../far_forward/roman_pots_eRD24_design.xml   | 182 +++++++++---------
 compact/fields/beamline_10x100.xml            |  10 +
 compact/fields/beamline_10x110_H2.xml         |  12 ++
 compact/fields/beamline_10x275.xml            |  10 +
 compact/fields/beamline_18x110_Au.xml         |  12 ++
 compact/fields/beamline_18x110_H2.xml         |  12 ++
 compact/fields/beamline_18x110_He3.xml        |  12 ++
 compact/fields/beamline_18x110_Pb.xml         |  12 ++
 compact/fields/beamline_18x275.xml            |  11 ++
 compact/fields/beamline_5x100.xml             |  10 +
 compact/fields/beamline_5x110_H2.xml          |  12 ++
 compact/fields/beamline_5x41.xml              |  10 +
 compact/fields/beamline_5x41_H2.xml           |  12 ++
 compact/fields/beamline_5x41_He3.xml          |  12 ++
 compact/fields/beamline_5x41_He4.xml          |  12 ++
 src/ForwardRomanPot_geo.cpp                   |  33 +---
 17 files changed, 265 insertions(+), 117 deletions(-)

diff --git a/compact/display.xml b/compact/display.xml
index ea4b367e4..daf1d4898 100644
--- a/compact/display.xml
+++ b/compact/display.xml
@@ -50,14 +50,14 @@
 
 
     <vis name="FFTrackerVis"        ref="AnlRed" />
-    <vis name="FFTrackerSupportVis" ref="AnlBlue"             visible="true"  showDaughters="false" />
-    <vis name="FFTrackerShieldingVis" ref="AnlGray"           visible="true"  showDaughters="false" />
-    <vis name="FFTrackerServiceVis" ref="AnlGold"             visible="true"  showDaughters="false" />
+    <vis name="FFTrackerSupportVis" ref="AnlBlue"             visible="true"  showDaughters="true" />
+    <vis name="FFTrackerShieldingVis" ref="AnlLightGray"           visible="true"  showDaughters="true" />
+    <vis name="FFTrackerServiceVis" ref="AnlGold"             visible="true"  showDaughters="true" />
     <vis name="FFTrackerLayerVis"   ref="TrackerVis"          visible="true"  showDaughters="true" />
     <vis name="FFTrackerModuleVis"  ref="FFTrackerLayerVis"   visible="true"  showDaughters="true" />
     <vis name="FFTrackerSurfaceVis" ref="FFTrackerLayerVis"   visible="true"  showDaughters="true" />
     <comment> For shielded modules by default just display to module instead of 6 layers </comment>
-    <vis name="FFTrackerShieldedModuleVis" ref="FFTrackerModuleVis"   visible="true"  showDaughters="false" />
+    <vis name="FFTrackerShieldedModuleVis" ref="FFTrackerModuleVis"   visible="true"  showDaughters="true" />
 
     <comment>
       Luminosity Visualisation
diff --git a/compact/far_forward/roman_pots_eRD24_design.xml b/compact/far_forward/roman_pots_eRD24_design.xml
index f3a393c62..ea301ec34 100644
--- a/compact/far_forward/roman_pots_eRD24_design.xml
+++ b/compact/far_forward/roman_pots_eRD24_design.xml
@@ -5,9 +5,10 @@
     <define>
         <comment>
             ---------------------------------
-            Roman Pots Implementation from eRD24 RD Effort
+            Roman Pots Implementation updated strawman layout (only layer materials)
             Author: Alex Jentsch
             Date of first commit: June 15th, 2021
+                Last update: Oct 8th, 2024
             ---------------------------------
         </comment>
 
@@ -21,45 +22,31 @@
         <constant name="ForwardRomanPotStation1_rotation" value="-0.04545*rad"/>
         <constant name="ForwardRomanPotStation2_rotation" value="-0.04545*rad"/>
 
-        <constant name="ForwardRomanPotStation1_insertionPosition" value="0.0*cm"/>
-        <constant name="ForwardRomanPotStation2_insertionPosition" value="0.0*cm"/>
-
         <!-- Module/layer information -->
-        <!-- Each module is simply a 3.2cm wide by 3.2cm tall square -->
-
-        <!-- Module insertion positions -->
+        <!-- Each module is simply a 1.6cm wide by 1.6cm tall square -->
 
-        <constant name="ForwardRomanPotStation1_insertion_outer" value="3.2*cm"/>
-        <constant name="ForwardRomanPotStation2_insertion_outer" value="3.2*cm"/>
+        <!-- Module insertion positions set by beam energy config in epic/compact/fields/beamline_XXXXX.xml -->
 
-        <!-- HIGH ACCEPTANCE VALUES -->
+        <constant name="ForwardRomanPotStation1_insertion_central" value="2.4*cm + offset_central_RP_section"/>
+        <constant name="ForwardRomanPotStation2_insertion_central" value="2.4*cm + offset_central_RP_section"/>
 
-        <constant name="ForwardRomanPotStation1_insertion_central" value="3.2*cm + 0.7*cm"/>
-        <constant name="ForwardRomanPotStation2_insertion_central" value="3.2*cm + 0.7*cm"/>
+        <constant name="ForwardRomanPotStation1_insertion_intermediate" value="2.4*cm + offset_intermediate_1_RP_section"/>
+        <constant name="ForwardRomanPotStation2_insertion_intermediate" value="2.4*cm + offset_intermediate_1_RP_section"/>
 
-        <constant name="ForwardRomanPotStation1_insertion_intermediate" value="3.2*cm + 0.0*cm"/>
-        <constant name="ForwardRomanPotStation2_insertion_intermediate" value="3.2*cm + 0.0*cm"/>
+        <constant name="ForwardRomanPotStation1_insertion_intermediate_541" value="2.4*cm + offset_intermediate_2_RP_section"/>
+        <constant name="ForwardRomanPotStation2_insertion_intermediate_541" value="2.4*cm + offset_intermediate_2_RP_section"/>
 
+        <constant name="ForwardRomanPotStation1_insertion_outer" value="2.4*cm + offset_outer_RP_section"/>
+        <constant name="ForwardRomanPotStation2_insertion_outer" value="2.4*cm + offset_outer_RP_section"/>
 
-        <!-- HIGH DIVERGENCE VALUES -->
-
-        <comment>
 
-            <constant name="ForwardRomanPotStation1_insertion_intermediate" value="3.2*cm + 0.6*cm"/>
-            <constant name="ForwardRomanPotStation2_insertion_intermediate" value="3.2*cm + 0.6*cm"/>
-
-            <constant name="ForwardRomanPotStation1_insertion_central" value="3.2*cm + 0.7*cm"/>
-            <constant name="ForwardRomanPotStation2_insertion_central" value="3.2*cm + 0.7*cm"/>
-
-        </comment>
-
-        <!-- Each module is a sandwich of 1mm aluminum, 0.3mm air, 0.3mm silicon, 0.3mm inactive silicon, 0.3mm copper, and 1mm aluminum -->
+        <!-- Each module is a sandwich of 1mm aluminum, 0.3mm air, 0.3mm silicon AC-LGAD, 0.3mm inactive silicon ASIC, 0.3mm copper cooling, and 1mm aluminum -->
         <!-- Vacuum is between each module -->
 
         <!-- module size -->
 
-        <constant name="ForwardRomanPot_ModuleWidth"  value="32.0*mm"/>
-        <constant name="ForwardRomanPot_ModuleHeight"   value="32.0*mm"/>
+        <constant name="ForwardRomanPot_ModuleWidth"  value="1.6*cm"/>
+        <constant name="ForwardRomanPot_ModuleHeight"   value="1.6*cm"/>
 
         <!-- materials -->
         <!-- <constant name="ForwardRomanPot_RFShieldMat"     value="StainlessSteel"/> -->
@@ -88,49 +75,60 @@
                 reflect="false" vis="FFTrackerVis">
             <position x="ForwardRomanPotStation1_xpos" y="0" z="ForwardRomanPotStation1_zpos" />
             <rotation x="0" y="ForwardRomanPotStation1_rotation" z="0" />
-            <module name="ModuleRP1" vis="FFTrackerShieldedModuleVis" nx="2" ny="2" width="ForwardRomanPot_ModuleWidth" height="ForwardRomanPot_ModuleHeight">
+            <module name="ModuleRP1" vis="FFTrackerShieldedModuleVis" nx="1" ny="1" width="ForwardRomanPot_ModuleWidth" height="ForwardRomanPot_ModuleHeight">
                 <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardRomanPot_RFShieldThickness"/>
                 <module_component material="Copper"       vis="FFTrackerServiceVis"   thickness="ForwardRomanPot_ThermalStripThickness" />
                 <module_component material="SiliconOxide" vis="FFTrackerServiceVis"   thickness="ForwardRomanPot_ASICThickness"  />
                 <module_component material="SiliconOxide" vis="FFTrackerSurfaceVis"   thickness="ForwardRomanPot_LGADThickness" sensitive="true"/>
                 <module_component material="Vacuum"       vis="InvisibleNoDaughters"  thickness="ForwardRomanPot_ShieldingAirLayerThickness"/>
                 <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardRomanPot_RFShieldThickness"/>
-                <!--<module_component material="Vacuum"       thickness="ForwardRomanPot_LayerSeparationThickness"/>-->
             </module>
             <module_assembly name="Station1Top">
-                <array nx="2" ny="2" module="ModuleRP1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="(6*ForwardRomanPot_ModuleWidth)/2.0" y="ForwardRomanPotStation1_insertion_outer"/>
+                <array nx="6" ny="3" module="ModuleRP1" width="6*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                    <position x="6.0*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_outer"/>
                 </array>
-                <array nx="2" ny="2" module="ModuleRP1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="-((4*ForwardRomanPot_ModuleWidth)/2.0 + (2*ForwardRomanPot_ModuleWidth)/2.0)" y="ForwardRomanPotStation1_insertion_outer"/>
+                <array nx="6" ny="3" module="ModuleRP1" width="6*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                    <position x="-6.0*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_outer"/>
                 </array>
-                <array nx="2" ny="2" module="ModuleRP1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
+                <array nx="2" ny="3" module="ModuleRP1" width="2*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
                     <position x="0" y="ForwardRomanPotStation1_insertion_central"/>
                 </array>
-                <array nx="1" ny="2" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="3.0*ForwardRomanPot_ModuleWidth/2.0" y="ForwardRomanPotStation1_insertion_intermediate"/>
-                </array>
-                <array nx="1" ny="2" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="-3.0*ForwardRomanPot_ModuleWidth/2.0" y="ForwardRomanPotStation1_insertion_intermediate"/>
-                </array>
-            </module_assembly>
-            <module_assembly name="Station1Bottom">
-                <array nx="2" ny="2" module="ModuleRP1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="(4*ForwardRomanPot_ModuleWidth)/2.0 + (2*ForwardRomanPot_ModuleWidth)/2.0" y="-ForwardRomanPotStation1_insertion_outer"/>
-                </array>
-                <array nx="2" ny="2" module="ModuleRP1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="-((4*ForwardRomanPot_ModuleWidth)/2.0 + (2*ForwardRomanPot_ModuleWidth)/2.0)" y="-ForwardRomanPotStation1_insertion_outer"/>
+                <array nx="1" ny="3" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                    <position x="1.5*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_intermediate"/>
                 </array>
-                <array nx="2" ny="2" module="ModuleRP1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="0" y="-ForwardRomanPotStation1_insertion_central"/>
+                <array nx="1" ny="3" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                    <position x="-1.5*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_intermediate"/>
                 </array>
-                <array nx="1" ny="2" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="3.0*ForwardRomanPot_ModuleWidth/2.0" y="-ForwardRomanPotStation1_insertion_intermediate"/>
+                <array nx="1" ny="3" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                    <position x="2.5*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_intermediate_541"/>
                 </array>
-                <array nx="1" ny="2" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="-3.0*ForwardRomanPot_ModuleWidth/2.0" y="-ForwardRomanPotStation1_insertion_intermediate"/>
+                <array nx="1" ny="3" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                    <position x="-2.5*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_intermediate_541"/>
                 </array>
             </module_assembly>
+            <module_assembly name="Station1Bottom">
+                        <array nx="6" ny="3" module="ModuleRP1" width="6*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="6.0*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_outer"/>
+                </array>
+                    <array nx="6" ny="3" module="ModuleRP1" width="6*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="-6.0*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_outer"/>
+                    </array>
+                    <array nx="2" ny="3" module="ModuleRP1" width="2*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="0" y="-ForwardRomanPotStation1_insertion_central"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="1.5*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_intermediate"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="-1.5*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_intermediate"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="2.5*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_intermediate_541"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP1" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="-2.5*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_intermediate_541"/>
+                    </array>
+            </module_assembly>
 
             <layer id="1" vis="FFTrackerLayerVis">
                 <position x="0" y="0" z="0.0*cm"/>
@@ -163,7 +161,7 @@
                 vis="FFTrackerVis">
             <position x="ForwardRomanPotStation2_xpos" y="0" z="ForwardRomanPotStation2_zpos" />
             <rotation x="0" y="ForwardRomanPotStation1_rotation" z="0" />
-            <module name="Module1" vis="FFTrackerShieldedModuleVis" nx="2" ny="2" width="ForwardRomanPot_ModuleWidth" height="ForwardRomanPot_ModuleHeight">
+            <module name="ModuleRP2" vis="FFTrackerShieldedModuleVis" nx="1" ny="1" width="ForwardRomanPot_ModuleWidth" height="ForwardRomanPot_ModuleHeight">
                 <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardRomanPot_RFShieldThickness"/>
                 <module_component material="Copper"       vis="FFTrackerServiceVis"   thickness="ForwardRomanPot_ThermalStripThickness" />
                 <module_component material="SiliconOxide" vis="FFTrackerServiceVis"   thickness="ForwardRomanPot_ASICThickness"  />
@@ -172,38 +170,50 @@
                 <module_component material="Aluminum"     vis="FFTrackerShieldingVis" thickness="ForwardRomanPot_RFShieldThickness"/>
             </module>
             <module_assembly name="Station2Top">
-                <array nx="2" ny="2" module="Module1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="(4*ForwardRomanPot_ModuleWidth)/2.0 + (2*ForwardRomanPot_ModuleWidth)/2.0" y="ForwardRomanPotStation1_insertion_outer"/>
-                </array>
-                <array nx="2" ny="2" module="Module1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="-((4*ForwardRomanPot_ModuleWidth)/2.0 + (2*ForwardRomanPot_ModuleWidth)/2.0)" y="ForwardRomanPotStation1_insertion_outer"/>
-                </array>
-                <array nx="2" ny="2" module="Module1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="0" y="ForwardRomanPotStation1_insertion_central"/>
-                </array>
-                <array nx="1" ny="2" module="Module1" width="ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="3.0*ForwardRomanPot_ModuleWidth/2.0" y="ForwardRomanPotStation1_insertion_intermediate"/>
-                </array>
-                <array nx="1" ny="2" module="Module1" width="ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="-3.0*ForwardRomanPot_ModuleWidth/2.0" y="ForwardRomanPotStation1_insertion_intermediate"/>
-                </array>
+                    <array nx="6" ny="3" module="ModuleRP2" width="6*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="6.0*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_outer"/>
+                    </array>
+                    <array nx="6" ny="3" module="ModuleRP2" width="6*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="-6.0*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_outer"/>
+                    </array>
+                    <array nx="2" ny="3" module="ModuleRP2" width="2*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="0" y="ForwardRomanPotStation1_insertion_central"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP2" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="1.5*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_intermediate"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP2" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="-1.5*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_intermediate"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP2" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="2.5*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_intermediate_541"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP2" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="-2.5*ForwardRomanPot_ModuleWidth" y="ForwardRomanPotStation1_insertion_intermediate_541"/>
+                    </array>
             </module_assembly>
             <module_assembly name="Station2Bottom">
-                <array nx="2" ny="2" module="Module1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="(4*ForwardRomanPot_ModuleWidth)/2.0 + (2*ForwardRomanPot_ModuleWidth)/2.0" y="-ForwardRomanPotStation1_insertion_outer"/>
-                </array>
-                <array nx="2" ny="2" module="Module1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="-((4*ForwardRomanPot_ModuleWidth)/2.0 + (2*ForwardRomanPot_ModuleWidth)/2.0)" y="-ForwardRomanPotStation1_insertion_outer"/>
-                </array>
-                <array nx="2" ny="2" module="Module1" width="2*ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="0" y="-ForwardRomanPotStation1_insertion_central"/>
-                </array>
-                <array nx="1" ny="2" module="Module1" width="ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="3.0*ForwardRomanPot_ModuleWidth/2.0" y="-ForwardRomanPotStation1_insertion_intermediate"/>
-                </array>
-                <array nx="1" ny="2" module="Module1" width="ForwardRomanPot_ModuleWidth" height="2*ForwardRomanPot_ModuleHeight">
-                    <position x="-3.0*ForwardRomanPot_ModuleWidth/2.0" y="-ForwardRomanPotStation1_insertion_intermediate"/>
-                </array>
+                    <array nx="6" ny="3" module="ModuleRP2" width="6*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="6.0*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_outer"/>
+                    </array>
+                    <array nx="6" ny="3" module="ModuleRP2" width="6*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="-6.0*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_outer"/>
+                    </array>
+                    <array nx="2" ny="3" module="ModuleRP2" width="2*ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="0" y="-ForwardRomanPotStation1_insertion_central"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP2" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="1.5*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_intermediate"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP2" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="-1.5*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_intermediate"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP2" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="2.5*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_intermediate_541"/>
+                    </array>
+                    <array nx="1" ny="3" module="ModuleRP2" width="ForwardRomanPot_ModuleWidth" height="3*ForwardRomanPot_ModuleHeight">
+                        <position x="-2.5*ForwardRomanPot_ModuleWidth" y="-ForwardRomanPotStation1_insertion_intermediate_541"/>
+                    </array>
             </module_assembly>
 
 
@@ -232,7 +242,7 @@
     <readouts>
         <readout name="ForwardRomanPotHits">
             <segmentation type="CartesianGridXY" grid_size_x="0.5*mm" grid_size_y="0.5*mm" />
-            <id>system:8,assembly:3,layer:4,module:4,sensor:4,x:32:-16,y:-16</id>
+            <id>system:8,assembly:3,layer:4,module:8,sensor:8,x:32:-16,y:-16</id>
         </readout>
     </readouts>
 
diff --git a/compact/fields/beamline_10x100.xml b/compact/fields/beamline_10x100.xml
index 8d9ce5c11..174e6cbea 100644
--- a/compact/fields/beamline_10x100.xml
+++ b/compact/fields/beamline_10x100.xml
@@ -54,4 +54,14 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="0.71*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="0.55*cm"/>
+    <constant name="offset_intermediate_2_RP_section" value ="0.0*cm"/>
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_10x110_H2.xml b/compact/fields/beamline_10x110_H2.xml
index e1fbea347..47f6eee52 100644
--- a/compact/fields/beamline_10x110_H2.xml
+++ b/compact/fields/beamline_10x110_H2.xml
@@ -55,4 +55,16 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+
+    Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine).
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="0.71*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="0.55*cm"/>
+    <constant name="offset_intermediate_2_RP_section" value ="0.0*cm"/>
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_10x275.xml b/compact/fields/beamline_10x275.xml
index a2d0e47f0..e8a790ecb 100644
--- a/compact/fields/beamline_10x275.xml
+++ b/compact/fields/beamline_10x275.xml
@@ -54,4 +54,14 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="0.27*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="0.0*cm"/>
+    <constant name="offset_intermediate_2_RP_section" value ="0.0*cm"/>
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_18x110_Au.xml b/compact/fields/beamline_18x110_Au.xml
index 44725ebc8..78800577e 100644
--- a/compact/fields/beamline_18x110_Au.xml
+++ b/compact/fields/beamline_18x110_Au.xml
@@ -55,4 +55,16 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+
+    Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine).
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="0.71*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="0.55*cm"/>
+    <constant name="offset_intermediate_2_RP_section" value ="0.0*cm"/>
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_18x110_H2.xml b/compact/fields/beamline_18x110_H2.xml
index 7ab918a99..23c5b4c90 100644
--- a/compact/fields/beamline_18x110_H2.xml
+++ b/compact/fields/beamline_18x110_H2.xml
@@ -55,4 +55,16 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+
+    Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine).
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="0.71*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="0.55*cm"/>
+    <constant name="offset_intermediate_2_RP_section" value ="0.0*cm"/>
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_18x110_He3.xml b/compact/fields/beamline_18x110_He3.xml
index d1bf496f1..899b830eb 100644
--- a/compact/fields/beamline_18x110_He3.xml
+++ b/compact/fields/beamline_18x110_He3.xml
@@ -55,4 +55,16 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+
+    Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine).
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="0.71*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="0.55*cm"/>
+    <constant name="offset_intermediate_2_RP_section" value ="0.0*cm"/>
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_18x110_Pb.xml b/compact/fields/beamline_18x110_Pb.xml
index 9801622be..eee1d8ea4 100644
--- a/compact/fields/beamline_18x110_Pb.xml
+++ b/compact/fields/beamline_18x110_Pb.xml
@@ -55,4 +55,16 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+
+    Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine).
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="0.71*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="0.55*cm"/>
+    <constant name="offset_intermediate_2_RP_section" value ="0.0*cm"/>
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_18x275.xml b/compact/fields/beamline_18x275.xml
index 713ae0b2b..3e1f2c634 100644
--- a/compact/fields/beamline_18x275.xml
+++ b/compact/fields/beamline_18x275.xml
@@ -55,4 +55,15 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="0.27*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="0.0*cm"/>
+    <constant name="offset_intermediate_2_RP_section" value ="0.0*cm"/>
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
+
   </define>
diff --git a/compact/fields/beamline_5x100.xml b/compact/fields/beamline_5x100.xml
index 9d8624b6e..0a35ef845 100644
--- a/compact/fields/beamline_5x100.xml
+++ b/compact/fields/beamline_5x100.xml
@@ -54,4 +54,14 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="0.71*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="0.55*cm"/>
+    <constant name="offset_intermediate_2_RP_section" value ="0.0*cm"/>
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_5x110_H2.xml b/compact/fields/beamline_5x110_H2.xml
index 7a65b2ee3..7669f7f11 100644
--- a/compact/fields/beamline_5x110_H2.xml
+++ b/compact/fields/beamline_5x110_H2.xml
@@ -55,4 +55,16 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+
+    Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine).
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="0.71*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="0.55*cm"/>
+    <constant name="offset_intermediate_2_RP_section" value ="0.0*cm"/>
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_5x41.xml b/compact/fields/beamline_5x41.xml
index ca787e71b..1b8a4f0d1 100644
--- a/compact/fields/beamline_5x41.xml
+++ b/compact/fields/beamline_5x41.xml
@@ -54,4 +54,14 @@
     <constant name="Q0EF_BMax"  value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="2.96*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="2.75*cm"/> <!-- rough extrapolation -->
+    <constant name="offset_intermediate_2_RP_section" value ="1.80*cm"/> <!-- rough extrapolation -->
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_5x41_H2.xml b/compact/fields/beamline_5x41_H2.xml
index 7a1f415cc..101fb0ac4 100644
--- a/compact/fields/beamline_5x41_H2.xml
+++ b/compact/fields/beamline_5x41_H2.xml
@@ -55,4 +55,16 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+
+    Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine).
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="2.96*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="2.75*cm"/> <!-- rough extrapolation -->
+    <constant name="offset_intermediate_2_RP_section" value ="1.80*cm"/> <!-- rough extrapolation -->
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_5x41_He3.xml b/compact/fields/beamline_5x41_He3.xml
index d474b021f..b7ada8161 100644
--- a/compact/fields/beamline_5x41_He3.xml
+++ b/compact/fields/beamline_5x41_He3.xml
@@ -55,4 +55,16 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+
+    Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine).
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="2.96*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="2.75*cm"/> <!-- rough extrapolation -->
+    <constant name="offset_intermediate_2_RP_section" value ="1.80*cm"/> <!-- rough extrapolation -->
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/compact/fields/beamline_5x41_He4.xml b/compact/fields/beamline_5x41_He4.xml
index 1a2561621..21e8abf83 100644
--- a/compact/fields/beamline_5x41_He4.xml
+++ b/compact/fields/beamline_5x41_He4.xml
@@ -55,4 +55,16 @@
     <constant name="Q0EF_BMax" value="0.0*tesla"/>
     <constant name="Q1EF_BMax"  value="0.0*tesla"/>
 
+    <comment>
+    These are the ten-sigma cuts for the Roman pots, translated to the physical layout we currently have.
+    They are not perfectly ten-sigma for reasons of physical geometry.
+
+    Nuclei currently based on nearest per-nucleon proton energy (needs eventual update from machine).
+    </comment>
+
+    <constant name="offset_central_RP_section" value ="2.96*cm"/>
+    <constant name="offset_intermediate_1_RP_section" value ="2.75*cm"/> <!-- rough extrapolation -->
+    <constant name="offset_intermediate_2_RP_section" value ="1.80*cm"/> <!-- rough extrapolation -->
+    <constant name="offset_outer_RP_section" value ="0.0*cm"/>
+
   </define>
diff --git a/src/ForwardRomanPot_geo.cpp b/src/ForwardRomanPot_geo.cpp
index f3e9e2b50..052178b3d 100644
--- a/src/ForwardRomanPot_geo.cpp
+++ b/src/ForwardRomanPot_geo.cpp
@@ -32,8 +32,8 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
   for (xml_coll_t mi(x_det, _U(module)); mi; ++mi, ++m_id) {
     xml_comp_t x_mod           = mi;
     string m_nam               = x_mod.nameStr();
-    double mod_width           = getAttrOrDefault<double>(x_mod, _U(width), 3.2 * cm);
-    double mod_height          = getAttrOrDefault<double>(x_mod, _U(height), 3.2 * cm);
+    double mod_width           = getAttrOrDefault<double>(x_mod, _U(width), 1.6 * cm);
+    double mod_height          = getAttrOrDefault<double>(x_mod, _U(height), 1.6 * cm);
     double mod_total_thickness = 0.;
 
     xml_coll_t ci(x_mod, _U(module_component));
@@ -42,9 +42,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
 
     Box m_solid(mod_width / 2.0, mod_height / 2.0, mod_total_thickness / 2.0);
     Volume m_volume(m_nam, m_solid, vacuum);
-    //set to AnlGold temporarily for future RP troubleshooting
-    //m_volume.setVisAttributes(description.visAttributes(x_mod.visStr()));
-    m_volume.setVisAttributes(description.visAttributes("AnlGold"));
+    m_volume.setVisAttributes(description.visAttributes(x_mod.visStr()));
 
     double comp_z_pos = -mod_total_thickness / 2.0;
     int n_sensor      = 1;
@@ -99,8 +97,8 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
       double nx              = getAttrOrDefault<double>(x_array, _Unicode(nx), 1);
       double ny              = getAttrOrDefault<double>(x_array, _Unicode(ny), 1);
       double dz              = getAttrOrDefault<double>(x_array, _Unicode(dz), 0 * mm);
-      double arr_width       = getAttrOrDefault<double>(x_array, _Unicode(width), 3.2 * cm);
-      double arr_height      = getAttrOrDefault<double>(x_array, _Unicode(height), 3.2 * cm);
+      double arr_width       = getAttrOrDefault<double>(x_array, _Unicode(width), 1.6 * cm);
+      double arr_height      = getAttrOrDefault<double>(x_array, _Unicode(height), 1.6 * cm);
       std::string arr_module = getAttrOrDefault<std::string>(x_array, _Unicode(module), "");
       // TODO: add check here
       auto arr_vol         = modules[arr_module];
@@ -120,6 +118,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
           if (x_pos) {
             arr_pos += Position(x_pos.x(0), x_pos.y(0), x_pos.z(0));
           }
+
           DetElement mod_de(ma_de, ma_name + std::string("_mod") + std::to_string(i_mod), i_mod);
           pv = ma_vol.placeVolume(arr_vol, arr_pos);
           pv.addPhysVolID("module", i_mod);
@@ -128,12 +127,6 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
             PlacedVolume sens_pv = sensVols[ic];
             DetElement comp_de(mod_de, std::string("de_") + sens_pv.volume().name(), ic + 1);
             comp_de.setPlacement(sens_pv);
-            // Acts::ActsExtension* sensorExtension = new Acts::ActsExtension();
-            //// sensorExtension->addType("sensor", "detector");
-            // comp_de.addExtension<Acts::ActsExtension>(sensorExtension);
-            //// comp_de.setAttributes(description, sens_pv.volume(),
-            /// x_layer.regionStr(), / x_layer.limitsStr(), /
-            /// xml_det_t(xmleles[m_nam]).visStr());
           }
         }
       }
@@ -159,11 +152,9 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
       xml_comp_t x_comp = ci;
       xml_comp_t c_pos  = x_comp.position(false);
 
-      // string     ma_name = x_comp.nameStr();
       string comp_assembly = getAttrOrDefault<std::string>(x_comp, _Unicode(assembly), "");
 
       auto comp_vol = module_assemblies[comp_assembly];
-      // auto de       = ;
       auto comp_de =
           module_assembly_delements[comp_assembly].clone(comp_assembly + std::to_string(l_num));
       if (c_pos) {
@@ -175,25 +166,13 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
       comp_de.setPlacement(pv);
       layer.add(comp_de);
       i_assembly++;
-      // DetElement det = module > 1 ? stave.clone(_toString(module,"stave%d"))
-      // : stave; Transform3D trafo(RotationZYX(0, rotY, rotX),
-      // Translation3D(-posX, -posY, 0)); PlacedVolume pv =
-      // envelopeVolume.placeVolume(sectVolume,trafo);
-      //// Not a valid volID: pv.addPhysVolID("stave", 0);
-      // pv.addPhysVolID("module", module);
-      // det.setPlacement(pv);
-      // parent.add(det);
     }
     pv = assembly.placeVolume(l_vol, l_pos);
     pv.addPhysVolID("layer", l_num);
   }
 
-  // pv = description.pickMotherVolume(sdet).placeVolume(assembly,
-  // Position(pos.x(), pos.y(), pos.z()));
   Transform3D posAndRot(RotationZYX(rot.z(), rot.y(), rot.x()),
                         Position(pos.x(), pos.y(), pos.z()));
-  // pv = description.pickMotherVolume(sdet).placeVolume(assembly,
-  // Position(pos.x(), pos.y(), pos.z()));
   pv = description.pickMotherVolume(sdet).placeVolume(assembly, posAndRot);
   pv.addPhysVolID("system", x_det.id()); // Set the subdetector system ID.
   sdet.setPlacement(pv);