From 708e6036c75b9838700666bf4f81e99bd7f0c243 Mon Sep 17 00:00:00 2001
From: Wouter Deconinck <wdconinc@gmail.com>
Date: Fri, 13 May 2022 19:17:50 +0000
Subject: [PATCH] Resolve "Fix issues introduced by ip6 changes"

---
 .gitlab-ci.yml                             |   6 +-
 bin/generate_prim_file                     |   2 +-
 compact/subsystem_views/calorimeters.xml   |  14 +-
 compact/subsystem_views/dirc_only.xml      |   4 +-
 compact/subsystem_views/drich_only.xml     |   6 +-
 compact/subsystem_views/inner_detector.xml |  82 +-------
 compact/subsystem_views/ip6.xml            | 229 ++++++++-------------
 compact/subsystem_views/pfrich_only.xml    |   6 +-
 compact/subsystem_views/pid_only.xml       |  86 +-------
 compact/subsystem_views/tof_only.xml       |   6 +-
 compact/subsystem_views/tracking_only.xml  |  80 +------
 compact/subsystem_views/vertex_only.xml    |  87 +-------
 12 files changed, 120 insertions(+), 488 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 98ae91b6..4f7148ef 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -158,7 +158,7 @@ detector_documentation:
     - bash bin/build_documentation | tee doc/detector.md
       #- |
       #  xmllint --format --xpath '//comment/text()' ${DETECTOR_PATH}/athena.xml | sed -re 's/<\/?\w+>//g' | sed 's/^[[:space:]]*#/#/' | tee  doc/detector.md
-      #  xmllint --format --xpath '//comment/text()' ${DETECTOR_PATH}/ip6/ip6_defs.xml | sed -re 's/<\/?\w+>//g' | sed 's/^[[:space:]]*#/#/' | tee -a doc/detector.md || true
+      #  xmllint --format --xpath '//comment/text()' ${DETECTOR_PATH}/ip6/definitions.xml | sed -re 's/<\/?\w+>//g' | sed 's/^[[:space:]]*#/#/' | tee -a doc/detector.md || true
       #  for afile in ${DETECTOR_PATH}/compact/*.xml ; do
       #    xmllint --format --xpath '//comment/text()' ${afile} | sed -re 's/<\/?\w+>//g' | sed 's/^[[:space:]]*#/#/' | tee -a doc/detector.md || true
       #  done
@@ -199,7 +199,7 @@ overlap_check_tgeo:
   script:
     ## disable fibers in ECAL for normal overlap check
     - sed -i '/<fiber/,+6d' ${DETECTOR_PATH}/compact/ecal_barrel_interlayers.xml
-    - sed -i '/<fiber/,+4d' ${DETECTOR_PATH}/ip6/far_forward_ZDC_Ecal_WSciFi.xml
+    - sed -i '/<fiber/,+4d' ${DETECTOR_PATH}/ip6/far_forward/ZDC_Ecal_WSciFi.xml
     - checkOverlaps -c ${DETECTOR_PATH}/athena.xml  | tee doc/overlap_check_tgeo.out 
     - echo "$(cat doc/overlap_check_tgeo.out | grep ovlp | wc -l) overlaps..."
     - if [[ "$(cat doc/overlap_check_tgeo.out | grep ovlp | wc -l)" -gt "0" ]] ; then echo "Overlaps exist!" && false ; fi
@@ -211,7 +211,7 @@ overlap_check_geant4:full_fast:
   script:
     ## disable fibers in ECAL for normal overlap check
     - sed -i '/<fiber/,+6d' ${DETECTOR_PATH}/compact/ecal_barrel_interlayers.xml
-    - sed -i '/<fiber/,+4d' ${DETECTOR_PATH}/ip6/far_forward_ZDC_Ecal_WSciFi.xml
+    - sed -i '/<fiber/,+4d' ${DETECTOR_PATH}/ip6/far_forward/ZDC_Ecal_WSciFi.xml
     ## reduce the number of fibers in Hadron EMCal for overlap check
     ## not needed, as we are running with a different setup now
     #- sed -i 's/radius="EcalEndcapP_FiberRadius"/radius="EcalEndcapP_FiberRadius*10"/' ${DETECTOR_PATH}/compact/ci_ecal_scfi.xml
diff --git a/bin/generate_prim_file b/bin/generate_prim_file
index a0593210..99d299f9 100755
--- a/bin/generate_prim_file
+++ b/bin/generate_prim_file
@@ -52,7 +52,7 @@ parser.add_argument('-t', '--tag', type=str,dest='file_tag',
         help='Output file tag')
 
 parser.add_argument('--timeout', type=int,
-        default=60,
+        default=300,
         help='Timeout in seconds')
 
 parser.add_argument('passthrough', nargs='*')
diff --git a/compact/subsystem_views/calorimeters.xml b/compact/subsystem_views/calorimeters.xml
index 824bc12d..99cb334b 100644
--- a/compact/subsystem_views/calorimeters.xml
+++ b/compact/subsystem_views/calorimeters.xml
@@ -33,8 +33,8 @@
       The ip6 (or other ip) defines should be included first.
       These files have only a define tags.
   </documentation>
-    <include ref="ip6/ip6_defs.xml" /> 
-    <include ref="ip6/far_forward_fields_275.xml" />
+    <include ref="ip6/definitions.xml" /> 
+    <include ref="ip6/far_forward/fields_275.xml" />
     <include ref="compact/definitions.xml" />
   </define>
 
@@ -86,7 +86,7 @@
       Beamline elements
       -----------------
   </comment>
-  <include ref="ip6/beampipe.xml" />
+  <include ref="ip6/central_beampipe.xml" />
 
   <documentation level="5">
      ## Main magnet
@@ -101,14 +101,6 @@
   <include ref="compact/ecal.xml"/>
   <include ref="compact/hcal.xml"/>
 
-  <comment>
-      FB elements
-      -----------
-      None (TODO)
-
-      What is FB?
-  </comment>
-
   <readouts>
   </readouts>
 
diff --git a/compact/subsystem_views/dirc_only.xml b/compact/subsystem_views/dirc_only.xml
index 89ecc4d2..109cd11b 100644
--- a/compact/subsystem_views/dirc_only.xml
+++ b/compact/subsystem_views/dirc_only.xml
@@ -33,8 +33,8 @@
       The ip6 (or other ip) defines should be included first.
       These files have only a define tags.
   </documentation>
-    <include ref="ip6/ip6_defs.xml" /> 
-    <include ref="ip6/far_forward_fields_275.xml" />
+    <include ref="ip6/definitions.xml" /> 
+    <include ref="ip6/far_forward/fields_275.xml" />
     <include ref="compact/definitions.xml" />
   </define>
 
diff --git a/compact/subsystem_views/drich_only.xml b/compact/subsystem_views/drich_only.xml
index 7193fa50..6136e3de 100644
--- a/compact/subsystem_views/drich_only.xml
+++ b/compact/subsystem_views/drich_only.xml
@@ -33,8 +33,8 @@
       The ip6 (or other ip) defines should be included first.
       These files have only a define tags.
   </documentation>
-    <include ref="ip6/ip6_defs.xml" /> 
-    <include ref="ip6/far_forward_fields_275.xml" />
+    <include ref="ip6/definitions.xml" /> 
+    <include ref="ip6/far_forward/fields_275.xml" />
     <include ref="compact/definitions.xml" />
   </define>
 
@@ -67,7 +67,7 @@
     ## dRICh only
   </documentation>
 
-  <include ref="ip6/beampipe.xml" />
+  <include ref="ip6/central_beampipe.xml" />
   <include ref="compact/drich.xml" />
 
 </lccdd>
diff --git a/compact/subsystem_views/inner_detector.xml b/compact/subsystem_views/inner_detector.xml
index c1d21177..bc3bd675 100644
--- a/compact/subsystem_views/inner_detector.xml
+++ b/compact/subsystem_views/inner_detector.xml
@@ -33,8 +33,8 @@
       The ip6 (or other ip) defines should be included first.
       These files have only a define tags.
   </documentation>
-    <include ref="ip6/ip6_defs.xml" /> 
-    <include ref="ip6/far_forward_fields_275.xml" />
+    <include ref="ip6/definitions.xml" /> 
+    <include ref="ip6/far_forward/fields_275.xml" />
     <include ref="compact/definitions.xml" />
   </define>
 
@@ -87,7 +87,7 @@
       Beamline elements
       -----------------
   </comment>
-  <include ref="ip6/beampipe.xml" />
+  <include ref="ip6/central_beampipe.xml" />
 
   <documentation level="5">
      ## Main magnet
@@ -98,7 +98,6 @@
   <documentation level="10">
     ## Central tracking detectors
   </documentation>
-
   <include ref="compact/tracking_config_deathvalley.xml"/>
 
   <documentation level="10">
@@ -106,81 +105,6 @@
   </documentation>
   <include ref="compact/pid_config_deathvalley.xml"/>
 
-  <documentation level="10">
-  ## Central calorimetry
-  </documentation>
-
-  <documentation level="11">
-  ## Far foward detectors
-  </documentation>
-
-  <fields>
-    <field name="B0PF_Magnet" type="MultipoleMagnet">
-      <position x="B0PF_XPosition" y="0" z="B0PF_CenterPosition"/>
-      <rotation x="0" y="B0PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B0PF_InnerRadius" dz="B0PF_Length*0.5"/>
-      <coefficient coefficient="B0PF_Bmax" skew="0.0*tesla"/>
-      <!--<coefficient coefficient="2.0*tesla/cm" skew="0.2*tesla/cm"/> -->
-    </field>
-    <field name="B0APF_Magnet" type="MultipoleMagnet">
-      <position x="B0APF_XPosition" y="0" z="B0APF_CenterPosition"/>
-      <rotation x="0" y="B0APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B0APF_InnerRadius" dz="B0APF_Length*0.5"/>
-      <coefficient coefficient="B0APF_Bmax" skew="0.0*tesla"/>
-      <!--<coefficient coefficient="2.0*tesla/cm" skew="0.2*tesla/cm"/> -->
-    </field>
-    <field name="Q1APF_Magnet" type="MultipoleMagnet">
-      <position x="Q1APF_XPosition" y="0" z="Q1APF_CenterPosition"/>
-      <rotation x="0" y="Q1APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q1APF_InnerRadius" dz="Q1APF_Length*0.5"/>
-      <coefficient coefficient="Q1APF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q1APF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="Q1BPF_Magnet" type="MultipoleMagnet">
-      <position x="Q1BPF_XPosition" y="0" z="Q1BPF_CenterPosition"/>
-      <rotation x="0" y="Q1BPF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q1BPF_InnerRadius" dz="Q1BPF_Length*0.5"/>
-      <coefficient coefficient="Q1BPF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q1BPF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="Q2PF_Magnet" type="MultipoleMagnet">
-      <position x="Q2PF_XPosition" y="0" z="Q2PF_CenterPosition"/>
-      <rotation x="0" y="Q2PF_RotationAngle" z="pi/2.0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q2PF_InnerRadius" dz="Q2PF_Length*0.5"/>
-      <coefficient coefficient="Q2PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q2PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B1PF_Magnet" type="MultipoleMagnet">
-      <position x="B1PF_XPosition" y="0" z="B1PF_CenterPosition"/>
-      <rotation x="0" y="B1PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B1PF_InnerRadius" dz="B1PF_Length*0.5"/>
-      <coefficient coefficient="B1PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B1PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B1APF_Magnet" type="MultipoleMagnet">
-      <position x="B1APF_XPosition" y="0" z="B1APF_CenterPosition"/>
-      <rotation x="0" y="B1APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B1APF_InnerRadius" dz="B1APF_Length*0.5"/>
-      <coefficient coefficient="B1APF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B1APF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B2PF_Magnet" type="MultipoleMagnet">
-      <position x="B2PF_XPosition" y="0" z="B2PF_CenterPosition"/>
-      <rotation x="0" y="B2PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B2PF_InnerRadius" dz="B2PF_Length*0.5"/>
-      <coefficient coefficient="B2PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B2PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-  </fields>
-
-  <comment>
-      FB elements
-      -----------
-      None (TODO)
-
-      What is FB?
-  </comment>
-
   <readouts>
   </readouts>
 
diff --git a/compact/subsystem_views/ip6.xml b/compact/subsystem_views/ip6.xml
index 65477121..780b47ea 100644
--- a/compact/subsystem_views/ip6.xml
+++ b/compact/subsystem_views/ip6.xml
@@ -1,153 +1,102 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<lccdd>
+<lccdd xmlns:compact="http://www.lcsim.org/schemas/compact/1.0"
+       xmlns:xs="http://www.w3.org/2001/XMLSchema"
+       xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/compact/1.0/compact.xsd">
+
+       <debug>
+         <type name="surface"       value="0"/>
+         <type name="material"      value="0"/>
+         <type name="readout"       value="0"/>
+         <type name="segmentation"  value="0"/>
+         <type name="limits"        value="0"/>
+         <type name="region"        value="0"/>
+         <type name="includes"      value="0"/>
+       </debug>
+
+  <documentation level="-1">
+  # Athena Detector 
+  - https://eicweb.phy.anl.gov/EIC/detectors/athena.git 
+  - https://eicweb.phy.anl.gov/EIC/detectors/ip6.git
+  </documentation>
+
+  <!-- Some information about detector  -->
+  <info name="Athena Detector" title="Athena Detector"
+        author="Athena Collaboration"
+        url="https://eicweb.phy.anl.gov/EIC/detectors/athena.git"
+        status="development"
+        version="v1 2021-03-16">
+  <comment> Athena </comment>
+  </info>
   <define>
-    <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="BeamPipeB0_ID" value="1"/>
-    <constant name="BeamPipe_ID" value="2"/>
-
-    <include ref="ip6/ip6_defs.xml" />
-    <comment> Change this to 275/100/41 to change the field setup</comment>
-    <include ref="ip6/far_forward_fields_275.xml" />
-
-    <comment> 
-      
-      =====================================
-      (150-169) Far Forward  Detectors
-      =====================================
-
-      Forward B0 Tracker    ID: 150 - 153
-      Forward Roman Pot     ID: 155 - 158
-
-      Zero Degree Cal. Ecal ID: 163
-      Zero Degree Cal. Hcal ID: 164
-
-    </comment>
-    <constant name="B0Tracker_Station_1_ID"          value="150"/>
-    <constant name="B0Tracker_Station_2_ID"          value="151"/>
-    <constant name="B0Tracker_Station_3_ID"          value="152"/>
-    <constant name="B0Tracker_Station_4_ID"          value="153"/>
-    <constant name="B0Preshower_Station_1_ID"        value="154"/>
-    <constant name="ForwardRomanPot_Station_1_ID"    value="155"/>
-    <constant name="ForwardRomanPot_Station_2_ID"    value="156"/>
-
-    <constant name="BeamOrbitTracker_station_1_ID"    value="157"/>
-    <constant name="BeamOrbitTracker_station_2_ID"    value="158"/>    
-	  <constant name="ForwardOffMTracker_station_1_ID" value="159"/>
-    <constant name="ForwardOffMTracker_station_2_ID" value="160"/>
-    <constant name="ForwardOffMTracker_station_3_ID" value="161"/>
-    <constant name="ForwardOffMTracker_station_4_ID" value="162"/>
-    <constant name="ffi_ZDC_ECAL_ID"       value="163"/>
-    <constant name="ffi_ZDC_HCAL_ID"       value="164"/>
-
-	<constant name="VacuumMagnetElement_1_ID" value="165"/>
-
-    <constant name="tracker_region_zmax" value="10*m"/>
-    <constant name="tracker_region_rmax" value="1*m"/>
-    
-
-    <comment> 
-        =====================================
-      (170-189) Forward Beamline Magnets
-        =====================================
-    </comment>
-
-    <comment> 
-        =====================================
-      (190-199) Backward Beamline Magnets
-        =====================================
-    </comment>
-
+  <documentation level="2">
+      ## Main Constant Definitions
+
+      The ip6 (or other ip) defines should be included first.
+      These files have only a define tags.
+  </documentation>
+    <include ref="ip6/definitions.xml" /> 
+    <include ref="ip6/far_forward/fields_275.xml" />
+    <include ref="compact/definitions.xml" />
   </define>
 
   <includes>
-    <gdmlFile ref="ip6/elements.xml"/>
-    <gdmlFile ref="ip6/materials.xml"/>
+    <gdmlFile ref="compact/elements.xml"/>
+    <gdmlFile ref="compact/materials.xml"/>
+    <file     ref="compact/optical_materials.xml"/>
   </includes>
 
+  <limits>
+    <limitset name="EICBeamlineLimits">
+      <limit name="step_length_max" particles="*" value="1.0" unit="mm" />
+      <limit name="track_length_max" particles="*" value="1.0" unit="mm" />
+      <limit name="time_max" particles="*" value="0.1" unit="ns" />
+      <limit name="ekin_min" particles="*" value="0.001" unit="MeV" />
+      <limit name="range_min" particles="*" value="0.1" unit="mm" />
+    </limitset>
+    <limitset name="cal_limits">
+      <limit name="step_length_max" particles="*" value="5.0" unit="mm"/>
+    </limitset>
+  </limits>
+
   <display>
   <include ref="compact/colors.xml" />
+  <!--include ref="compact/colors2.xml"/-->
   <include ref="compact/display.xml" />
+  <!--include ref="compact/display_detailed.xml"/-->
   </display>
 
-  <include ref="ip6/beampipe.xml" />
-  <include ref="ip6/forward_ion_beamline.xml" />
-  <include ref="ip6/beampipe_hadron_B0.xml" />
-  <include ref="ip6/B0_tracker.xml"/>
-  <include ref="ip6/B0_preshower.xml"/>
-  <include ref="ip6/far_forward_offM_tracker.xml"/>
-  <include ref="ip6/far_forward_detectors.xml"/>
-  <include ref="ip6/roman_pots_eRD24_design.xml"/>
-  <!--
-    Old BOM not used
-  <include ref="ip6/beam_orbit_tracker.xml"/>
-  -->
-  <include ref="ip6/inner_vacuum_FF_magnets.xml"/>
-
-  <!--
-    Magnet file not used for some reason
-  <include ref="ip6/magnets.xml" />
-  -->
-  <fields>
-    <field name="B0PF_Magnet" type="MultipoleMagnet">
-      <position x="B0PF_XPosition" y="0" z="B0PF_CenterPosition"/>
-      <rotation x="0" y="B0PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B0PF_InnerRadius" dz="B0PF_Length*0.5"/>
-      <coefficient coefficient="B0PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B0PF_GradientMax" skew="0.0*tesla/m"/>
-    </field>
-    <field name="B0APF_Magnet" type="MultipoleMagnet">
-      <position x="B0APF_XPosition" y="0" z="B0APF_CenterPosition"/>
-      <rotation x="0" y="B0APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B0APF_InnerRadius" dz="B0APF_Length*0.5"/>
-      <coefficient coefficient="B0APF_Bmax" skew="0.0*tesla"/>
-	  <coefficient coefficient="B0APF_GradientMax" skew="0.0*tesla"/>
-    </field>
-    <field name="Q1APF_Magnet" type="MultipoleMagnet">
-      <position x="Q1APF_XPosition" y="0" z="Q1APF_CenterPosition"/>
-      <rotation x="0" y="Q1APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q1APF_InnerRadius" dz="Q1APF_Length*0.5"/>
-      <coefficient coefficient="Q1APF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q1APF_GradientMax" skew="0.0*tesla/m"/>
-    </field>
-    <field name="Q1BPF_Magnet" type="MultipoleMagnet">
-      <position x="Q1BPF_XPosition" y="0" z="Q1BPF_CenterPosition"/>
-      <rotation x="0" y="Q1BPF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q1BPF_InnerRadius" dz="Q1BPF_Length*0.5"/>
-      <coefficient coefficient="Q1BPF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q1BPF_GradientMax" skew="0.0*tesla/m"/>
-    </field>
-    <field name="Q2PF_Magnet" type="MultipoleMagnet">
-      <position x="Q2PF_XPosition" y="0" z="Q2PF_CenterPosition"/>
-      <rotation x="0" y="Q2PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q2PF_InnerRadius" dz="Q2PF_Length*0.5"/>
-      <coefficient coefficient="Q2PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q2PF_GradientMax" skew="0.0*tesla/m"/>
-    </field>
-    <field name="B1PF_Magnet" type="MultipoleMagnet">
-      <position x="B1PF_XPosition" y="0" z="B1PF_CenterPosition"/>
-      <rotation x="0" y="B1PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B1PF_InnerRadius" dz="B1PF_Length*0.5"/>
-      <coefficient coefficient="B1PF_Bmax" skew="0.0*tesla"/>
-	  <coefficient coefficient="B1PF_GradientMax" skew="0.0*tesla/m"/>
-    </field>
-    <field name="B1APF_Magnet" type="MultipoleMagnet">
-      <position x="B1APF_XPosition" y="0" z="B1APF_CenterPosition"/>
-      <rotation x="0" y="B1APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B1APF_InnerRadius" dz="B1APF_Length*0.5"/>
-      <coefficient coefficient="B1APF_Bmax" skew="0.0*tesla"/>
-	  <coefficient coefficient="B1APF_GradientMax" skew="0.0*tesla/m"/>
-    </field>
-    <field name="B2PF_Magnet" type="MultipoleMagnet">
-      <position x="B2PF_XPosition" y="0" z="B2PF_CenterPosition"/>
-      <rotation x="0" y="B2PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B2PF_InnerRadius" dz="B2PF_Length*0.5"/>
-      <coefficient coefficient="B2PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B2PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-  </fields>
+  <documentation level="0">
+    ## Detector Subsystems
+
+    ### IP Subsystems
+
+    The interaction point subsystems are included before the central detector subsystems.
+    This is becuase the IP subsystems, for exmaple the beampipe, will define paramters
+    which are subsquently used in the central detector construction -- e.g. the vertex tracker
+    uses the beampipe OD to help define its placement. 
+
+    The IP subsystems include the Far forward and backward regions. The list of subsystem includes:
+     - Interaction region beampipe 
+     - B0 tracker
+     - Off-momentum tracker
+     - Far forward roman pots
+     - Zero Degree Calorimeter
+     - Beam line magnets.
+     - and more...
+  </documentation>
+
+  <documentation level="11">
+  ## Far foward detectors
+  </documentation>
+  <include ref="ip6/central_beampipe.xml"/>
+
+  <documentation level="11">
+  ## Far foward detectors
+  </documentation>
+  <include ref="ip6/far_forward.xml"/>
+
+  <documentation level="11">
+  ## Far backward detectors
+  </documentation>
+  <include ref="ip6/far_backward.xml"/>
 
 </lccdd>
diff --git a/compact/subsystem_views/pfrich_only.xml b/compact/subsystem_views/pfrich_only.xml
index 3fd28f92..0f4c0e20 100644
--- a/compact/subsystem_views/pfrich_only.xml
+++ b/compact/subsystem_views/pfrich_only.xml
@@ -33,8 +33,8 @@
       The ip6 (or other ip) defines should be included first.
       These files have only a define tags.
   </documentation>
-    <include ref="ip6/ip6_defs.xml" /> 
-    <include ref="ip6/far_forward_fields_275.xml" />
+    <include ref="ip6/definitions.xml" /> 
+    <include ref="ip6/far_forward/fields_275.xml" />
     <include ref="compact/definitions.xml" />
   </define>
 
@@ -65,7 +65,7 @@
   <documentation level="10">
     ## pfRICH only
   </documentation>
-  <include ref="ip6/beampipe.xml" />
+  <include ref="ip6/central_beampipe.xml" />
   <include ref="compact/pfrich.xml" />
 
 </lccdd>
diff --git a/compact/subsystem_views/pid_only.xml b/compact/subsystem_views/pid_only.xml
index 44207a0c..0d5443ad 100644
--- a/compact/subsystem_views/pid_only.xml
+++ b/compact/subsystem_views/pid_only.xml
@@ -33,8 +33,8 @@
       The ip6 (or other ip) defines should be included first.
       These files have only a define tags.
   </documentation>
-    <include ref="ip6/ip6_defs.xml" /> 
-    <include ref="ip6/far_forward_fields_275.xml" />
+    <include ref="ip6/definitions.xml" /> 
+    <include ref="ip6/far_forward/fields_275.xml" />
     <include ref="compact/definitions.xml" />
   </define>
 
@@ -86,16 +86,7 @@
       Beamline elements
       -----------------
   </comment>
-  <include ref="ip6/beampipe.xml" />
-  <comment>
-      Main magnet
-      -----------
-      Note: When changing magnet, also select dimensions in definitions.xml.
-  </comment>
-
-  <documentation level="10">
-    ## Central tracking detectors
-  </documentation>
+  <include ref="ip6/central_beampipe.xml" />
 
   <comment>
       PID detectors
@@ -103,77 +94,6 @@
   </comment>
   <include ref="compact/pid_config_deathvalley.xml"/>
 
-
-  <comment>
-      FF elements
-      -----------
-  </comment>
-
-  <fields>
-    <field name="B0PF_Magnet" type="MultipoleMagnet">
-      <position x="B0PF_XPosition" y="0" z="B0PF_CenterPosition"/>
-      <rotation x="0" y="B0PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B0PF_InnerRadius" dz="B0PF_Length*0.5"/>
-      <coefficient coefficient="B0PF_Bmax" skew="0.0*tesla"/>
-      <!--<coefficient coefficient="2.0*tesla/cm" skew="0.2*tesla/cm"/> -->
-    </field>
-    <field name="B0APF_Magnet" type="MultipoleMagnet">
-      <position x="B0APF_XPosition" y="0" z="B0APF_CenterPosition"/>
-      <rotation x="0" y="B0APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B0APF_InnerRadius" dz="B0APF_Length*0.5"/>
-      <coefficient coefficient="B0APF_Bmax" skew="0.0*tesla"/>
-      <!--<coefficient coefficient="2.0*tesla/cm" skew="0.2*tesla/cm"/> -->
-    </field>
-    <field name="Q1APF_Magnet" type="MultipoleMagnet">
-      <position x="Q1APF_XPosition" y="0" z="Q1APF_CenterPosition"/>
-      <rotation x="0" y="Q1APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q1APF_InnerRadius" dz="Q1APF_Length*0.5"/>
-      <coefficient coefficient="Q1APF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q1APF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="Q1BPF_Magnet" type="MultipoleMagnet">
-      <position x="Q1BPF_XPosition" y="0" z="Q1BPF_CenterPosition"/>
-      <rotation x="0" y="Q1BPF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q1BPF_InnerRadius" dz="Q1BPF_Length*0.5"/>
-      <coefficient coefficient="Q1BPF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q1BPF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="Q2PF_Magnet" type="MultipoleMagnet">
-      <position x="Q2PF_XPosition" y="0" z="Q2PF_CenterPosition"/>
-      <rotation x="0" y="Q2PF_RotationAngle" z="pi/2.0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q2PF_InnerRadius" dz="Q2PF_Length*0.5"/>
-      <coefficient coefficient="Q2PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q2PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B1PF_Magnet" type="MultipoleMagnet">
-      <position x="B1PF_XPosition" y="0" z="B1PF_CenterPosition"/>
-      <rotation x="0" y="B1PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B1PF_InnerRadius" dz="B1PF_Length*0.5"/>
-      <coefficient coefficient="B1PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B1PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B1APF_Magnet" type="MultipoleMagnet">
-      <position x="B1APF_XPosition" y="0" z="B1APF_CenterPosition"/>
-      <rotation x="0" y="B1APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B1APF_InnerRadius" dz="B1APF_Length*0.5"/>
-      <coefficient coefficient="B1APF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B1APF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B2PF_Magnet" type="MultipoleMagnet">
-      <position x="B2PF_XPosition" y="0" z="B2PF_CenterPosition"/>
-      <rotation x="0" y="B2PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B2PF_InnerRadius" dz="B2PF_Length*0.5"/>
-      <coefficient coefficient="B2PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B2PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-  </fields>
-
-  <comment>
-      FB elements
-      -----------
-      None (TODO)
-  </comment>
-
   <readouts>
   </readouts>
 
diff --git a/compact/subsystem_views/tof_only.xml b/compact/subsystem_views/tof_only.xml
index 4392434c..dcbdba9d 100644
--- a/compact/subsystem_views/tof_only.xml
+++ b/compact/subsystem_views/tof_only.xml
@@ -33,8 +33,8 @@
       The ip6 (or other ip) defines should be included first.
       These files have only a define tags.
   </documentation>
-    <include ref="ip6/ip6_defs.xml" /> 
-    <include ref="ip6/far_forward_fields_275.xml" />
+    <include ref="ip6/definitions.xml" /> 
+    <include ref="ip6/far_forward/fields_275.xml" />
     <include ref="compact/definitions.xml" />
   </define>
 
@@ -65,7 +65,7 @@
   <documentation level="10">
     ## TOF only
   </documentation>
-  <include ref="ip6/beampipe.xml" />
+  <include ref="ip6/central_beampipe.xml" />
   <include ref="compact/tof_barrel.xml" />
 
 </lccdd>
diff --git a/compact/subsystem_views/tracking_only.xml b/compact/subsystem_views/tracking_only.xml
index f3195231..5bef5df8 100644
--- a/compact/subsystem_views/tracking_only.xml
+++ b/compact/subsystem_views/tracking_only.xml
@@ -33,8 +33,8 @@
       The ip6 (or other ip) defines should be included first.
       These files have only a define tags.
   </documentation>
-    <include ref="ip6/ip6_defs.xml" /> 
-    <include ref="ip6/far_forward_fields_275.xml" />
+    <include ref="ip6/definitions.xml" /> 
+    <include ref="ip6/far_forward/fields_275.xml" />
     <include ref="compact/definitions.xml" />
   </define>
 
@@ -86,14 +86,7 @@
       Beamline elements
       -----------------
   </comment>
-  <include ref="ip6/beampipe.xml" />
-
-  <comment>
-      Main magnet
-      -----------
-      Note: When changing magnet, also select dimensions in definitions.xml.
-  </comment>
-  <!--include ref="compact/solenoid.xml"/-->
+  <include ref="ip6/central_beampipe.xml" />
 
   <comment>
       Central tracking detectors
@@ -102,74 +95,11 @@
   <!--include ref="compact/tracking_config_canyonlands.xml"/-->
   <include ref="compact/tracking_config_deathvalley.xml"/>
 
+  <comment>
       PID detectors
       -------------
-  <include ref="compact/tof_barrel.xml"/>
-
-  <fields>
-    <field name="B0PF_Magnet" type="MultipoleMagnet">
-      <position x="B0PF_XPosition" y="0" z="B0PF_CenterPosition"/>
-      <rotation x="0" y="B0PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B0PF_InnerRadius" dz="B0PF_Length*0.5"/>
-      <coefficient coefficient="B0PF_Bmax" skew="0.0*tesla"/>
-      <!--<coefficient coefficient="2.0*tesla/cm" skew="0.2*tesla/cm"/> -->
-    </field>
-    <field name="B0APF_Magnet" type="MultipoleMagnet">
-      <position x="B0APF_XPosition" y="0" z="B0APF_CenterPosition"/>
-      <rotation x="0" y="B0APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B0APF_InnerRadius" dz="B0APF_Length*0.5"/>
-      <coefficient coefficient="B0APF_Bmax" skew="0.0*tesla"/>
-      <!--<coefficient coefficient="2.0*tesla/cm" skew="0.2*tesla/cm"/> -->
-    </field>
-    <field name="Q1APF_Magnet" type="MultipoleMagnet">
-      <position x="Q1APF_XPosition" y="0" z="Q1APF_CenterPosition"/>
-      <rotation x="0" y="Q1APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q1APF_InnerRadius" dz="Q1APF_Length*0.5"/>
-      <coefficient coefficient="Q1APF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q1APF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="Q1BPF_Magnet" type="MultipoleMagnet">
-      <position x="Q1BPF_XPosition" y="0" z="Q1BPF_CenterPosition"/>
-      <rotation x="0" y="Q1BPF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q1BPF_InnerRadius" dz="Q1BPF_Length*0.5"/>
-      <coefficient coefficient="Q1BPF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q1BPF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="Q2PF_Magnet" type="MultipoleMagnet">
-      <position x="Q2PF_XPosition" y="0" z="Q2PF_CenterPosition"/>
-      <rotation x="0" y="Q2PF_RotationAngle" z="pi/2.0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q2PF_InnerRadius" dz="Q2PF_Length*0.5"/>
-      <coefficient coefficient="Q2PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q2PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B1PF_Magnet" type="MultipoleMagnet">
-      <position x="B1PF_XPosition" y="0" z="B1PF_CenterPosition"/>
-      <rotation x="0" y="B1PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B1PF_InnerRadius" dz="B1PF_Length*0.5"/>
-      <coefficient coefficient="B1PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B1PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B1APF_Magnet" type="MultipoleMagnet">
-      <position x="B1APF_XPosition" y="0" z="B1APF_CenterPosition"/>
-      <rotation x="0" y="B1APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B1APF_InnerRadius" dz="B1APF_Length*0.5"/>
-      <coefficient coefficient="B1APF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B1APF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B2PF_Magnet" type="MultipoleMagnet">
-      <position x="B2PF_XPosition" y="0" z="B2PF_CenterPosition"/>
-      <rotation x="0" y="B2PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B2PF_InnerRadius" dz="B2PF_Length*0.5"/>
-      <coefficient coefficient="B2PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B2PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-  </fields>
-
-  <comment>
-      FB elements
-      -----------
-      None (TODO)
   </comment>
+  <include ref="compact/tof_barrel.xml"/>
 
   <readouts>
   </readouts>
diff --git a/compact/subsystem_views/vertex_only.xml b/compact/subsystem_views/vertex_only.xml
index 8c818e8f..46f9e46e 100644
--- a/compact/subsystem_views/vertex_only.xml
+++ b/compact/subsystem_views/vertex_only.xml
@@ -33,8 +33,8 @@
       The ip6 (or other ip) defines should be included first.
       These files have only a define tags.
   </documentation>
-    <include ref="ip6/ip6_defs.xml" /> 
-    <include ref="ip6/far_forward_fields_275.xml" />
+    <include ref="ip6/definitions.xml" /> 
+    <include ref="ip6/far_forward/fields_275.xml" />
     <include ref="compact/definitions.xml" />
   </define>
 
@@ -82,95 +82,12 @@
      - and more...
   </documentation>
 
-  <comment>
-      Beamline elements
-      -----------------
-  </comment>
-
-  <comment>
-      Main magnet
-      -----------
-      Note: When changing magnet, also select dimensions in definitions.xml.
-  </comment>
-  <!--include ref="compact/solenoid.xml"/-->
-
   <comment>
       Central tracking detectors
       --------------------------
   </comment>
   <include ref="compact/vertex_tracker_3layers.xml"/>
 
-  <comment>
-      PID detectors
-      -------------
-  </comment>
-
-
-  <fields>
-    <field name="B0PF_Magnet" type="MultipoleMagnet">
-      <position x="B0PF_XPosition" y="0" z="B0PF_CenterPosition"/>
-      <rotation x="0" y="B0PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B0PF_InnerRadius" dz="B0PF_Length*0.5"/>
-      <coefficient coefficient="B0PF_Bmax" skew="0.0*tesla"/>
-      <!--<coefficient coefficient="2.0*tesla/cm" skew="0.2*tesla/cm"/> -->
-    </field>
-    <field name="B0APF_Magnet" type="MultipoleMagnet">
-      <position x="B0APF_XPosition" y="0" z="B0APF_CenterPosition"/>
-      <rotation x="0" y="B0APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B0APF_InnerRadius" dz="B0APF_Length*0.5"/>
-      <coefficient coefficient="B0APF_Bmax" skew="0.0*tesla"/>
-      <!--<coefficient coefficient="2.0*tesla/cm" skew="0.2*tesla/cm"/> -->
-    </field>
-    <field name="Q1APF_Magnet" type="MultipoleMagnet">
-      <position x="Q1APF_XPosition" y="0" z="Q1APF_CenterPosition"/>
-      <rotation x="0" y="Q1APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q1APF_InnerRadius" dz="Q1APF_Length*0.5"/>
-      <coefficient coefficient="Q1APF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q1APF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="Q1BPF_Magnet" type="MultipoleMagnet">
-      <position x="Q1BPF_XPosition" y="0" z="Q1BPF_CenterPosition"/>
-      <rotation x="0" y="Q1BPF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q1BPF_InnerRadius" dz="Q1BPF_Length*0.5"/>
-      <coefficient coefficient="Q1BPF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q1BPF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="Q2PF_Magnet" type="MultipoleMagnet">
-      <position x="Q2PF_XPosition" y="0" z="Q2PF_CenterPosition"/>
-      <rotation x="0" y="Q2PF_RotationAngle" z="pi/2.0"/>
-      <shape type="Tube" rmin="0.0" rmax="Q2PF_InnerRadius" dz="Q2PF_Length*0.5"/>
-      <coefficient coefficient="Q2PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="Q2PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B1PF_Magnet" type="MultipoleMagnet">
-      <position x="B1PF_XPosition" y="0" z="B1PF_CenterPosition"/>
-      <rotation x="0" y="B1PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B1PF_InnerRadius" dz="B1PF_Length*0.5"/>
-      <coefficient coefficient="B1PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B1PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B1APF_Magnet" type="MultipoleMagnet">
-      <position x="B1APF_XPosition" y="0" z="B1APF_CenterPosition"/>
-      <rotation x="0" y="B1APF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B1APF_InnerRadius" dz="B1APF_Length*0.5"/>
-      <coefficient coefficient="B1APF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B1APF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-    <field name="B2PF_Magnet" type="MultipoleMagnet">
-      <position x="B2PF_XPosition" y="0" z="B2PF_CenterPosition"/>
-      <rotation x="0" y="B2PF_RotationAngle" z="0"/>
-      <shape type="Tube" rmin="0.0" rmax="B2PF_InnerRadius" dz="B2PF_Length*0.5"/>
-      <coefficient coefficient="B2PF_Bmax" skew="0.0*tesla"/>
-      <coefficient coefficient="B2PF_GradientMax" skew="0.0*tesla/cm"/>
-    </field>
-  </fields>
-
-  <comment>
-      FB elements
-      -----------
-      None (TODO)
-  </comment>
-
   <readouts>
   </readouts>
 
-- 
GitLab