From 23a2b5d8351d8b06d624270c869fbe7a22885c6d Mon Sep 17 00:00:00 2001
From: Nils Breer <nils.breer@cern.ch>
Date: Thu, 17 Aug 2023 16:17:07 +0200
Subject: [PATCH 01/12] added chi2 calculation for joint module constraint
 parameters

---
 .../TAlignment/src/AlignChisqConstraintTool.cpp   | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp b/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp
index 5ce9b0ad2..1ac91a024 100644
--- a/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp
+++ b/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp
@@ -575,6 +575,8 @@ namespace LHCb::Alignment {
                                                               std::ostream& logmessage ) const {
     size_t totalnumconstraints( 0 );
     double totalchisq( 0 );
+    double totalchi2_by_parameter[6] = {0,0,0,0,0,0};
+
     for ( const auto& configuredjoint : m_joints ) {
       // first decode (this could go elsewhere)
       debug() << "Parsing joint constraint: " << configuredjoint << endmsg;
@@ -645,6 +647,12 @@ namespace LHCb::Alignment {
           const Vector6 residual = deltaB_common.transformParameters() - deltaA_common.transformParameters();
           debug() << "Joint residual: " << residual << endmsg;
           AlParameters::TransformCovariance W;
+
+          for(int i = 0; i < 6; ++i) {
+            W(i,i) = 1 / ( errors[i] * errors[i] );
+            totalchi2_by_parameter[i] += residual(i) * residual(i) * W(i,i);
+          }
+
           for ( int i = 0; i < 6; ++i ) W( i, i ) = 1 / ( errors[i] * errors[i] );
           const Vector6 Wresidual = W * residual;
           totalchisq += ROOT::Math::Similarity( residual, W );
@@ -682,6 +690,13 @@ namespace LHCb::Alignment {
       }
     }
     logmessage << "Total chi2 of joint constraints: " << totalchisq << "/" << totalnumconstraints << std::endl;
+    logmessage << "chi2 values for each degree of freedom:" << std::endl;
+    logmessage << "Tx_chi2: " << totalchi2_by_parameter[0] << "/" << totalnumconstraints << std::endl;
+    logmessage << "Ty_chi2: " << totalchi2_by_parameter[1] << "/" << totalnumconstraints << std::endl;
+    logmessage << "Tz_chi2: " << totalchi2_by_parameter[2] << "/" << totalnumconstraints << std::endl;
+    logmessage << "Rx_chi2: " << totalchi2_by_parameter[3] << "/" << totalnumconstraints << std::endl;
+    logmessage << "Ry_chi2: " << totalchi2_by_parameter[4] << "/" << totalnumconstraints << std::endl;
+    logmessage << "Rz_chi2: " << totalchi2_by_parameter[5] << "/" << totalnumconstraints << std::endl;
     return LHCb::ChiSquare( totalchisq, totalnumconstraints );
   }
 } // namespace LHCb::Alignment
-- 
GitLab


From 6a8a321194e98e856a68af8c06728632b95fbb0c Mon Sep 17 00:00:00 2001
From: Nils Breer <nils.breer@cern.ch>
Date: Fri, 25 Aug 2023 14:40:36 +0200
Subject: [PATCH 02/12] cpp changed, particle selection adapted, optionsfile
 added, best joint uncertainties added

---
 .../options/AlignFTjointModules_data.py       |  112 ++
 .../python/Humboldt/ParticleSelections.py     |   13 +-
 .../python/Humboldt/alignment_tracking.py     |   12 +-
 .../python/TAlignment/Alignables.py           |    3 +-
 .../python/TAlignment/SurveyConstraints.py    |    3 -
 .../surveyxml/FT/Modules_default.xml          | 1563 +++++++++--------
 .../surveyxml/FT/Modules_default_old.xml      | 1038 +++++++++++
 7 files changed, 1953 insertions(+), 791 deletions(-)
 create mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data.py
 create mode 100644 Alignment/TAlignment/surveyxml/FT/Modules_default_old.xml

diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data.py b/Alignment/Humboldt/options/AlignFTjointModules_data.py
new file mode 100644
index 000000000..a8f591433
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFTjointModules_data.py
@@ -0,0 +1,112 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+# options.input_type = 'MDF' # look into eos for correct data type
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk"
+CONDDBTag = "master"
+
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35 # set to 1 for tuples, 30 for align V3
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf(
+)
+
+from TAlignment.Alignables import Alignables
+elements = Alignables()
+dofs = "TxRz"
+elements.FTHalfModules(dofs)
+
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+
+surveyconstraints = SurveyConstraints()
+surveyconstraints.FT(addHalfModuleJoints=True)
+
+# define Lagrange constraints
+constraints = []
+constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+with createAlignUpdateTool.bind(
+        logFile="alignlog_ft_modules_d0_prkalman.txt"
+), createAlignAlgorithm.bind(
+        xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')):
+    runAlignment(
+        options,
+        surveyConstraints=surveyconstraints,
+        lagrangeConstraints=constraints,
+        alignmentTracks=alignmentTracks,
+        alignmentPVs=alignmentPVs,
+        particles=particles,
+        odin=odin,
+        elementsToAlign=elements,
+        monitorList=monitors,
+        usePrKalman=True)
diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
index 4411a1151..b1a333dcf 100644
--- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
+++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
@@ -28,8 +28,8 @@ def defaultHLTD0Selection(vertices_v2):
 
     loosepions = make_long_pions()
     loosekaons = make_long_kaons()
-
-    ptmin = 1400 * MeV
+    ptmin = 800 * MeV
+#    ptmin = 1400 * MeV
     minIP = 0.06 * mm
 
     pions = ParticleFilter(
@@ -48,12 +48,13 @@ def defaultHLTD0Selection(vertices_v2):
 
     combination_code = F.require_all(
         in_range(1760 * MeV, F.MASS, 1960 * MeV),
-        F.SUM(F.PT) > 1200 * MeV,
-        F.MAXDOCACUT(0.1 * mm),
+        F.SUM(F.PT) > 2000 * MeV,
+        F.MAXDOCACUT(0.15 * mm),
     )
     vertex_code = F.require_all(F.CHI2DOF < 10.,
-                                F.BPVETA(vertices_v2) > 2,
-                                F.BPVETA(vertices_v2) < 5)
+#                                F.BPVETA(vertices_v2) > 2,
+#                                F.BPVETA(vertices_v2) < 5
+    )
 
     combinedD0 = ParticleCombiner(
         [pions, kaons],
diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
index 14b83dea9..be8668f0c 100644
--- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
+++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
@@ -225,23 +225,31 @@ def make_scifi_tracks_and_particles_prkf():
      PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\
      make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\
      make_muon_hits.bind(geometry_version=3),\
+     make_velo_full_clusters.bind(make_full_cluster=VPRetinaFullClusterDecoder),\
      make_VeloClusterTrackingSIMD.bind(algorithm=VeloRetinaClusterTrackingSIMD),\
      make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\
+     get_global_measurement_provider.bind(velo_hits=make_RetinaClusters),\
      hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT):
 
         reco = hlt2_reconstruction()
         hlt2_tracks = reco['LongTracks']
         best_tracks = hlt2_tracks
         pvs = reco["PVs_v1"]
+
         particlepvs = reco["PVs"]
         from PyConf.application import default_raw_banks
         from PyConf.application import make_odin
         odin = make_odin()
-
+        from Humboldt.ParticleSelections import defaultHLTD0Selection
         particles = defaultHLTD0Selection(particlepvs)
 
+        from PyConf.Tools import TrackSelector
+        from PyConf.Algorithms import VertexListRefiner, TrackSelectionMerger
+        from Humboldt.TrackSelections import GoodLongTracks
+        from Humboldt.VertexSelections import VPPrimaryVertices
+
         selected_tracks = GoodLongTracks(best_tracks)
-        track_name = "AlignGoodLongTracks"
+        track_name = "GoodLongTracks"
         alignmentTracks = TrackSelectionMerger(
             InputLocations=[selected_tracks]).OutputLocation
         selected_pvs = VPPrimaryVertices(pvs)
diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py
index f99095f4d..b754cd2bd 100755
--- a/Alignment/TAlignment/python/TAlignment/Alignables.py
+++ b/Alignment/TAlignment/python/TAlignment/Alignables.py
@@ -400,7 +400,7 @@ class Alignables(list):
         self.__append(elements, dofs)
 
     def FTHalfModuleJoints(self,
-                           errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"):
+                           errors="0.0000074 0.0012 0.0019 0.0004 0.00000044 0.00022"):
         joints = []
         for station in self._FTStations:
             for layer in self._FTLayers:
@@ -415,6 +415,7 @@ class Alignables(list):
                         modbot = 'FT' + station + layer + Qbot + module
                         joints.append(" : ".join(
                             [modtop, modbot, errors, "0 -1212.75 0"]))
+        print(joints)
         return joints
 
     def FTMats(self, dofs=""):
diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
index 7bc46e94a..e3f762aff 100644
--- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
+++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
@@ -160,10 +160,7 @@ class SurveyConstraints(LHCbConfigurableUser):
                 ]
         else:
             if UseDD4Hep:
-                print("this is ok 1")
                 self.XmlUncertainties += [
-                    #".*M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
-                    #"FT/T3/X2/.*/HL./M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
                     "FT/.*/M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
                 ]
             else:
diff --git a/Alignment/TAlignment/surveyxml/FT/Modules_default.xml b/Alignment/TAlignment/surveyxml/FT/Modules_default.xml
index adff8167a..4afc52baf 100644
--- a/Alignment/TAlignment/surveyxml/FT/Modules_default.xml
+++ b/Alignment/TAlignment/surveyxml/FT/Modules_default.xml
@@ -1,1038 +1,1043 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-    (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration
-
-    This software is distributed under the terms of the GNU General Public
-    Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".
-
-    In applying this licence, CERN does not waive the privileges and immunities
-    granted to it by virtue of its status as an Intergovernmental Organization
-    or submit itself to any jurisdiction.
+<!--                                                                                          
+    (c) Copyright 2000-2022 CERN for the benefit of the LHCb Collaboration                                                                                                                
+    In this survey: 
+    * survey data from surveys in assembly hall  
+    * additional rotations from survey of frames downstairs are applied to modules 
+    * modules with missing data are given the information for the average plane for their quarter  
+    * beam angle correction between survey plane and lhcb plane is applied
+    * Version date: 15th November 2022                                                                                 
+    List of modules with missing data:
+    * T1X1Q2M1   
+    * T1VQ0M3 
+    * T2X1Q2M0 
+    * T3X1Q0M0 
+    * T3VQ0M4 
+    * T3X2Q0M1 
 -->
-<!DOCTYPE DDDB SYSTEM "git:/DTD/structure.dtd">
 <DDDB>
-    <condition classID="6" name="T1X1Q0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X1Q3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1UQ3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1VQ3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T1X2Q3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X1Q3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2UQ3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2VQ3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T2X2Q3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q0M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q0/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q1M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0/Q2/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q2M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X1Q3M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ0M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q0/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ1M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0/Q2/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ2M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3UQ3M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ0M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q0/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ1M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0/Q2/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ2M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3VQ3M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q0M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q0M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q0M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q0M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q0M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q0M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q0/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q1M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q1M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q1M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q1M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q1M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q1M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0/Q2/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q2M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q2M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q2M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q2M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q2M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q2M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q1/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q3M0">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M5">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q3M1">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M4">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q3M2">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M3">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q3M3">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M2">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q3M4">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M1">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-    <condition classID="6" name="T3X2Q3M5">
-      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
-      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1/Q3/M0">
+      <paramVector name="dPosXYZ" type="double">0.0 0.0 0.0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.0 0.0 0.0</paramVector>
     </condition>
-</DDDB>
+  </DDDB>
diff --git a/Alignment/TAlignment/surveyxml/FT/Modules_default_old.xml b/Alignment/TAlignment/surveyxml/FT/Modules_default_old.xml
new file mode 100644
index 000000000..adff8167a
--- /dev/null
+++ b/Alignment/TAlignment/surveyxml/FT/Modules_default_old.xml
@@ -0,0 +1,1038 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+    (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration
+
+    This software is distributed under the terms of the GNU General Public
+    Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".
+
+    In applying this licence, CERN does not waive the privileges and immunities
+    granted to it by virtue of its status as an Intergovernmental Organization
+    or submit itself to any jurisdiction.
+-->
+<!DOCTYPE DDDB SYSTEM "git:/DTD/structure.dtd">
+<DDDB>
+    <condition classID="6" name="T1X1Q0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X1Q3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1UQ3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1VQ3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T1X2Q3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X1Q3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2UQ3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2VQ3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T2X2Q3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q0M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q1M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q2M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X1Q3M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ0M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ1M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ2M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3UQ3M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ0M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ1M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ2M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3VQ3M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q0M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q0M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q0M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q0M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q0M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q0M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q1M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q1M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q1M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q1M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q1M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q1M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q2M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q2M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q2M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q2M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q2M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q2M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q3M0">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q3M1">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q3M2">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q3M3">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q3M4">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+    <condition classID="6" name="T3X2Q3M5">
+      <paramVector name="dPosXYZ" type="double">0 0 0</paramVector>
+      <paramVector name="dRotXYZ" type="double">0 0 0</paramVector>
+    </condition>
+</DDDB>
-- 
GitLab


From f05190f54ce576aee119eda9b574407e39c539a8 Mon Sep 17 00:00:00 2001
From: Nils Breer <nils.breer@cern.ch>
Date: Wed, 8 Nov 2023 20:24:39 +0100
Subject: [PATCH 03/12] added options files for global alignment changed
 alignmentscenarios and survey constraints

---
 .../options/AlignFT_VP_combined_data.py       | 104 +++++++
 .../options/AlignFT_VP_combined_data_scifi.py | 104 +++++++
 .../options/AlignFT_VP_combined_data_v2.py    | 104 +++++++
 .../options/AlignFT_VP_combined_data_v3.py    | 104 +++++++
 .../options/AlignFT_VP_combined_data_v4.py    | 104 +++++++
 .../options/AlignFT_VP_combined_data_v5.py    | 104 +++++++
 .../options/AlignFT_VP_combined_data_v6.py    | 104 +++++++
 .../AlignFT_VP_combined_data_veloRx.py        | 104 +++++++
 .../AlignFT_VP_combined_data_veloRz.py        | 104 +++++++
 .../options/AlignFTjointModules_data.py       |  21 +-
 .../options/AlignFTjointModules_data_2.py     | 117 +++++++
 .../options/AlignFTjointModules_data_3.py     | 118 +++++++
 .../python/Humboldt/AlignmentScenarios.py     | 264 +++++++++++++++-
 .../python/Humboldt/alignment_tracking.py     |  42 ++-
 .../Humboldt/alignment_tracking.py.save       | 290 ++++++++++++++++++
 Alignment/Humboldt/python/Humboldt/utils.py   |   2 +
 .../python/TAlignment/Alignables.py           |  10 +-
 .../python/TAlignment/SurveyConstraints.py    |  40 ++-
 .../surveyxml/FT/CFrames_surveyInput_2023.xml | 126 ++++++++
 19 files changed, 1937 insertions(+), 29 deletions(-)
 create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data.py
 create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py
 create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py
 create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py
 create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py
 create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py
 create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py
 create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py
 create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py
 create mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data_2.py
 create mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data_3.py
 create mode 100644 Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save
 create mode 100644 Alignment/TAlignment/surveyxml/FT/CFrames_surveyInput_2023.xml

diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
new file mode 100644
index 000000000..70688b57c
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
@@ -0,0 +1,104 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+from RecoConf.event_filters import require_pvs
+from Humboldt.options import usePrKalman
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk" # run3/trunk
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment
+config = configureGlobalAlignment(halfdofs="TxTyTzRy")
+
+#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+
+filter_pvs = []
+filter_pvs.append(require_pvs(alignmentPVs))
+
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+
+with createAlignAlgorithm.bind(
+        outputDataFile="humb-vp-ft-halves-modules",
+        updateInFinalize=False,
+        onlineMode=False):
+    runAlignment(
+        options,
+        surveyConstraints=config.SurveyConstraints,
+        lagrangeConstraints=config.LagrangeConstraints,
+        alignmentTracks=alignmentTracks,
+        elementsToAlign=config.Elements,
+        filters=filter_pvs,
+        alignmentPVs=alignmentPVs,
+        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py
new file mode 100644
index 000000000..0af04347a
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py
@@ -0,0 +1,104 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+from RecoConf.event_filters import require_pvs
+from Humboldt.options import usePrKalman
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk" # run3/trunk
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment, configureSciFiOnly
+config = configureSciFiOnly()
+
+#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+
+filter_pvs = []
+filter_pvs.append(require_pvs(alignmentPVs))
+
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+
+with createAlignAlgorithm.bind(
+        outputDataFile="humb-vp-ft-halves-modules",
+        updateInFinalize=False,
+        onlineMode=False):
+    runAlignment(
+        options,
+        surveyConstraints=config.SurveyConstraints,
+        lagrangeConstraints=config.LagrangeConstraints,
+        alignmentTracks=alignmentTracks,
+        elementsToAlign=config.Elements,
+        filters=filter_pvs,
+        alignmentPVs=alignmentPVs,
+        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py
new file mode 100644
index 000000000..5e29b2c53
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py
@@ -0,0 +1,104 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+from RecoConf.event_filters import require_pvs
+from Humboldt.options import usePrKalman
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk" # run3/trunk
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v2
+config = configureGlobalAlignment_v2(halfdofs="TxTyTzRy")
+
+#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+
+filter_pvs = []
+filter_pvs.append(require_pvs(alignmentPVs))
+
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+
+with createAlignAlgorithm.bind(
+        outputDataFile="humb-vp-ft-halves-modules",
+        updateInFinalize=False,
+        onlineMode=False):
+    runAlignment(
+        options,
+        surveyConstraints=config.SurveyConstraints,
+        lagrangeConstraints=config.LagrangeConstraints,
+        alignmentTracks=alignmentTracks,
+        elementsToAlign=config.Elements,
+        filters=filter_pvs,
+        alignmentPVs=alignmentPVs,
+        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py
new file mode 100644
index 000000000..2897c16d9
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py
@@ -0,0 +1,104 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+from RecoConf.event_filters import require_pvs
+from Humboldt.options import usePrKalman
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk" # run3/trunk
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v3
+config = configureGlobalAlignment_v3(halfdofs="TxTyTzRy")
+
+#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+
+filter_pvs = []
+filter_pvs.append(require_pvs(alignmentPVs))
+
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+
+with createAlignAlgorithm.bind(
+        outputDataFile="humb-vp-ft-halves-modules",
+        updateInFinalize=False,
+        onlineMode=False):
+    runAlignment(
+        options,
+        surveyConstraints=config.SurveyConstraints,
+        lagrangeConstraints=config.LagrangeConstraints,
+        alignmentTracks=alignmentTracks,
+        elementsToAlign=config.Elements,
+        filters=filter_pvs,
+        alignmentPVs=alignmentPVs,
+        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py
new file mode 100644
index 000000000..76ed38640
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py
@@ -0,0 +1,104 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+from RecoConf.event_filters import require_pvs
+from Humboldt.options import usePrKalman
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk" # run3/trunk
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v4
+config = configureGlobalAlignment_v4(halfdofs="TxTyTzRy")
+
+#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+
+filter_pvs = []
+filter_pvs.append(require_pvs(alignmentPVs))
+
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+
+with createAlignAlgorithm.bind(
+        outputDataFile="humb-vp-ft-halves-modules",
+        updateInFinalize=False,
+        onlineMode=False):
+    runAlignment(
+        options,
+        surveyConstraints=config.SurveyConstraints,
+        lagrangeConstraints=config.LagrangeConstraints,
+        alignmentTracks=alignmentTracks,
+        elementsToAlign=config.Elements,
+        filters=filter_pvs,
+        alignmentPVs=alignmentPVs,
+        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py
new file mode 100644
index 000000000..f6dc63cf6
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py
@@ -0,0 +1,104 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+from RecoConf.event_filters import require_pvs
+from Humboldt.options import usePrKalman
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk" # run3/trunk
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v5
+config = configureGlobalAlignment_v5(halfdofs="TxTyTz")
+
+#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+
+filter_pvs = []
+filter_pvs.append(require_pvs(alignmentPVs))
+
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+
+with createAlignAlgorithm.bind(
+        outputDataFile="humb-vp-ft-halves-modules",
+        updateInFinalize=False,
+        onlineMode=False):
+    runAlignment(
+        options,
+        surveyConstraints=config.SurveyConstraints,
+        lagrangeConstraints=config.LagrangeConstraints,
+        alignmentTracks=alignmentTracks,
+        elementsToAlign=config.Elements,
+        filters=filter_pvs,
+        alignmentPVs=alignmentPVs,
+        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py
new file mode 100644
index 000000000..be1cc5ec7
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py
@@ -0,0 +1,104 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+from RecoConf.event_filters import require_pvs
+from Humboldt.options import usePrKalman
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk" # run3/trunk
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v6
+config = configureGlobalAlignment_v6(halfdofs="TxTyTz")
+
+#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+
+filter_pvs = []
+filter_pvs.append(require_pvs(alignmentPVs))
+
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+
+with createAlignAlgorithm.bind(
+        outputDataFile="humb-vp-ft-halves-modules",
+        updateInFinalize=False,
+        onlineMode=False):
+    runAlignment(
+        options,
+        surveyConstraints=config.SurveyConstraints,
+        lagrangeConstraints=config.LagrangeConstraints,
+        alignmentTracks=alignmentTracks,
+        elementsToAlign=config.Elements,
+        filters=filter_pvs,
+        alignmentPVs=alignmentPVs,
+        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py
new file mode 100644
index 000000000..1daa7414b
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py
@@ -0,0 +1,104 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+from RecoConf.event_filters import require_pvs
+from Humboldt.options import usePrKalman
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk" # run3/trunk
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VeloRx
+config = configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy")
+
+#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+
+filter_pvs = []
+filter_pvs.append(require_pvs(alignmentPVs))
+
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+
+with createAlignAlgorithm.bind(
+        outputDataFile="humb-vp-ft-halves-modules",
+        updateInFinalize=False,
+        onlineMode=False):
+    runAlignment(
+        options,
+        surveyConstraints=config.SurveyConstraints,
+        lagrangeConstraints=config.LagrangeConstraints,
+        alignmentTracks=alignmentTracks,
+        elementsToAlign=config.Elements,
+        filters=filter_pvs,
+        alignmentPVs=alignmentPVs,
+        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py
new file mode 100644
index 000000000..69320f809
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py
@@ -0,0 +1,104 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+from RecoConf.event_filters import require_pvs
+from Humboldt.options import usePrKalman
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk" # run3/trunk
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VeloRz
+config = configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy")
+
+#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+
+filter_pvs = []
+filter_pvs.append(require_pvs(alignmentPVs))
+
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+
+with createAlignAlgorithm.bind(
+        outputDataFile="humb-vp-ft-halves-modules",
+        updateInFinalize=False,
+        onlineMode=False):
+    runAlignment(
+        options,
+        surveyConstraints=config.SurveyConstraints,
+        lagrangeConstraints=config.LagrangeConstraints,
+        alignmentTracks=alignmentTracks,
+        elementsToAlign=config.Elements,
+        filters=filter_pvs,
+        alignmentPVs=alignmentPVs,
+        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data.py b/Alignment/Humboldt/options/AlignFTjointModules_data.py
index a8f591433..160d6131a 100644
--- a/Alignment/Humboldt/options/AlignFTjointModules_data.py
+++ b/Alignment/Humboldt/options/AlignFTjointModules_data.py
@@ -43,14 +43,18 @@ options.data_type = 'Upgrade'
 
 # set DDDB and CondDB info
 options.geometry_version = "trunk"
+#CONDDBTag = "nibreer_joint_analysis"
 CONDDBTag = "master"
-
 options.conditions_version = CONDDBTag
 
 online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
 if os.path.exists(online_cond_path):
     DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
 
+#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/'
+#if os.path.exists(cond_path):
+#    DD4hepSvc().ConditionsLocation = 'file://' + cond_path
+
 from glob import glob
 from Gaudi.Configuration import *
 from GaudiConf import IOHelper
@@ -80,9 +84,8 @@ alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and
 
 from TAlignment.Alignables import Alignables
 elements = Alignables()
-dofs = "TxRz"
-elements.FTHalfModules(dofs)
-
+elements.FTHalfModules("TxTzRxRz")
+#elements.FTHalfModules("TxTzRxRz")
 # add survey constraints
 from Configurables import SurveyConstraints
 from PyConf.Tools import AlignChisqConstraintTool
@@ -90,9 +93,17 @@ from PyConf.Tools import AlignChisqConstraintTool
 surveyconstraints = SurveyConstraints()
 surveyconstraints.FT(addHalfModuleJoints=True)
 
+surveyconstraints.Constraints += [
+    # allow for an Rz of ~1mm/1m around the z=0 part of the half module
+    "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.001 0.001 0.001 : 0 +1213 0"]
+
+
 # define Lagrange constraints
 constraints = []
-constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Tz Rx Rz")
+#constraints.append('FixMeanModuleT1 : FT/T1/U/HL.*/M. : Tx : total')
+#constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx: total')
+#constraints.append("ModulesGlobalConstraint : FT/T./(X1|X2|U|V)/HL./Q./M. : Tx Tz Rx Rz")
 
 from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
 with createAlignUpdateTool.bind(
diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data_2.py b/Alignment/Humboldt/options/AlignFTjointModules_data_2.py
new file mode 100644
index 000000000..ef93a1cd4
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFTjointModules_data_2.py
@@ -0,0 +1,117 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+
+options.input_type = 'MDF'
+
+options.input_raw_format = 0.5
+# options.input_type = 'MDF' # look into eos for correct data type
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk"
+#CONDDBTag = "nibreer_joint_analysis"
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/'
+#if os.path.exists(cond_path):
+#    DD4hepSvc().ConditionsLocation = 'file://' + cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35 # set to 1 for tuples, 30 for align V3
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+
+from TAlignment.Alignables import Alignables
+elements = Alignables()
+elements.FTHalfModules("TxTzRxRz")
+#elements.FTHalfModules("TxTzRxRz")
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+
+surveyconstraints = SurveyConstraints()
+surveyconstraints.FT(addHalfModuleJoints=True)
+
+# define Lagrange constraints
+constraints = []
+constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+constraints.append('FixMeanModuleT1 : FT/T1/U/HL.*/M. : Tx : total')
+constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx : total')
+
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+with createAlignUpdateTool.bind(
+        logFile="alignlog_ft_modules_d0_prkalman.txt"
+), createAlignAlgorithm.bind(
+        xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')):
+    runAlignment(
+        options,
+        surveyConstraints=surveyconstraints,
+        lagrangeConstraints=constraints,
+        alignmentTracks=alignmentTracks,
+        alignmentPVs=alignmentPVs,
+        particles=particles,
+        odin=odin,
+        elementsToAlign=elements,
+        monitorList=monitors,
+        usePrKalman=True)
diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data_3.py b/Alignment/Humboldt/options/AlignFTjointModules_data_3.py
new file mode 100644
index 000000000..0f1c38663
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFTjointModules_data_3.py
@@ -0,0 +1,118 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+# options.input_type = 'MDF' # look into eos for correct data type
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk"
+#CONDDBTag = "nibreer_joint_analysis"
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/'
+#if os.path.exists(cond_path):
+#    DD4hepSvc().ConditionsLocation = 'file://' + cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35 # set to 1 for tuples, 30 for align V3
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf(
+)
+
+from TAlignment.Alignables import Alignables
+elements = Alignables()
+elements.FTHalfModules("TxTzRxRz")
+#elements.FTHalfModules("TxTzRxRz")
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+
+surveyconstraints = SurveyConstraints()
+surveyconstraints.FT(addHalfModuleJoints=True)
+
+# define Lagrange constraints
+constraints = []
+constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Tz Rx Rz")
+constraints.append('FixMeanModuleT1 : FT/T1/V/HL.*/M. : Tx')
+constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx')
+constraints.append("ModulesGlobalConstraint : FT/T./(X1|X2|U|V)/HL./Q./M. : Tx Tz Rx Rz")
+
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+with createAlignUpdateTool.bind(
+        logFile="alignlog_ft_modules_d0_prkalman.txt"
+), createAlignAlgorithm.bind(
+        xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')):
+    runAlignment(
+        options,
+        surveyConstraints=surveyconstraints,
+        lagrangeConstraints=constraints,
+        alignmentTracks=alignmentTracks,
+        alignmentPVs=alignmentPVs,
+        particles=particles,
+        odin=odin,
+        elementsToAlign=elements,
+        monitorList=monitors,
+        usePrKalman=True)
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
index ba123b3c1..e20748736 100644
--- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
+++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
@@ -38,6 +38,266 @@ class AlignmentScenario():
         #self.SurveyConstraints = surveyconstraints
         #self.SubDetectors = subdetectors
 
+def configureSciFiOnly():
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['FT']
+
+    elements = Alignables()
+
+    elements.FTCFrames("TxRz")
+    elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTHalfModules("Rx")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    surveyconstraints.XmlFiles = []
+
+    surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True)
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+       	surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+    elements.VP("Rx")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+    elements.VP("Rz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    #elements.VP("None")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+#    constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    #elements.VP("None")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        print('the wrong survey was used...')
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+    print('survey constraints: ', setup.SurveyConstraints)
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v5(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+
+#    elements.FTCFrameLayers("TxRz")
+#    elements.FTCFrames("TxTz")
+    elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTHalfModules("TxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+#    surveyconstraints.XmlFiles = []
+
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v6(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+#    elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTModules("TxRxRz")
+    elements.FTHalfModules("TxRxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
 
 def configureRun3Alignment(fixQOverPBias=True):
     # just a first implementation to test some essential things
@@ -59,8 +319,8 @@ def configureRun3Alignment(fixQOverPBias=True):
     # add some survey constraints (just fixing to nominal, right now)
     surveyconstraints = SurveyConstraints()
     if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data20221115dd4hep')
+       	surveyconstraints.VP(ver='2023_dd4hep')
+       	surveyconstraints.FT(ver='data20221115dd4hep')
     else:
         surveyconstraints.VP(ver='latest')
         surveyconstraints.FT(ver='MC')
diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
index be8668f0c..fd05878a6 100644
--- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
+++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
@@ -253,24 +253,38 @@ def make_scifi_tracks_and_particles_prkf():
         alignmentTracks = TrackSelectionMerger(
             InputLocations=[selected_tracks]).OutputLocation
         selected_pvs = VPPrimaryVertices(pvs)
-
+        from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor
+        from GaudiKernel.SystemOfUnits import MeV
         monitorlist = []
+        myFTTrackMonitor = FTTrackMonitor_PrKalman(
+            name="AlignMoni_FTTrackMonitor_PrKalman",
+            TracksInContainer=alignmentTracks)
+        myTrackVertexMonitor = TrackVertexMonitor(
+            name="AlignMoni_FT_TrackVertexMonitor",
+            TrackContainer=alignmentTracks,
+            PVContainer=pvs)
+        monitorlist.append(myFTTrackMonitor)
+        monitorlist.append(myTrackVertexMonitor)
+#        monitorlist = [
+#            myFTTrackMonitor,
+#            myTrackVertexMonitor,
+#        ]
+        # ParticleMassMonitor
+
         monitorlist = monitorlist + monitor_SciFi_tracks(
             alignmentTracks, track_name, includeQuarters=True)
         monitorlist = monitorlist + monitor_SciFi_tracks(
             best_tracks, "BestHLT2Tracks", includeQuarters=True)
-        myTrackVertexMonitor = TrackVertexMonitor(
-            TrackContainer=alignmentTracks, PVContainer=pvs)
-        monitorlist.append(myTrackVertexMonitor)
 
         ## particle mass monitor needs replacement or upgrade
-        myParticleMonitor = ParticleMassMonitor(
-            name="defaultD0MassMonitor",
-            ParticleType="D0",
-            Particles=particles,
-            MassMean=1864.84 * MeV,
-            MassSigma=90 * MeV,
-            Bins=100)
-        monitorlist.append(myParticleMonitor)
-
-        return alignmentTracks, selected_pvs, particles, odin, monitorlist
+        #myParticleMonitor = ParticleMassMonitor(
+        #    name="defaultD0MassMonitor",
+        #    ParticleType="D0",
+        #    Particles=particles,
+        #    MassMean=1864.84 * MeV,
+        #    MassSigma=90 * MeV,
+        #    Bins=100)
+        #monitorlist.append(myParticleMonitor)
+
+        #return alignmentTracks, selected_pvs, particles, odin, monitorlist
+        return alignmentTracks, selected_pvs, odin, monitorlist
diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save
new file mode 100644
index 000000000..fd05878a6
--- /dev/null
+++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save
@@ -0,0 +1,290 @@
+###############################################################################
+# (c) Copyright 2021 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+from functools import partial
+from RecoConf.hlt1_tracking import (
+    all_velo_track_types,
+    make_VeloClusterTrackingSIMD_hits,
+    make_VeloClusterTrackingSIMD,
+    make_RetinaClusters,
+    get_global_measurement_provider,
+    make_velo_full_clusters,
+    make_reco_pvs,
+    make_PatPV3DFuture_pvs,
+)
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT
+
+from PyConf.Algorithms import (
+    PrKalmanFilter_Velo,
+    TrackSelectionMerger,
+    TrackListRefiner,
+    VeloClusterTrackingSIMDFull,
+    PatPVLeftRightFinderMerger,
+    VeloRetinaClusterTrackingSIMDFull,
+    PrKalmanFilter_noUT,
+    PrStoreUTHitEmptyProducer,
+    VPRetinaFullClusterDecoder,
+    VeloRetinaClusterTrackingSIMD,
+    TrackMonitor_PrKalman,
+    TrackFitMatchMonitor_PrKalman,
+    FTTrackMonitor_PrKalman,
+    TrackVertexMonitor,
+    TrackParticleMonitor,
+    ParticleMassMonitor,
+)
+from PyConf.Algorithms import Deprecated__TrackListRefiner as TrackListRefiner
+
+from PyConf.Tools import TrackLinearExtrapolator
+from RecoConf.core_algorithms import make_unique_id_generator
+from Humboldt.TrackSelections import VPBackwardTracks, VPGoodTracks, GoodLongTracks
+from Humboldt.VertexSelections import VPPrimaryVertices
+from Humboldt.ParticleSelections import defaultHLTD0Selection
+
+from GaudiKernel.SystemOfUnits import MeV
+from PyConf.Tools import TrackSelector, FTTrackSelector
+
+
+def make_pvs(inputtracks):
+    return PatPVLeftRightFinderMerger(InputTracks=inputtracks).OutputVertices
+
+
+def make_empty_ut_hit_for_meas_provider():
+    """Creates an empty container of UT hits, used for the no UT scenario.
+    Necessary to run with DD4hep while Ut is not there yet. Could be moved to Moore
+
+    Returns:
+            DataHandle: PrStoreUTHitEmptyProducer' Output.
+
+    """
+    return PrStoreUTHitEmptyProducer().Output
+
+
+def make_fitted_velotracks(usePrKalman=True,
+                           MaxOutlierIterations=2,
+                           MaxChi2Dof=5,
+                           MinNVeloLayers=4):
+    with make_VeloClusterTrackingSIMD.bind(
+            algorithm=VeloRetinaClusterTrackingSIMDFull):
+        vp_hits = make_VeloClusterTrackingSIMD_hits()
+        velo_tracks = all_velo_track_types()
+    backward_velo_tracks = velo_tracks["Pr::backward"]
+    forward_velo_tracks = velo_tracks["Pr"]
+
+    if usePrKalman:
+        kf_template = partial(
+            PrKalmanFilter_Velo,
+            MaxOutlierIterations=MaxOutlierIterations,
+            HitsVP=vp_hits,
+            FillFitResult=True,
+            ClassicSmoothing=True,
+            MinNumVPHitsForOutlierRemoval=4,
+            ReferenceExtrapolator=TrackLinearExtrapolator(),
+            InputUniqueIDGenerator=make_unique_id_generator())
+
+        fitted_velo_bwd = kf_template(
+            name="PrKalmanFilter_VeloBwd",
+            Input=backward_velo_tracks).OutputTracks
+        fitted_velo_fwd = kf_template(
+            name="PrKalmanFilter_VeloFwd",
+            Input=forward_velo_tracks).OutputTracks
+
+        selected_bwd_tracks = VPBackwardTracks(
+            fitted_velo_bwd,
+            MaxChi2Cut=MaxChi2Dof,
+            MinNVeloLayers=MinNVeloLayers)
+        selected_fwd_tracks = VPGoodTracks(
+            fitted_velo_fwd,
+            MaxChi2Dof=MaxChi2Dof,
+            MinNVeloLayers=MinNVeloLayers)
+        velotracks = TrackSelectionMerger(
+            InputLocations=[selected_bwd_tracks, selected_fwd_tracks
+                            ]).OutputLocation
+    else:
+        from PyConf.Algorithms import TrackEventFitter
+        from PyConf.Tools import (
+            TrackMasterFitter,
+            TrackSimpleExtraSelector,
+            TrackMasterExtrapolator,
+        )
+        measprovider = get_global_measurement_provider(
+            ignoreUT=True,
+            ignoreFT=True,
+            ignoreMuon=True,
+            velo_hits=make_RetinaClusters,
+            ut_hits=make_empty_ut_hit_for_meas_provider)
+        #materiallocator = SimplifiedMaterialLocator() this will not work with dd4hep
+        extrapolatorselector = TrackSimpleExtraSelector(
+            ExtrapolatorName="TrackLinearExtrapolator")
+        masterextrapolator = TrackMasterExtrapolator(
+            ExtraSelector=extrapolatorselector,
+            ApplyEnergyLossCorr=False,
+            ApplyElectronEnergyLossCorr=False)
+        trackfitter = TrackMasterFitter(
+            MeasProvider=measprovider,
+            Extrapolator=masterextrapolator,
+            MaxUpdateTransports=1,
+            MinNumVPHitsForOutlierRemoval=4,
+            MaxNumberOutliers=MaxOutlierIterations,
+            MakeMeasurements=True,
+            MakeNodes=True,  # need to force a refit
+            FastMaterialApproximation=True)
+        veloonlyfitter = TrackEventFitter(
+            TracksInContainer=velo_tracks["v1"], Fitter=trackfitter)
+        velotracks = VPGoodTracks(
+            veloonlyfitter.TracksOutContainer,
+            MaxChi2Dof=MaxChi2Dof,
+            MinNVeloLayers=MinNVeloLayers)
+
+    return velotracks
+
+
+def make_align_vp_input(usePrKalman=True,
+                        MaxOutlierIterations=2,
+                        MaxChi2Dof=5,
+                        MinNVeloLayers=4):
+
+    align_tracks = make_fitted_velotracks(
+        usePrKalman=usePrKalman,
+        MaxOutlierIterations=MaxOutlierIterations,
+        MaxChi2Dof=MaxChi2Dof,
+        MinNVeloLayers=MinNVeloLayers)
+    align_pvs = make_pvs(align_tracks)
+    return align_tracks, align_pvs
+
+
+def make_align_input_besttracks(usePrKalman=True):
+    # it seems that we have little choice but just to set up the entire reco sequence ourselves. the moore stuff is close to impossible to work with.
+    # note that the PVs reconstructed by TrackBeamLineVertexFinderSoA do not store the list of associated tracks. Use PatPV3DFuture instead
+    from RecoConf.hlt2_tracking import make_hlt2_tracks_without_UT
+    with make_VeloClusterTrackingSIMD.bind(algorithm=VeloClusterTrackingSIMDFull),\
+        PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True):
+        hlt2_tracks = make_hlt2_tracks_without_UT(use_pr_kf=usePrKalman)
+
+    # this is a bit funny, but we need fitted velo tracks. so we filter from the best track container what we need, then add our own fitted velo tracks
+    from Humboldt.TrackSelections import GoodLongTracks
+    goodlongtracks = GoodLongTracks(hlt2_tracks['BestLong']['v1'])
+    goodvelotracks = make_fitted_velotracks(usePrKalman=usePrKalman)
+    # combine using AlignTrackCloneRemover
+    from PyConf.Algorithms import AlignTrackCloneRemover
+    goodfittedtracks = AlignTrackCloneRemover(
+        name="AlignBestCloneRemover",
+        InputLocations=[goodlongtracks, goodvelotracks]).OutputLocation
+
+    # now make the PVs with these tracks
+    pvs = make_pvs(goodfittedtracks)
+
+    return goodfittedtracks, pvs
+
+
+def monitor_SciFi_tracks(track_group,
+                         tracks_name,
+                         includeQuarters=False,
+                         minHits=10):
+    monitorlist = []
+    myFTTrackMonitor = FTTrackMonitor_PrKalman(
+        name="FTTrackMonitor_" + tracks_name,
+        TracksInContainer=track_group,
+        VerboseMode=True)
+    monitorlist.append(myFTTrackMonitor)
+    myTrackMonitor = TrackMonitor_PrKalman(
+        name="TrackMonitor_" + tracks_name, TracksInContainer=track_group)
+    monitorlist.append(myTrackMonitor)
+
+    if includeQuarters:
+        Q0Selector = FTTrackSelector(
+            MinHitsCSide=minHits, MinHitsBottomHalf=minHits)
+        Q1Selector = FTTrackSelector(
+            MinHitsASide=minHits, MinHitsBottomHalf=minHits)
+        Q2Selector = FTTrackSelector(
+            MinHitsCSide=minHits, MinHitsTopHalf=minHits)
+        Q3Selector = FTTrackSelector(
+            MinHitsASide=minHits, MinHitsTopHalf=minHits)
+
+        for selector, quartername in zip(
+            [Q0Selector, Q1Selector, Q2Selector, Q3Selector],
+            ["_Q0", "_Q1", "_Q2", "_Q3"]):
+            selected_tracks = TrackListRefiner(
+                inputLocation=track_group, Selector=selector).outputLocation
+            monitorlist = monitorlist + monitor_SciFi_tracks(
+                selected_tracks, tracks_name + quartername)
+
+    return monitorlist
+
+
+def make_scifi_tracks_and_particles_prkf():
+    with reconstruction.bind(from_file=False),\
+     PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\
+     make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\
+     make_muon_hits.bind(geometry_version=3),\
+     make_velo_full_clusters.bind(make_full_cluster=VPRetinaFullClusterDecoder),\
+     make_VeloClusterTrackingSIMD.bind(algorithm=VeloRetinaClusterTrackingSIMD),\
+     make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\
+     get_global_measurement_provider.bind(velo_hits=make_RetinaClusters),\
+     hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT):
+
+        reco = hlt2_reconstruction()
+        hlt2_tracks = reco['LongTracks']
+        best_tracks = hlt2_tracks
+        pvs = reco["PVs_v1"]
+
+        particlepvs = reco["PVs"]
+        from PyConf.application import default_raw_banks
+        from PyConf.application import make_odin
+        odin = make_odin()
+        from Humboldt.ParticleSelections import defaultHLTD0Selection
+        particles = defaultHLTD0Selection(particlepvs)
+
+        from PyConf.Tools import TrackSelector
+        from PyConf.Algorithms import VertexListRefiner, TrackSelectionMerger
+        from Humboldt.TrackSelections import GoodLongTracks
+        from Humboldt.VertexSelections import VPPrimaryVertices
+
+        selected_tracks = GoodLongTracks(best_tracks)
+        track_name = "GoodLongTracks"
+        alignmentTracks = TrackSelectionMerger(
+            InputLocations=[selected_tracks]).OutputLocation
+        selected_pvs = VPPrimaryVertices(pvs)
+        from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor
+        from GaudiKernel.SystemOfUnits import MeV
+        monitorlist = []
+        myFTTrackMonitor = FTTrackMonitor_PrKalman(
+            name="AlignMoni_FTTrackMonitor_PrKalman",
+            TracksInContainer=alignmentTracks)
+        myTrackVertexMonitor = TrackVertexMonitor(
+            name="AlignMoni_FT_TrackVertexMonitor",
+            TrackContainer=alignmentTracks,
+            PVContainer=pvs)
+        monitorlist.append(myFTTrackMonitor)
+        monitorlist.append(myTrackVertexMonitor)
+#        monitorlist = [
+#            myFTTrackMonitor,
+#            myTrackVertexMonitor,
+#        ]
+        # ParticleMassMonitor
+
+        monitorlist = monitorlist + monitor_SciFi_tracks(
+            alignmentTracks, track_name, includeQuarters=True)
+        monitorlist = monitorlist + monitor_SciFi_tracks(
+            best_tracks, "BestHLT2Tracks", includeQuarters=True)
+
+        ## particle mass monitor needs replacement or upgrade
+        #myParticleMonitor = ParticleMassMonitor(
+        #    name="defaultD0MassMonitor",
+        #    ParticleType="D0",
+        #    Particles=particles,
+        #    MassMean=1864.84 * MeV,
+        #    MassSigma=90 * MeV,
+        #    Bins=100)
+        #monitorlist.append(myParticleMonitor)
+
+        #return alignmentTracks, selected_pvs, particles, odin, monitorlist
+        return alignmentTracks, selected_pvs, odin, monitorlist
diff --git a/Alignment/Humboldt/python/Humboldt/utils.py b/Alignment/Humboldt/python/Humboldt/utils.py
index 95365f899..cdbb3ce90 100644
--- a/Alignment/Humboldt/python/Humboldt/utils.py
+++ b/Alignment/Humboldt/python/Humboldt/utils.py
@@ -14,6 +14,7 @@ from PyConf.tonic import configurable
 from PyConf.Tools import AlignUpdateTool, EigenDiagSolvTool, AlignChisqConstraintTool
 from PyConf.application import configure
 from RecoConf.event_filters import require_gec
+from RecoConf.event_filters import require_pvs
 from DDDB.CheckDD4Hep import UseDD4Hep
 
 
@@ -177,6 +178,7 @@ def runAlignment(options,
 
     top_node = CompositeNode(
         "filterNode",
+#        filters + [alignment_node] + [require_pvs(alignmentPVs)],
         filters + [alignment_node],
         combine_logic=NodeLogic.LAZY_AND,
         force_order=True)
diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py
index b754cd2bd..b7a6f51ea 100755
--- a/Alignment/TAlignment/python/TAlignment/Alignables.py
+++ b/Alignment/TAlignment/python/TAlignment/Alignables.py
@@ -367,6 +367,7 @@ class Alignables(list):
                     elements.append("FT" + station + cframelayername + side +
                                     " : " + self._FT + station + cframelayer +
                                     halflayer)
+        print('FTCFrames elements:', elements)
         self.__append(elements, dofs)
 
     def FTCFrameLayers(self, dofs=""):
@@ -376,6 +377,7 @@ class Alignables(list):
                 for (side, halflayer) in self._FTHalfLayers.items():
                     elements.append("FT" + station + layer + side + " : " +
                                     self._FT + station + layer + halflayer)
+        print('FTCFrameLayers elements:', elements)
         self.__append(elements, dofs)
 
     def FTModules(self, dofs=""):
@@ -388,6 +390,7 @@ class Alignables(list):
                         elements.append("FT" + station + layer + side +
                                         module + ":" + self._FT + station +
                                         layer + halflayerquarters + module)
+        print('long module elements:', elements)
         self.__append(elements, dofs)
 
     def FTHalfModules(self, dofs=""):
@@ -397,10 +400,13 @@ class Alignables(list):
                 for k in self._FTRealQuarters:
                     for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort:
                         elements.append(self._FT + i + j + k + l)
+#        print('FTHalfModules elements:', elements)
         self.__append(elements, dofs)
 
     def FTHalfModuleJoints(self,
-                           errors="0.0000074 0.0012 0.0019 0.0004 0.00000044 0.00022"):
+                           errors="0.01 0.0012 0.0019 0.0004 0.0002 0.00017"):
+#                           errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"):
+#                           errors="0.001 0.001 0.002 0.0004 0.0002 0.0002"):
         joints = []
         for station in self._FTStations:
             for layer in self._FTLayers:
@@ -415,7 +421,7 @@ class Alignables(list):
                         modbot = 'FT' + station + layer + Qbot + module
                         joints.append(" : ".join(
                             [modtop, modbot, errors, "0 -1212.75 0"]))
-        print(joints)
+#        print(joints)
         return joints
 
     def FTMats(self, dofs=""):
diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
index e3f762aff..709ff508a 100644
--- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
+++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
@@ -26,6 +26,7 @@ XmlFilesDict = {
     'FT': {
         'latest': ['Modules_default'],
         'MC': ['Modules_default'],
+        'data2023': ['CFrames_surveyInput_2023'],
         'data20220809': ['Modules_surveyInput_20220809'],
         'data20221115': ['Modules_surveyInput_20221115'],  #beam angle fix
         'data20221115dd4hep': ['Modules_surveyInputdd4hep_20221115'],
@@ -119,9 +120,9 @@ class SurveyConstraints(LHCbConfigurableUser):
         for f in XmlFilesDict['VP'][ver]:
             self.XmlFiles += [self.defaultSurveyDir() + "VP/" + f + ".xml"]
         self.XmlUncertainties += [
-            ".*Module(00|).. : 0.2 0.2 0.2 0.001 0.001 0.001",
-            ".*/Ladder. : 0.005 0.005 0.01 0.0002 0.0002 0.0001",
-            ".*ladder_. : 0.005 0.005 0.01 0.0002 0.0002 0.0001"
+            "VP/.*/Module(00|).. : 0.2 0.2 0.2 0.001 0.001 0.001",
+            "VP/.*/Ladder. : 0.005 0.005 0.01 0.0002 0.0002 0.0001",
+            "VP/.*/ladder_. : 0.005 0.005 0.01 0.0002 0.0002 0.0001"
         ]
         if UseDD4Hep:
             self.Constraints += [
@@ -153,6 +154,29 @@ class SurveyConstraints(LHCbConfigurableUser):
                     self.XmlUncertainties += [
                         "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
                     ]
+            if "2023" in ver:
+                print('C Frame Survey in use')
+                #The position of the CFrames is constrained from the survey information, the modules are just constrained to their nominal positions within
+                #the CFrames. This option should only be used when including the CFrames as alignable objects, otherwise the module uncertainties
+                #would be underestimated.
+                self.XmlUncertainties += [
+                    "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.2 0.0008 0.0002 0.0008"
+                ]
+#                self.XmlUncertainties += [
+#                    "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.0000002 0.0000002 0.0002 0.0008"
+#                ]
+#                self.XmlUncertainties += [
+#                    "FT/.*/M. : 0.5 0.5 0.0000005 0.0000002 0.0008 0.0002",
+#                ]
+                if UseDD4Hep:
+                    self.Constraints += [
+                        "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00005 0.0001 0.00004 : 0 +1213 0",
+#                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
+                    ]
+                else:
+                    self.Constraints += [
+                        "FT/.*/Module. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
+                    ]
             else:
                 # Module/quarter uncertainties estimated for 20220809 survey
                 self.XmlUncertainties += [
@@ -161,13 +185,16 @@ class SurveyConstraints(LHCbConfigurableUser):
         else:
             if UseDD4Hep:
                 self.XmlUncertainties += [
-                    "FT/.*/M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
+                    "FT/.*/M. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002",
+                ]
+                self.Constraints += [
+                    "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
                 ]
             else:
+                print('test: no data in ver, but no DD4hep')
                 self.XmlUncertainties += [
-                    "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
+                    "FT/.*/Module. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002",
                 ]
-
         # SciFi test constraints v0.1
         # translation constraints (somewhat) realistic
         if 'MC' in ver:
@@ -191,6 +218,7 @@ class SurveyConstraints(LHCbConfigurableUser):
                     "FT/.*Mat. : 0 0 0 0 0 0 : 0.05 0.05 0.05 0.1 0.1 0.1"
                 ]
         if addHalfModuleJoints:
+            print('joints in use')
             from TAlignment.Alignables import Alignables
             self.ElementJoints += Alignables().FTHalfModuleJoints()
 
diff --git a/Alignment/TAlignment/surveyxml/FT/CFrames_surveyInput_2023.xml b/Alignment/TAlignment/surveyxml/FT/CFrames_surveyInput_2023.xml
new file mode 100644
index 000000000..bb58807a1
--- /dev/null
+++ b/Alignment/TAlignment/surveyxml/FT/CFrames_surveyInput_2023.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--                                                                                          
+    (c) Copyright 2000-2023 CERN for the benefit of the LHCb Collaboration   
+    Survey data from measurements performed in February 2023 on the position of th CFrames after the technical stop                                                                                                             
+-->
+<DDDB>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL0">
+      <paramVector name="dPosXYZ" type="double">-0.093 -0.073 -0.171</paramVector>
+      <paramVector name="dRotXYZ" type="double">3.8e-05 -4.5e-05 -5e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1325. 0.215 -61.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL0">
+      <paramVector name="dPosXYZ" type="double">-0.093 -0.073 -0.171</paramVector>
+      <paramVector name="dRotXYZ" type="double">3.8e-05 -4.5e-05 -5e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1325. 0.215 -61.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL0">
+      <paramVector name="dPosXYZ" type="double">0.147 0.309 0.009</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007125 -7.4e-05 7e-06</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1325. -0.215 59.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL0">
+      <paramVector name="dPosXYZ" type="double">0.147 0.309 0.009</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007125 -7.4e-05 7e-06</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1325. -0.215 59.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X1/HL1">
+      <paramVector name="dPosXYZ" type="double">0.091 0.437 -0.019</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007197 -8.6e-05 -2.6e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">1325. 0.215 -61.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/U/HL1">
+      <paramVector name="dPosXYZ" type="double">0.091 0.437 -0.019</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007197 -8.6e-05 -2.6e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">1325. 0.215 -61.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/V/HL1">
+      <paramVector name="dPosXYZ" type="double">0.091 0.534 -0.123</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007248 4e-06 -3.6e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">1325. -0.215 59.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T1/X2/HL1">
+      <paramVector name="dPosXYZ" type="double">0.091 0.534 -0.123</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007248 4e-06 -3.6e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">1325. -0.215 59.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL0">
+      <paramVector name="dPosXYZ" type="double">-0.11 0.163 -0.075</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007201 1.6e-05 5.9e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1325. 0.215 -61.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL0">
+      <paramVector name="dPosXYZ" type="double">-0.11 0.163 -0.075</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007201 1.6e-05 5.9e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1325. 0.215 -61.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL0">
+      <paramVector name="dPosXYZ" type="double">-0.2 0.229 0.034</paramVector>
+      <paramVector name="dRotXYZ" type="double">1.8e-05 -5.9e-05 3.1e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1325. -0.215 59.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL0">
+      <paramVector name="dPosXYZ" type="double">-0.2 0.229 0.034</paramVector>
+      <paramVector name="dRotXYZ" type="double">1.8e-05 -5.9e-05 3.1e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1325. -0.215 59.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X1/HL1">
+      <paramVector name="dPosXYZ" type="double">-0.264 0.556 0.056</paramVector>
+      <paramVector name="dRotXYZ" type="double">3.4e-05 -0.00012 1.2e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">1325. 0.215 -61.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/U/HL1">
+      <paramVector name="dPosXYZ" type="double">-0.264 0.556 0.056</paramVector>
+      <paramVector name="dRotXYZ" type="double">3.4e-05 -0.00012 1.2e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">1325. 0.215 -61.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/V/HL1">
+      <paramVector name="dPosXYZ" type="double">0.095 0.557 0.099</paramVector>
+      <paramVector name="dRotXYZ" type="double">-5.9e-05 -2.6e-05 -0.00012</paramVector>
+      <paramVector name="pivotXYZ" type="double">1325. -0.215 59.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T2/X2/HL1">
+      <paramVector name="dPosXYZ" type="double">0.095 0.557 0.099</paramVector>
+      <paramVector name="dRotXYZ" type="double">-5.9e-05 -2.6e-05 -0.00012</paramVector>
+      <paramVector name="pivotXYZ" type="double">1325. -0.215 59.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL0">
+      <paramVector name="dPosXYZ" type="double">-0.044 0.515 -0.149</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007311 -8.2e-05 4e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1590. 0.251 -70.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL0">
+      <paramVector name="dPosXYZ" type="double">-0.044 0.515 -0.149</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007311 -8.2e-05 4e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1590. 0.251 -70.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL0">
+      <paramVector name="dPosXYZ" type="double">-0.056 0.153 -0.225</paramVector>
+      <paramVector name="dRotXYZ" type="double">-1e-05 -4.3e-05 -6.6e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1590. 0.251 -60.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL0">
+      <paramVector name="dPosXYZ" type="double">-0.056 0.153 -0.225</paramVector>
+      <paramVector name="dRotXYZ" type="double">-1e-05 -4.3e-05 -6.6e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">-1590. 0.251 -60.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X1/HL1">
+      <paramVector name="dPosXYZ" type="double">0.058 -0.354 -0.065</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007097 8.4e-05 6.7e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">1596. 0.251 -70.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/U/HL1">
+      <paramVector name="dPosXYZ" type="double">0.058 -0.354 -0.065</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007097 8.4e-05 6.7e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">1596. 0.251 -70.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/V/HL1">
+      <paramVector name="dPosXYZ" type="double">0.124 1.019 -0.143</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007188 3e-06 -9.6e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">1596. 0.251 -60.</paramVector>
+    </condition>
+    <condition classID="6" name="/world/AfterMagnetRegion/T/FT/T3/X2/HL1">
+      <paramVector name="dPosXYZ" type="double">0.124 1.019 -0.143</paramVector>
+      <paramVector name="dRotXYZ" type="double">0.007188 3e-06 -9.6e-05</paramVector>
+      <paramVector name="pivotXYZ" type="double">1596. 0.251 -60.</paramVector>
+    </condition>
-- 
GitLab


From e573467a4d8875e9315d6d99bd3061da23b27d4b Mon Sep 17 00:00:00 2001
From: Nils Breer <nils.breer@cern.ch>
Date: Thu, 14 Dec 2023 23:54:57 +0100
Subject: [PATCH 04/12] files missing..., try to save what i can

---
 .../options/AlignFT_VP_combined_data_v7.py    | 104 ++++
 .../options/AlignFTjointModules_data.py       |  12 +-
 .../python/Humboldt/AlignmentScenarios.py     |  77 ++-
 .../Humboldt/AlignmentScenarios.py.save       |   0
 .../Humboldt/AlignmentScenarios.py.save.1     | 448 ++++++++++++++++
 .../Humboldt/AlignmentScenarios.py.save.2     | 494 +++++++++++++++++
 .../python/Humboldt/alignment_tracking.py     |  30 +-
 .../python/TAlignment/Alignables.py.save      | 497 ++++++++++++++++++
 .../python/TAlignment/SurveyConstraints.py    |  18 +-
 9 files changed, 1650 insertions(+), 30 deletions(-)
 create mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py
 create mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save
 create mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1
 create mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2
 create mode 100755 Alignment/TAlignment/python/TAlignment/Alignables.py.save

diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py
new file mode 100644
index 000000000..2d7a508f0
--- /dev/null
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py
@@ -0,0 +1,104 @@
+###############################################################################
+# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+"""
+Configuration file to test running on data.
+"""
+
+from Moore import options, run_moore
+from RecoConf.reconstruction_objects import reconstruction
+from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
+from Hlt2Conf.lines import all_lines
+import os
+import re
+from RecoConf.hlt2_tracking import (
+    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
+    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
+    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
+from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
+from RecoConf.hlt1_tracking import (
+    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
+    make_PatPV3DFuture_pvs)
+
+from RecoConf.hlt1_muonid import make_muon_hits
+from RecoConf.calorimeter_reconstruction import make_digits, make_calo
+from PyConf.application import configure_input
+from PRConfig.FilesFromDirac import get_access_urls
+from DDDB.CheckDD4Hep import UseDD4Hep
+from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
+from RecoConf.event_filters import require_pvs
+from Humboldt.options import usePrKalman
+
+options.input_type = 'MDF'
+options.input_raw_format = 0.5
+options.simulation = False # in DD4Hep is False the correct option
+options.data_type = 'Upgrade'
+
+# set DDDB and CondDB info
+options.geometry_version = "trunk" # run3/trunk
+CONDDBTag = "master"
+options.conditions_version = CONDDBTag
+
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+if os.path.exists(online_cond_path):
+    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
+
+from glob import glob
+from Gaudi.Configuration import *
+from GaudiConf import IOHelper
+
+# run 269045
+files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
+options.input_files = files[0:4000]
+
+options.event_store = 'EvtStoreSvc'
+options.histo_file = "GoodLongTracks_histo.root"
+#options.ntuple_file = "GoodLongTracks_tuple.root"
+options.use_iosvc = True  # True for data, False for MC
+# multithreading not working while creating tuples
+options.n_threads = 35
+options.evt_max = -1
+
+options.scheduler_legacy_mode = False
+
+configure_input(options)
+
+from Humboldt.utils import runAlignment
+from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
+
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v7
+config = configureGlobalAlignment_v7(halfdofs="TxTyTz")
+
+#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+
+filter_pvs = []
+filter_pvs.append(require_pvs(alignmentPVs))
+
+# add survey constraints
+from Configurables import SurveyConstraints
+from PyConf.Tools import AlignChisqConstraintTool
+from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
+
+with createAlignAlgorithm.bind(
+        outputDataFile="humb-vp-ft-halves-modules",
+        updateInFinalize=False,
+        onlineMode=False):
+    runAlignment(
+        options,
+        surveyConstraints=config.SurveyConstraints,
+        lagrangeConstraints=config.LagrangeConstraints,
+        alignmentTracks=alignmentTracks,
+        elementsToAlign=config.Elements,
+        filters=filter_pvs,
+        alignmentPVs=alignmentPVs,
+        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data.py b/Alignment/Humboldt/options/AlignFTjointModules_data.py
index 160d6131a..87ea6ba87 100644
--- a/Alignment/Humboldt/options/AlignFTjointModules_data.py
+++ b/Alignment/Humboldt/options/AlignFTjointModules_data.py
@@ -79,12 +79,12 @@ from Humboldt.utils import runAlignment
 from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
 from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
 
-alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf(
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf(
 )
 
 from TAlignment.Alignables import Alignables
 elements = Alignables()
-elements.FTHalfModules("TxTzRxRz")
+elements.FTHalfModules("TxRxRz")
 #elements.FTHalfModules("TxTzRxRz")
 # add survey constraints
 from Configurables import SurveyConstraints
@@ -93,14 +93,14 @@ from PyConf.Tools import AlignChisqConstraintTool
 surveyconstraints = SurveyConstraints()
 surveyconstraints.FT(addHalfModuleJoints=True)
 
-surveyconstraints.Constraints += [
+#surveyconstraints.Constraints += [
     # allow for an Rz of ~1mm/1m around the z=0 part of the half module
-    "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.001 0.001 0.001 : 0 +1213 0"]
+#    "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.001 0.001 0.001 : 0 +1213 0"]
 
 
 # define Lagrange constraints
 constraints = []
-constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Tz Rx Rz")
+constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
 #constraints.append('FixMeanModuleT1 : FT/T1/U/HL.*/M. : Tx : total')
 #constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx: total')
 #constraints.append("ModulesGlobalConstraint : FT/T./(X1|X2|U|V)/HL./Q./M. : Tx Tz Rx Rz")
@@ -116,7 +116,7 @@ with createAlignUpdateTool.bind(
         lagrangeConstraints=constraints,
         alignmentTracks=alignmentTracks,
         alignmentPVs=alignmentPVs,
-        particles=particles,
+#        particles=particles,
         odin=odin,
         elementsToAlign=elements,
         monitorList=monitors,
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
index e20748736..1aad0d8d9 100644
--- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
+++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
@@ -68,11 +68,17 @@ def configureGlobalAlignment(halfdofs="TxTyTzRy"):
 
     elements = Alignables()
 #    elements.VP("None")
-    elements.VP("RxRz")
+#    elements.VP("RxRz")
+#    elements.VPRight(halfdofs)
+#    elements.VPLeft(halfdofs)
+#    elements.FTHalfModules("TxRxRz")
+#    elements.VP("RxRz")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRxRz")
 
+#    elements.FTCFrames("Tz") # added Tz, but need Tz survey unc. set to 0!
+ #   elements.FTModules("TxRz")
+    elements.FTHalfModules("TxRxRz")
     setup.Elements += list(elements)
 
     surveyconstraints = SurveyConstraints()
@@ -134,7 +140,7 @@ def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"):
     surveyconstraints = SurveyConstraints()
     if UseDD4Hep:
         surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
     else:
         surveyconstraints.VP(ver='latest')
     setup.SurveyConstraints = surveyconstraints
@@ -146,23 +152,28 @@ def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"):
 
     return setup
 
-def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"):
+def configureGlobalAlignment_v2(halfdofs="TxTyTz"):
     setup = AlignmentScenario('GlobalAlignment')
     setup.SubDetectors += ['VP', 'FT']
 
     elements = Alignables()
     #elements.VP("None")
+#    elements.VP("RxRz")
+#    elements.VPRight(halfdofs)
+#    elements.VPLeft(halfdofs)
+#    elements.FTHalfModules("TxRz")
     elements.VP("RxRz")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRz")
-
+    elements.FTCFrames("Rz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTModules("TxRz")
+    elements.FTHalfModules("Rx")
     setup.Elements += list(elements)
 
     surveyconstraints = SurveyConstraints()
     if UseDD4Hep:
         surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
     else:
         surveyconstraints.VP(ver='latest')
     setup.SurveyConstraints = surveyconstraints
@@ -175,17 +186,22 @@ def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"):
 
     return setup
 
-def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"):
+def configureGlobalAlignment_v3(halfdofs="TxTyTz"):
     setup = AlignmentScenario('GlobalAlignment')
     setup.SubDetectors += ['VP', 'FT']
 
     elements = Alignables()
     #elements.VP("None")
+#    elements.VP("RxRz")
+#    elements.VPRight(halfdofs)
+#    elements.VPLeft(halfdofs)
+#    elements.FTHalfModules("TxRz")
     elements.VP("RxRz")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRz")
-
+    elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTModules("TxRz")
+    elements.FTHalfModules("Rx")
     setup.Elements += list(elements)
 
     surveyconstraints = SurveyConstraints()
@@ -206,7 +222,7 @@ def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"):
 
     return setup
 
-def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"):
+def configureGlobalAlignment_v4(halfdofs="TxTyTz"):
     setup = AlignmentScenario('GlobalAlignment')
     setup.SubDetectors += ['VP', 'FT']
 
@@ -215,8 +231,8 @@ def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"):
     elements.VP("RxRz")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRz")
-
+    elements.FTHalfModules("TxTzRxRz")
+    elements.FTModules("TxTzRxRz")
     setup.Elements += list(elements)
 
     surveyconstraints = SurveyConstraints()
@@ -229,7 +245,7 @@ def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"):
 
     constraints = []
     constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
     constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
     setup.LagrangeConstraints = constraints
 
@@ -277,7 +293,7 @@ def configureGlobalAlignment_v6(halfdofs="TxTyTz"):
     elements.VP("RxRz")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
-#    elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0!
+#    elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0!
     elements.FTModules("TxRxRz")
     elements.FTHalfModules("TxRxRz")
 
@@ -299,6 +315,37 @@ def configureGlobalAlignment_v6(halfdofs="TxTyTz"):
 
     return setup
 
+def configureGlobalAlignment_v7(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTModules("TxRz")
+    elements.FTHalfModules("Rx")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+        surveyconstraints += ["FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0"]
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
 def configureRun3Alignment(fixQOverPBias=True):
     # just a first implementation to test some essential things
 
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save
new file mode 100644
index 000000000..e69de29bb
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1 b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1
new file mode 100644
index 000000000..e20748736
--- /dev/null
+++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1
@@ -0,0 +1,448 @@
+###############################################################################
+# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+from TAlignment.Alignables import Alignables
+from TAlignment.SurveyConstraints import SurveyConstraints
+from DDDB.CheckDD4Hep import UseDD4Hep
+
+
+# scenario used for prompt alignment
+class AlignmentScenario():
+    __slots__ = {
+        "Name": ""  # name of the scenario
+        ,
+        "Elements": []  # list with alignment elements
+        ,
+        "LagrangeConstraints": []  # list with lagrange constraints
+        ,
+        "SurveyConstraints": None  # survey constraints
+        ,
+        "SubDetectors": []  # list of subdetectors written to xml
+    }
+
+    def __init__(self, aName="AlignmentScenario", **kwargs):
+        for (a, b) in self.__slots__.items():
+            setattr(self, a, b)
+        self.Name = aName
+        for (a, b) in kwargs:
+            setattr(self, a, b)
+        #self.Elements = Elements
+        #self.LagrangeConstraints = lagrangeconstraints
+        #self.SurveyConstraints = surveyconstraints
+        #self.SubDetectors = subdetectors
+
+def configureSciFiOnly():
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['FT']
+
+    elements = Alignables()
+
+    elements.FTCFrames("TxRz")
+    elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTHalfModules("Rx")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    surveyconstraints.XmlFiles = []
+
+    surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True)
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+       	surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+    elements.VP("Rx")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+    elements.VP("Rz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    #elements.VP("None")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+#    constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    #elements.VP("None")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        print('the wrong survey was used...')
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+    print('survey constraints: ', setup.SurveyConstraints)
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v5(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+
+#    elements.FTCFrameLayers("TxRz")
+#    elements.FTCFrames("TxTz")
+    elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTHalfModules("TxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+#    surveyconstraints.XmlFiles = []
+
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v6(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+#    elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTModules("TxRxRz")
+    elements.FTHalfModules("TxRxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureRun3Alignment(fixQOverPBias=True):
+    # just a first implementation to test some essential things
+
+    setup = AlignmentScenario("Run3Alignment")
+    setup.SubDetectors += ['VP', 'UT', 'FT']
+
+    # define the alignment elements
+    elements = Alignables()
+    elements.VP("None")
+    elements.VPRight("Tx")
+    elements.VPLeft("Tx")
+    elements.VPModules("Tx")
+    if UseDD4Hep: elements.FTHalfLayers("Tx")
+    elements.FTModules("Tx")
+    #elements.UTLayers("Tx")
+    setup.Elements = elements
+
+    # add some survey constraints (just fixing to nominal, right now)
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+       	surveyconstraints.VP(ver='2023_dd4hep')
+       	surveyconstraints.FT(ver='data20221115dd4hep')
+    else:
+        surveyconstraints.VP(ver='latest')
+        surveyconstraints.FT(ver='MC')
+    surveyconstraints.UT()
+    setup.SurveyConstraints = surveyconstraints
+
+    # make sure that the velo stays where it was
+    constraints = []
+    constraints.append("VeloHalfAverage : VP/VP(Left|Right) : Tx")
+    # fix the global shearing in the velo
+    constraints.append("VeloModuleShearing : VP/VPLeft/Module.{1,2}" +
+                       ("WithSupport : Tx" if not UseDD4Hep else " : Tx"))
+    # fix the q/p scale by not moving T in X. note that you do not
+    # want to do this if you use D0 in the alignment
+    if fixQOverPBias:
+        constraints.append("FT3X : FT/T3/LayerX2 : Tx")
+    # there is still a spectrometer weak mode left, but I cannot find it :-(
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+
+# define additional scenarios below
+def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"):
+    '''
+    This should be the default alignment for the Automatic alignment procedure
+    Align 2-halves for all degree of freedom
+    Constrain the global Velo position
+    '''
+    setup = AlignmentScenario("VPModuleAlignment")
+    setup.SubDetectors += ['VP']
+
+    elements = Alignables()
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    setup.Elements += list(elements)
+
+    # Constraints
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    # make sure that the velo stays where it was. Important note: the
+    # dofs here must match the ones that we actually align for. If you
+    # specify too many, things will go rather wrong.
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
+
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+
+def configureVPModuleAlignment(halfdofs="TxTyTzRxRyRz", moduledofs="TxTyRz"):
+    '''
+    This should be the default alignment for the Automatic alignment procedure
+    Align 2-halves for all degree of freedom and
+    Modues only for only the main degrees of freedom Tx Ty Rz
+    Constrain the global Velo position and two modules in each half
+    '''
+    setup = AlignmentScenario("VPModuleAlignment")
+    setup.SubDetectors += ['VP']
+
+    elements = Alignables()
+    elements.VP("None")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.VPModules(moduledofs)
+    setup.Elements += list(elements)
+
+    # Constraints
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+    else:
+        surveyconstraints.VP(ver='latest')
+    #surveyconstraints.Constraints += [
+    #    "Velo      : 0 0 0 -0.0001 0 -0.0001 : 0.2 0.2 0.2 0.0001 0.0001 0.001",
+    #    "Velo/Velo(Right|Left) : 0 0 0 0 0 0 : 10 1 0.4 0.01 0.01 0.001"
+    #]
+    setup.SurveyConstraints = surveyconstraints
+
+    # make sure that the velo stays where it was. Important note: the
+    # dofs here must match the ones that we actually align for. If you
+    # specify too many, things will go rather wrong.
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
+
+    if moduledofs and moduledofs != "None":
+        velomoduleconstraints = ""
+        for dof in ["Tx", "Ty", "Tz", "Rz", "Rx", "Ry"]:
+            if dof in moduledofs:
+                tmpdof = dof.replace("T", "")
+                velomoduleconstraints += " %s Sz%s Sz2%s" % (dof, tmpdof,
+                                                             tmpdof)
+        for side in ['Right', 'Left']:
+            constraints.append(
+                "VPInternal%s : .*?%s/Module(..WithSupport|..): %s" %
+                (side, side, velomoduleconstraints))
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+
+def configureVPSensorAlignment(sensordofs="TxTyRz"):
+
+    setup = AlignmentScenario("VPSensorAlignment")
+    setup.SubDetectors += ['VP']
+
+    elements = Alignables()
+    dofs = "TxTyRz"
+    elements.VPSensors(dofs)
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    return setup
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2 b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2
new file mode 100644
index 000000000..d9a63c8ff
--- /dev/null
+++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2
@@ -0,0 +1,494 @@
+###############################################################################
+# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+from TAlignment.Alignables import Alignables
+from TAlignment.SurveyConstraints import SurveyConstraints
+from DDDB.CheckDD4Hep import UseDD4Hep
+
+
+# scenario used for prompt alignment
+class AlignmentScenario():
+    __slots__ = {
+        "Name": ""  # name of the scenario
+        ,
+        "Elements": []  # list with alignment elements
+        ,
+        "LagrangeConstraints": []  # list with lagrange constraints
+        ,
+        "SurveyConstraints": None  # survey constraints
+        ,
+        "SubDetectors": []  # list of subdetectors written to xml
+    }
+
+    def __init__(self, aName="AlignmentScenario", **kwargs):
+        for (a, b) in self.__slots__.items():
+            setattr(self, a, b)
+        self.Name = aName
+        for (a, b) in kwargs:
+            setattr(self, a, b)
+        #self.Elements = Elements
+        #self.LagrangeConstraints = lagrangeconstraints
+        #self.SurveyConstraints = surveyconstraints
+        #self.SubDetectors = subdetectors
+
+def configureSciFiOnly():
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['FT']
+
+    elements = Alignables()
+
+    elements.FTCFrames("TxRz")
+    elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTHalfModules("Rx")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    surveyconstraints.XmlFiles = []
+
+    surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True)
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+#    elements.VP("RxRz")
+#    elements.VPRight(halfdofs)
+#    elements.VPLeft(halfdofs)
+#    elements.FTHalfModules("TxRxRz")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTCFrames("Tz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTModules("TxRz")
+    elements.FTHalfModules("Rx")
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+       	surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+    elements.VP("Rx")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+    elements.VP("Rz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v2(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    #elements.VP("None")
+#    elements.VP("RxRz")
+#    elements.VPRight(halfdofs)
+#    elements.VPLeft(halfdofs)
+#    elements.FTHalfModules("TxRz")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTCFrames("Rz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTModules("TxRz")
+    elements.FTHalfModules("Rx")
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+#    constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v3(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    #elements.VP("None")
+#    elements.VP("RxRz")
+#    elements.VPRight(halfdofs)
+#    elements.VPLeft(halfdofs)
+#    elements.FTHalfModules("TxRz")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTModules("TxRz")
+    elements.FTHalfModules("Rx")
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        print('the wrong survey was used...')
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+    print('survey constraints: ', setup.SurveyConstraints)
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+#    elements.VP("None")
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTHalfModules("TxRz")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
+    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v5(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+
+#    elements.FTCFrameLayers("TxRz")
+#    elements.FTCFrames("TxTz")
+    elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTHalfModules("Rx")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+#    surveyconstraints.XmlFiles = []
+
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v6(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTModules("TxRz")
+    elements.FTHalfModules("Rx")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureGlobalAlignment_v7(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment')
+    setup.SubDetectors += ['VP', 'FT']
+
+    elements = Alignables()
+    elements.VP("RxRz")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0!
+    elements.FTModules("TxRz")
+    elements.FTHalfModules("Rx")
+
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    constraints = []
+    surveyconstraints.append("fixReadoutSide :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0")
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
+#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+def configureRun3Alignment(fixQOverPBias=True):
+    # just a first implementation to test some essential things
+
+    setup = AlignmentScenario("Run3Alignment")
+    setup.SubDetectors += ['VP', 'UT', 'FT']
+
+    # define the alignment elements
+    elements = Alignables()
+    elements.VP("None")
+    elements.VPRight("Tx")
+    elements.VPLeft("Tx")
+    elements.VPModules("Tx")
+    if UseDD4Hep: elements.FTHalfLayers("Tx")
+    elements.FTModules("Tx")
+    #elements.UTLayers("Tx")
+    setup.Elements = elements
+
+    # add some survey constraints (just fixing to nominal, right now)
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+       	surveyconstraints.VP(ver='2023_dd4hep')
+       	surveyconstraints.FT(ver='data20221115dd4hep')
+    else:
+        surveyconstraints.VP(ver='latest')
+        surveyconstraints.FT(ver='MC')
+    surveyconstraints.UT()
+    setup.SurveyConstraints = surveyconstraints
+
+    # make sure that the velo stays where it was
+    constraints = []
+    constraints.append("VeloHalfAverage : VP/VP(Left|Right) : Tx")
+    # fix the global shearing in the velo
+    constraints.append("VeloModuleShearing : VP/VPLeft/Module.{1,2}" +
+                       ("WithSupport : Tx" if not UseDD4Hep else " : Tx"))
+    # fix the q/p scale by not moving T in X. note that you do not
+    # want to do this if you use D0 in the alignment
+    if fixQOverPBias:
+        constraints.append("FT3X : FT/T3/LayerX2 : Tx")
+    # there is still a spectrometer weak mode left, but I cannot find it :-(
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+
+# define additional scenarios below
+def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"):
+    '''
+    This should be the default alignment for the Automatic alignment procedure
+    Align 2-halves for all degree of freedom
+    Constrain the global Velo position
+    '''
+    setup = AlignmentScenario("VPModuleAlignment")
+    setup.SubDetectors += ['VP']
+
+    elements = Alignables()
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    setup.Elements += list(elements)
+
+    # Constraints
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    # make sure that the velo stays where it was. Important note: the
+    # dofs here must match the ones that we actually align for. If you
+    # specify too many, things will go rather wrong.
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
+
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+
+def configureVPModuleAlignment(halfdofs="TxTyTzRxRyRz", moduledofs="TxTyRz"):
+    '''
+    This should be the default alignment for the Automatic alignment procedure
+    Align 2-halves for all degree of freedom and
+    Modues only for only the main degrees of freedom Tx Ty Rz
+    Constrain the global Velo position and two modules in each half
+    '''
+    setup = AlignmentScenario("VPModuleAlignment")
+    setup.SubDetectors += ['VP']
+
+    elements = Alignables()
+    elements.VP("None")
+    elements.VPRight(halfdofs)
+    elements.VPLeft(halfdofs)
+    elements.VPModules(moduledofs)
+    setup.Elements += list(elements)
+
+    # Constraints
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+    else:
+        surveyconstraints.VP(ver='latest')
+    #surveyconstraints.Constraints += [
+    #    "Velo      : 0 0 0 -0.0001 0 -0.0001 : 0.2 0.2 0.2 0.0001 0.0001 0.001",
+    #    "Velo/Velo(Right|Left) : 0 0 0 0 0 0 : 10 1 0.4 0.01 0.01 0.001"
+    #]
+    setup.SurveyConstraints = surveyconstraints
+
+    # make sure that the velo stays where it was. Important note: the
+    # dofs here must match the ones that we actually align for. If you
+    # specify too many, things will go rather wrong.
+    constraints = []
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
+
+    if moduledofs and moduledofs != "None":
+        velomoduleconstraints = ""
+        for dof in ["Tx", "Ty", "Tz", "Rz", "Rx", "Ry"]:
+            if dof in moduledofs:
+                tmpdof = dof.replace("T", "")
+                velomoduleconstraints += " %s Sz%s Sz2%s" % (dof, tmpdof,
+                                                             tmpdof)
+        for side in ['Right', 'Left']:
+            constraints.append(
+                "VPInternal%s : .*?%s/Module(..WithSupport|..): %s" %
+                (side, side, velomoduleconstraints))
+    setup.LagrangeConstraints = constraints
+
+    return setup
+
+
+def configureVPSensorAlignment(sensordofs="TxTyRz"):
+
+    setup = AlignmentScenario("VPSensorAlignment")
+    setup.SubDetectors += ['VP']
+
+    elements = Alignables()
+    dofs = "TxTyRz"
+    elements.VPSensors(dofs)
+    setup.Elements += list(elements)
+
+    surveyconstraints = SurveyConstraints()
+    if UseDD4Hep:
+        surveyconstraints.VP(ver='2023_dd4hep')
+    else:
+        surveyconstraints.VP(ver='latest')
+    setup.SurveyConstraints = surveyconstraints
+
+    return setup
diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
index fd05878a6..fcd826883 100644
--- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
+++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
@@ -221,6 +221,10 @@ def monitor_SciFi_tracks(track_group,
 
 
 def make_scifi_tracks_and_particles_prkf():
+                           #usePrKalman=True,
+                           #MaxOutlierIterations=2,
+                           #MaxChi2Dof=5,
+                           #MinNVeloLayers=4):
     with reconstruction.bind(from_file=False),\
      PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\
      make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\
@@ -230,12 +234,33 @@ def make_scifi_tracks_and_particles_prkf():
      make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\
      get_global_measurement_provider.bind(velo_hits=make_RetinaClusters),\
      hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT):
-
+#        vp_hits = make_VeloClusterTrackingSIMD_hits()
         reco = hlt2_reconstruction()
         hlt2_tracks = reco['LongTracks']
         best_tracks = hlt2_tracks
         pvs = reco["PVs_v1"]
 
+ #      	velo_tracks = all_velo_track_types()
+ #       backward_velo_tracks = velo_tracks["Pr::backward"]
+ #       kf_template = partial(
+ #           PrKalmanFilter_Velo,
+ #           MaxOutlierIterations=MaxOutlierIterations,
+ #           HitsVP=vp_hits,
+ #           FillFitResult=True,
+ #           ClassicSmoothing=True,
+ #           MinNumVPHitsForOutlierRemoval=4,
+ #           ReferenceExtrapolator=TrackLinearExtrapolator(),
+ #           InputUniqueIDGenerator=make_unique_id_generator())
+
+ #       fitted_velo_bwd = kf_template(
+ #           name="PrKalmanFilter_VeloBwd",
+ #           Input=backward_velo_tracks).OutputTracks
+
+#       	selected_bwd_tracks = VPBackwardTracks(
+#            fitted_velo_bwd,
+#            MaxChi2Cut=MaxChi2Dof,
+#            MinNVeloLayers=MinNVeloLayers)
+
         particlepvs = reco["PVs"]
         from PyConf.application import default_raw_banks
         from PyConf.application import make_odin
@@ -250,6 +275,9 @@ def make_scifi_tracks_and_particles_prkf():
 
         selected_tracks = GoodLongTracks(best_tracks)
         track_name = "GoodLongTracks"
+        # here: merge the velo backwards tracks and the longtracks
+#        alignmentTracks = TrackSelectionMerger(
+#            InputLocations=[selected_bwd_tracks, selected_tracks]).OutputLocation
         alignmentTracks = TrackSelectionMerger(
             InputLocations=[selected_tracks]).OutputLocation
         selected_pvs = VPPrimaryVertices(pvs)
diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py.save b/Alignment/TAlignment/python/TAlignment/Alignables.py.save
new file mode 100755
index 000000000..b7a6f51ea
--- /dev/null
+++ b/Alignment/TAlignment/python/TAlignment/Alignables.py.save
@@ -0,0 +1,497 @@
+from __future__ import print_function
+
+###############################################################################
+# (c) Copyright 2000-2020 CERN for the benefit of the LHCb Collaboration      #
+#                                                                             #
+# This software is distributed under the terms of the GNU General Public      #
+# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
+#                                                                             #
+# In applying this licence, CERN does not waive the privileges and immunities #
+# granted to it by virtue of its status as an Intergovernmental Organization  #
+# or submit itself to any jurisdiction.                                       #
+###############################################################################
+
+from DDDB.CheckDD4Hep import UseDD4Hep
+
+
+class Alignables(list):
+    WORLD = "/dd/Structure/LHCb" if not UseDD4Hep else "/world"
+
+    def __init__(self, elements=None, dofs=""):
+        self.m_dofs = ["Tx", "Ty", "Tz", "Rx", "Ry", "Rz", "None"]
+
+        self.m_vpBase = self.WORLD + "/BeforeMagnetRegion/VP"
+        self.m_vp = self.m_vpBase
+        self.m_vpSideBase = self.m_vpBase + ("/MotionVP(Left|Right)"
+                                             if UseDD4Hep else "")
+        self.m_vpLeft = self.m_vpSideBase + "/VPLeft"
+        self.m_vpRight = self.m_vpSideBase + "/VPRight"
+        self.m_vpModules = self.m_vpSideBase + "/VP(Right|Left)/Module.{1,2}" + (
+            "WithSupport" if not UseDD4Hep else "")
+        self.m_vpModulesLeft = self.m_vpSideBase + "/VPLeft/Module.{1,2}" + (
+            "WithSupport" if not UseDD4Hep else "")
+        self.m_vpModulesRight = self.m_vpSideBase + "/VPRight/Module.{1,2}" + (
+            "WithSupport" if not UseDD4Hep else "")
+        self.m_vpSensors = self.m_vpModules + ("/Module.{1,2}/Ladder." if
+                                               not UseDD4Hep else "/ladder_.")
+
+        self.m_tt = self.WORLD + "/BeforeMagnetRegion/TT"
+        self.m_ttStations = ["TTa", "TTb"]
+        self.m_ttLayers = [
+            "TTa/TTaXLayer",
+            "TTa/TTaULayer",
+            "TTb/TTbVLayer",
+            "TTb/TTbXLayer",
+        ]
+
+        self.m_muon = self.WORLD + "/DownstreamRegion/Muon"
+        self.m_mustations = ["/M2", "/M3", "/M4", "/M5"]
+        self.m_muhalfstationsAC = ["/M.ASide", "/M.CSide"]
+        self.m_muhalfstations = ["/M.{1,2}Side"]
+        self.m_muchambers = ["/R.{1,2}Side/Cham.{1,3}"]
+
+        if elements and self.__validElements(elements):
+            self.__append(elements, dofs)
+
+    def __findDOF(self, dof, dofs):
+        valid = ""
+        if not dofs.find(dof) == -1:
+            valid = dof
+
+        return valid
+
+    def __addDoFs(self, elements, dofs):
+        valid = ""
+        invalid = dofs
+        tmp = []
+
+        for i in range(len(self.m_dofs)):
+            valid += self.__findDOF(self.m_dofs[i], invalid)
+            invalid = invalid.replace(self.m_dofs[i], "")
+        # remove eventual separators
+        import re
+        invalid = re.sub("[,:; ]", '', invalid)
+
+        if valid:
+            if isinstance(elements, list):
+                for i in range(len(elements)):
+                    tmp.append(elements[i] + ":%s" % valid)
+            elif isinstance(elements, str):
+                tmp.append(elements + ":%s" % valid)
+
+        try:  ## asserting whether invalid is not empty
+            assert (not invalid)
+        except AssertionError:
+            print("ERROR: Unknown degree of freedom(s) " + '"' + invalid + '"')
+            print(
+                "       Valid degrees of freedom are Tx, Ty, Tz, Rx, Ry and Rz"
+            )
+            return []
+
+        return tmp
+
+    def __validElements(self, elements):
+        try:
+            assert isinstance(elements, list) or isinstance(elements, str)
+        except AssertionError:
+            self.__elementsError(elements)
+            return None
+
+        ## Paranoia; extend also throws an exception
+        if isinstance(elements, str):
+            for i in range(len(elements)):
+                try:
+                    assert isinstance(elements[i], str)
+                except AssertionError:
+                    self.__elementsError(elements)
+                    return None
+        return True
+
+    def __elementsError(self, elements):
+        print("ERROR: Specify either a string representing a detector element")
+        print(
+            "       or a list of strings representing a list of detector elements"
+        )
+        print("elements = ", elements)
+
+    def __append(self, elements, dofs):
+        if dofs:
+            tmp = self.__addDoFs(elements, dofs)
+            self.extend(tmp)
+        else:
+            if isinstance(elements, list):
+                self.extend(elements)
+            elif isinstance(elements, str):
+                self.append(elements)
+            assert ValueError()
+
+    ## Some predefined alignables
+
+    ## Global ###############################################################################
+    def Tracker(self, dofs=""):
+        elements = []
+        elements.append("Tracker : " + self.m_vp)
+        elements.append("Tracker : " + self._UT)
+        elements.append("Tracker : " + self._FT)
+        #elements.append( "Tracker : " + self.m_muon )
+        self.__append(elements, dofs)
+
+    ## VP #################################################################################
+    def VP(self, dofs=""):
+        self.__append(self.m_vp, dofs)
+
+    def VPModules(self, dofs=""):
+        elements = []
+        elements.append(self.m_vpModules)
+        self.__append(elements, dofs)
+
+    def VPModulesLeft(self, dofs=""):
+        elements = []
+        elements.append(self.m_vpModulesLeft)
+        self.__append(elements, dofs)
+
+    def VPModulesRight(self, dofs=""):
+        elements = []
+        elements.append(self.m_vpModulesRight)
+        self.__append(elements, dofs)
+
+    def VPSensors(self, dofs=""):
+        elements = []
+        elements.append(self.m_vpSensors)
+        self.__append(elements, dofs)
+
+    def VPRight(self, dofs=""):
+        self.__append(self.m_vpRight, dofs)
+
+    def VPLeft(self, dofs=""):
+        self.__append(self.m_vpLeft, dofs)
+
+    ## TT #################################################################################
+    def TT(self, dofs=""):
+        self.__append(self.m_tt, dofs)
+
+    def TTLayers(self, dofs=""):
+        self.__append(self.m_tt + "/TT./.{4}Layer", dofs)
+
+    def TTHalfLayers(self, dofs=""):
+        elements = []
+        # we need to do TTa and TTb seperately since they are actually different
+        ttalayers = ['TTaXLayer', 'TTaULayer']
+        for layername in ttalayers:
+            # A-side
+            elements.append(layername + "ASide : " + self.m_tt + "/TTa/" +
+                            layername + "/R(3Module.{2}|2Module(3.|2T))")
+            # C-side
+            elements.append(layername + "CSide : " + self.m_tt + "/TTa/" +
+                            layername + "/R(1Module.{2}|2Module(1.|2B))")
+        ttblayers = ['TTbVLayer', 'TTbXLayer']
+        for layername in ttblayers:
+            # A-side
+            elements.append(layername + "ASide : " + self.m_tt + "/TTb/" +
+                            layername + "/R(3Module.{2}|2Module(3B|4.|5.))")
+            # C-side
+            elements.append(layername + "CSide : " + self.m_tt + "/TTb/" +
+                            layername + "/R(1Module.{2}|2Module(1.|2.|3T))")
+        self.__append(elements, dofs)
+
+    def TTSplitLayers(self, dofs=""):
+        elements = []
+        ttalayers = ['TTaXLayer', 'TTaULayer']
+        for layername in ttalayers:
+            elements.append(layername + "LowZ : " + self.m_tt + "/TTa/" +
+                            layername +
+                            "/R(1Module(1|3|5)|2Module(1|3)|3Module(2|4|6)).")
+            elements.append(layername + "HighZ : " + self.m_tt + "/TTa/" +
+                            layername +
+                            "/R(1Module(2|4|6)|2Module2|3Module(1|3|5)).")
+        ttblayers = ['TTbVLayer', 'TTbXLayer']
+        for layername in ttblayers:
+            elements.append(
+                layername + "LowZ : " + self.m_tt + "/TTb/" + layername +
+                "/R(1Module(1|3|5)|2Module(1|3|5)|3Module(2|4|6)).")
+            elements.append(layername + "HighZ : " + self.m_tt + "/TTb/" +
+                            layername +
+                            "/R(1Module(2|4|6)|2Module(2|4)|3Module(1|3|5)).")
+        self.__append(elements, dofs)
+
+    def TTBoxes(self, dofs=""):
+        elements = []
+        elements.append("TTASide : " + self.m_tt +
+                        "/TTa/TTa.Layer/R(3Module.{2}|2Module(3.|2T))")
+        elements.append("TTCSide : " + self.m_tt +
+                        "/TTa/TTa.Layer/R(1Module.{2}|2Module(1.|2B))")
+        elements.append("TTASide : " + self.m_tt +
+                        "/TTb/TTb.Layer/R(3Module.{2}|2Module(3B|4.|5.))")
+        elements.append("TTCSide : " + self.m_tt +
+                        "/TTb/TTb.Layer/R(1Module.{2}|2Module(1.|2.|3T))")
+        self.__append(elements, dofs)
+
+    def TTHalfModules(self, dofs=""):
+        self.__append(self.m_tt + "/TT./.{4}Layer/.{2}Module.{2}", dofs)
+
+    def TTSensors(self, dofs=""):
+        self.__append(
+            self.m_tt + "/TT./.{4}Layer/.{2}Module.{2}/Ladder./Sensor.{2}",
+            dofs)
+
+    def TTLongModules(self, dofs=""):
+        elements = []
+        for layer in ['TTaXLayer', 'TTaULayer']:
+            # first R1 and R3
+            for i in range(1, 7):
+                elements.append(layer + "R1Module" + str(i) + " : " +
+                                self.m_tt + "/TTa/" + layer + "/R1Module" +
+                                str(i) + ".")
+                elements.append(layer + "R3Module" + str(i) + " : " +
+                                self.m_tt + "/TTa/" + layer + "/R3Module" +
+                                str(i) + ".")
+            # now R2
+            for i in [1, 3]:
+                elements.append(layer + "R2Module" + str(i) + " : " +
+                                self.m_tt + "/TTa/" + layer + "/R2Module" +
+                                str(i) + ".")
+        for layer in ['TTbVLayer', 'TTbXLayer']:
+            # first R1 and R3
+            for i in range(1, 7):
+                elements.append(layer + "R1Module" + str(i) + " : " +
+                                self.m_tt + "/TTb/" + layer + "/R1Module" +
+                                str(i) + ".")
+                elements.append(layer + "R3Module" + str(i) + " : " +
+                                self.m_tt + "/TTb/" + layer + "/R3Module" +
+                                str(i) + ".")
+            # now R2
+            for i in [1, 2, 4, 5]:
+                elements.append(layer + "R2Module" + str(i) + " : " +
+                                self.m_tt + "/TTb/" + layer + "/R2Module" +
+                                str(i) + ".")
+        self.__append(sorted(elements), dofs)
+
+    def TTShortModules(self, dofs=""):
+        elements = []
+        self.__append(self.m_tt + "/TTa/.{4}Layer/R2Module2.", dofs)
+        self.__append(self.m_tt + "/TTb/.{4}Layer/R2Module3.", dofs)
+        self.__append(sorted(elements), dofs)
+
+    def TTModules(self, dofs=""):
+        self.TTLongModules(dofs)
+        self.TTShortModules(dofs)
+
+    ## UT #################################################################################
+    _UT = WORLD + "/BeforeMagnetRegion/UT"
+    _UTStations = ["UTa", "UTb"]
+    _UTLayers = [
+        "UTa/UTaXLayer", "UTa/UTaULayer", "UTb/UTbVLayer", "UTb/UTbXLayer"
+    ]
+
+    def UT(self, dofs=""):
+        self.__append(self._UT, dofs)
+
+    def UTLayers(self, dofs=""):
+        self.__append(self._UT + "/UT./.{4}Layer", dofs)
+
+    ## FT #################################################################################
+    _FT = WORLD + "/AfterMagnetRegion/T/FT"
+    _FTStations = ["/T1", "/T2", "/T3"]
+    _FTLayers = ["/LayerX1", "/LayerU", "/LayerV", "/LayerX2"
+                 ] if not UseDD4Hep else ["/X1", "/U", "/V", "/X2"]
+    _FTRealQuarters = [
+        "/Quarter0", "/Quarter2", "/Quarter1", "/Quarter3"
+    ] if not UseDD4Hep else ["/HL0/Q0", "/HL0/Q2", "/HL1/Q1", "/HL1/Q3"]
+    _FTHalfLayerQuarters = {
+        "/HL0": "/Quarter(0|2)" if not UseDD4Hep else "/HL0/Q(0|2)",
+        "/HL1": "/Quarter(1|3)" if not UseDD4Hep else "/HL1/Q(1|3)"
+    }
+    _FTHalfLayers = {
+        "/HL0": "/Quarter(0|2)" if not UseDD4Hep else "/HL0",
+        "/HL1": "/Quarter(1|3)" if not UseDD4Hep else "/HL1"
+    }
+    _FTCFrameLayers = {
+        "/X1U": ("/Layer" if not UseDD4Hep else "/") + "(X1|U)",
+        "/VX2": ("/Layer" if not UseDD4Hep else "/") + "(V|X2)"
+    }
+
+    _FTModulesAll = [("/Module%d" if not UseDD4Hep else "/M%d") % i
+                     for i in range(6)]
+    _FTModulesShort = [("/Module%d" if not UseDD4Hep else "/M%d") % i
+                       for i in range(5)]
+    _FTMats = ["/Mat%d" % i for i in range(4)]
+
+    def FT(self, dofs=""):
+        self.__append(self._FT, dofs)
+
+    def FTStations(self, dofs=""):
+        elements = []
+        for i in self._FTStations:
+            elements.append(self._FT + i)
+        self.__append(elements, dofs)
+
+    def FTLayers(self, dofs=""):
+        elements = []
+        for station in self._FTStations:
+            for layer in self._FTLayers:
+                elements.append(self._FT + station + layer)
+                self.__append(elements, dofs)
+
+    def FTHalfLayers(self, dofs=""):
+        elements = []
+        for station in self._FTStations:
+            for layer in self._FTLayers:
+                for halflayer in self._FTHalfLayers:
+                    elements.append(self._FT + station + layer + halflayer)
+        self.__append(elements, dofs)
+
+    def FTQuarters(self, dofs=""):
+        elements = []
+        for station in self._FTStations:
+            for layer in self._FTLayers:
+                if UseDD4Hep:
+                    for halflayer in self._FTHalfLayers:
+                        if halflayer == "/HL0":
+                            quarters = self._FTQuarters["CSide"]
+                        else:
+                            quarters = self._FTQuarters["ASide"]
+                        for quarter in quarters:
+                            elements.append(self._FT + station + layer +
+                                            halflayer + quarter)
+                else:
+                    for quarter in self._FTRealQuarters:
+                        elements.append(self._FT + station + layer +
+                                        halflayer + quarter)
+        self.__append(elements, dofs)
+
+    def FTCFrames(self, dofs=""):
+        elements = []
+        for station in self._FTStations:
+            for (cframelayername, cframelayer) in self._FTCFrameLayers.items():
+                for (side, halflayer) in self._FTHalfLayers.items():
+                    elements.append("FT" + station + cframelayername + side +
+                                    " : " + self._FT + station + cframelayer +
+                                    halflayer)
+        print('FTCFrames elements:', elements)
+        self.__append(elements, dofs)
+
+    def FTCFrameLayers(self, dofs=""):
+        elements = []
+        for station in self._FTStations:
+            for layer in self._FTLayers:
+                for (side, halflayer) in self._FTHalfLayers.items():
+                    elements.append("FT" + station + layer + side + " : " +
+                                    self._FT + station + layer + halflayer)
+        print('FTCFrameLayers elements:', elements)
+        self.__append(elements, dofs)
+
+    def FTModules(self, dofs=""):
+        elements = []
+        for station in self._FTStations:
+            for layer in self._FTLayers:
+                for (side,
+                     halflayerquarters) in self._FTHalfLayerQuarters.items():
+                    for module in self._FTModulesAll if station == "/T3" else self._FTModulesShort:
+                        elements.append("FT" + station + layer + side +
+                                        module + ":" + self._FT + station +
+                                        layer + halflayerquarters + module)
+        print('long module elements:', elements)
+        self.__append(elements, dofs)
+
+    def FTHalfModules(self, dofs=""):
+        elements = []
+        for i in self._FTStations:
+            for j in self._FTLayers:
+                for k in self._FTRealQuarters:
+                    for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort:
+                        elements.append(self._FT + i + j + k + l)
+#        print('FTHalfModules elements:', elements)
+        self.__append(elements, dofs)
+
+    def FTHalfModuleJoints(self,
+                           errors="0.01 0.0012 0.0019 0.0004 0.0002 0.00017"):
+#                           errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"):
+#                           errors="0.001 0.001 0.002 0.0004 0.0002 0.0002"):
+        joints = []
+        for station in self._FTStations:
+            for layer in self._FTLayers:
+                for module in self._FTModulesAll if station == "/T3" else self._FTModulesShort:
+                    combinations = [("/HL0/Q0", "/HL0/Q2"),
+                                    ("/HL1/Q1", "/HL1/Q3")] if UseDD4Hep else [
+                                        ("/Quarter0", "/Quarter2"),
+                                        ("/Quarter1", "/Quarter3")
+                                    ]
+                    for (Qtop, Qbot) in combinations:
+                        modtop = 'FT' + station + layer + Qtop + module
+                        modbot = 'FT' + station + layer + Qbot + module
+                        joints.append(" : ".join(
+                            [modtop, modbot, errors, "0 -1212.75 0"]))
+#        print(joints)
+        return joints
+
+    def FTMats(self, dofs=""):
+        elements = []
+        for station in self._FTStations:
+            for layer in self._FTLayers:
+                if UseDD4Hep:
+                    for halflayer in self._FTHalfLayers:
+                        if halflayer == "/HL0":
+                            quarters = self._FTQuarters["CSide"]
+                        else:
+                            quarters = self._FTQuarters["ASide"]
+                        for quarter in quarters:
+                            if station == "/T3":
+                                modules = self._FTModulesAll
+                            else:
+                                modules = self._FTModulesShort
+                            for module in modules:
+                                for mat in self._FTMats:
+                                    elements.append(self._FT + station +
+                                                    layer + halflayer +
+                                                    quarter + module + mat)
+                else:
+                    for (side, quarter) in self._FTQuarters.items():
+                        if station == "/T3":
+                            modules = self._FTModulesAll
+                        else:
+                            modules = self._FTModulesShort
+                        for module in modules:
+                            for mat in self._FTMats:
+                                elements.append(
+                                    "FT/" + station.strip('/') + side +
+                                    layer.strip('/') + module.strip('/') +
+                                    mat.strip('/') + " : " + self._FT +
+                                    station + layer + quarter + module + mat)
+        self.__append(elements, dofs)
+
+    ## MUON  ##############################################################################
+    def MuonStations(self, dofs=""):
+        elements = []
+        for i in self.m_mustations:
+            elements.append(self.m_muon + i)
+        self.__append(elements, dofs)
+
+    def MuonHalfStations(self, dofs=""):
+        elements = []
+        for i in self.m_mustations:
+            for j in self.m_muhalfstations:
+                elements.append(self.m_muon + i + j)
+        self.__append(elements, dofs)
+
+    def MuonChambers(self, dofs=""):
+        elements = []
+        ## 5 Stations numbered from 1 to 5
+        for i in self.m_mustations:
+            ## There are 2 halves in each station
+            for j in self.m_muhalfstations:
+                ## Chambers
+                for l in self.m_muchambers:
+                    elements.append(self.m_muon + i + j + l)
+        self.__append(elements, dofs)
+
+    def MuonHalfStationsCside(self, dofs=""):
+        elements = []
+        for i in self.m_mustations:
+            elements.append(self.m_muon + i + self.m_muhalfstationsAC[1])
+        self.__append(elements, dofs)
+
+    def MuonHalfStationsAside(self, dofs=""):
+        elements = []
+        for i in self.m_mustations:
+            elements.append(self.m_muon + i + self.m_muhalfstationsAC[0])
+        self.__append(elements, dofs)
diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
index 709ff508a..74259ff7b 100644
--- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
+++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
@@ -165,13 +165,13 @@ class SurveyConstraints(LHCbConfigurableUser):
 #                self.XmlUncertainties += [
 #                    "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.0000002 0.0000002 0.0002 0.0008"
 #                ]
-#                self.XmlUncertainties += [
-#                    "FT/.*/M. : 0.5 0.5 0.0000005 0.0000002 0.0008 0.0002",
-#                ]
+                self.XmlUncertainties += [
+                    "FT/.*/M. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002",
+                ]
                 if UseDD4Hep:
                     self.Constraints += [
                         "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00005 0.0001 0.00004 : 0 +1213 0",
-#                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
+                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
                     ]
                 else:
                     self.Constraints += [
@@ -183,13 +183,15 @@ class SurveyConstraints(LHCbConfigurableUser):
                     "FT/.*/Module. : 0.2 0.2 0.2 0.00008 0.0004 0.00008"
                 ]
         else:
+            print('small Rx uncertainty')
             if UseDD4Hep:
                 self.XmlUncertainties += [
-                    "FT/.*/M. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002",
-                ]
-                self.Constraints += [
-                    "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
+                    "FT/.*/M. : 0.5 0.5 0.5 0.00000002 0.0008 0.0002",
                 ]
+                # maybe remove this bottom constraint
+#                self.Constraints += [
+#                    "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
+#                ]
             else:
                 print('test: no data in ver, but no DD4hep')
                 self.XmlUncertainties += [
-- 
GitLab


From b25e315710a56864c22471d17cff600a1719e3e1 Mon Sep 17 00:00:00 2001
From: Nils Breer <nils.breer@cern.ch>
Date: Mon, 15 Jan 2024 12:57:56 +0100
Subject: [PATCH 05/12] my changes overall in alignment on global alignment
 branch

---
 .../options/AlignFT_VP_combined_data.py       |  3 ++-
 .../options/AlignFT_VP_combined_data_v2.py    |  3 ++-
 .../options/AlignFT_VP_combined_data_v3.py    |  1 +
 .../python/Humboldt/AlignmentScenarios.py     | 23 +++++++++++--------
 .../python/TAlignment/SurveyConstraints.py    |  9 ++------
 5 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
index 70688b57c..65295b98a 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
@@ -44,7 +44,8 @@ options.data_type = 'Upgrade'
 
 # set DDDB and CondDB info
 options.geometry_version = "trunk" # run3/trunk
-CONDDBTag = "master"
+#CONDDBTag = "master"
+CONDDBTag = "nibreer_giulia_mass_conds"
 options.conditions_version = CONDDBTag
 
 online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py
index 5e29b2c53..e2a96c189 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py
@@ -44,7 +44,8 @@ options.data_type = 'Upgrade'
 
 # set DDDB and CondDB info
 options.geometry_version = "trunk" # run3/trunk
-CONDDBTag = "master"
+#CONDDBTag = "master"
+CONDDBTag = "nibreer_giulia_mass_conds"
 options.conditions_version = CONDDBTag
 
 online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py
index 2897c16d9..bacffc24b 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py
@@ -45,6 +45,7 @@ options.data_type = 'Upgrade'
 # set DDDB and CondDB info
 options.geometry_version = "trunk" # run3/trunk
 CONDDBTag = "master"
+CONDDBTag = "nibreer_giulia_mass_conds"
 options.conditions_version = CONDDBTag
 
 online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
index 1aad0d8d9..8c692ff0a 100644
--- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
+++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
@@ -152,7 +152,7 @@ def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"):
 
     return setup
 
-def configureGlobalAlignment_v2(halfdofs="TxTyTz"):
+def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"):
     setup = AlignmentScenario('GlobalAlignment')
     setup.SubDetectors += ['VP', 'FT']
 
@@ -162,12 +162,12 @@ def configureGlobalAlignment_v2(halfdofs="TxTyTz"):
 #    elements.VPRight(halfdofs)
 #    elements.VPLeft(halfdofs)
 #    elements.FTHalfModules("TxRz")
-    elements.VP("RxRz")
+#    elements.VP("RxRz")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
-    elements.FTCFrames("Rz") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTModules("TxRz")
-    elements.FTHalfModules("Rx")
+    elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0!
+#    elements.FTModules("TxRz")
+    elements.FTHalfModules("TxRxRz")
     setup.Elements += list(elements)
 
     surveyconstraints = SurveyConstraints()
@@ -186,7 +186,7 @@ def configureGlobalAlignment_v2(halfdofs="TxTyTz"):
 
     return setup
 
-def configureGlobalAlignment_v3(halfdofs="TxTyTz"):
+def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"):
     setup = AlignmentScenario('GlobalAlignment')
     setup.SubDetectors += ['VP', 'FT']
 
@@ -199,9 +199,10 @@ def configureGlobalAlignment_v3(halfdofs="TxTyTz"):
     elements.VP("RxRz")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
+
     elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTModules("TxRz")
-    elements.FTHalfModules("Rx")
+#    elements.FTModules("TxRz")
+    elements.FTHalfModules("TxRxRz")
     setup.Elements += list(elements)
 
     surveyconstraints = SurveyConstraints()
@@ -231,8 +232,10 @@ def configureGlobalAlignment_v4(halfdofs="TxTyTz"):
     elements.VP("RxRz")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxTzRxRz")
-    elements.FTModules("TxTzRxRz")
+
+    elements.FTCFrames("TxRz")
+    elements.FTHalfModules("TxRz")
+    elements.FTModules("TxRz")
     setup.Elements += list(elements)
 
     surveyconstraints = SurveyConstraints()
diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
index 74259ff7b..fc7089db6 100644
--- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
+++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
@@ -159,19 +159,14 @@ class SurveyConstraints(LHCbConfigurableUser):
                 #The position of the CFrames is constrained from the survey information, the modules are just constrained to their nominal positions within
                 #the CFrames. This option should only be used when including the CFrames as alignable objects, otherwise the module uncertainties
                 #would be underestimated.
-                self.XmlUncertainties += [
-                    "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.2 0.0008 0.0002 0.0008"
-                ]
-#                self.XmlUncertainties += [
-#                    "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.0000002 0.0000002 0.0002 0.0008"
-#                ]
                 self.XmlUncertainties += [
                     "FT/.*/M. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002",
+                    "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.2 0.0000008 0.0002 0.0008",
                 ]
                 if UseDD4Hep:
                     self.Constraints += [
                         "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00005 0.0001 0.00004 : 0 +1213 0",
-                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
+#                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
                     ]
                 else:
                     self.Constraints += [
-- 
GitLab


From 05d2760dd2e28a06e34697affffd134a55b62a49 Mon Sep 17 00:00:00 2001
From: Nils Breer <nils.breer@cern.ch>
Date: Wed, 13 Mar 2024 16:13:24 +0100
Subject: [PATCH 06/12] global alignment setup and option files

---
 .../options/AlignFT_VP_combined_data.py       |   7 +-
 ...v4.py => AlignFT_VP_combined_data_v1_1.py} |  27 +-
 ...fi.py => AlignFT_VP_combined_data_v1_2.py} |  14 +-
 ...v3.py => AlignFT_VP_combined_data_v1_3.py} |  15 +-
 .../options/AlignFT_VP_combined_data_v5.py    | 104 ----
 .../options/AlignFT_VP_combined_data_v6.py    | 104 ----
 .../options/AlignFT_VP_combined_data_v7.py    | 104 ----
 .../AlignFT_VP_combined_data_veloRx.py        | 104 ----
 .../AlignFT_VP_combined_data_veloRz.py        | 104 ----
 ... => AlignFT_VP_combined_data_velo_only.py} |   4 +-
 .../options/AlignFTjointModules_data.py       | 123 -----
 .../options/AlignFTjointModules_data_2.py     | 117 -----
 .../options/AlignFTjointModules_data_3.py     | 118 -----
 .../python/Humboldt/AlignmentScenarios.py     | 250 +--------
 .../Humboldt/AlignmentScenarios.py.save       |   0
 .../Humboldt/AlignmentScenarios.py.save.1     | 448 ----------------
 .../Humboldt/AlignmentScenarios.py.save.2     | 494 ------------------
 .../python/Humboldt/ParticleSelections.py     |  69 ++-
 .../python/Humboldt/alignment_tracking.py     | 168 ++++--
 .../python/TAlignment/Alignables.py           |  10 +
 .../python/TAlignment/SurveyConstraints.py    |  30 +-
 21 files changed, 264 insertions(+), 2150 deletions(-)
 rename Alignment/Humboldt/options/{AlignFT_VP_combined_data_v4.py => AlignFT_VP_combined_data_v1_1.py} (75%)
 rename Alignment/Humboldt/options/{AlignFT_VP_combined_data_scifi.py => AlignFT_VP_combined_data_v1_2.py} (88%)
 rename Alignment/Humboldt/options/{AlignFT_VP_combined_data_v3.py => AlignFT_VP_combined_data_v1_3.py} (88%)
 delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py
 delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py
 delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py
 delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py
 delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py
 rename Alignment/Humboldt/options/{AlignFT_VP_combined_data_v2.py => AlignFT_VP_combined_data_velo_only.py} (97%)
 delete mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data.py
 delete mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data_2.py
 delete mode 100644 Alignment/Humboldt/options/AlignFTjointModules_data_3.py
 delete mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save
 delete mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1
 delete mode 100644 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2

diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
index 65295b98a..cdcea16b4 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
@@ -79,8 +79,8 @@ from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
 from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment
 config = configureGlobalAlignment(halfdofs="TxTyTzRy")
 
-#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+#alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
@@ -102,4 +102,7 @@ with createAlignAlgorithm.bind(
         elementsToAlign=config.Elements,
         filters=filter_pvs,
         alignmentPVs=alignmentPVs,
+        odin=odin,
+        monitorList=monitors,
+        particles=particles,
         usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py
similarity index 75%
rename from Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py
rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py
index 76ed38640..b6557b30c 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v4.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py
@@ -41,13 +41,16 @@ options.input_type = 'MDF'
 options.input_raw_format = 0.5
 options.simulation = False # in DD4Hep is False the correct option
 options.data_type = 'Upgrade'
+from PyConf.application import metainfo_repos, retrieve_encoding_dictionary
 
 # set DDDB and CondDB info
 options.geometry_version = "trunk" # run3/trunk
-CONDDBTag = "master"
+#CONDDBTag = "nibreer_giulia_mass_conds" # Giulia's geometry changes, some by hand
+#CONDDBTag = "nibreer_globalAlignmentConf" # all 0 starting conditions
+CONDDBTag = "nibreer_all0_conds"
 options.conditions_version = CONDDBTag
 
-online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database'
 if os.path.exists(online_cond_path):
     DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
 
@@ -69,17 +72,29 @@ options.evt_max = -1
 
 options.scheduler_legacy_mode = False
 
+# gerhard raven's option for removing the metainfo
+#def require_keys_in_cvmfs( keys ) :
+    #  no lock file required, as the the /cvmfs repo is read-only
+    #  (modulo syncs of /cvmfs itself, which are assumed to be atomic)
+#    awol = list( filter( k : not _retrieve_from_repos( k, ( ( FILE_CONTENT_METADATA, 'master' ) ) , keys )
+#    if len(awol) :
+#        raise ConfigurationError( 'key(s) {} not in /cvmfs -- some more instructions go here'.format(''.join( '{:08x}'.format(k)  for k in awol ) )                         
+
+#if options.require_keys_in_cvmfs :
+#    require_keys_in_cvmfs(  key_registry.keys() )
+
 configure_input(options)
 
 from Humboldt.utils import runAlignment
 from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf
 from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
 
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v4
-config = configureGlobalAlignment_v4(halfdofs="TxTyTzRy")
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_1
+config = configureGlobalAlignment_VELO_Rx_V1_1(halfdofs="TxTyTz")
 
 #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf()
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
@@ -100,5 +115,7 @@ with createAlignAlgorithm.bind(
         alignmentTracks=alignmentTracks,
         elementsToAlign=config.Elements,
         filters=filter_pvs,
+        odin=odin,
+        monitorList=monitors,
         alignmentPVs=alignmentPVs,
         usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py
similarity index 88%
rename from Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py
rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py
index 0af04347a..43c401dfa 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_scifi.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py
@@ -44,10 +44,11 @@ options.data_type = 'Upgrade'
 
 # set DDDB and CondDB info
 options.geometry_version = "trunk" # run3/trunk
-CONDDBTag = "master"
+#CONDDBTag = "nibreer_giulia_mass_conds"
+CONDDBTag = "nibreer_all0_conds"
 options.conditions_version = CONDDBTag
 
-online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database'
 if os.path.exists(online_cond_path):
     DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
 
@@ -73,13 +74,14 @@ configure_input(options)
 
 from Humboldt.utils import runAlignment
 from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf
 from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
 
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment, configureSciFiOnly
-config = configureSciFiOnly()
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_2
+config = configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz")
 
 #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf()
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
@@ -100,5 +102,7 @@ with createAlignAlgorithm.bind(
         alignmentTracks=alignmentTracks,
         elementsToAlign=config.Elements,
         filters=filter_pvs,
+        odin=odin,
+        monitorList=monitors,
         alignmentPVs=alignmentPVs,
         usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py
similarity index 88%
rename from Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py
rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py
index bacffc24b..e7bd93cf6 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v3.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py
@@ -44,11 +44,11 @@ options.data_type = 'Upgrade'
 
 # set DDDB and CondDB info
 options.geometry_version = "trunk" # run3/trunk
-CONDDBTag = "master"
-CONDDBTag = "nibreer_giulia_mass_conds"
+#CONDDBTag = "nibreer_giulia_mass_conds"
+CONDDBTag = "nibreer_all0_conds"
 options.conditions_version = CONDDBTag
 
-online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
+online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database'
 if os.path.exists(online_cond_path):
     DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
 
@@ -74,13 +74,14 @@ configure_input(options)
 
 from Humboldt.utils import runAlignment
 from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
+from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf
 from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
 
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v3
-config = configureGlobalAlignment_v3(halfdofs="TxTyTzRy")
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_3
+config = configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz")
 
 #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf()
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
@@ -101,5 +102,7 @@ with createAlignAlgorithm.bind(
         alignmentTracks=alignmentTracks,
         elementsToAlign=config.Elements,
         filters=filter_pvs,
+        odin=odin,
+        monitorList=monitors,
         alignmentPVs=alignmentPVs,
         usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py
deleted file mode 100644
index f6dc63cf6..000000000
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v5.py
+++ /dev/null
@@ -1,104 +0,0 @@
-###############################################################################
-# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-"""
-Configuration file to test running on data.
-"""
-
-from Moore import options, run_moore
-from RecoConf.reconstruction_objects import reconstruction
-from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
-from Hlt2Conf.lines import all_lines
-import os
-import re
-from RecoConf.hlt2_tracking import (
-    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
-    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
-    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
-from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
-from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
-    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
-    make_PatPV3DFuture_pvs)
-
-from RecoConf.hlt1_muonid import make_muon_hits
-from RecoConf.calorimeter_reconstruction import make_digits, make_calo
-from PyConf.application import configure_input
-from PRConfig.FilesFromDirac import get_access_urls
-from DDDB.CheckDD4Hep import UseDD4Hep
-from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
-from RecoConf.event_filters import require_pvs
-from Humboldt.options import usePrKalman
-
-options.input_type = 'MDF'
-options.input_raw_format = 0.5
-options.simulation = False # in DD4Hep is False the correct option
-options.data_type = 'Upgrade'
-
-# set DDDB and CondDB info
-options.geometry_version = "trunk" # run3/trunk
-CONDDBTag = "master"
-options.conditions_version = CONDDBTag
-
-online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
-if os.path.exists(online_cond_path):
-    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
-
-from glob import glob
-from Gaudi.Configuration import *
-from GaudiConf import IOHelper
-
-# run 269045
-files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
-options.input_files = files[0:4000]
-
-options.event_store = 'EvtStoreSvc'
-options.histo_file = "GoodLongTracks_histo.root"
-#options.ntuple_file = "GoodLongTracks_tuple.root"
-options.use_iosvc = True  # True for data, False for MC
-# multithreading not working while creating tuples
-options.n_threads = 35
-options.evt_max = -1
-
-options.scheduler_legacy_mode = False
-
-configure_input(options)
-
-from Humboldt.utils import runAlignment
-from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
-from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
-
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v5
-config = configureGlobalAlignment_v5(halfdofs="TxTyTz")
-
-#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
-
-filter_pvs = []
-filter_pvs.append(require_pvs(alignmentPVs))
-
-# add survey constraints
-from Configurables import SurveyConstraints
-from PyConf.Tools import AlignChisqConstraintTool
-from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
-
-with createAlignAlgorithm.bind(
-        outputDataFile="humb-vp-ft-halves-modules",
-        updateInFinalize=False,
-        onlineMode=False):
-    runAlignment(
-        options,
-        surveyConstraints=config.SurveyConstraints,
-        lagrangeConstraints=config.LagrangeConstraints,
-        alignmentTracks=alignmentTracks,
-        elementsToAlign=config.Elements,
-        filters=filter_pvs,
-        alignmentPVs=alignmentPVs,
-        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py
deleted file mode 100644
index be1cc5ec7..000000000
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v6.py
+++ /dev/null
@@ -1,104 +0,0 @@
-###############################################################################
-# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-"""
-Configuration file to test running on data.
-"""
-
-from Moore import options, run_moore
-from RecoConf.reconstruction_objects import reconstruction
-from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
-from Hlt2Conf.lines import all_lines
-import os
-import re
-from RecoConf.hlt2_tracking import (
-    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
-    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
-    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
-from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
-from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
-    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
-    make_PatPV3DFuture_pvs)
-
-from RecoConf.hlt1_muonid import make_muon_hits
-from RecoConf.calorimeter_reconstruction import make_digits, make_calo
-from PyConf.application import configure_input
-from PRConfig.FilesFromDirac import get_access_urls
-from DDDB.CheckDD4Hep import UseDD4Hep
-from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
-from RecoConf.event_filters import require_pvs
-from Humboldt.options import usePrKalman
-
-options.input_type = 'MDF'
-options.input_raw_format = 0.5
-options.simulation = False # in DD4Hep is False the correct option
-options.data_type = 'Upgrade'
-
-# set DDDB and CondDB info
-options.geometry_version = "trunk" # run3/trunk
-CONDDBTag = "master"
-options.conditions_version = CONDDBTag
-
-online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
-if os.path.exists(online_cond_path):
-    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
-
-from glob import glob
-from Gaudi.Configuration import *
-from GaudiConf import IOHelper
-
-# run 269045
-files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
-options.input_files = files[0:4000]
-
-options.event_store = 'EvtStoreSvc'
-options.histo_file = "GoodLongTracks_histo.root"
-#options.ntuple_file = "GoodLongTracks_tuple.root"
-options.use_iosvc = True  # True for data, False for MC
-# multithreading not working while creating tuples
-options.n_threads = 35
-options.evt_max = -1
-
-options.scheduler_legacy_mode = False
-
-configure_input(options)
-
-from Humboldt.utils import runAlignment
-from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
-from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
-
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v6
-config = configureGlobalAlignment_v6(halfdofs="TxTyTz")
-
-#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
-
-filter_pvs = []
-filter_pvs.append(require_pvs(alignmentPVs))
-
-# add survey constraints
-from Configurables import SurveyConstraints
-from PyConf.Tools import AlignChisqConstraintTool
-from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
-
-with createAlignAlgorithm.bind(
-        outputDataFile="humb-vp-ft-halves-modules",
-        updateInFinalize=False,
-        onlineMode=False):
-    runAlignment(
-        options,
-        surveyConstraints=config.SurveyConstraints,
-        lagrangeConstraints=config.LagrangeConstraints,
-        alignmentTracks=alignmentTracks,
-        elementsToAlign=config.Elements,
-        filters=filter_pvs,
-        alignmentPVs=alignmentPVs,
-        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py
deleted file mode 100644
index 2d7a508f0..000000000
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v7.py
+++ /dev/null
@@ -1,104 +0,0 @@
-###############################################################################
-# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-"""
-Configuration file to test running on data.
-"""
-
-from Moore import options, run_moore
-from RecoConf.reconstruction_objects import reconstruction
-from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
-from Hlt2Conf.lines import all_lines
-import os
-import re
-from RecoConf.hlt2_tracking import (
-    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
-    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
-    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
-from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
-from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
-    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
-    make_PatPV3DFuture_pvs)
-
-from RecoConf.hlt1_muonid import make_muon_hits
-from RecoConf.calorimeter_reconstruction import make_digits, make_calo
-from PyConf.application import configure_input
-from PRConfig.FilesFromDirac import get_access_urls
-from DDDB.CheckDD4Hep import UseDD4Hep
-from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
-from RecoConf.event_filters import require_pvs
-from Humboldt.options import usePrKalman
-
-options.input_type = 'MDF'
-options.input_raw_format = 0.5
-options.simulation = False # in DD4Hep is False the correct option
-options.data_type = 'Upgrade'
-
-# set DDDB and CondDB info
-options.geometry_version = "trunk" # run3/trunk
-CONDDBTag = "master"
-options.conditions_version = CONDDBTag
-
-online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
-if os.path.exists(online_cond_path):
-    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
-
-from glob import glob
-from Gaudi.Configuration import *
-from GaudiConf import IOHelper
-
-# run 269045
-files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
-options.input_files = files[0:4000]
-
-options.event_store = 'EvtStoreSvc'
-options.histo_file = "GoodLongTracks_histo.root"
-#options.ntuple_file = "GoodLongTracks_tuple.root"
-options.use_iosvc = True  # True for data, False for MC
-# multithreading not working while creating tuples
-options.n_threads = 35
-options.evt_max = -1
-
-options.scheduler_legacy_mode = False
-
-configure_input(options)
-
-from Humboldt.utils import runAlignment
-from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
-from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
-
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v7
-config = configureGlobalAlignment_v7(halfdofs="TxTyTz")
-
-#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
-
-filter_pvs = []
-filter_pvs.append(require_pvs(alignmentPVs))
-
-# add survey constraints
-from Configurables import SurveyConstraints
-from PyConf.Tools import AlignChisqConstraintTool
-from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
-
-with createAlignAlgorithm.bind(
-        outputDataFile="humb-vp-ft-halves-modules",
-        updateInFinalize=False,
-        onlineMode=False):
-    runAlignment(
-        options,
-        surveyConstraints=config.SurveyConstraints,
-        lagrangeConstraints=config.LagrangeConstraints,
-        alignmentTracks=alignmentTracks,
-        elementsToAlign=config.Elements,
-        filters=filter_pvs,
-        alignmentPVs=alignmentPVs,
-        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py
deleted file mode 100644
index 1daa7414b..000000000
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRx.py
+++ /dev/null
@@ -1,104 +0,0 @@
-###############################################################################
-# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-"""
-Configuration file to test running on data.
-"""
-
-from Moore import options, run_moore
-from RecoConf.reconstruction_objects import reconstruction
-from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
-from Hlt2Conf.lines import all_lines
-import os
-import re
-from RecoConf.hlt2_tracking import (
-    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
-    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
-    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
-from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
-from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
-    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
-    make_PatPV3DFuture_pvs)
-
-from RecoConf.hlt1_muonid import make_muon_hits
-from RecoConf.calorimeter_reconstruction import make_digits, make_calo
-from PyConf.application import configure_input
-from PRConfig.FilesFromDirac import get_access_urls
-from DDDB.CheckDD4Hep import UseDD4Hep
-from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
-from RecoConf.event_filters import require_pvs
-from Humboldt.options import usePrKalman
-
-options.input_type = 'MDF'
-options.input_raw_format = 0.5
-options.simulation = False # in DD4Hep is False the correct option
-options.data_type = 'Upgrade'
-
-# set DDDB and CondDB info
-options.geometry_version = "trunk" # run3/trunk
-CONDDBTag = "master"
-options.conditions_version = CONDDBTag
-
-online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
-if os.path.exists(online_cond_path):
-    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
-
-from glob import glob
-from Gaudi.Configuration import *
-from GaudiConf import IOHelper
-
-# run 269045
-files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
-options.input_files = files[0:4000]
-
-options.event_store = 'EvtStoreSvc'
-options.histo_file = "GoodLongTracks_histo.root"
-#options.ntuple_file = "GoodLongTracks_tuple.root"
-options.use_iosvc = True  # True for data, False for MC
-# multithreading not working while creating tuples
-options.n_threads = 35
-options.evt_max = -1
-
-options.scheduler_legacy_mode = False
-
-configure_input(options)
-
-from Humboldt.utils import runAlignment
-from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
-from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
-
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VeloRx
-config = configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy")
-
-#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
-
-filter_pvs = []
-filter_pvs.append(require_pvs(alignmentPVs))
-
-# add survey constraints
-from Configurables import SurveyConstraints
-from PyConf.Tools import AlignChisqConstraintTool
-from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
-
-with createAlignAlgorithm.bind(
-        outputDataFile="humb-vp-ft-halves-modules",
-        updateInFinalize=False,
-        onlineMode=False):
-    runAlignment(
-        options,
-        surveyConstraints=config.SurveyConstraints,
-        lagrangeConstraints=config.LagrangeConstraints,
-        alignmentTracks=alignmentTracks,
-        elementsToAlign=config.Elements,
-        filters=filter_pvs,
-        alignmentPVs=alignmentPVs,
-        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py
deleted file mode 100644
index 69320f809..000000000
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_veloRz.py
+++ /dev/null
@@ -1,104 +0,0 @@
-###############################################################################
-# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-"""
-Configuration file to test running on data.
-"""
-
-from Moore import options, run_moore
-from RecoConf.reconstruction_objects import reconstruction
-from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
-from Hlt2Conf.lines import all_lines
-import os
-import re
-from RecoConf.hlt2_tracking import (
-    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
-    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
-    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
-from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
-from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
-    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
-    make_PatPV3DFuture_pvs)
-
-from RecoConf.hlt1_muonid import make_muon_hits
-from RecoConf.calorimeter_reconstruction import make_digits, make_calo
-from PyConf.application import configure_input
-from PRConfig.FilesFromDirac import get_access_urls
-from DDDB.CheckDD4Hep import UseDD4Hep
-from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
-from RecoConf.event_filters import require_pvs
-from Humboldt.options import usePrKalman
-
-options.input_type = 'MDF'
-options.input_raw_format = 0.5
-options.simulation = False # in DD4Hep is False the correct option
-options.data_type = 'Upgrade'
-
-# set DDDB and CondDB info
-options.geometry_version = "trunk" # run3/trunk
-CONDDBTag = "master"
-options.conditions_version = CONDDBTag
-
-online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
-if os.path.exists(online_cond_path):
-    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
-
-from glob import glob
-from Gaudi.Configuration import *
-from GaudiConf import IOHelper
-
-# run 269045
-files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
-options.input_files = files[0:4000]
-
-options.event_store = 'EvtStoreSvc'
-options.histo_file = "GoodLongTracks_histo.root"
-#options.ntuple_file = "GoodLongTracks_tuple.root"
-options.use_iosvc = True  # True for data, False for MC
-# multithreading not working while creating tuples
-options.n_threads = 35
-options.evt_max = -1
-
-options.scheduler_legacy_mode = False
-
-configure_input(options)
-
-from Humboldt.utils import runAlignment
-from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
-from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
-
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VeloRz
-config = configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy")
-
-#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
-
-filter_pvs = []
-filter_pvs.append(require_pvs(alignmentPVs))
-
-# add survey constraints
-from Configurables import SurveyConstraints
-from PyConf.Tools import AlignChisqConstraintTool
-from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
-
-with createAlignAlgorithm.bind(
-        outputDataFile="humb-vp-ft-halves-modules",
-        updateInFinalize=False,
-        onlineMode=False):
-    runAlignment(
-        options,
-        surveyConstraints=config.SurveyConstraints,
-        lagrangeConstraints=config.LagrangeConstraints,
-        alignmentTracks=alignmentTracks,
-        elementsToAlign=config.Elements,
-        filters=filter_pvs,
-        alignmentPVs=alignmentPVs,
-        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py
similarity index 97%
rename from Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py
rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py
index e2a96c189..72067b352 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v2.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py
@@ -76,8 +76,8 @@ from Humboldt.utils import runAlignment
 from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
 from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
 
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_v2
-config = configureGlobalAlignment_v2(halfdofs="TxTyTzRy")
+from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureVPHalfAlignment
+config = configureVPHalfAlignment(halfdofs="TxTyTz")
 
 #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
 alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data.py b/Alignment/Humboldt/options/AlignFTjointModules_data.py
deleted file mode 100644
index 87ea6ba87..000000000
--- a/Alignment/Humboldt/options/AlignFTjointModules_data.py
+++ /dev/null
@@ -1,123 +0,0 @@
-###############################################################################
-# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-"""
-Configuration file to test running on data.
-"""
-
-from Moore import options, run_moore
-from RecoConf.reconstruction_objects import reconstruction
-from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
-from Hlt2Conf.lines import all_lines
-import os
-import re
-from RecoConf.hlt2_tracking import (
-    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
-    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
-    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
-from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
-from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
-    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
-    make_PatPV3DFuture_pvs)
-
-from RecoConf.hlt1_muonid import make_muon_hits
-from RecoConf.calorimeter_reconstruction import make_digits, make_calo
-from PyConf.application import configure_input
-from PRConfig.FilesFromDirac import get_access_urls
-from DDDB.CheckDD4Hep import UseDD4Hep
-from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
-
-options.input_type = 'MDF'
-options.input_raw_format = 0.5
-# options.input_type = 'MDF' # look into eos for correct data type
-options.simulation = False # in DD4Hep is False the correct option
-options.data_type = 'Upgrade'
-
-# set DDDB and CondDB info
-options.geometry_version = "trunk"
-#CONDDBTag = "nibreer_joint_analysis"
-CONDDBTag = "master"
-options.conditions_version = CONDDBTag
-
-online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
-if os.path.exists(online_cond_path):
-    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
-
-#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/'
-#if os.path.exists(cond_path):
-#    DD4hepSvc().ConditionsLocation = 'file://' + cond_path
-
-from glob import glob
-from Gaudi.Configuration import *
-from GaudiConf import IOHelper
-
-# run 269045
-files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
-options.input_files = files[0:4000]
-
-options.event_store = 'EvtStoreSvc'
-options.histo_file = "GoodLongTracks_histo.root"
-#options.ntuple_file = "GoodLongTracks_tuple.root"
-options.use_iosvc = True  # True for data, False for MC
-# multithreading not working while creating tuples
-options.n_threads = 35 # set to 1 for tuples, 30 for align V3
-options.evt_max = -1
-
-options.scheduler_legacy_mode = False
-
-configure_input(options)
-
-from Humboldt.utils import runAlignment
-from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
-from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
-
-alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf(
-)
-
-from TAlignment.Alignables import Alignables
-elements = Alignables()
-elements.FTHalfModules("TxRxRz")
-#elements.FTHalfModules("TxTzRxRz")
-# add survey constraints
-from Configurables import SurveyConstraints
-from PyConf.Tools import AlignChisqConstraintTool
-
-surveyconstraints = SurveyConstraints()
-surveyconstraints.FT(addHalfModuleJoints=True)
-
-#surveyconstraints.Constraints += [
-    # allow for an Rz of ~1mm/1m around the z=0 part of the half module
-#    "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.001 0.001 0.001 : 0 +1213 0"]
-
-
-# define Lagrange constraints
-constraints = []
-constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-#constraints.append('FixMeanModuleT1 : FT/T1/U/HL.*/M. : Tx : total')
-#constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx: total')
-#constraints.append("ModulesGlobalConstraint : FT/T./(X1|X2|U|V)/HL./Q./M. : Tx Tz Rx Rz")
-
-from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
-with createAlignUpdateTool.bind(
-        logFile="alignlog_ft_modules_d0_prkalman.txt"
-), createAlignAlgorithm.bind(
-        xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')):
-    runAlignment(
-        options,
-        surveyConstraints=surveyconstraints,
-        lagrangeConstraints=constraints,
-        alignmentTracks=alignmentTracks,
-        alignmentPVs=alignmentPVs,
-#        particles=particles,
-        odin=odin,
-        elementsToAlign=elements,
-        monitorList=monitors,
-        usePrKalman=True)
diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data_2.py b/Alignment/Humboldt/options/AlignFTjointModules_data_2.py
deleted file mode 100644
index ef93a1cd4..000000000
--- a/Alignment/Humboldt/options/AlignFTjointModules_data_2.py
+++ /dev/null
@@ -1,117 +0,0 @@
-###############################################################################
-# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-"""
-Configuration file to test running on data.
-"""
-
-from Moore import options, run_moore
-from RecoConf.reconstruction_objects import reconstruction
-from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
-from Hlt2Conf.lines import all_lines
-import os
-import re
-from RecoConf.hlt2_tracking import (
-    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
-    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
-    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
-from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
-from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
-    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
-    make_PatPV3DFuture_pvs)
-
-from RecoConf.hlt1_muonid import make_muon_hits
-from RecoConf.calorimeter_reconstruction import make_digits, make_calo
-from PyConf.application import configure_input
-from PRConfig.FilesFromDirac import get_access_urls
-from DDDB.CheckDD4Hep import UseDD4Hep
-from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
-
-options.input_type = 'MDF'
-
-options.input_raw_format = 0.5
-# options.input_type = 'MDF' # look into eos for correct data type
-options.simulation = False # in DD4Hep is False the correct option
-options.data_type = 'Upgrade'
-
-# set DDDB and CondDB info
-options.geometry_version = "trunk"
-#CONDDBTag = "nibreer_joint_analysis"
-CONDDBTag = "master"
-options.conditions_version = CONDDBTag
-
-online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
-if os.path.exists(online_cond_path):
-    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
-
-#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/'
-#if os.path.exists(cond_path):
-#    DD4hepSvc().ConditionsLocation = 'file://' + cond_path
-
-from glob import glob
-from Gaudi.Configuration import *
-from GaudiConf import IOHelper
-
-# run 269045
-files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
-options.input_files = files[0:4000]
-
-options.event_store = 'EvtStoreSvc'
-options.histo_file = "GoodLongTracks_histo.root"
-#options.ntuple_file = "GoodLongTracks_tuple.root"
-options.use_iosvc = True  # True for data, False for MC
-# multithreading not working while creating tuples
-options.n_threads = 35 # set to 1 for tuples, 30 for align V3
-options.evt_max = -1
-
-options.scheduler_legacy_mode = False
-
-configure_input(options)
-
-from Humboldt.utils import runAlignment
-from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
-from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
-
-alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-
-from TAlignment.Alignables import Alignables
-elements = Alignables()
-elements.FTHalfModules("TxTzRxRz")
-#elements.FTHalfModules("TxTzRxRz")
-# add survey constraints
-from Configurables import SurveyConstraints
-from PyConf.Tools import AlignChisqConstraintTool
-
-surveyconstraints = SurveyConstraints()
-surveyconstraints.FT(addHalfModuleJoints=True)
-
-# define Lagrange constraints
-constraints = []
-constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-constraints.append('FixMeanModuleT1 : FT/T1/U/HL.*/M. : Tx : total')
-constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx : total')
-
-from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
-with createAlignUpdateTool.bind(
-        logFile="alignlog_ft_modules_d0_prkalman.txt"
-), createAlignAlgorithm.bind(
-        xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')):
-    runAlignment(
-        options,
-        surveyConstraints=surveyconstraints,
-        lagrangeConstraints=constraints,
-        alignmentTracks=alignmentTracks,
-        alignmentPVs=alignmentPVs,
-        particles=particles,
-        odin=odin,
-        elementsToAlign=elements,
-        monitorList=monitors,
-        usePrKalman=True)
diff --git a/Alignment/Humboldt/options/AlignFTjointModules_data_3.py b/Alignment/Humboldt/options/AlignFTjointModules_data_3.py
deleted file mode 100644
index 0f1c38663..000000000
--- a/Alignment/Humboldt/options/AlignFTjointModules_data_3.py
+++ /dev/null
@@ -1,118 +0,0 @@
-###############################################################################
-# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-"""
-Configuration file to test running on data.
-"""
-
-from Moore import options, run_moore
-from RecoConf.reconstruction_objects import reconstruction
-from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
-from Hlt2Conf.lines import all_lines
-import os
-import re
-from RecoConf.hlt2_tracking import (
-    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
-    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
-    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
-from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
-from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
-    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
-    make_PatPV3DFuture_pvs)
-
-from RecoConf.hlt1_muonid import make_muon_hits
-from RecoConf.calorimeter_reconstruction import make_digits, make_calo
-from PyConf.application import configure_input
-from PRConfig.FilesFromDirac import get_access_urls
-from DDDB.CheckDD4Hep import UseDD4Hep
-from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
-
-options.input_type = 'MDF'
-options.input_raw_format = 0.5
-# options.input_type = 'MDF' # look into eos for correct data type
-options.simulation = False # in DD4Hep is False the correct option
-options.data_type = 'Upgrade'
-
-# set DDDB and CondDB info
-options.geometry_version = "trunk"
-#CONDDBTag = "nibreer_joint_analysis"
-CONDDBTag = "master"
-options.conditions_version = CONDDBTag
-
-online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
-if os.path.exists(online_cond_path):
-    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
-
-#cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database/'
-#if os.path.exists(cond_path):
-#    DD4hepSvc().ConditionsLocation = 'file://' + cond_path
-
-from glob import glob
-from Gaudi.Configuration import *
-from GaudiConf import IOHelper
-
-# run 269045
-files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
-options.input_files = files[0:4000]
-
-options.event_store = 'EvtStoreSvc'
-options.histo_file = "GoodLongTracks_histo.root"
-#options.ntuple_file = "GoodLongTracks_tuple.root"
-options.use_iosvc = True  # True for data, False for MC
-# multithreading not working while creating tuples
-options.n_threads = 35 # set to 1 for tuples, 30 for align V3
-options.evt_max = -1
-
-options.scheduler_legacy_mode = False
-
-configure_input(options)
-
-from Humboldt.utils import runAlignment
-from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
-from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
-
-alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf(
-)
-
-from TAlignment.Alignables import Alignables
-elements = Alignables()
-elements.FTHalfModules("TxTzRxRz")
-#elements.FTHalfModules("TxTzRxRz")
-# add survey constraints
-from Configurables import SurveyConstraints
-from PyConf.Tools import AlignChisqConstraintTool
-
-surveyconstraints = SurveyConstraints()
-surveyconstraints.FT(addHalfModuleJoints=True)
-
-# define Lagrange constraints
-constraints = []
-constraints.append("BackFramesFixed : FT/T3/X2/HL.*/M. : Tx Tz Rx Rz")
-constraints.append('FixMeanModuleT1 : FT/T1/V/HL.*/M. : Tx')
-constraints.append('FixMeanModuleT2 : FT/T2/V/HL.*/M. : Tx')
-constraints.append("ModulesGlobalConstraint : FT/T./(X1|X2|U|V)/HL./Q./M. : Tx Tz Rx Rz")
-
-from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
-with createAlignUpdateTool.bind(
-        logFile="alignlog_ft_modules_d0_prkalman.txt"
-), createAlignAlgorithm.bind(
-        xmlWriters=getXMLWriterList(['VP','FT'], prefix='humb-ft-modules-d0/')):
-    runAlignment(
-        options,
-        surveyConstraints=surveyconstraints,
-        lagrangeConstraints=constraints,
-        alignmentTracks=alignmentTracks,
-        alignmentPVs=alignmentPVs,
-        particles=particles,
-        odin=odin,
-        elementsToAlign=elements,
-        monitorList=monitors,
-        usePrKalman=True)
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
index 8c692ff0a..aaf87ed6c 100644
--- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
+++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
@@ -38,46 +38,14 @@ class AlignmentScenario():
         #self.SurveyConstraints = surveyconstraints
         #self.SubDetectors = subdetectors
 
-def configureSciFiOnly():
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['FT']
-
-    elements = Alignables()
-
-    elements.FTCFrames("TxRz")
-    elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTHalfModules("Rx")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    surveyconstraints.XmlFiles = []
-
-    surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True)
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
 def configureGlobalAlignment(halfdofs="TxTyTzRy"):
     setup = AlignmentScenario('GlobalAlignment')
     setup.SubDetectors += ['VP', 'FT']
 
     elements = Alignables()
-#    elements.VP("None")
-#    elements.VP("RxRz")
-#    elements.VPRight(halfdofs)
-#    elements.VPLeft(halfdofs)
-#    elements.FTHalfModules("TxRxRz")
-#    elements.VP("RxRz")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
 
-#    elements.FTCFrames("Tz") # added Tz, but need Tz survey unc. set to 0!
- #   elements.FTModules("TxRz")
     elements.FTHalfModules("TxRxRz")
     setup.Elements += list(elements)
 
@@ -96,254 +64,57 @@ def configureGlobalAlignment(halfdofs="TxTyTzRy"):
 
     return setup
 
-def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
+def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment_v2_2')
     setup.SubDetectors += ['VP', 'FT']
 
     elements = Alignables()
-#    elements.VP("None")
     elements.VP("Rx")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-#    elements.VP("None")
-    elements.VP("Rz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    #elements.VP("None")
-#    elements.VP("RxRz")
-#    elements.VPRight(halfdofs)
-#    elements.VPLeft(halfdofs)
-#    elements.FTHalfModules("TxRz")
-#    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0!
-#    elements.FTModules("TxRz")
-    elements.FTHalfModules("TxRxRz")
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-#    constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
 
-def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    #elements.VP("None")
-#    elements.VP("RxRz")
-#    elements.VPRight(halfdofs)
-#    elements.VPLeft(halfdofs)
-#    elements.FTHalfModules("TxRz")
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-
-    elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0!
-#    elements.FTModules("TxRz")
-    elements.FTHalfModules("TxRxRz")
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        print('the wrong survey was used...')
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-    print('survey constraints: ', setup.SurveyConstraints)
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v4(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-#    elements.VP("None")
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-
-    elements.FTCFrames("TxRz")
-    elements.FTHalfModules("TxRz")
-    elements.FTModules("TxRz")
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v5(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-
-#    elements.FTCFrameLayers("TxRz")
-#    elements.FTCFrames("TxTz")
-    elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0!
     elements.FTHalfModules("TxRz")
 
     setup.Elements += list(elements)
 
     surveyconstraints = SurveyConstraints()
-#    surveyconstraints.XmlFiles = []
-
     if UseDD4Hep:
         surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
+        surveyconstraints.FT(addHalfModuleJoints=True)
     else:
         surveyconstraints.VP(ver='latest')
     setup.SurveyConstraints = surveyconstraints
 
     constraints = []
     constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
     constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
     setup.LagrangeConstraints = constraints
 
     return setup
 
-def configureGlobalAlignment_v6(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
+def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"):
+    setup = AlignmentScenario('GlobalAlignment_v2_3')
     setup.SubDetectors += ['VP', 'FT']
 
     elements = Alignables()
-    elements.VP("RxRz")
+    elements.VP("Rx")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
-#    elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTModules("TxRxRz")
-    elements.FTHalfModules("TxRxRz")
-
-    setup.Elements += list(elements)
 
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v7(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTModules("TxRz")
-    elements.FTHalfModules("Rx")
+    elements.FTHalfModules("TxRxRz")
 
     setup.Elements += list(elements)
 
     surveyconstraints = SurveyConstraints()
     if UseDD4Hep:
         surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-        surveyconstraints += ["FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0"]
+        surveyconstraints.FT(addHalfModuleJoints=True)
     else:
         surveyconstraints.VP(ver='latest')
     setup.SurveyConstraints = surveyconstraints
 
     constraints = []
     constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
     constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
     setup.LagrangeConstraints = constraints
 
@@ -394,7 +165,7 @@ def configureRun3Alignment(fixQOverPBias=True):
 
 
 # define additional scenarios below
-def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"):
+def configureVPHalfAlignment(halfdofs="TxTyTz"):
     '''
     This should be the default alignment for the Automatic alignment procedure
     Align 2-halves for all degree of freedom
@@ -404,6 +175,7 @@ def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"):
     setup.SubDetectors += ['VP']
 
     elements = Alignables()
+    elements.VP("RxRz")
     elements.VPRight(halfdofs)
     elements.VPLeft(halfdofs)
     setup.Elements += list(elements)
@@ -420,7 +192,7 @@ def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"):
     # dofs here must match the ones that we actually align for. If you
     # specify too many, things will go rather wrong.
     constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
 
     setup.LagrangeConstraints = constraints
 
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save
deleted file mode 100644
index e69de29bb..000000000
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1 b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1
deleted file mode 100644
index e20748736..000000000
--- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.1
+++ /dev/null
@@ -1,448 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from TAlignment.Alignables import Alignables
-from TAlignment.SurveyConstraints import SurveyConstraints
-from DDDB.CheckDD4Hep import UseDD4Hep
-
-
-# scenario used for prompt alignment
-class AlignmentScenario():
-    __slots__ = {
-        "Name": ""  # name of the scenario
-        ,
-        "Elements": []  # list with alignment elements
-        ,
-        "LagrangeConstraints": []  # list with lagrange constraints
-        ,
-        "SurveyConstraints": None  # survey constraints
-        ,
-        "SubDetectors": []  # list of subdetectors written to xml
-    }
-
-    def __init__(self, aName="AlignmentScenario", **kwargs):
-        for (a, b) in self.__slots__.items():
-            setattr(self, a, b)
-        self.Name = aName
-        for (a, b) in kwargs:
-            setattr(self, a, b)
-        #self.Elements = Elements
-        #self.LagrangeConstraints = lagrangeconstraints
-        #self.SurveyConstraints = surveyconstraints
-        #self.SubDetectors = subdetectors
-
-def configureSciFiOnly():
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['FT']
-
-    elements = Alignables()
-
-    elements.FTCFrames("TxRz")
-    elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTHalfModules("Rx")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    surveyconstraints.XmlFiles = []
-
-    surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True)
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-#    elements.VP("None")
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-       	surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-#    elements.VP("None")
-    elements.VP("Rx")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-#    elements.VP("None")
-    elements.VP("Rz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v2(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    #elements.VP("None")
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-#    constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v3(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    #elements.VP("None")
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        print('the wrong survey was used...')
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-    print('survey constraints: ', setup.SurveyConstraints)
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-#    elements.VP("None")
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v5(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-
-#    elements.FTCFrameLayers("TxRz")
-#    elements.FTCFrames("TxTz")
-    elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTHalfModules("TxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-#    surveyconstraints.XmlFiles = []
-
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v6(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-#    elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTModules("TxRxRz")
-    elements.FTHalfModules("TxRxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureRun3Alignment(fixQOverPBias=True):
-    # just a first implementation to test some essential things
-
-    setup = AlignmentScenario("Run3Alignment")
-    setup.SubDetectors += ['VP', 'UT', 'FT']
-
-    # define the alignment elements
-    elements = Alignables()
-    elements.VP("None")
-    elements.VPRight("Tx")
-    elements.VPLeft("Tx")
-    elements.VPModules("Tx")
-    if UseDD4Hep: elements.FTHalfLayers("Tx")
-    elements.FTModules("Tx")
-    #elements.UTLayers("Tx")
-    setup.Elements = elements
-
-    # add some survey constraints (just fixing to nominal, right now)
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-       	surveyconstraints.VP(ver='2023_dd4hep')
-       	surveyconstraints.FT(ver='data20221115dd4hep')
-    else:
-        surveyconstraints.VP(ver='latest')
-        surveyconstraints.FT(ver='MC')
-    surveyconstraints.UT()
-    setup.SurveyConstraints = surveyconstraints
-
-    # make sure that the velo stays where it was
-    constraints = []
-    constraints.append("VeloHalfAverage : VP/VP(Left|Right) : Tx")
-    # fix the global shearing in the velo
-    constraints.append("VeloModuleShearing : VP/VPLeft/Module.{1,2}" +
-                       ("WithSupport : Tx" if not UseDD4Hep else " : Tx"))
-    # fix the q/p scale by not moving T in X. note that you do not
-    # want to do this if you use D0 in the alignment
-    if fixQOverPBias:
-        constraints.append("FT3X : FT/T3/LayerX2 : Tx")
-    # there is still a spectrometer weak mode left, but I cannot find it :-(
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-
-# define additional scenarios below
-def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"):
-    '''
-    This should be the default alignment for the Automatic alignment procedure
-    Align 2-halves for all degree of freedom
-    Constrain the global Velo position
-    '''
-    setup = AlignmentScenario("VPModuleAlignment")
-    setup.SubDetectors += ['VP']
-
-    elements = Alignables()
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    setup.Elements += list(elements)
-
-    # Constraints
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    # make sure that the velo stays where it was. Important note: the
-    # dofs here must match the ones that we actually align for. If you
-    # specify too many, things will go rather wrong.
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
-
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-
-def configureVPModuleAlignment(halfdofs="TxTyTzRxRyRz", moduledofs="TxTyRz"):
-    '''
-    This should be the default alignment for the Automatic alignment procedure
-    Align 2-halves for all degree of freedom and
-    Modues only for only the main degrees of freedom Tx Ty Rz
-    Constrain the global Velo position and two modules in each half
-    '''
-    setup = AlignmentScenario("VPModuleAlignment")
-    setup.SubDetectors += ['VP']
-
-    elements = Alignables()
-    elements.VP("None")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.VPModules(moduledofs)
-    setup.Elements += list(elements)
-
-    # Constraints
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-    else:
-        surveyconstraints.VP(ver='latest')
-    #surveyconstraints.Constraints += [
-    #    "Velo      : 0 0 0 -0.0001 0 -0.0001 : 0.2 0.2 0.2 0.0001 0.0001 0.001",
-    #    "Velo/Velo(Right|Left) : 0 0 0 0 0 0 : 10 1 0.4 0.01 0.01 0.001"
-    #]
-    setup.SurveyConstraints = surveyconstraints
-
-    # make sure that the velo stays where it was. Important note: the
-    # dofs here must match the ones that we actually align for. If you
-    # specify too many, things will go rather wrong.
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
-
-    if moduledofs and moduledofs != "None":
-        velomoduleconstraints = ""
-        for dof in ["Tx", "Ty", "Tz", "Rz", "Rx", "Ry"]:
-            if dof in moduledofs:
-                tmpdof = dof.replace("T", "")
-                velomoduleconstraints += " %s Sz%s Sz2%s" % (dof, tmpdof,
-                                                             tmpdof)
-        for side in ['Right', 'Left']:
-            constraints.append(
-                "VPInternal%s : .*?%s/Module(..WithSupport|..): %s" %
-                (side, side, velomoduleconstraints))
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-
-def configureVPSensorAlignment(sensordofs="TxTyRz"):
-
-    setup = AlignmentScenario("VPSensorAlignment")
-    setup.SubDetectors += ['VP']
-
-    elements = Alignables()
-    dofs = "TxTyRz"
-    elements.VPSensors(dofs)
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    return setup
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2 b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2
deleted file mode 100644
index d9a63c8ff..000000000
--- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py.save.2
+++ /dev/null
@@ -1,494 +0,0 @@
-###############################################################################
-# (c) Copyright 2000-2018 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from TAlignment.Alignables import Alignables
-from TAlignment.SurveyConstraints import SurveyConstraints
-from DDDB.CheckDD4Hep import UseDD4Hep
-
-
-# scenario used for prompt alignment
-class AlignmentScenario():
-    __slots__ = {
-        "Name": ""  # name of the scenario
-        ,
-        "Elements": []  # list with alignment elements
-        ,
-        "LagrangeConstraints": []  # list with lagrange constraints
-        ,
-        "SurveyConstraints": None  # survey constraints
-        ,
-        "SubDetectors": []  # list of subdetectors written to xml
-    }
-
-    def __init__(self, aName="AlignmentScenario", **kwargs):
-        for (a, b) in self.__slots__.items():
-            setattr(self, a, b)
-        self.Name = aName
-        for (a, b) in kwargs:
-            setattr(self, a, b)
-        #self.Elements = Elements
-        #self.LagrangeConstraints = lagrangeconstraints
-        #self.SurveyConstraints = surveyconstraints
-        #self.SubDetectors = subdetectors
-
-def configureSciFiOnly():
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['FT']
-
-    elements = Alignables()
-
-    elements.FTCFrames("TxRz")
-    elements.FTModules("TxTzRz") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTHalfModules("Rx")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    surveyconstraints.XmlFiles = []
-
-    surveyconstraints.FT(ver="data2023", addHalfModuleJoints=True)
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-#    elements.VP("None")
-#    elements.VP("RxRz")
-#    elements.VPRight(halfdofs)
-#    elements.VPLeft(halfdofs)
-#    elements.FTHalfModules("TxRxRz")
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTCFrames("Tz") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTModules("TxRz")
-    elements.FTHalfModules("Rx")
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-       	surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_VeloRx(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-#    elements.VP("None")
-    elements.VP("Rx")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_VeloRz(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-#    elements.VP("None")
-    elements.VP("Rz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v2(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    #elements.VP("None")
-#    elements.VP("RxRz")
-#    elements.VPRight(halfdofs)
-#    elements.VPLeft(halfdofs)
-#    elements.FTHalfModules("TxRz")
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTCFrames("Rz") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTModules("TxRz")
-    elements.FTHalfModules("Rx")
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-#    constraints.append("FT_T1FramesFixed : FT/T1/(U|V)/HL.*/M. : Tx Tz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v3(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    #elements.VP("None")
-#    elements.VP("RxRz")
-#    elements.VPRight(halfdofs)
-#    elements.VPLeft(halfdofs)
-#    elements.FTHalfModules("TxRz")
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTCFrames("TxRz") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTModules("TxRz")
-    elements.FTHalfModules("Rx")
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        print('the wrong survey was used...')
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-    print('survey constraints: ', setup.SurveyConstraints)
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v4(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-#    elements.VP("None")
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTHalfModules("TxRz")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v5(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-
-#    elements.FTCFrameLayers("TxRz")
-#    elements.FTCFrames("TxTz")
-    elements.FTModules("TxRz") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTHalfModules("Rx")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-#    surveyconstraints.XmlFiles = []
-
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v6(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTModules("TxRz")
-    elements.FTHalfModules("Rx")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureGlobalAlignment_v7(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    elements.VP("RxRz")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.FTCFrames("Tx") # added Tz, but need Tz survey unc. set to 0!
-    elements.FTModules("TxRz")
-    elements.FTHalfModules("Rx")
-
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(ver='data2023', addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    surveyconstraints.append("fixReadoutSide :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0")
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-#    constraints.append("FT_T2FramesFixed : FT/T2/(U|V)/HL.*/M. : Tx Rz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-def configureRun3Alignment(fixQOverPBias=True):
-    # just a first implementation to test some essential things
-
-    setup = AlignmentScenario("Run3Alignment")
-    setup.SubDetectors += ['VP', 'UT', 'FT']
-
-    # define the alignment elements
-    elements = Alignables()
-    elements.VP("None")
-    elements.VPRight("Tx")
-    elements.VPLeft("Tx")
-    elements.VPModules("Tx")
-    if UseDD4Hep: elements.FTHalfLayers("Tx")
-    elements.FTModules("Tx")
-    #elements.UTLayers("Tx")
-    setup.Elements = elements
-
-    # add some survey constraints (just fixing to nominal, right now)
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-       	surveyconstraints.VP(ver='2023_dd4hep')
-       	surveyconstraints.FT(ver='data20221115dd4hep')
-    else:
-        surveyconstraints.VP(ver='latest')
-        surveyconstraints.FT(ver='MC')
-    surveyconstraints.UT()
-    setup.SurveyConstraints = surveyconstraints
-
-    # make sure that the velo stays where it was
-    constraints = []
-    constraints.append("VeloHalfAverage : VP/VP(Left|Right) : Tx")
-    # fix the global shearing in the velo
-    constraints.append("VeloModuleShearing : VP/VPLeft/Module.{1,2}" +
-                       ("WithSupport : Tx" if not UseDD4Hep else " : Tx"))
-    # fix the q/p scale by not moving T in X. note that you do not
-    # want to do this if you use D0 in the alignment
-    if fixQOverPBias:
-        constraints.append("FT3X : FT/T3/LayerX2 : Tx")
-    # there is still a spectrometer weak mode left, but I cannot find it :-(
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-
-# define additional scenarios below
-def configureVPHalfAlignment(halfdofs="TxTyTzRxRyRz"):
-    '''
-    This should be the default alignment for the Automatic alignment procedure
-    Align 2-halves for all degree of freedom
-    Constrain the global Velo position
-    '''
-    setup = AlignmentScenario("VPModuleAlignment")
-    setup.SubDetectors += ['VP']
-
-    elements = Alignables()
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    setup.Elements += list(elements)
-
-    # Constraints
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    # make sure that the velo stays where it was. Important note: the
-    # dofs here must match the ones that we actually align for. If you
-    # specify too many, things will go rather wrong.
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
-
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-
-def configureVPModuleAlignment(halfdofs="TxTyTzRxRyRz", moduledofs="TxTyRz"):
-    '''
-    This should be the default alignment for the Automatic alignment procedure
-    Align 2-halves for all degree of freedom and
-    Modues only for only the main degrees of freedom Tx Ty Rz
-    Constrain the global Velo position and two modules in each half
-    '''
-    setup = AlignmentScenario("VPModuleAlignment")
-    setup.SubDetectors += ['VP']
-
-    elements = Alignables()
-    elements.VP("None")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-    elements.VPModules(moduledofs)
-    setup.Elements += list(elements)
-
-    # Constraints
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-    else:
-        surveyconstraints.VP(ver='latest')
-    #surveyconstraints.Constraints += [
-    #    "Velo      : 0 0 0 -0.0001 0 -0.0001 : 0.2 0.2 0.2 0.0001 0.0001 0.001",
-    #    "Velo/Velo(Right|Left) : 0 0 0 0 0 0 : 10 1 0.4 0.01 0.01 0.001"
-    #]
-    setup.SurveyConstraints = surveyconstraints
-
-    # make sure that the velo stays where it was. Important note: the
-    # dofs here must match the ones that we actually align for. If you
-    # specify too many, things will go rather wrong.
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
-
-    if moduledofs and moduledofs != "None":
-        velomoduleconstraints = ""
-        for dof in ["Tx", "Ty", "Tz", "Rz", "Rx", "Ry"]:
-            if dof in moduledofs:
-                tmpdof = dof.replace("T", "")
-                velomoduleconstraints += " %s Sz%s Sz2%s" % (dof, tmpdof,
-                                                             tmpdof)
-        for side in ['Right', 'Left']:
-            constraints.append(
-                "VPInternal%s : .*?%s/Module(..WithSupport|..): %s" %
-                (side, side, velomoduleconstraints))
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-
-def configureVPSensorAlignment(sensordofs="TxTyRz"):
-
-    setup = AlignmentScenario("VPSensorAlignment")
-    setup.SubDetectors += ['VP']
-
-    elements = Alignables()
-    dofs = "TxTyRz"
-    elements.VPSensors(dofs)
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    return setup
diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
index b1a333dcf..300a5b545 100644
--- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
+++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
@@ -23,38 +23,49 @@ def defaultHLTD0Selection(vertices_v2):
     import Functors as F
     from Hlt2Conf.standard_particles import make_long_pions, make_long_kaons
     from Hlt2Conf.algorithms_thor import ParticleCombiner, ParticleFilter
-    from GaudiKernel.SystemOfUnits import MeV, mm
+    from GaudiKernel.SystemOfUnits import MeV, mm, ps
     from Functors.math import in_range
 
     loosepions = make_long_pions()
     loosekaons = make_long_kaons()
+
     ptmin = 800 * MeV
-#    ptmin = 1400 * MeV
+    pmin = 3000 * MeV
     minIP = 0.06 * mm
 
     pions = ParticleFilter(
         loosepions,
         F.FILTER(
-            F.require_all(F.PT > ptmin,
+            F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K > 5.,
                           F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2))))
 
     kaons = ParticleFilter(
         loosekaons,
         F.FILTER(
-            F.require_all(F.PT > ptmin,
+            F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K > 5.,
                           F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2))))
 
     particles = [pions, kaons]
 
     combination_code = F.require_all(
         in_range(1760 * MeV, F.MASS, 1960 * MeV),
-        F.SUM(F.PT) > 2000 * MeV,
-        F.MAXDOCACUT(0.15 * mm),
+        F.MAX(F.PT) > 1200 * MeV,
+        F.PT > 2000 * MeV,
+        F.MAXDOCACUT(0.1 * mm),
     )
+
     vertex_code = F.require_all(F.CHI2DOF < 10.,
+                                #in_range(1845 * MeV, F.MASS, 1885 * MeV),
+                                in_range(1760 * MeV, F.MASS, 1960 * MeV),
+                                F.END_VZ > -341. * mm,
+                                F.BPVLTIME(vertices_v2) > 0.450 * ps,
+                                F.END_VX < 4 * mm,
+                                F.END_VY < 4 * mm )
+
+#    vertex_code = F.require_all(F.CHI2DOF < 10.,
 #                                F.BPVETA(vertices_v2) > 2,
 #                                F.BPVETA(vertices_v2) < 5
-    )
+#    )
 
     combinedD0 = ParticleCombiner(
         [pions, kaons],
@@ -111,6 +122,50 @@ def defaultDetatchedJpsi(vertices_v2):
 
     return detatchedJpsi
 
+def defaultHLT1D0Selection(vertices_v2):
+    #TODO: get particles from HLT SelReports instead of rebuilding
+    # NOTE: selections match those in HLT1D2KPi
+    import Functors as F
+    from Hlt2Conf.standard_particles import make_long_pions, make_long_kaons
+    from Hlt2Conf.algorithms_thor import ParticleCombiner, ParticleFilter
+    from GaudiKernel.SystemOfUnits import MeV, mm
+    from Functors.math import in_range
+
+    loosepions = make_long_pions()
+    loosekaons = make_long_kaons()
+
+    ptmin = 800 * MeV
+    minIP = 0.06 * mm
+
+    pions = ParticleFilter(
+        loosepions,
+        F.FILTER(
+            F.require_all(F.PT > ptmin,
+                          F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2))))
+
+    kaons = ParticleFilter(
+        loosekaons,
+        F.FILTER(
+            F.require_all(F.PT > ptmin,
+                          F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2))))
+
+    particles = [pions, kaons]
+
+    combination_code = F.require_all(
+        in_range(1760 * MeV, F.MASS, 1960 * MeV),
+        F.SUM(F.PT) > 2000 * MeV,
+        F.MAXDOCACUT(0.15 * mm),
+    )
+    vertex_code = F.require_all(F.CHI2DOF < 10.)
+
+    combinedD0 = ParticleCombiner(
+        [pions, kaons],
+        name="AlignHLTD0",
+        DecayDescriptor="[D0 -> pi+ K-]cc",
+        CombinationCut=combination_code,
+        CompositeCut=vertex_code,
+    )
+    return combinedD0
 
 def defaultHLTZ(vertices_v2):
     #TODO: get particles from HLT SelReports instead of rebuilding
diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
index fcd826883..a69c03249 100644
--- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
+++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
@@ -219,53 +219,50 @@ def monitor_SciFi_tracks(track_group,
 
     return monitorlist
 
-
-def make_scifi_tracks_and_particles_prkf():
-                           #usePrKalman=True,
-                           #MaxOutlierIterations=2,
-                           #MaxChi2Dof=5,
-                           #MinNVeloLayers=4):
+def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True,
+                                         MaxOutlierIterations=2,
+                                         MaxChi2Dof=5,
+                                         MinNVeloLayers=4):
     with reconstruction.bind(from_file=False),\
      PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\
      make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\
      make_muon_hits.bind(geometry_version=3),\
-     make_velo_full_clusters.bind(make_full_cluster=VPRetinaFullClusterDecoder),\
      make_VeloClusterTrackingSIMD.bind(algorithm=VeloRetinaClusterTrackingSIMD),\
      make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\
      get_global_measurement_provider.bind(velo_hits=make_RetinaClusters),\
+     make_velo_full_clusters.bind(make_full_cluster=VPRetinaFullClusterDecoder),\
      hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT):
-#        vp_hits = make_VeloClusterTrackingSIMD_hits()
+        vp_hits = make_VeloClusterTrackingSIMD_hits()
         reco = hlt2_reconstruction()
         hlt2_tracks = reco['LongTracks']
         best_tracks = hlt2_tracks
         pvs = reco["PVs_v1"]
 
- #      	velo_tracks = all_velo_track_types()
- #       backward_velo_tracks = velo_tracks["Pr::backward"]
- #       kf_template = partial(
- #           PrKalmanFilter_Velo,
- #           MaxOutlierIterations=MaxOutlierIterations,
- #           HitsVP=vp_hits,
- #           FillFitResult=True,
- #           ClassicSmoothing=True,
- #           MinNumVPHitsForOutlierRemoval=4,
- #           ReferenceExtrapolator=TrackLinearExtrapolator(),
- #           InputUniqueIDGenerator=make_unique_id_generator())
-
- #       fitted_velo_bwd = kf_template(
- #           name="PrKalmanFilter_VeloBwd",
- #           Input=backward_velo_tracks).OutputTracks
-
-#       	selected_bwd_tracks = VPBackwardTracks(
-#            fitted_velo_bwd,
-#            MaxChi2Cut=MaxChi2Dof,
-#            MinNVeloLayers=MinNVeloLayers)
+        velo_tracks = all_velo_track_types()
+        backward_velo_tracks = velo_tracks["Pr::backward"]
+        kf_template = partial(
+            PrKalmanFilter_Velo,
+            MaxOutlierIterations=MaxOutlierIterations,
+            HitsVP=vp_hits,
+            FillFitResult=True,
+            ClassicSmoothing=True,
+            MinNumVPHitsForOutlierRemoval=4,
+            ReferenceExtrapolator=TrackLinearExtrapolator(),
+            InputUniqueIDGenerator=make_unique_id_generator())
+        fitted_velo_bwd = kf_template(name="PrKalmanFilter_VeloBwd",
+            Input=backward_velo_tracks).OutputTracks
+
+        selected_bwd_tracks = VPBackwardTracks(
+            fitted_velo_bwd,
+            MaxChi2Cut=MaxChi2Dof,
+            MinNVeloLayers=MinNVeloLayers)
 
         particlepvs = reco["PVs"]
-        from PyConf.application import default_raw_banks
         from PyConf.application import make_odin
         odin = make_odin()
-        from Humboldt.ParticleSelections import defaultHLTD0Selection
+
+        from Humboldt.ParticleSelections import defaultHLT1D0Selection, defaultHLTD0Selection
+#        particles = defaultHLT1D0Selection(particlepvs)
         particles = defaultHLTD0Selection(particlepvs)
 
         from PyConf.Tools import TrackSelector
@@ -274,25 +271,84 @@ def make_scifi_tracks_and_particles_prkf():
         from Humboldt.VertexSelections import VPPrimaryVertices
 
         selected_tracks = GoodLongTracks(best_tracks)
-        track_name = "GoodLongTracks"
-        # here: merge the velo backwards tracks and the longtracks
-#        alignmentTracks = TrackSelectionMerger(
-#            InputLocations=[selected_bwd_tracks, selected_tracks]).OutputLocation
+        track_name = "AlignGoodLongTracks"
+
         alignmentTracks = TrackSelectionMerger(
-            InputLocations=[selected_tracks]).OutputLocation
+            InputLocations=[selected_bwd_tracks, selected_tracks]).OutputLocation
+
         selected_pvs = VPPrimaryVertices(pvs)
+
         from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor
         from GaudiKernel.SystemOfUnits import MeV
+
         monitorlist = []
-        myFTTrackMonitor = FTTrackMonitor_PrKalman(
-            name="AlignMoni_FTTrackMonitor_PrKalman",
-            TracksInContainer=alignmentTracks)
+        monitorlist = monitorlist + monitor_SciFi_tracks(
+            alignmentTracks, "AlignGoodLongTracks", includeQuarters=True)
+        monitorlist = monitorlist + monitor_SciFi_tracks(
+            best_tracks, "BestHLT2Tracks", includeQuarters=True)
         myTrackVertexMonitor = TrackVertexMonitor(
-            name="AlignMoni_FT_TrackVertexMonitor",
-            TrackContainer=alignmentTracks,
-            PVContainer=pvs)
-        monitorlist.append(myFTTrackMonitor)
+            TrackContainer=alignmentTracks, PVContainer=pvs)
         monitorlist.append(myTrackVertexMonitor)
+        # particle mass monitor needs replacement or upgrade
+        myParticleMonitor = ParticleMassMonitor(
+            name="defaultD0MassMonitor",
+            ParticleType="D0",
+            Particles=particles,
+            MassMean=1864.84 * MeV,
+            MassSigma=25 * MeV,
+            Bins=70,
+            MinPt=0,
+            MinP=0)
+        monitorlist.append(myParticleMonitor)
+
+        # return alignmentTracks, selected_pvs, particles, odin, monitorlist
+        return alignmentTracks, selected_pvs, odin, monitorlist
+
+def make_scifi_tracks_and_particles_prkf():
+    with reconstruction.bind(from_file=False),\
+     PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\
+     make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\
+     make_muon_hits.bind(geometry_version=3),\
+     make_VeloClusterTrackingSIMD.bind(algorithm=VeloRetinaClusterTrackingSIMD),\
+     make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\
+     hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT):
+
+        reco = hlt2_reconstruction()
+        hlt2_tracks = reco['LongTracks']
+        best_tracks = hlt2_tracks
+        pvs = reco["PVs_v1"]
+
+        particlepvs = reco["PVs"]
+        from PyConf.application import make_odin
+        odin = make_odin()
+
+        from Humboldt.ParticleSelections import defaultHLT1D0Selection, defaultHLTD0Selection
+        particles = defaultHLTD0Selection(particlepvs)
+
+        from PyConf.Tools import TrackSelector
+        from PyConf.Algorithms import VertexListRefiner, TrackSelectionMerger
+        from Humboldt.TrackSelections import GoodLongTracks
+        from Humboldt.VertexSelections import VPPrimaryVertices
+
+        selected_tracks = GoodLongTracks(best_tracks)
+        track_name = "AlignGoodLongTracks"
+        alignmentTracks = TrackSelectionMerger(
+            InputLocations=[selected_tracks]).OutputLocation
+        selected_pvs = VPPrimaryVertices(pvs)
+
+        from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor
+        from GaudiKernel.SystemOfUnits import MeV
+
+        monitorlist = []
+#        myFTTrackMonitor = FTTrackMonitor_PrKalman(
+#            name="AlignMoni_FTTrackMonitor_PrKalman",
+#            TracksInContainer=alignmentTracks)
+#        myTrackVertexMonitor = TrackVertexMonitor(
+#            name="AlignMoni_FT_TrackVertexMonitor",
+#            TrackContainer=alignmentTracks,
+#            PVContainer=pvs)
+#        monitorlist.append(myFTTrackMonitor)
+#        monitorlist.append(myTrackVertexMonitor)
 #        monitorlist = [
 #            myFTTrackMonitor,
 #            myTrackVertexMonitor,
@@ -300,19 +356,23 @@ def make_scifi_tracks_and_particles_prkf():
         # ParticleMassMonitor
 
         monitorlist = monitorlist + monitor_SciFi_tracks(
-            alignmentTracks, track_name, includeQuarters=True)
+            alignmentTracks, "AlignGoodLongTracks", includeQuarters=True)
         monitorlist = monitorlist + monitor_SciFi_tracks(
             best_tracks, "BestHLT2Tracks", includeQuarters=True)
+        myTrackVertexMonitor = TrackVertexMonitor(
+            TrackContainer=alignmentTracks, PVContainer=pvs)
+        monitorlist.append(myTrackVertexMonitor)
 
-        ## particle mass monitor needs replacement or upgrade
-        #myParticleMonitor = ParticleMassMonitor(
-        #    name="defaultD0MassMonitor",
-        #    ParticleType="D0",
-        #    Particles=particles,
-        #    MassMean=1864.84 * MeV,
-        #    MassSigma=90 * MeV,
-        #    Bins=100)
-        #monitorlist.append(myParticleMonitor)
-
-        #return alignmentTracks, selected_pvs, particles, odin, monitorlist
+        myParticleMonitor = ParticleMassMonitor(
+            name="defaultD0MassMonitor",
+            ParticleType="D0",
+            Particles=particles,
+            MassMean=1864.84 * MeV,
+            MassSigma=25 * MeV,
+            Bins=70,
+            MinPt=0,
+            MinP=0)
+        monitorlist.append(myParticleMonitor)
+
+        # return alignmentTracks, selected_pvs, particles, odin, monitorlist
         return alignmentTracks, selected_pvs, odin, monitorlist
diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py
index b7a6f51ea..a489b3895 100755
--- a/Alignment/TAlignment/python/TAlignment/Alignables.py
+++ b/Alignment/TAlignment/python/TAlignment/Alignables.py
@@ -294,6 +294,7 @@ class Alignables(list):
     _FTStations = ["/T1", "/T2", "/T3"]
     _FTLayers = ["/LayerX1", "/LayerU", "/LayerV", "/LayerX2"
                  ] if not UseDD4Hep else ["/X1", "/U", "/V", "/X2"]
+    _FTOuterLayers = ["/LayerX1", "/LayerX2"] if not UseDD4Hep else ["X1", "X2"]
     _FTRealQuarters = [
         "/Quarter0", "/Quarter2", "/Quarter1", "/Quarter3"
     ] if not UseDD4Hep else ["/HL0/Q0", "/HL0/Q2", "/HL1/Q1", "/HL1/Q3"]
@@ -403,6 +404,15 @@ class Alignables(list):
 #        print('FTHalfModules elements:', elements)
         self.__append(elements, dofs)
 
+    def FTHalfModulesOuterLayers(self, dofs=""):
+        elements = []
+        for i in self._FTStations:
+            for j in self._FTOuterLayers:
+                for k in self._FTRealQuarters:
+                    for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort:
+                        elements.append(self._FT + i + j + k + l)
+        self.__append(elements, dofs)
+
     def FTHalfModuleJoints(self,
                            errors="0.01 0.0012 0.0019 0.0004 0.0002 0.00017"):
 #                           errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"):
diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
index fc7089db6..822fab54d 100644
--- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
+++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
@@ -160,13 +160,19 @@ class SurveyConstraints(LHCbConfigurableUser):
                 #the CFrames. This option should only be used when including the CFrames as alignable objects, otherwise the module uncertainties
                 #would be underestimated.
                 self.XmlUncertainties += [
-                    "FT/.*/M. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002",
-                    "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.2 0.0000008 0.0002 0.0008",
+                    "FT/T./(X1|X2|U|V)/HL. : 0.2 0.2 0.2 0.00008 0.0002 0.00008",
+                    "FT/T./(X1U|VX2)/HL. : 0.2 0.2 0.2 0.00008 0.0002 0.00008",
                 ]
                 if UseDD4Hep:
+                    self.XmlUncertainties += [
+                        "FT/.*/M. : 0.1 0.1 0.1 0.00004 0.0001 0.00004"
+                    ]
                     self.Constraints += [
-                        "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00005 0.0001 0.00004 : 0 +1213 0",
-#                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
+                        # removed : 0 +1213 0", previous: see below
+                        # "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
+                        # "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
+                        "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002",
+                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002"
                     ]
                 else:
                     self.Constraints += [
@@ -178,19 +184,23 @@ class SurveyConstraints(LHCbConfigurableUser):
                     "FT/.*/Module. : 0.2 0.2 0.2 0.00008 0.0004 0.00008"
                 ]
         else:
-            print('small Rx uncertainty')
             if UseDD4Hep:
+                print('small Rx uncertainty + dd4hep')
+#                self.XmlUncertainties += [
+#                    "FT/.*/M. : 0.5 0.5 0.5 0.00000002 0.0008 0.0002",
+#                ]
                 self.XmlUncertainties += [
-                    "FT/.*/M. : 0.5 0.5 0.5 0.00000002 0.0008 0.0002",
+                    "FT/.*/M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002",
                 ]
                 # maybe remove this bottom constraint
-#                self.Constraints += [
-#                    "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
-#                ]
+                self.Constraints += [
+                    "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
+                    "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" # added this for 01-26
+                ]
             else:
                 print('test: no data in ver, but no DD4hep')
                 self.XmlUncertainties += [
-                    "FT/.*/Module. : 0.5 0.5 0.5 0.0000002 0.0008 0.0002",
+                    "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002",
                 ]
         # SciFi test constraints v0.1
         # translation constraints (somewhat) realistic
-- 
GitLab


From ee1aa37750ee574cb7fce64550d3fd701c60fa01 Mon Sep 17 00:00:00 2001
From: Gitlab CI <noreply@cern.ch>
Date: Thu, 14 Mar 2024 09:00:36 +0000
Subject: [PATCH 07/12] Fixed formatting

patch generated by https://gitlab.cern.ch/lhcb/Alignment/-/jobs/37042927
---
 .../options/AlignFT_VP_combined_data.py       |  9 ++--
 .../options/AlignFT_VP_combined_data_v1_1.py  | 15 +++---
 .../options/AlignFT_VP_combined_data_v1_2.py  |  9 ++--
 .../options/AlignFT_VP_combined_data_v1_3.py  |  9 ++--
 .../AlignFT_VP_combined_data_velo_only.py     |  9 ++--
 .../python/Humboldt/AlignmentScenarios.py     | 10 ++--
 .../python/Humboldt/ParticleSelections.py     | 27 ++++++-----
 .../python/Humboldt/alignment_tracking.py     | 46 ++++++++++---------
 Alignment/Humboldt/python/Humboldt/utils.py   |  2 +-
 .../python/TAlignment/Alignables.py           |  9 ++--
 .../python/TAlignment/SurveyConstraints.py    |  8 ++--
 .../src/AlignChisqConstraintTool.cpp          |  8 ++--
 12 files changed, 90 insertions(+), 71 deletions(-)

diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
index cdcea16b4..0256a6d67 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
@@ -24,7 +24,7 @@ from RecoConf.hlt2_tracking import (
     get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
 from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
 from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    make_VeloClusterTrackingSIMD, make_RetinaClusters,
     get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
     make_PatPV3DFuture_pvs)
 
@@ -39,11 +39,11 @@ from Humboldt.options import usePrKalman
 
 options.input_type = 'MDF'
 options.input_raw_format = 0.5
-options.simulation = False # in DD4Hep is False the correct option
+options.simulation = False  # in DD4Hep is False the correct option
 options.data_type = 'Upgrade'
 
 # set DDDB and CondDB info
-options.geometry_version = "trunk" # run3/trunk
+options.geometry_version = "trunk"  # run3/trunk
 #CONDDBTag = "master"
 CONDDBTag = "nibreer_giulia_mass_conds"
 options.conditions_version = CONDDBTag
@@ -79,7 +79,8 @@ from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
 from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment
 config = configureGlobalAlignment(halfdofs="TxTyTzRy")
 
-alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf(
+)
 #alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
 
 filter_pvs = []
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py
index b6557b30c..375375a5a 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py
@@ -24,7 +24,7 @@ from RecoConf.hlt2_tracking import (
     get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
 from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
 from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    make_VeloClusterTrackingSIMD, make_RetinaClusters,
     get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
     make_PatPV3DFuture_pvs)
 
@@ -39,12 +39,12 @@ from Humboldt.options import usePrKalman
 
 options.input_type = 'MDF'
 options.input_raw_format = 0.5
-options.simulation = False # in DD4Hep is False the correct option
+options.simulation = False  # in DD4Hep is False the correct option
 options.data_type = 'Upgrade'
 from PyConf.application import metainfo_repos, retrieve_encoding_dictionary
 
 # set DDDB and CondDB info
-options.geometry_version = "trunk" # run3/trunk
+options.geometry_version = "trunk"  # run3/trunk
 #CONDDBTag = "nibreer_giulia_mass_conds" # Giulia's geometry changes, some by hand
 #CONDDBTag = "nibreer_globalAlignmentConf" # all 0 starting conditions
 CONDDBTag = "nibreer_all0_conds"
@@ -74,11 +74,11 @@ options.scheduler_legacy_mode = False
 
 # gerhard raven's option for removing the metainfo
 #def require_keys_in_cvmfs( keys ) :
-    #  no lock file required, as the the /cvmfs repo is read-only
-    #  (modulo syncs of /cvmfs itself, which are assumed to be atomic)
+#  no lock file required, as the the /cvmfs repo is read-only
+#  (modulo syncs of /cvmfs itself, which are assumed to be atomic)
 #    awol = list( filter( k : not _retrieve_from_repos( k, ( ( FILE_CONTENT_METADATA, 'master' ) ) , keys )
 #    if len(awol) :
-#        raise ConfigurationError( 'key(s) {} not in /cvmfs -- some more instructions go here'.format(''.join( '{:08x}'.format(k)  for k in awol ) )                         
+#        raise ConfigurationError( 'key(s) {} not in /cvmfs -- some more instructions go here'.format(''.join( '{:08x}'.format(k)  for k in awol ) )
 
 #if options.require_keys_in_cvmfs :
 #    require_keys_in_cvmfs(  key_registry.keys() )
@@ -94,7 +94,8 @@ from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPH
 config = configureGlobalAlignment_VELO_Rx_V1_1(halfdofs="TxTyTz")
 
 #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf(
+)
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py
index 43c401dfa..dc642d247 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py
@@ -24,7 +24,7 @@ from RecoConf.hlt2_tracking import (
     get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
 from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
 from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    make_VeloClusterTrackingSIMD, make_RetinaClusters,
     get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
     make_PatPV3DFuture_pvs)
 
@@ -39,11 +39,11 @@ from Humboldt.options import usePrKalman
 
 options.input_type = 'MDF'
 options.input_raw_format = 0.5
-options.simulation = False # in DD4Hep is False the correct option
+options.simulation = False  # in DD4Hep is False the correct option
 options.data_type = 'Upgrade'
 
 # set DDDB and CondDB info
-options.geometry_version = "trunk" # run3/trunk
+options.geometry_version = "trunk"  # run3/trunk
 #CONDDBTag = "nibreer_giulia_mass_conds"
 CONDDBTag = "nibreer_all0_conds"
 options.conditions_version = CONDDBTag
@@ -81,7 +81,8 @@ from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPH
 config = configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz")
 
 #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf(
+)
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py
index e7bd93cf6..f18d14317 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py
@@ -24,7 +24,7 @@ from RecoConf.hlt2_tracking import (
     get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
 from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
 from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    make_VeloClusterTrackingSIMD, make_RetinaClusters,
     get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
     make_PatPV3DFuture_pvs)
 
@@ -39,11 +39,11 @@ from Humboldt.options import usePrKalman
 
 options.input_type = 'MDF'
 options.input_raw_format = 0.5
-options.simulation = False # in DD4Hep is False the correct option
+options.simulation = False  # in DD4Hep is False the correct option
 options.data_type = 'Upgrade'
 
 # set DDDB and CondDB info
-options.geometry_version = "trunk" # run3/trunk
+options.geometry_version = "trunk"  # run3/trunk
 #CONDDBTag = "nibreer_giulia_mass_conds"
 CONDDBTag = "nibreer_all0_conds"
 options.conditions_version = CONDDBTag
@@ -81,7 +81,8 @@ from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPH
 config = configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz")
 
 #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf(
+)
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py
index 72067b352..f22a59253 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_velo_only.py
@@ -24,7 +24,7 @@ from RecoConf.hlt2_tracking import (
     get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
 from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
 from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD,     make_RetinaClusters,
+    make_VeloClusterTrackingSIMD, make_RetinaClusters,
     get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
     make_PatPV3DFuture_pvs)
 
@@ -39,11 +39,11 @@ from Humboldt.options import usePrKalman
 
 options.input_type = 'MDF'
 options.input_raw_format = 0.5
-options.simulation = False # in DD4Hep is False the correct option
+options.simulation = False  # in DD4Hep is False the correct option
 options.data_type = 'Upgrade'
 
 # set DDDB and CondDB info
-options.geometry_version = "trunk" # run3/trunk
+options.geometry_version = "trunk"  # run3/trunk
 #CONDDBTag = "master"
 CONDDBTag = "nibreer_giulia_mass_conds"
 options.conditions_version = CONDDBTag
@@ -80,7 +80,8 @@ from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPH
 config = configureVPHalfAlignment(halfdofs="TxTyTz")
 
 #alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf(
+)
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
index aaf87ed6c..072e5f295 100644
--- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
+++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
@@ -38,6 +38,7 @@ class AlignmentScenario():
         #self.SurveyConstraints = surveyconstraints
         #self.SubDetectors = subdetectors
 
+
 def configureGlobalAlignment(halfdofs="TxTyTzRy"):
     setup = AlignmentScenario('GlobalAlignment')
     setup.SubDetectors += ['VP', 'FT']
@@ -51,7 +52,7 @@ def configureGlobalAlignment(halfdofs="TxTyTzRy"):
 
     surveyconstraints = SurveyConstraints()
     if UseDD4Hep:
-       	surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.VP(ver='2023_dd4hep')
         surveyconstraints.FT(addHalfModuleJoints=True)
     else:
         surveyconstraints.VP(ver='latest')
@@ -64,6 +65,7 @@ def configureGlobalAlignment(halfdofs="TxTyTzRy"):
 
     return setup
 
+
 def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"):
     setup = AlignmentScenario('GlobalAlignment_v2_2')
     setup.SubDetectors += ['VP', 'FT']
@@ -92,6 +94,7 @@ def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"):
 
     return setup
 
+
 def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"):
     setup = AlignmentScenario('GlobalAlignment_v2_3')
     setup.SubDetectors += ['VP', 'FT']
@@ -120,6 +123,7 @@ def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"):
 
     return setup
 
+
 def configureRun3Alignment(fixQOverPBias=True):
     # just a first implementation to test some essential things
 
@@ -140,8 +144,8 @@ def configureRun3Alignment(fixQOverPBias=True):
     # add some survey constraints (just fixing to nominal, right now)
     surveyconstraints = SurveyConstraints()
     if UseDD4Hep:
-       	surveyconstraints.VP(ver='2023_dd4hep')
-       	surveyconstraints.FT(ver='data20221115dd4hep')
+        surveyconstraints.VP(ver='2023_dd4hep')
+        surveyconstraints.FT(ver='data20221115dd4hep')
     else:
         surveyconstraints.VP(ver='latest')
         surveyconstraints.FT(ver='MC')
diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
index 300a5b545..17eb7995f 100644
--- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
+++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
@@ -54,18 +54,19 @@ def defaultHLTD0Selection(vertices_v2):
         F.MAXDOCACUT(0.1 * mm),
     )
 
-    vertex_code = F.require_all(F.CHI2DOF < 10.,
-                                #in_range(1845 * MeV, F.MASS, 1885 * MeV),
-                                in_range(1760 * MeV, F.MASS, 1960 * MeV),
-                                F.END_VZ > -341. * mm,
-                                F.BPVLTIME(vertices_v2) > 0.450 * ps,
-                                F.END_VX < 4 * mm,
-                                F.END_VY < 4 * mm )
-
-#    vertex_code = F.require_all(F.CHI2DOF < 10.,
-#                                F.BPVETA(vertices_v2) > 2,
-#                                F.BPVETA(vertices_v2) < 5
-#    )
+    vertex_code = F.require_all(
+        F.CHI2DOF < 10.,
+        #in_range(1845 * MeV, F.MASS, 1885 * MeV),
+        in_range(1760 * MeV, F.MASS, 1960 * MeV),
+        F.END_VZ > -341. * mm,
+        F.BPVLTIME(vertices_v2) > 0.450 * ps,
+        F.END_VX < 4 * mm,
+        F.END_VY < 4 * mm)
+
+    #    vertex_code = F.require_all(F.CHI2DOF < 10.,
+    #                                F.BPVETA(vertices_v2) > 2,
+    #                                F.BPVETA(vertices_v2) < 5
+    #    )
 
     combinedD0 = ParticleCombiner(
         [pions, kaons],
@@ -122,6 +123,7 @@ def defaultDetatchedJpsi(vertices_v2):
 
     return detatchedJpsi
 
+
 def defaultHLT1D0Selection(vertices_v2):
     #TODO: get particles from HLT SelReports instead of rebuilding
     # NOTE: selections match those in HLT1D2KPi
@@ -167,6 +169,7 @@ def defaultHLT1D0Selection(vertices_v2):
     )
     return combinedD0
 
+
 def defaultHLTZ(vertices_v2):
     #TODO: get particles from HLT SelReports instead of rebuilding
     # NOTE: selections match those in HLT... etc
diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
index a69c03249..b2fab3477 100644
--- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
+++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
@@ -219,10 +219,11 @@ def monitor_SciFi_tracks(track_group,
 
     return monitorlist
 
+
 def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True,
-                                         MaxOutlierIterations=2,
-                                         MaxChi2Dof=5,
-                                         MinNVeloLayers=4):
+                                              MaxOutlierIterations=2,
+                                              MaxChi2Dof=5,
+                                              MinNVeloLayers=4):
     with reconstruction.bind(from_file=False),\
      PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\
      make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\
@@ -249,7 +250,8 @@ def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True,
             MinNumVPHitsForOutlierRemoval=4,
             ReferenceExtrapolator=TrackLinearExtrapolator(),
             InputUniqueIDGenerator=make_unique_id_generator())
-        fitted_velo_bwd = kf_template(name="PrKalmanFilter_VeloBwd",
+        fitted_velo_bwd = kf_template(
+            name="PrKalmanFilter_VeloBwd",
             Input=backward_velo_tracks).OutputTracks
 
         selected_bwd_tracks = VPBackwardTracks(
@@ -262,7 +264,7 @@ def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True,
         odin = make_odin()
 
         from Humboldt.ParticleSelections import defaultHLT1D0Selection, defaultHLTD0Selection
-#        particles = defaultHLT1D0Selection(particlepvs)
+        #        particles = defaultHLT1D0Selection(particlepvs)
         particles = defaultHLTD0Selection(particlepvs)
 
         from PyConf.Tools import TrackSelector
@@ -274,11 +276,12 @@ def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True,
         track_name = "AlignGoodLongTracks"
 
         alignmentTracks = TrackSelectionMerger(
-            InputLocations=[selected_bwd_tracks, selected_tracks]).OutputLocation
+            InputLocations=[selected_bwd_tracks, selected_tracks
+                            ]).OutputLocation
 
         selected_pvs = VPPrimaryVertices(pvs)
 
-        from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor
+        from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor  #ParticleMassMonitor
         from GaudiKernel.SystemOfUnits import MeV
 
         monitorlist = []
@@ -304,6 +307,7 @@ def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True,
         # return alignmentTracks, selected_pvs, particles, odin, monitorlist
         return alignmentTracks, selected_pvs, odin, monitorlist
 
+
 def make_scifi_tracks_and_particles_prkf():
     with reconstruction.bind(from_file=False),\
      PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\
@@ -336,23 +340,23 @@ def make_scifi_tracks_and_particles_prkf():
             InputLocations=[selected_tracks]).OutputLocation
         selected_pvs = VPPrimaryVertices(pvs)
 
-        from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor
+        from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor  #ParticleMassMonitor
         from GaudiKernel.SystemOfUnits import MeV
 
         monitorlist = []
-#        myFTTrackMonitor = FTTrackMonitor_PrKalman(
-#            name="AlignMoni_FTTrackMonitor_PrKalman",
-#            TracksInContainer=alignmentTracks)
-#        myTrackVertexMonitor = TrackVertexMonitor(
-#            name="AlignMoni_FT_TrackVertexMonitor",
-#            TrackContainer=alignmentTracks,
-#            PVContainer=pvs)
-#        monitorlist.append(myFTTrackMonitor)
-#        monitorlist.append(myTrackVertexMonitor)
-#        monitorlist = [
-#            myFTTrackMonitor,
-#            myTrackVertexMonitor,
-#        ]
+        #        myFTTrackMonitor = FTTrackMonitor_PrKalman(
+        #            name="AlignMoni_FTTrackMonitor_PrKalman",
+        #            TracksInContainer=alignmentTracks)
+        #        myTrackVertexMonitor = TrackVertexMonitor(
+        #            name="AlignMoni_FT_TrackVertexMonitor",
+        #            TrackContainer=alignmentTracks,
+        #            PVContainer=pvs)
+        #        monitorlist.append(myFTTrackMonitor)
+        #        monitorlist.append(myTrackVertexMonitor)
+        #        monitorlist = [
+        #            myFTTrackMonitor,
+        #            myTrackVertexMonitor,
+        #        ]
         # ParticleMassMonitor
 
         monitorlist = monitorlist + monitor_SciFi_tracks(
diff --git a/Alignment/Humboldt/python/Humboldt/utils.py b/Alignment/Humboldt/python/Humboldt/utils.py
index cdbb3ce90..44c4899b5 100644
--- a/Alignment/Humboldt/python/Humboldt/utils.py
+++ b/Alignment/Humboldt/python/Humboldt/utils.py
@@ -178,7 +178,7 @@ def runAlignment(options,
 
     top_node = CompositeNode(
         "filterNode",
-#        filters + [alignment_node] + [require_pvs(alignmentPVs)],
+        #        filters + [alignment_node] + [require_pvs(alignmentPVs)],
         filters + [alignment_node],
         combine_logic=NodeLogic.LAZY_AND,
         force_order=True)
diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py
index a489b3895..0c0f22d34 100755
--- a/Alignment/TAlignment/python/TAlignment/Alignables.py
+++ b/Alignment/TAlignment/python/TAlignment/Alignables.py
@@ -294,7 +294,8 @@ class Alignables(list):
     _FTStations = ["/T1", "/T2", "/T3"]
     _FTLayers = ["/LayerX1", "/LayerU", "/LayerV", "/LayerX2"
                  ] if not UseDD4Hep else ["/X1", "/U", "/V", "/X2"]
-    _FTOuterLayers = ["/LayerX1", "/LayerX2"] if not UseDD4Hep else ["X1", "X2"]
+    _FTOuterLayers = ["/LayerX1", "/LayerX2"
+                      ] if not UseDD4Hep else ["X1", "X2"]
     _FTRealQuarters = [
         "/Quarter0", "/Quarter2", "/Quarter1", "/Quarter3"
     ] if not UseDD4Hep else ["/HL0/Q0", "/HL0/Q2", "/HL1/Q1", "/HL1/Q3"]
@@ -415,8 +416,8 @@ class Alignables(list):
 
     def FTHalfModuleJoints(self,
                            errors="0.01 0.0012 0.0019 0.0004 0.0002 0.00017"):
-#                           errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"):
-#                           errors="0.001 0.001 0.002 0.0004 0.0002 0.0002"):
+        #                           errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"):
+        #                           errors="0.001 0.001 0.002 0.0004 0.0002 0.0002"):
         joints = []
         for station in self._FTStations:
             for layer in self._FTLayers:
@@ -431,6 +432,8 @@ class Alignables(list):
                         modbot = 'FT' + station + layer + Qbot + module
                         joints.append(" : ".join(
                             [modtop, modbot, errors, "0 -1212.75 0"]))
+
+
 #        print(joints)
         return joints
 
diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
index 822fab54d..f508057e3 100644
--- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
+++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
@@ -186,16 +186,16 @@ class SurveyConstraints(LHCbConfigurableUser):
         else:
             if UseDD4Hep:
                 print('small Rx uncertainty + dd4hep')
-#                self.XmlUncertainties += [
-#                    "FT/.*/M. : 0.5 0.5 0.5 0.00000002 0.0008 0.0002",
-#                ]
+                #                self.XmlUncertainties += [
+                #                    "FT/.*/M. : 0.5 0.5 0.5 0.00000002 0.0008 0.0002",
+                #                ]
                 self.XmlUncertainties += [
                     "FT/.*/M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002",
                 ]
                 # maybe remove this bottom constraint
                 self.Constraints += [
                     "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
-                    "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0" # added this for 01-26
+                    "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"  # added this for 01-26
                 ]
             else:
                 print('test: no data in ver, but no DD4hep')
diff --git a/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp b/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp
index 1ac91a024..73ed08d23 100644
--- a/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp
+++ b/Alignment/TAlignment/src/AlignChisqConstraintTool.cpp
@@ -575,7 +575,7 @@ namespace LHCb::Alignment {
                                                               std::ostream& logmessage ) const {
     size_t totalnumconstraints( 0 );
     double totalchisq( 0 );
-    double totalchi2_by_parameter[6] = {0,0,0,0,0,0};
+    double totalchi2_by_parameter[6] = {0, 0, 0, 0, 0, 0};
 
     for ( const auto& configuredjoint : m_joints ) {
       // first decode (this could go elsewhere)
@@ -648,9 +648,9 @@ namespace LHCb::Alignment {
           debug() << "Joint residual: " << residual << endmsg;
           AlParameters::TransformCovariance W;
 
-          for(int i = 0; i < 6; ++i) {
-            W(i,i) = 1 / ( errors[i] * errors[i] );
-            totalchi2_by_parameter[i] += residual(i) * residual(i) * W(i,i);
+          for ( int i = 0; i < 6; ++i ) {
+            W( i, i ) = 1 / ( errors[i] * errors[i] );
+            totalchi2_by_parameter[i] += residual( i ) * residual( i ) * W( i, i );
           }
 
           for ( int i = 0; i < 6; ++i ) W( i, i ) = 1 / ( errors[i] * errors[i] );
-- 
GitLab


From 12697afab5510a494e66adb21c51a2dfe33b6d99 Mon Sep 17 00:00:00 2001
From: Nils Breer <nils.breer@cern.ch>
Date: Thu, 4 Apr 2024 11:53:34 +0200
Subject: [PATCH 08/12] adapted optionsfiles, removed savefiles, updated
 SurveyConstraints and AlignmentScenarios

---
 .../options/AlignFT_VP_combined_data_v1_1.py  | 122 -----
 .../options/AlignFT_VP_combined_data_v1_2.py  |   1 -
 .../python/Humboldt/AlignmentScenarios.py     |   8 +-
 .../python/Humboldt/ParticleSelections.py     |  26 +-
 .../Humboldt/alignment_tracking.py.save       | 290 ----------
 Alignment/Humboldt/python/Humboldt/utils.py   |   4 +-
 .../python/TAlignment/Alignables.py.save      | 497 ------------------
 .../python/TAlignment/SurveyConstraints.py    |  14 +-
 8 files changed, 30 insertions(+), 932 deletions(-)
 delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py
 delete mode 100644 Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save
 delete mode 100755 Alignment/TAlignment/python/TAlignment/Alignables.py.save

diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py
deleted file mode 100644
index 375375a5a..000000000
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_1.py
+++ /dev/null
@@ -1,122 +0,0 @@
-###############################################################################
-# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-"""
-Configuration file to test running on data.
-"""
-
-from Moore import options, run_moore
-from RecoConf.reconstruction_objects import reconstruction
-from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
-from Hlt2Conf.lines import all_lines
-import os
-import re
-from RecoConf.hlt2_tracking import (
-    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
-    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
-    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
-from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
-from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD, make_RetinaClusters,
-    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
-    make_PatPV3DFuture_pvs)
-
-from RecoConf.hlt1_muonid import make_muon_hits
-from RecoConf.calorimeter_reconstruction import make_digits, make_calo
-from PyConf.application import configure_input
-from PRConfig.FilesFromDirac import get_access_urls
-from DDDB.CheckDD4Hep import UseDD4Hep
-from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
-from RecoConf.event_filters import require_pvs
-from Humboldt.options import usePrKalman
-
-options.input_type = 'MDF'
-options.input_raw_format = 0.5
-options.simulation = False  # in DD4Hep is False the correct option
-options.data_type = 'Upgrade'
-from PyConf.application import metainfo_repos, retrieve_encoding_dictionary
-
-# set DDDB and CondDB info
-options.geometry_version = "trunk"  # run3/trunk
-#CONDDBTag = "nibreer_giulia_mass_conds" # Giulia's geometry changes, some by hand
-#CONDDBTag = "nibreer_globalAlignmentConf" # all 0 starting conditions
-CONDDBTag = "nibreer_all0_conds"
-options.conditions_version = CONDDBTag
-
-online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database'
-if os.path.exists(online_cond_path):
-    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
-
-from glob import glob
-from Gaudi.Configuration import *
-from GaudiConf import IOHelper
-
-# run 269045
-files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
-options.input_files = files[0:4000]
-
-options.event_store = 'EvtStoreSvc'
-options.histo_file = "GoodLongTracks_histo.root"
-#options.ntuple_file = "GoodLongTracks_tuple.root"
-options.use_iosvc = True  # True for data, False for MC
-# multithreading not working while creating tuples
-options.n_threads = 35
-options.evt_max = -1
-
-options.scheduler_legacy_mode = False
-
-# gerhard raven's option for removing the metainfo
-#def require_keys_in_cvmfs( keys ) :
-#  no lock file required, as the the /cvmfs repo is read-only
-#  (modulo syncs of /cvmfs itself, which are assumed to be atomic)
-#    awol = list( filter( k : not _retrieve_from_repos( k, ( ( FILE_CONTENT_METADATA, 'master' ) ) , keys )
-#    if len(awol) :
-#        raise ConfigurationError( 'key(s) {} not in /cvmfs -- some more instructions go here'.format(''.join( '{:08x}'.format(k)  for k in awol ) )
-
-#if options.require_keys_in_cvmfs :
-#    require_keys_in_cvmfs(  key_registry.keys() )
-
-configure_input(options)
-
-from Humboldt.utils import runAlignment
-from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
-from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf
-from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
-
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_1
-config = configureGlobalAlignment_VELO_Rx_V1_1(halfdofs="TxTyTz")
-
-#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf(
-)
-
-filter_pvs = []
-filter_pvs.append(require_pvs(alignmentPVs))
-
-# add survey constraints
-from Configurables import SurveyConstraints
-from PyConf.Tools import AlignChisqConstraintTool
-from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
-
-with createAlignAlgorithm.bind(
-        outputDataFile="humb-vp-ft-halves-modules",
-        updateInFinalize=False,
-        onlineMode=False):
-    runAlignment(
-        options,
-        surveyConstraints=config.SurveyConstraints,
-        lagrangeConstraints=config.LagrangeConstraints,
-        alignmentTracks=alignmentTracks,
-        elementsToAlign=config.Elements,
-        filters=filter_pvs,
-        odin=odin,
-        monitorList=monitors,
-        alignmentPVs=alignmentPVs,
-        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py
index dc642d247..8e2ac2475 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py
@@ -44,7 +44,6 @@ options.data_type = 'Upgrade'
 
 # set DDDB and CondDB info
 options.geometry_version = "trunk"  # run3/trunk
-#CONDDBTag = "nibreer_giulia_mass_conds"
 CONDDBTag = "nibreer_all0_conds"
 options.conditions_version = CONDDBTag
 
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
index 25314c32c..330c7ffba 100644
--- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
+++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
@@ -67,7 +67,7 @@ def configureGlobalAlignment(halfdofs="TxTyTzRy"):
 
 
 def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment_v2_2')
+    setup = AlignmentScenario('GlobalAlignment_v1_2')
     setup.SubDetectors += ['VP', 'FT']
 
     elements = Alignables()
@@ -89,14 +89,14 @@ def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"):
 
     constraints = []
     constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz : total")
     setup.LagrangeConstraints = constraints
 
     return setup
 
 
 def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment_v2_3')
+    setup = AlignmentScenario('GlobalAlignment_v1_3')
     setup.SubDetectors += ['VP', 'FT']
 
     elements = Alignables()
@@ -118,7 +118,7 @@ def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"):
 
     constraints = []
     constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
+    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz : total")
     setup.LagrangeConstraints = constraints
 
     return setup
diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
index 9f915f589..577ae6ed9 100644
--- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
+++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
@@ -29,14 +29,14 @@ def defaultHLT1D0Selection(vertices_v2,
     loosepions = make_has_rich_long_pions()
     loosekaons = make_has_rich_long_kaons()
 
-    ptmin = 1000 * MeV
-    minIP = 0.07 * mm
+    ptmin = 800 * MeV
+    minIP = 0.06 * mm
     pmin = 3000 * MeV
 
     pions = ParticleFilter(
         loosepions,
         F.FILTER(
-            F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K < 0.,
+            F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K < 5.,
                           F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2))))
 
     kaons = ParticleFilter(
@@ -49,20 +49,22 @@ def defaultHLT1D0Selection(vertices_v2,
 
     combination_code = F.require_all(
         in_range(1760 * MeV, F.MASS, 1960 * MeV),
-        F.SUM(F.PT) > 2000 * MeV,
+        F.MAX(F>PT) > 1200 * MeV,
+        F.PT > 2000 * MeV,
         F.MAXDOCACUT(0.1 * mm),
     )
-    vertex_code = F.require_all(F.CHI2DOF < 10.,
-                                F.BPVETA(vertices_v2) > 2,
-                                F.BPVETA(vertices_v2) < 5,
-                                in_range(mass_min, F.MASS, mass_max),
-                                F.END_VZ > -341. * mm,
-                                F.BPVLTIME(vertices_v2) > 0.450 * ps,
-                                F.BPVDIRA(vertices_v2) > 0.999)
+
+    vertex_code = F.require_all(
+        F.CHI2DOF < 10.,
+        in_range(1760 * MeV, F.MASS, 1960 * MeV),
+        F.END_VZ > -341. * mm,
+        F.BPVLTIME(vertices_v2) > 0.450 * ps,
+        F.END_VX < 4 * mm,
+        F.END_VY < 4 * mm)
 
     combinedD0 = ParticleCombiner(
         [pions, kaons],
-        name="AlignHLTD0_{hash}",
+        name="AlignHLTD0",
         DecayDescriptor="[D0 -> pi+ K-]cc",
         CombinationCut=combination_code,
         CompositeCut=vertex_code,
diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save
deleted file mode 100644
index fd05878a6..000000000
--- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py.save
+++ /dev/null
@@ -1,290 +0,0 @@
-###############################################################################
-# (c) Copyright 2021 CERN for the benefit of the LHCb Collaboration           #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-from functools import partial
-from RecoConf.hlt1_tracking import (
-    all_velo_track_types,
-    make_VeloClusterTrackingSIMD_hits,
-    make_VeloClusterTrackingSIMD,
-    make_RetinaClusters,
-    get_global_measurement_provider,
-    make_velo_full_clusters,
-    make_reco_pvs,
-    make_PatPV3DFuture_pvs,
-)
-from RecoConf.hlt1_muonid import make_muon_hits
-from RecoConf.reconstruction_objects import reconstruction
-from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT
-
-from PyConf.Algorithms import (
-    PrKalmanFilter_Velo,
-    TrackSelectionMerger,
-    TrackListRefiner,
-    VeloClusterTrackingSIMDFull,
-    PatPVLeftRightFinderMerger,
-    VeloRetinaClusterTrackingSIMDFull,
-    PrKalmanFilter_noUT,
-    PrStoreUTHitEmptyProducer,
-    VPRetinaFullClusterDecoder,
-    VeloRetinaClusterTrackingSIMD,
-    TrackMonitor_PrKalman,
-    TrackFitMatchMonitor_PrKalman,
-    FTTrackMonitor_PrKalman,
-    TrackVertexMonitor,
-    TrackParticleMonitor,
-    ParticleMassMonitor,
-)
-from PyConf.Algorithms import Deprecated__TrackListRefiner as TrackListRefiner
-
-from PyConf.Tools import TrackLinearExtrapolator
-from RecoConf.core_algorithms import make_unique_id_generator
-from Humboldt.TrackSelections import VPBackwardTracks, VPGoodTracks, GoodLongTracks
-from Humboldt.VertexSelections import VPPrimaryVertices
-from Humboldt.ParticleSelections import defaultHLTD0Selection
-
-from GaudiKernel.SystemOfUnits import MeV
-from PyConf.Tools import TrackSelector, FTTrackSelector
-
-
-def make_pvs(inputtracks):
-    return PatPVLeftRightFinderMerger(InputTracks=inputtracks).OutputVertices
-
-
-def make_empty_ut_hit_for_meas_provider():
-    """Creates an empty container of UT hits, used for the no UT scenario.
-    Necessary to run with DD4hep while Ut is not there yet. Could be moved to Moore
-
-    Returns:
-            DataHandle: PrStoreUTHitEmptyProducer' Output.
-
-    """
-    return PrStoreUTHitEmptyProducer().Output
-
-
-def make_fitted_velotracks(usePrKalman=True,
-                           MaxOutlierIterations=2,
-                           MaxChi2Dof=5,
-                           MinNVeloLayers=4):
-    with make_VeloClusterTrackingSIMD.bind(
-            algorithm=VeloRetinaClusterTrackingSIMDFull):
-        vp_hits = make_VeloClusterTrackingSIMD_hits()
-        velo_tracks = all_velo_track_types()
-    backward_velo_tracks = velo_tracks["Pr::backward"]
-    forward_velo_tracks = velo_tracks["Pr"]
-
-    if usePrKalman:
-        kf_template = partial(
-            PrKalmanFilter_Velo,
-            MaxOutlierIterations=MaxOutlierIterations,
-            HitsVP=vp_hits,
-            FillFitResult=True,
-            ClassicSmoothing=True,
-            MinNumVPHitsForOutlierRemoval=4,
-            ReferenceExtrapolator=TrackLinearExtrapolator(),
-            InputUniqueIDGenerator=make_unique_id_generator())
-
-        fitted_velo_bwd = kf_template(
-            name="PrKalmanFilter_VeloBwd",
-            Input=backward_velo_tracks).OutputTracks
-        fitted_velo_fwd = kf_template(
-            name="PrKalmanFilter_VeloFwd",
-            Input=forward_velo_tracks).OutputTracks
-
-        selected_bwd_tracks = VPBackwardTracks(
-            fitted_velo_bwd,
-            MaxChi2Cut=MaxChi2Dof,
-            MinNVeloLayers=MinNVeloLayers)
-        selected_fwd_tracks = VPGoodTracks(
-            fitted_velo_fwd,
-            MaxChi2Dof=MaxChi2Dof,
-            MinNVeloLayers=MinNVeloLayers)
-        velotracks = TrackSelectionMerger(
-            InputLocations=[selected_bwd_tracks, selected_fwd_tracks
-                            ]).OutputLocation
-    else:
-        from PyConf.Algorithms import TrackEventFitter
-        from PyConf.Tools import (
-            TrackMasterFitter,
-            TrackSimpleExtraSelector,
-            TrackMasterExtrapolator,
-        )
-        measprovider = get_global_measurement_provider(
-            ignoreUT=True,
-            ignoreFT=True,
-            ignoreMuon=True,
-            velo_hits=make_RetinaClusters,
-            ut_hits=make_empty_ut_hit_for_meas_provider)
-        #materiallocator = SimplifiedMaterialLocator() this will not work with dd4hep
-        extrapolatorselector = TrackSimpleExtraSelector(
-            ExtrapolatorName="TrackLinearExtrapolator")
-        masterextrapolator = TrackMasterExtrapolator(
-            ExtraSelector=extrapolatorselector,
-            ApplyEnergyLossCorr=False,
-            ApplyElectronEnergyLossCorr=False)
-        trackfitter = TrackMasterFitter(
-            MeasProvider=measprovider,
-            Extrapolator=masterextrapolator,
-            MaxUpdateTransports=1,
-            MinNumVPHitsForOutlierRemoval=4,
-            MaxNumberOutliers=MaxOutlierIterations,
-            MakeMeasurements=True,
-            MakeNodes=True,  # need to force a refit
-            FastMaterialApproximation=True)
-        veloonlyfitter = TrackEventFitter(
-            TracksInContainer=velo_tracks["v1"], Fitter=trackfitter)
-        velotracks = VPGoodTracks(
-            veloonlyfitter.TracksOutContainer,
-            MaxChi2Dof=MaxChi2Dof,
-            MinNVeloLayers=MinNVeloLayers)
-
-    return velotracks
-
-
-def make_align_vp_input(usePrKalman=True,
-                        MaxOutlierIterations=2,
-                        MaxChi2Dof=5,
-                        MinNVeloLayers=4):
-
-    align_tracks = make_fitted_velotracks(
-        usePrKalman=usePrKalman,
-        MaxOutlierIterations=MaxOutlierIterations,
-        MaxChi2Dof=MaxChi2Dof,
-        MinNVeloLayers=MinNVeloLayers)
-    align_pvs = make_pvs(align_tracks)
-    return align_tracks, align_pvs
-
-
-def make_align_input_besttracks(usePrKalman=True):
-    # it seems that we have little choice but just to set up the entire reco sequence ourselves. the moore stuff is close to impossible to work with.
-    # note that the PVs reconstructed by TrackBeamLineVertexFinderSoA do not store the list of associated tracks. Use PatPV3DFuture instead
-    from RecoConf.hlt2_tracking import make_hlt2_tracks_without_UT
-    with make_VeloClusterTrackingSIMD.bind(algorithm=VeloClusterTrackingSIMDFull),\
-        PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True):
-        hlt2_tracks = make_hlt2_tracks_without_UT(use_pr_kf=usePrKalman)
-
-    # this is a bit funny, but we need fitted velo tracks. so we filter from the best track container what we need, then add our own fitted velo tracks
-    from Humboldt.TrackSelections import GoodLongTracks
-    goodlongtracks = GoodLongTracks(hlt2_tracks['BestLong']['v1'])
-    goodvelotracks = make_fitted_velotracks(usePrKalman=usePrKalman)
-    # combine using AlignTrackCloneRemover
-    from PyConf.Algorithms import AlignTrackCloneRemover
-    goodfittedtracks = AlignTrackCloneRemover(
-        name="AlignBestCloneRemover",
-        InputLocations=[goodlongtracks, goodvelotracks]).OutputLocation
-
-    # now make the PVs with these tracks
-    pvs = make_pvs(goodfittedtracks)
-
-    return goodfittedtracks, pvs
-
-
-def monitor_SciFi_tracks(track_group,
-                         tracks_name,
-                         includeQuarters=False,
-                         minHits=10):
-    monitorlist = []
-    myFTTrackMonitor = FTTrackMonitor_PrKalman(
-        name="FTTrackMonitor_" + tracks_name,
-        TracksInContainer=track_group,
-        VerboseMode=True)
-    monitorlist.append(myFTTrackMonitor)
-    myTrackMonitor = TrackMonitor_PrKalman(
-        name="TrackMonitor_" + tracks_name, TracksInContainer=track_group)
-    monitorlist.append(myTrackMonitor)
-
-    if includeQuarters:
-        Q0Selector = FTTrackSelector(
-            MinHitsCSide=minHits, MinHitsBottomHalf=minHits)
-        Q1Selector = FTTrackSelector(
-            MinHitsASide=minHits, MinHitsBottomHalf=minHits)
-        Q2Selector = FTTrackSelector(
-            MinHitsCSide=minHits, MinHitsTopHalf=minHits)
-        Q3Selector = FTTrackSelector(
-            MinHitsASide=minHits, MinHitsTopHalf=minHits)
-
-        for selector, quartername in zip(
-            [Q0Selector, Q1Selector, Q2Selector, Q3Selector],
-            ["_Q0", "_Q1", "_Q2", "_Q3"]):
-            selected_tracks = TrackListRefiner(
-                inputLocation=track_group, Selector=selector).outputLocation
-            monitorlist = monitorlist + monitor_SciFi_tracks(
-                selected_tracks, tracks_name + quartername)
-
-    return monitorlist
-
-
-def make_scifi_tracks_and_particles_prkf():
-    with reconstruction.bind(from_file=False),\
-     PrKalmanFilter_noUT.bind(FillFitResult=True,ClassicSmoothing=True),\
-     make_light_reco_pr_kf_without_UT.bind(skipRich=False, skipCalo=False, skipMuon=False),\
-     make_muon_hits.bind(geometry_version=3),\
-     make_velo_full_clusters.bind(make_full_cluster=VPRetinaFullClusterDecoder),\
-     make_VeloClusterTrackingSIMD.bind(algorithm=VeloRetinaClusterTrackingSIMD),\
-     make_reco_pvs.bind(make_pvs_from_velo_tracks=make_PatPV3DFuture_pvs),\
-     get_global_measurement_provider.bind(velo_hits=make_RetinaClusters),\
-     hlt2_reconstruction.bind(make_reconstruction=make_light_reco_pr_kf_without_UT):
-
-        reco = hlt2_reconstruction()
-        hlt2_tracks = reco['LongTracks']
-        best_tracks = hlt2_tracks
-        pvs = reco["PVs_v1"]
-
-        particlepvs = reco["PVs"]
-        from PyConf.application import default_raw_banks
-        from PyConf.application import make_odin
-        odin = make_odin()
-        from Humboldt.ParticleSelections import defaultHLTD0Selection
-        particles = defaultHLTD0Selection(particlepvs)
-
-        from PyConf.Tools import TrackSelector
-        from PyConf.Algorithms import VertexListRefiner, TrackSelectionMerger
-        from Humboldt.TrackSelections import GoodLongTracks
-        from Humboldt.VertexSelections import VPPrimaryVertices
-
-        selected_tracks = GoodLongTracks(best_tracks)
-        track_name = "GoodLongTracks"
-        alignmentTracks = TrackSelectionMerger(
-            InputLocations=[selected_tracks]).OutputLocation
-        selected_pvs = VPPrimaryVertices(pvs)
-        from PyConf.Algorithms import TrackMonitor_PrKalman, TrackFitMatchMonitor_PrKalman, FTTrackMonitor_PrKalman, TrackVertexMonitor, TrackParticleMonitor #ParticleMassMonitor
-        from GaudiKernel.SystemOfUnits import MeV
-        monitorlist = []
-        myFTTrackMonitor = FTTrackMonitor_PrKalman(
-            name="AlignMoni_FTTrackMonitor_PrKalman",
-            TracksInContainer=alignmentTracks)
-        myTrackVertexMonitor = TrackVertexMonitor(
-            name="AlignMoni_FT_TrackVertexMonitor",
-            TrackContainer=alignmentTracks,
-            PVContainer=pvs)
-        monitorlist.append(myFTTrackMonitor)
-        monitorlist.append(myTrackVertexMonitor)
-#        monitorlist = [
-#            myFTTrackMonitor,
-#            myTrackVertexMonitor,
-#        ]
-        # ParticleMassMonitor
-
-        monitorlist = monitorlist + monitor_SciFi_tracks(
-            alignmentTracks, track_name, includeQuarters=True)
-        monitorlist = monitorlist + monitor_SciFi_tracks(
-            best_tracks, "BestHLT2Tracks", includeQuarters=True)
-
-        ## particle mass monitor needs replacement or upgrade
-        #myParticleMonitor = ParticleMassMonitor(
-        #    name="defaultD0MassMonitor",
-        #    ParticleType="D0",
-        #    Particles=particles,
-        #    MassMean=1864.84 * MeV,
-        #    MassSigma=90 * MeV,
-        #    Bins=100)
-        #monitorlist.append(myParticleMonitor)
-
-        #return alignmentTracks, selected_pvs, particles, odin, monitorlist
-        return alignmentTracks, selected_pvs, odin, monitorlist
diff --git a/Alignment/Humboldt/python/Humboldt/utils.py b/Alignment/Humboldt/python/Humboldt/utils.py
index df508c030..c355b17f4 100644
--- a/Alignment/Humboldt/python/Humboldt/utils.py
+++ b/Alignment/Humboldt/python/Humboldt/utils.py
@@ -191,8 +191,8 @@ def runAlignment(options,
 
     top_node = CompositeNode(
         "filterNode",
-        #        filters + [alignment_node] + [require_pvs(alignmentPVs)],
-        filters + [alignment_node],
+        filters + [alignment_node] + [require_pvs(alignmentPVs)],
+#        filters + [alignment_node],
         combine_logic=NodeLogic.LAZY_AND,
         force_order=True)
 
diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py.save b/Alignment/TAlignment/python/TAlignment/Alignables.py.save
deleted file mode 100755
index b7a6f51ea..000000000
--- a/Alignment/TAlignment/python/TAlignment/Alignables.py.save
+++ /dev/null
@@ -1,497 +0,0 @@
-from __future__ import print_function
-
-###############################################################################
-# (c) Copyright 2000-2020 CERN for the benefit of the LHCb Collaboration      #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-
-from DDDB.CheckDD4Hep import UseDD4Hep
-
-
-class Alignables(list):
-    WORLD = "/dd/Structure/LHCb" if not UseDD4Hep else "/world"
-
-    def __init__(self, elements=None, dofs=""):
-        self.m_dofs = ["Tx", "Ty", "Tz", "Rx", "Ry", "Rz", "None"]
-
-        self.m_vpBase = self.WORLD + "/BeforeMagnetRegion/VP"
-        self.m_vp = self.m_vpBase
-        self.m_vpSideBase = self.m_vpBase + ("/MotionVP(Left|Right)"
-                                             if UseDD4Hep else "")
-        self.m_vpLeft = self.m_vpSideBase + "/VPLeft"
-        self.m_vpRight = self.m_vpSideBase + "/VPRight"
-        self.m_vpModules = self.m_vpSideBase + "/VP(Right|Left)/Module.{1,2}" + (
-            "WithSupport" if not UseDD4Hep else "")
-        self.m_vpModulesLeft = self.m_vpSideBase + "/VPLeft/Module.{1,2}" + (
-            "WithSupport" if not UseDD4Hep else "")
-        self.m_vpModulesRight = self.m_vpSideBase + "/VPRight/Module.{1,2}" + (
-            "WithSupport" if not UseDD4Hep else "")
-        self.m_vpSensors = self.m_vpModules + ("/Module.{1,2}/Ladder." if
-                                               not UseDD4Hep else "/ladder_.")
-
-        self.m_tt = self.WORLD + "/BeforeMagnetRegion/TT"
-        self.m_ttStations = ["TTa", "TTb"]
-        self.m_ttLayers = [
-            "TTa/TTaXLayer",
-            "TTa/TTaULayer",
-            "TTb/TTbVLayer",
-            "TTb/TTbXLayer",
-        ]
-
-        self.m_muon = self.WORLD + "/DownstreamRegion/Muon"
-        self.m_mustations = ["/M2", "/M3", "/M4", "/M5"]
-        self.m_muhalfstationsAC = ["/M.ASide", "/M.CSide"]
-        self.m_muhalfstations = ["/M.{1,2}Side"]
-        self.m_muchambers = ["/R.{1,2}Side/Cham.{1,3}"]
-
-        if elements and self.__validElements(elements):
-            self.__append(elements, dofs)
-
-    def __findDOF(self, dof, dofs):
-        valid = ""
-        if not dofs.find(dof) == -1:
-            valid = dof
-
-        return valid
-
-    def __addDoFs(self, elements, dofs):
-        valid = ""
-        invalid = dofs
-        tmp = []
-
-        for i in range(len(self.m_dofs)):
-            valid += self.__findDOF(self.m_dofs[i], invalid)
-            invalid = invalid.replace(self.m_dofs[i], "")
-        # remove eventual separators
-        import re
-        invalid = re.sub("[,:; ]", '', invalid)
-
-        if valid:
-            if isinstance(elements, list):
-                for i in range(len(elements)):
-                    tmp.append(elements[i] + ":%s" % valid)
-            elif isinstance(elements, str):
-                tmp.append(elements + ":%s" % valid)
-
-        try:  ## asserting whether invalid is not empty
-            assert (not invalid)
-        except AssertionError:
-            print("ERROR: Unknown degree of freedom(s) " + '"' + invalid + '"')
-            print(
-                "       Valid degrees of freedom are Tx, Ty, Tz, Rx, Ry and Rz"
-            )
-            return []
-
-        return tmp
-
-    def __validElements(self, elements):
-        try:
-            assert isinstance(elements, list) or isinstance(elements, str)
-        except AssertionError:
-            self.__elementsError(elements)
-            return None
-
-        ## Paranoia; extend also throws an exception
-        if isinstance(elements, str):
-            for i in range(len(elements)):
-                try:
-                    assert isinstance(elements[i], str)
-                except AssertionError:
-                    self.__elementsError(elements)
-                    return None
-        return True
-
-    def __elementsError(self, elements):
-        print("ERROR: Specify either a string representing a detector element")
-        print(
-            "       or a list of strings representing a list of detector elements"
-        )
-        print("elements = ", elements)
-
-    def __append(self, elements, dofs):
-        if dofs:
-            tmp = self.__addDoFs(elements, dofs)
-            self.extend(tmp)
-        else:
-            if isinstance(elements, list):
-                self.extend(elements)
-            elif isinstance(elements, str):
-                self.append(elements)
-            assert ValueError()
-
-    ## Some predefined alignables
-
-    ## Global ###############################################################################
-    def Tracker(self, dofs=""):
-        elements = []
-        elements.append("Tracker : " + self.m_vp)
-        elements.append("Tracker : " + self._UT)
-        elements.append("Tracker : " + self._FT)
-        #elements.append( "Tracker : " + self.m_muon )
-        self.__append(elements, dofs)
-
-    ## VP #################################################################################
-    def VP(self, dofs=""):
-        self.__append(self.m_vp, dofs)
-
-    def VPModules(self, dofs=""):
-        elements = []
-        elements.append(self.m_vpModules)
-        self.__append(elements, dofs)
-
-    def VPModulesLeft(self, dofs=""):
-        elements = []
-        elements.append(self.m_vpModulesLeft)
-        self.__append(elements, dofs)
-
-    def VPModulesRight(self, dofs=""):
-        elements = []
-        elements.append(self.m_vpModulesRight)
-        self.__append(elements, dofs)
-
-    def VPSensors(self, dofs=""):
-        elements = []
-        elements.append(self.m_vpSensors)
-        self.__append(elements, dofs)
-
-    def VPRight(self, dofs=""):
-        self.__append(self.m_vpRight, dofs)
-
-    def VPLeft(self, dofs=""):
-        self.__append(self.m_vpLeft, dofs)
-
-    ## TT #################################################################################
-    def TT(self, dofs=""):
-        self.__append(self.m_tt, dofs)
-
-    def TTLayers(self, dofs=""):
-        self.__append(self.m_tt + "/TT./.{4}Layer", dofs)
-
-    def TTHalfLayers(self, dofs=""):
-        elements = []
-        # we need to do TTa and TTb seperately since they are actually different
-        ttalayers = ['TTaXLayer', 'TTaULayer']
-        for layername in ttalayers:
-            # A-side
-            elements.append(layername + "ASide : " + self.m_tt + "/TTa/" +
-                            layername + "/R(3Module.{2}|2Module(3.|2T))")
-            # C-side
-            elements.append(layername + "CSide : " + self.m_tt + "/TTa/" +
-                            layername + "/R(1Module.{2}|2Module(1.|2B))")
-        ttblayers = ['TTbVLayer', 'TTbXLayer']
-        for layername in ttblayers:
-            # A-side
-            elements.append(layername + "ASide : " + self.m_tt + "/TTb/" +
-                            layername + "/R(3Module.{2}|2Module(3B|4.|5.))")
-            # C-side
-            elements.append(layername + "CSide : " + self.m_tt + "/TTb/" +
-                            layername + "/R(1Module.{2}|2Module(1.|2.|3T))")
-        self.__append(elements, dofs)
-
-    def TTSplitLayers(self, dofs=""):
-        elements = []
-        ttalayers = ['TTaXLayer', 'TTaULayer']
-        for layername in ttalayers:
-            elements.append(layername + "LowZ : " + self.m_tt + "/TTa/" +
-                            layername +
-                            "/R(1Module(1|3|5)|2Module(1|3)|3Module(2|4|6)).")
-            elements.append(layername + "HighZ : " + self.m_tt + "/TTa/" +
-                            layername +
-                            "/R(1Module(2|4|6)|2Module2|3Module(1|3|5)).")
-        ttblayers = ['TTbVLayer', 'TTbXLayer']
-        for layername in ttblayers:
-            elements.append(
-                layername + "LowZ : " + self.m_tt + "/TTb/" + layername +
-                "/R(1Module(1|3|5)|2Module(1|3|5)|3Module(2|4|6)).")
-            elements.append(layername + "HighZ : " + self.m_tt + "/TTb/" +
-                            layername +
-                            "/R(1Module(2|4|6)|2Module(2|4)|3Module(1|3|5)).")
-        self.__append(elements, dofs)
-
-    def TTBoxes(self, dofs=""):
-        elements = []
-        elements.append("TTASide : " + self.m_tt +
-                        "/TTa/TTa.Layer/R(3Module.{2}|2Module(3.|2T))")
-        elements.append("TTCSide : " + self.m_tt +
-                        "/TTa/TTa.Layer/R(1Module.{2}|2Module(1.|2B))")
-        elements.append("TTASide : " + self.m_tt +
-                        "/TTb/TTb.Layer/R(3Module.{2}|2Module(3B|4.|5.))")
-        elements.append("TTCSide : " + self.m_tt +
-                        "/TTb/TTb.Layer/R(1Module.{2}|2Module(1.|2.|3T))")
-        self.__append(elements, dofs)
-
-    def TTHalfModules(self, dofs=""):
-        self.__append(self.m_tt + "/TT./.{4}Layer/.{2}Module.{2}", dofs)
-
-    def TTSensors(self, dofs=""):
-        self.__append(
-            self.m_tt + "/TT./.{4}Layer/.{2}Module.{2}/Ladder./Sensor.{2}",
-            dofs)
-
-    def TTLongModules(self, dofs=""):
-        elements = []
-        for layer in ['TTaXLayer', 'TTaULayer']:
-            # first R1 and R3
-            for i in range(1, 7):
-                elements.append(layer + "R1Module" + str(i) + " : " +
-                                self.m_tt + "/TTa/" + layer + "/R1Module" +
-                                str(i) + ".")
-                elements.append(layer + "R3Module" + str(i) + " : " +
-                                self.m_tt + "/TTa/" + layer + "/R3Module" +
-                                str(i) + ".")
-            # now R2
-            for i in [1, 3]:
-                elements.append(layer + "R2Module" + str(i) + " : " +
-                                self.m_tt + "/TTa/" + layer + "/R2Module" +
-                                str(i) + ".")
-        for layer in ['TTbVLayer', 'TTbXLayer']:
-            # first R1 and R3
-            for i in range(1, 7):
-                elements.append(layer + "R1Module" + str(i) + " : " +
-                                self.m_tt + "/TTb/" + layer + "/R1Module" +
-                                str(i) + ".")
-                elements.append(layer + "R3Module" + str(i) + " : " +
-                                self.m_tt + "/TTb/" + layer + "/R3Module" +
-                                str(i) + ".")
-            # now R2
-            for i in [1, 2, 4, 5]:
-                elements.append(layer + "R2Module" + str(i) + " : " +
-                                self.m_tt + "/TTb/" + layer + "/R2Module" +
-                                str(i) + ".")
-        self.__append(sorted(elements), dofs)
-
-    def TTShortModules(self, dofs=""):
-        elements = []
-        self.__append(self.m_tt + "/TTa/.{4}Layer/R2Module2.", dofs)
-        self.__append(self.m_tt + "/TTb/.{4}Layer/R2Module3.", dofs)
-        self.__append(sorted(elements), dofs)
-
-    def TTModules(self, dofs=""):
-        self.TTLongModules(dofs)
-        self.TTShortModules(dofs)
-
-    ## UT #################################################################################
-    _UT = WORLD + "/BeforeMagnetRegion/UT"
-    _UTStations = ["UTa", "UTb"]
-    _UTLayers = [
-        "UTa/UTaXLayer", "UTa/UTaULayer", "UTb/UTbVLayer", "UTb/UTbXLayer"
-    ]
-
-    def UT(self, dofs=""):
-        self.__append(self._UT, dofs)
-
-    def UTLayers(self, dofs=""):
-        self.__append(self._UT + "/UT./.{4}Layer", dofs)
-
-    ## FT #################################################################################
-    _FT = WORLD + "/AfterMagnetRegion/T/FT"
-    _FTStations = ["/T1", "/T2", "/T3"]
-    _FTLayers = ["/LayerX1", "/LayerU", "/LayerV", "/LayerX2"
-                 ] if not UseDD4Hep else ["/X1", "/U", "/V", "/X2"]
-    _FTRealQuarters = [
-        "/Quarter0", "/Quarter2", "/Quarter1", "/Quarter3"
-    ] if not UseDD4Hep else ["/HL0/Q0", "/HL0/Q2", "/HL1/Q1", "/HL1/Q3"]
-    _FTHalfLayerQuarters = {
-        "/HL0": "/Quarter(0|2)" if not UseDD4Hep else "/HL0/Q(0|2)",
-        "/HL1": "/Quarter(1|3)" if not UseDD4Hep else "/HL1/Q(1|3)"
-    }
-    _FTHalfLayers = {
-        "/HL0": "/Quarter(0|2)" if not UseDD4Hep else "/HL0",
-        "/HL1": "/Quarter(1|3)" if not UseDD4Hep else "/HL1"
-    }
-    _FTCFrameLayers = {
-        "/X1U": ("/Layer" if not UseDD4Hep else "/") + "(X1|U)",
-        "/VX2": ("/Layer" if not UseDD4Hep else "/") + "(V|X2)"
-    }
-
-    _FTModulesAll = [("/Module%d" if not UseDD4Hep else "/M%d") % i
-                     for i in range(6)]
-    _FTModulesShort = [("/Module%d" if not UseDD4Hep else "/M%d") % i
-                       for i in range(5)]
-    _FTMats = ["/Mat%d" % i for i in range(4)]
-
-    def FT(self, dofs=""):
-        self.__append(self._FT, dofs)
-
-    def FTStations(self, dofs=""):
-        elements = []
-        for i in self._FTStations:
-            elements.append(self._FT + i)
-        self.__append(elements, dofs)
-
-    def FTLayers(self, dofs=""):
-        elements = []
-        for station in self._FTStations:
-            for layer in self._FTLayers:
-                elements.append(self._FT + station + layer)
-                self.__append(elements, dofs)
-
-    def FTHalfLayers(self, dofs=""):
-        elements = []
-        for station in self._FTStations:
-            for layer in self._FTLayers:
-                for halflayer in self._FTHalfLayers:
-                    elements.append(self._FT + station + layer + halflayer)
-        self.__append(elements, dofs)
-
-    def FTQuarters(self, dofs=""):
-        elements = []
-        for station in self._FTStations:
-            for layer in self._FTLayers:
-                if UseDD4Hep:
-                    for halflayer in self._FTHalfLayers:
-                        if halflayer == "/HL0":
-                            quarters = self._FTQuarters["CSide"]
-                        else:
-                            quarters = self._FTQuarters["ASide"]
-                        for quarter in quarters:
-                            elements.append(self._FT + station + layer +
-                                            halflayer + quarter)
-                else:
-                    for quarter in self._FTRealQuarters:
-                        elements.append(self._FT + station + layer +
-                                        halflayer + quarter)
-        self.__append(elements, dofs)
-
-    def FTCFrames(self, dofs=""):
-        elements = []
-        for station in self._FTStations:
-            for (cframelayername, cframelayer) in self._FTCFrameLayers.items():
-                for (side, halflayer) in self._FTHalfLayers.items():
-                    elements.append("FT" + station + cframelayername + side +
-                                    " : " + self._FT + station + cframelayer +
-                                    halflayer)
-        print('FTCFrames elements:', elements)
-        self.__append(elements, dofs)
-
-    def FTCFrameLayers(self, dofs=""):
-        elements = []
-        for station in self._FTStations:
-            for layer in self._FTLayers:
-                for (side, halflayer) in self._FTHalfLayers.items():
-                    elements.append("FT" + station + layer + side + " : " +
-                                    self._FT + station + layer + halflayer)
-        print('FTCFrameLayers elements:', elements)
-        self.__append(elements, dofs)
-
-    def FTModules(self, dofs=""):
-        elements = []
-        for station in self._FTStations:
-            for layer in self._FTLayers:
-                for (side,
-                     halflayerquarters) in self._FTHalfLayerQuarters.items():
-                    for module in self._FTModulesAll if station == "/T3" else self._FTModulesShort:
-                        elements.append("FT" + station + layer + side +
-                                        module + ":" + self._FT + station +
-                                        layer + halflayerquarters + module)
-        print('long module elements:', elements)
-        self.__append(elements, dofs)
-
-    def FTHalfModules(self, dofs=""):
-        elements = []
-        for i in self._FTStations:
-            for j in self._FTLayers:
-                for k in self._FTRealQuarters:
-                    for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort:
-                        elements.append(self._FT + i + j + k + l)
-#        print('FTHalfModules elements:', elements)
-        self.__append(elements, dofs)
-
-    def FTHalfModuleJoints(self,
-                           errors="0.01 0.0012 0.0019 0.0004 0.0002 0.00017"):
-#                           errors="0.001 0.001 0.001 0.0002 0.0002 0.0002"):
-#                           errors="0.001 0.001 0.002 0.0004 0.0002 0.0002"):
-        joints = []
-        for station in self._FTStations:
-            for layer in self._FTLayers:
-                for module in self._FTModulesAll if station == "/T3" else self._FTModulesShort:
-                    combinations = [("/HL0/Q0", "/HL0/Q2"),
-                                    ("/HL1/Q1", "/HL1/Q3")] if UseDD4Hep else [
-                                        ("/Quarter0", "/Quarter2"),
-                                        ("/Quarter1", "/Quarter3")
-                                    ]
-                    for (Qtop, Qbot) in combinations:
-                        modtop = 'FT' + station + layer + Qtop + module
-                        modbot = 'FT' + station + layer + Qbot + module
-                        joints.append(" : ".join(
-                            [modtop, modbot, errors, "0 -1212.75 0"]))
-#        print(joints)
-        return joints
-
-    def FTMats(self, dofs=""):
-        elements = []
-        for station in self._FTStations:
-            for layer in self._FTLayers:
-                if UseDD4Hep:
-                    for halflayer in self._FTHalfLayers:
-                        if halflayer == "/HL0":
-                            quarters = self._FTQuarters["CSide"]
-                        else:
-                            quarters = self._FTQuarters["ASide"]
-                        for quarter in quarters:
-                            if station == "/T3":
-                                modules = self._FTModulesAll
-                            else:
-                                modules = self._FTModulesShort
-                            for module in modules:
-                                for mat in self._FTMats:
-                                    elements.append(self._FT + station +
-                                                    layer + halflayer +
-                                                    quarter + module + mat)
-                else:
-                    for (side, quarter) in self._FTQuarters.items():
-                        if station == "/T3":
-                            modules = self._FTModulesAll
-                        else:
-                            modules = self._FTModulesShort
-                        for module in modules:
-                            for mat in self._FTMats:
-                                elements.append(
-                                    "FT/" + station.strip('/') + side +
-                                    layer.strip('/') + module.strip('/') +
-                                    mat.strip('/') + " : " + self._FT +
-                                    station + layer + quarter + module + mat)
-        self.__append(elements, dofs)
-
-    ## MUON  ##############################################################################
-    def MuonStations(self, dofs=""):
-        elements = []
-        for i in self.m_mustations:
-            elements.append(self.m_muon + i)
-        self.__append(elements, dofs)
-
-    def MuonHalfStations(self, dofs=""):
-        elements = []
-        for i in self.m_mustations:
-            for j in self.m_muhalfstations:
-                elements.append(self.m_muon + i + j)
-        self.__append(elements, dofs)
-
-    def MuonChambers(self, dofs=""):
-        elements = []
-        ## 5 Stations numbered from 1 to 5
-        for i in self.m_mustations:
-            ## There are 2 halves in each station
-            for j in self.m_muhalfstations:
-                ## Chambers
-                for l in self.m_muchambers:
-                    elements.append(self.m_muon + i + j + l)
-        self.__append(elements, dofs)
-
-    def MuonHalfStationsCside(self, dofs=""):
-        elements = []
-        for i in self.m_mustations:
-            elements.append(self.m_muon + i + self.m_muhalfstationsAC[1])
-        self.__append(elements, dofs)
-
-    def MuonHalfStationsAside(self, dofs=""):
-        elements = []
-        for i in self.m_mustations:
-            elements.append(self.m_muon + i + self.m_muhalfstationsAC[0])
-        self.__append(elements, dofs)
diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
index 55114ab76..2c569a3e8 100644
--- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
+++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
@@ -168,6 +168,13 @@ class SurveyConstraints(LHCbConfigurableUser):
                     self.XmlUncertainties += [
                         "FT/.*/M. : 0.1 0.1 0.1 0.00004 0.0001 0.00004"
                     ]
+                    self.Constraints += [
+                        # removed : 0 +1213 0", previous: see below
+#                        "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
+#                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
+                        "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002",
+                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002"
+                    ]
                 else:
                     self.XmlUncertainties += [
                         "FT/.*/Module. : 0.1 0.1 0.1 0.00004 0.0001 0.00004"
@@ -188,10 +195,9 @@ class SurveyConstraints(LHCbConfigurableUser):
                     "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"  # added this for 01-26
                 ]
             else:
-                if 'detdesc' in ver:
-                    self.XmlUncertainties += [
-                        "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
-                    ]
+                self.XmlUncertainties += [
+                    "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
+                ]
 
         # SciFi test constraints v0.1
         # translation constraints (somewhat) realistic
-- 
GitLab


From a901fd5851a704d676293e6ca32b0b61d03dc094 Mon Sep 17 00:00:00 2001
From: Gitlab CI <noreply@cern.ch>
Date: Thu, 4 Apr 2024 09:54:14 +0000
Subject: [PATCH 09/12] Fixed formatting

patch generated by https://gitlab.cern.ch/lhcb/Alignment/-/jobs/37708861
---
 .../Humboldt/python/Humboldt/ParticleSelections.py | 14 ++++++--------
 Alignment/Humboldt/python/Humboldt/utils.py        |  2 +-
 .../python/TAlignment/SurveyConstraints.py         |  4 ++--
 3 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
index 577ae6ed9..dd7b34b2c 100644
--- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
+++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
@@ -49,18 +49,16 @@ def defaultHLT1D0Selection(vertices_v2,
 
     combination_code = F.require_all(
         in_range(1760 * MeV, F.MASS, 1960 * MeV),
-        F.MAX(F>PT) > 1200 * MeV,
+        F.MAX(F > PT) > 1200 * MeV,
         F.PT > 2000 * MeV,
         F.MAXDOCACUT(0.1 * mm),
     )
 
-    vertex_code = F.require_all(
-        F.CHI2DOF < 10.,
-        in_range(1760 * MeV, F.MASS, 1960 * MeV),
-        F.END_VZ > -341. * mm,
-        F.BPVLTIME(vertices_v2) > 0.450 * ps,
-        F.END_VX < 4 * mm,
-        F.END_VY < 4 * mm)
+    vertex_code = F.require_all(F.CHI2DOF < 10.,
+                                in_range(1760 * MeV, F.MASS,
+                                         1960 * MeV), F.END_VZ > -341. * mm,
+                                F.BPVLTIME(vertices_v2) > 0.450 * ps,
+                                F.END_VX < 4 * mm, F.END_VY < 4 * mm)
 
     combinedD0 = ParticleCombiner(
         [pions, kaons],
diff --git a/Alignment/Humboldt/python/Humboldt/utils.py b/Alignment/Humboldt/python/Humboldt/utils.py
index c355b17f4..3c30cfeff 100644
--- a/Alignment/Humboldt/python/Humboldt/utils.py
+++ b/Alignment/Humboldt/python/Humboldt/utils.py
@@ -192,7 +192,7 @@ def runAlignment(options,
     top_node = CompositeNode(
         "filterNode",
         filters + [alignment_node] + [require_pvs(alignmentPVs)],
-#        filters + [alignment_node],
+        #        filters + [alignment_node],
         combine_logic=NodeLogic.LAZY_AND,
         force_order=True)
 
diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
index 2c569a3e8..4906a610f 100644
--- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
+++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
@@ -170,8 +170,8 @@ class SurveyConstraints(LHCbConfigurableUser):
                     ]
                     self.Constraints += [
                         # removed : 0 +1213 0", previous: see below
-#                        "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
-#                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
+                        #                        "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
+                        #                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
                         "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002",
                         "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002"
                     ]
-- 
GitLab


From 131fbf2f67ca73c50fb2577ba9e15916bd000839 Mon Sep 17 00:00:00 2001
From: Nils Breer <nils.breer@cern.ch>
Date: Thu, 18 Apr 2024 16:11:23 +0200
Subject: [PATCH 10/12] restored utils options and particle selection fixed
 SurveyConstraint.py back to where it was with commented option added
 backwards velo + longtracks function in alignment tracking added WIP function
 in Alignables cleaned up options files and renamed them

---
 ...> AlignFT_VP_combined_data_halfmodules.py} |  10 +-
 ...> AlignFT_VP_combined_data_longmodules.py} |  17 ++-
 .../options/AlignFT_VP_combined_data_v1_3.py  | 109 ------------------
 .../python/Humboldt/AlignmentScenarios.py     |  90 ++++++++-------
 .../python/Humboldt/ParticleSelections.py     |  21 ++--
 .../python/Humboldt/alignment_tracking.py     |  22 +---
 Alignment/Humboldt/python/Humboldt/utils.py   |   3 +-
 .../python/TAlignment/Alignables.py           |  21 ++--
 .../python/TAlignment/SurveyConstraints.py    |  28 ++---
 9 files changed, 96 insertions(+), 225 deletions(-)
 rename Alignment/Humboldt/options/{AlignFT_VP_combined_data.py => AlignFT_VP_combined_data_halfmodules.py} (92%)
 rename Alignment/Humboldt/options/{AlignFT_VP_combined_data_v1_2.py => AlignFT_VP_combined_data_longmodules.py} (87%)
 delete mode 100644 Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py

diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py
similarity index 92%
rename from Alignment/Humboldt/options/AlignFT_VP_combined_data.py
rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py
index 0256a6d67..0e6cadde5 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py
@@ -76,12 +76,10 @@ from Humboldt.utils import runAlignment
 from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
 from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
 
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment
-config = configureGlobalAlignment(halfdofs="TxTyTzRy")
+from Humboldt.AlignmentScenarios import configureGlobalAlignment_halfmodules
+config = configureGlobalAlignment_halfmodules(halfdofs="TxTyTzRxRyRz")
 
-alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf(
-)
-#alignmentTracks, alignmentPVs, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
@@ -105,5 +103,5 @@ with createAlignAlgorithm.bind(
         alignmentPVs=alignmentPVs,
         odin=odin,
         monitorList=monitors,
-        particles=particles,
+#        particles=particles,
         usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py
similarity index 87%
rename from Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py
rename to Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py
index 8e2ac2475..0546a2f93 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_2.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py
@@ -44,10 +44,11 @@ options.data_type = 'Upgrade'
 
 # set DDDB and CondDB info
 options.geometry_version = "trunk"  # run3/trunk
-CONDDBTag = "nibreer_all0_conds"
+#CONDDBTag = "master"
+CONDDBTag = "nibreer_giulia_mass_conds"
 options.conditions_version = CONDDBTag
 
-online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database'
+online_cond_path = '/group/online/hlt/conditions.run3/lhcb-conditions-database'
 if os.path.exists(online_cond_path):
     DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
 
@@ -73,15 +74,12 @@ configure_input(options)
 
 from Humboldt.utils import runAlignment
 from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
-from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf
 from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
 
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_2
-config = configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz")
+from Humboldt.AlignmentScenarios import configureGlobalAlignment_longmodules
+config = configureGlobalAlignment_longmodules(halfdofs="TxTyTzRxRyRz")
 
-#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf(
-)
+alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
@@ -102,7 +100,8 @@ with createAlignAlgorithm.bind(
         alignmentTracks=alignmentTracks,
         elementsToAlign=config.Elements,
         filters=filter_pvs,
+        alignmentPVs=alignmentPVs,
         odin=odin,
         monitorList=monitors,
-        alignmentPVs=alignmentPVs,
+#        particles=particles,
         usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py
deleted file mode 100644
index f18d14317..000000000
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_v1_3.py
+++ /dev/null
@@ -1,109 +0,0 @@
-###############################################################################
-# (c) Copyright 2022 CERN for the benefit of the LHCb Collaboration           #
-#                                                                             #
-# This software is distributed under the terms of the GNU General Public      #
-# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING".   #
-#                                                                             #
-# In applying this licence, CERN does not waive the privileges and immunities #
-# granted to it by virtue of its status as an Intergovernmental Organization  #
-# or submit itself to any jurisdiction.                                       #
-###############################################################################
-"""
-Configuration file to test running on data.
-"""
-
-from Moore import options, run_moore
-from RecoConf.reconstruction_objects import reconstruction
-from RecoConf.hlt2_global_reco import reconstruction as hlt2_reconstruction, make_light_reco_pr_kf_without_UT, make_light_reconstruction
-from Hlt2Conf.lines import all_lines
-import os
-import re
-from RecoConf.hlt2_tracking import (
-    make_PrKalmanFilter_noUT_tracks, make_PrKalmanFilter_Seed_tracks,
-    make_PrKalmanFilter_Velo_tracks, make_TrackBestTrackCreator_tracks,
-    get_UpgradeGhostId_tool_no_UT, make_hlt2_tracks)
-from PyConf.Algorithms import VeloRetinaClusterTrackingSIMD, VPRetinaFullClusterDecoder, PrKalmanFilter, PrKalmanFilter_Downstream, PrKalmanFilter_noUT
-from RecoConf.hlt1_tracking import (
-    make_VeloClusterTrackingSIMD, make_RetinaClusters,
-    get_global_measurement_provider, make_velo_full_clusters, make_reco_pvs,
-    make_PatPV3DFuture_pvs)
-
-from RecoConf.hlt1_muonid import make_muon_hits
-from RecoConf.calorimeter_reconstruction import make_digits, make_calo
-from PyConf.application import configure_input
-from PRConfig.FilesFromDirac import get_access_urls
-from DDDB.CheckDD4Hep import UseDD4Hep
-from Configurables import LHCb__Det__LbDD4hep__DD4hepSvc as DD4hepSvc
-from RecoConf.event_filters import require_pvs
-from Humboldt.options import usePrKalman
-
-options.input_type = 'MDF'
-options.input_raw_format = 0.5
-options.simulation = False  # in DD4Hep is False the correct option
-options.data_type = 'Upgrade'
-
-# set DDDB and CondDB info
-options.geometry_version = "trunk"  # run3/trunk
-#CONDDBTag = "nibreer_giulia_mass_conds"
-CONDDBTag = "nibreer_all0_conds"
-options.conditions_version = CONDDBTag
-
-online_cond_path = '/scratch/nibreer/my_conditions_database/lhcb-conditions-database'
-if os.path.exists(online_cond_path):
-    DD4hepSvc().ConditionsLocation = 'file://' + online_cond_path
-
-from glob import glob
-from Gaudi.Configuration import *
-from GaudiConf import IOHelper
-
-# run 269045
-files = glob("/calib/align/LHCb/Tracker/0000269045/Run_*.mdf")
-options.input_files = files[0:4000]
-
-options.event_store = 'EvtStoreSvc'
-options.histo_file = "GoodLongTracks_histo.root"
-#options.ntuple_file = "GoodLongTracks_tuple.root"
-options.use_iosvc = True  # True for data, False for MC
-# multithreading not working while creating tuples
-options.n_threads = 35
-options.evt_max = -1
-
-options.scheduler_legacy_mode = False
-
-configure_input(options)
-
-from Humboldt.utils import runAlignment
-from Humboldt.alignment_tracking import make_scifi_tracks_and_particles_prkf
-from Humboldt.alignment_tracking import make_velo_scifi_tracks_and_particles_prkf
-from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
-
-from Humboldt.AlignmentScenarios import configureVPModuleAlignment, configureVPHalfAlignment, configureGlobalAlignment_VELO_Rx_V1_3
-config = configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz")
-
-#alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
-alignmentTracks, alignmentPVs, odin, monitors = make_velo_scifi_tracks_and_particles_prkf(
-)
-
-filter_pvs = []
-filter_pvs.append(require_pvs(alignmentPVs))
-
-# add survey constraints
-from Configurables import SurveyConstraints
-from PyConf.Tools import AlignChisqConstraintTool
-from Humboldt.utils import createAlignUpdateTool, createAlignAlgorithm, getXMLWriterList
-
-with createAlignAlgorithm.bind(
-        outputDataFile="humb-vp-ft-halves-modules",
-        updateInFinalize=False,
-        onlineMode=False):
-    runAlignment(
-        options,
-        surveyConstraints=config.SurveyConstraints,
-        lagrangeConstraints=config.LagrangeConstraints,
-        alignmentTracks=alignmentTracks,
-        elementsToAlign=config.Elements,
-        filters=filter_pvs,
-        odin=odin,
-        monitorList=monitors,
-        alignmentPVs=alignmentPVs,
-        usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
index 330c7ffba..d307bb107 100644
--- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
+++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
@@ -39,44 +39,16 @@ class AlignmentScenario():
         #self.SubDetectors = subdetectors
 
 
-def configureGlobalAlignment(halfdofs="TxTyTzRy"):
-    setup = AlignmentScenario('GlobalAlignment')
-    setup.SubDetectors += ['VP', 'FT']
-
-    elements = Alignables()
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
-
-    elements.FTHalfModules("TxRxRz")
-    setup.Elements += list(elements)
-
-    surveyconstraints = SurveyConstraints()
-    if UseDD4Hep:
-        surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
-    else:
-        surveyconstraints.VP(ver='latest')
-    setup.SurveyConstraints = surveyconstraints
-
-    constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Ry")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz")
-    setup.LagrangeConstraints = constraints
-
-    return setup
-
-
-def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment_v1_2')
+def configureGlobalAlignment_halfmodules(halfdofs="TxTyTzRy"):
+    setup = AlignmentScenario('GlobalAlignment_halfmodules')
     setup.SubDetectors += ['VP', 'FT']
 
     elements = Alignables()
     elements.VP("Rx")
-    elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
+#    elements.VPRight(halfdofs)
+#    elements.VPLeft(halfdofs)
 
     elements.FTHalfModules("TxRz")
-
     setup.Elements += list(elements)
 
     surveyconstraints = SurveyConstraints()
@@ -88,37 +60,69 @@ def configureGlobalAlignment_VELO_Rx_V1_2(halfdofs="TxTyTz"):
     setup.SurveyConstraints = surveyconstraints
 
     constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz : total")
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
+    constraints.append("BackFramesFixed_00 : FT/T3/X2/HL0/Q0/M0 : Tx Rz")
+    constraints.append("BackFramesFixed_01 : FT/T3/X2/HL0/Q0/M1 : Tx Rz")
+    constraints.append("BackFramesFixed_02 : FT/T3/X2/HL0/Q0/M2 : Tx Rz")
+    constraints.append("BackFramesFixed_03 : FT/T3/X2/HL0/Q0/M3 : Tx Rz")
+    constraints.append("BackFramesFixed_04 : FT/T3/X2/HL0/Q0/M4 : Tx Rz")
+    constraints.append("BackFramesFixed_05 : FT/T3/X2/HL0/Q0/M5 : Tx Rz")
+    constraints.append("BackFramesFixed_06 : FT/T3/X2/HL0/Q2/M0 : Tx Rz")
+    constraints.append("BackFramesFixed_07 : FT/T3/X2/HL0/Q2/M1 : Tx Rz")
+    constraints.append("BackFramesFixed_08 : FT/T3/X2/HL0/Q2/M2 : Tx Rz")
+    constraints.append("BackFramesFixed_09 : FT/T3/X2/HL0/Q2/M3 : Tx Rz")
+    constraints.append("BackFramesFixed_10 : FT/T3/X2/HL0/Q2/M4 : Tx Rz")
+    constraints.append("BackFramesFixed_11 : FT/T3/X2/HL0/Q2/M5 : Tx Rz")
+    constraints.append("BackFramesFixed_12 : FT/T3/X2/HL1/Q1/M0 : Tx Rz")
+    constraints.append("BackFramesFixed_13 : FT/T3/X2/HL1/Q1/M1 : Tx Rz")
+    constraints.append("BackFramesFixed_14 : FT/T3/X2/HL1/Q1/M2 : Tx Rz")
+    constraints.append("BackFramesFixed_15 : FT/T3/X2/HL1/Q1/M3 : Tx Rz")
+    constraints.append("BackFramesFixed_16 : FT/T3/X2/HL1/Q1/M4 : Tx Rz")
+    constraints.append("BackFramesFixed_17 : FT/T3/X2/HL1/Q1/M5 : Tx Rz")
+    constraints.append("BackFramesFixed_18 : FT/T3/X2/HL1/Q3/M0 : Tx Rz")
+    constraints.append("BackFramesFixed_19 : FT/T3/X2/HL1/Q3/M1 : Tx Rz")
+    constraints.append("BackFramesFixed_20 : FT/T3/X2/HL1/Q3/M2 : Tx Rz")
+    constraints.append("BackFramesFixed_21 : FT/T3/X2/HL1/Q3/M3 : Tx Rz")
+    constraints.append("BackFramesFixed_22 : FT/T3/X2/HL1/Q3/M4 : Tx Rz")
+    constraints.append("BackFramesFixed_23 : FT/T3/X2/HL1/Q3/M5 : Tx Rz")
     setup.LagrangeConstraints = constraints
 
     return setup
 
-
-def configureGlobalAlignment_VELO_Rx_V1_3(halfdofs="TxTyTz"):
-    setup = AlignmentScenario('GlobalAlignment_v1_3')
+def configureGlobalAlignment_Longmodules(halfdofs="TxTyTzRxRyRz"):
+    setup = AlignmentScenario('GlobalAlignment_longmodules')
     setup.SubDetectors += ['VP', 'FT']
 
     elements = Alignables()
-    elements.VP("Rx")
+    elements.VP("RxRyRz")
     elements.VPRight(halfdofs)
-    elements.VPLeft(halfdofs)
+    elements.VPLeft("None")
 
-    elements.FTHalfModules("TxRxRz")
+    elements.FTModules("TxRz")
 
     setup.Elements += list(elements)
 
     surveyconstraints = SurveyConstraints()
     if UseDD4Hep:
         surveyconstraints.VP(ver='2023_dd4hep')
-        surveyconstraints.FT(addHalfModuleJoints=True)
     else:
         surveyconstraints.VP(ver='latest')
     setup.SurveyConstraints = surveyconstraints
 
     constraints = []
-    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz")
-    constraints.append("FTBackFramesFixed : FT/T3/X2/HL.*/M. : Tx Rz : total")
+    constraints.append("VPHalfAverage : .*?VP(Left|Right) : Tx Ty Tz Rx Ry Rz")
+    constraints.append("BackFramesFixed_00 : FT/T3/X2/HL0/M0 : Tx Rz")
+    constraints.append("BackFramesFixed_01 : FT/T3/X2/HL0/M1 : Tx Rz")
+    constraints.append("BackFramesFixed_02 : FT/T3/X2/HL0/M2 : Tx Rz")
+    constraints.append("BackFramesFixed_03 : FT/T3/X2/HL0/M3 : Tx Rz")
+    constraints.append("BackFramesFixed_04 : FT/T3/X2/HL0/M4 : Tx Rz")
+    constraints.append("BackFramesFixed_05 : FT/T3/X2/HL0/M5 : Tx Rz")
+    constraints.append("BackFramesFixed_10 : FT/T3/X2/HL1/M0 : Tx Rz")
+    constraints.append("BackFramesFixed_11 : FT/T3/X2/HL1/M1 : Tx Rz")
+    constraints.append("BackFramesFixed_12 : FT/T3/X2/HL1/M2 : Tx Rz")
+    constraints.append("BackFramesFixed_13 : FT/T3/X2/HL1/M3 : Tx Rz")
+    constraints.append("BackFramesFixed_14 : FT/T3/X2/HL1/M4 : Tx Rz")
+    constraints.append("BackFramesFixed_15 : FT/T3/X2/HL1/M5 : Tx Rz")
     setup.LagrangeConstraints = constraints
 
     return setup
diff --git a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
index dd7b34b2c..a46c25f21 100644
--- a/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
+++ b/Alignment/Humboldt/python/Humboldt/ParticleSelections.py
@@ -29,14 +29,14 @@ def defaultHLT1D0Selection(vertices_v2,
     loosepions = make_has_rich_long_pions()
     loosekaons = make_has_rich_long_kaons()
 
-    ptmin = 800 * MeV
-    minIP = 0.06 * mm
+    ptmin = 1000 * MeV
+    minIP = 0.07 * mm
     pmin = 3000 * MeV
 
     pions = ParticleFilter(
         loosepions,
         F.FILTER(
-            F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K < 5.,
+            F.require_all(F.PT > ptmin, F.P > pmin, F.PID_K < 0.,
                           F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2))))
 
     kaons = ParticleFilter(
@@ -46,23 +46,22 @@ def defaultHLT1D0Selection(vertices_v2,
                           F.MINIPCUT(IPCut=minIP, Vertices=vertices_v2))))
 
     particles = [pions, kaons]
-
     combination_code = F.require_all(
         in_range(1760 * MeV, F.MASS, 1960 * MeV),
-        F.MAX(F > PT) > 1200 * MeV,
-        F.PT > 2000 * MeV,
+        F.SUM(F.PT) > 2000 * MeV,
         F.MAXDOCACUT(0.1 * mm),
     )
-
     vertex_code = F.require_all(F.CHI2DOF < 10.,
-                                in_range(1760 * MeV, F.MASS,
-                                         1960 * MeV), F.END_VZ > -341. * mm,
+                                F.BPVETA(vertices_v2) > 2,
+                                F.BPVETA(vertices_v2) < 5,
+                                in_range(mass_min, F.MASS, mass_max),
+                                F.END_VZ > -341. * mm,
                                 F.BPVLTIME(vertices_v2) > 0.450 * ps,
-                                F.END_VX < 4 * mm, F.END_VY < 4 * mm)
+                                F.BPVDIRA(vertices_v2) > 0.999)
 
     combinedD0 = ParticleCombiner(
         [pions, kaons],
-        name="AlignHLTD0",
+        name="AlignHLTD0_{hash}",
         DecayDescriptor="[D0 -> pi+ K-]cc",
         CombinationCut=combination_code,
         CompositeCut=vertex_code,
diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
index 0e5bf0c95..add250e80 100644
--- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
+++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
@@ -216,7 +216,7 @@ def monitor_SciFi_tracks(track_group,
 
     return monitorlist
 
-
+# also uses velo backwards tracks in addition to long tracks, otherwise identical to make_scifi_tracks_and_particles_prkf
 def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True,
                                               MaxOutlierIterations=2,
                                               MaxChi2Dof=5,
@@ -260,9 +260,8 @@ def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True,
         from PyConf.application import make_odin
         odin = make_odin()
 
-        from Humboldt.ParticleSelections import defaultHLT1D0Selection, defaultHLTD0Selection
-        #        particles = defaultHLT1D0Selection(particlepvs)
-        particles = defaultHLTD0Selection(particlepvs)
+        from Humboldt.ParticleSelections import defaultHLT1D0Selection
+        particles = defaultHLT1D0Selection(particlepvs)
 
         from PyConf.Tools import TrackSelector
         from PyConf.Algorithms import VertexListRefiner, TrackSelectionMerger
@@ -332,21 +331,6 @@ def make_scifi_tracks_and_particles_prkf():
         from GaudiKernel.SystemOfUnits import MeV
 
         monitorlist = []
-        #        myFTTrackMonitor = FTTrackMonitor_PrKalman(
-        #            name="AlignMoni_FTTrackMonitor_PrKalman",
-        #            TracksInContainer=alignmentTracks)
-        #        myTrackVertexMonitor = TrackVertexMonitor(
-        #            name="AlignMoni_FT_TrackVertexMonitor",
-        #            TrackContainer=alignmentTracks,
-        #            PVContainer=pvs)
-        #        monitorlist.append(myFTTrackMonitor)
-        #        monitorlist.append(myTrackVertexMonitor)
-        #        monitorlist = [
-        #            myFTTrackMonitor,
-        #            myTrackVertexMonitor,
-        #        ]
-        # ParticleMassMonitor
-
         monitorlist = monitorlist + monitor_SciFi_tracks(
             alignmentTracks, "AlignGoodLongTracks", includeQuarters=True)
         monitorlist = monitorlist + monitor_SciFi_tracks(
diff --git a/Alignment/Humboldt/python/Humboldt/utils.py b/Alignment/Humboldt/python/Humboldt/utils.py
index 3c30cfeff..25a95df74 100644
--- a/Alignment/Humboldt/python/Humboldt/utils.py
+++ b/Alignment/Humboldt/python/Humboldt/utils.py
@@ -191,8 +191,7 @@ def runAlignment(options,
 
     top_node = CompositeNode(
         "filterNode",
-        filters + [alignment_node] + [require_pvs(alignmentPVs)],
-        #        filters + [alignment_node],
+        filters + [alignment_node],
         combine_logic=NodeLogic.LAZY_AND,
         force_order=True)
 
diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py
index 0de966f1c..93edc625d 100755
--- a/Alignment/TAlignment/python/TAlignment/Alignables.py
+++ b/Alignment/TAlignment/python/TAlignment/Alignables.py
@@ -369,7 +369,6 @@ class Alignables(list):
                     elements.append("FT" + station + cframelayername + side +
                                     " : " + self._FT + station + cframelayer +
                                     halflayer)
-        print('FTCFrames elements:', elements)
         self.__append(elements, dofs)
 
     def FTCFrameLayers(self, dofs=""):
@@ -379,7 +378,6 @@ class Alignables(list):
                 for (side, halflayer) in self._FTHalfLayers.items():
                     elements.append("FT" + station + layer + side + " : " +
                                     self._FT + station + layer + halflayer)
-        print('FTCFrameLayers elements:', elements)
         self.__append(elements, dofs)
 
     def FTModules(self, dofs=""):
@@ -392,7 +390,6 @@ class Alignables(list):
                         elements.append("FT" + station + layer + side +
                                         module + ":" + self._FT + station +
                                         layer + halflayerquarters + module)
-        print('long module elements:', elements)
         self.__append(elements, dofs)
 
     def FTHalfModules(self, dofs=""):
@@ -402,17 +399,17 @@ class Alignables(list):
                 for k in self._FTRealQuarters:
                     for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort:
                         elements.append(self._FT + i + j + k + l)
-#        print('FTHalfModules elements:', elements)
         self.__append(elements, dofs)
 
-    def FTHalfModulesOuterLayers(self, dofs=""):
-        elements = []
-        for i in self._FTStations:
-            for j in self._FTOuterLayers:
-                for k in self._FTRealQuarters:
-                    for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort:
-                        elements.append(self._FT + i + j + k + l)
-        self.__append(elements, dofs)
+# WIP: align only the outer layers for each station
+#    def FTHalfModulesOuterLayers(self, dofs=""):
+#        elements = []
+#        for i in self._FTStations:
+#            for j in self._FTOuterLayers:
+#                for k in self._FTRealQuarters:
+#                    for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort:
+#                        elements.append(self._FT + i + j + k + l)
+#        self.__append(elements, dofs)
 
     def FTHalfModuleJoints(
             #            self, errors="0.0000074 0.0012 0.0019 0.0004 0.00000044 0.00022"):
diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
index 4906a610f..fcbab17d4 100644
--- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
+++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
@@ -122,9 +122,9 @@ class SurveyConstraints(LHCbConfigurableUser):
         for f in XmlFilesDict['VP'][ver]:
             self.XmlFiles += [self.defaultSurveyDir() + "VP/" + f + ".xml"]
         self.XmlUncertainties += [
-            "VP/.*/Module(00|).. : 0.2 0.2 0.2 0.001 0.001 0.001",
-            "VP/.*/Ladder. : 0.005 0.005 0.01 0.0002 0.0002 0.0001",
-            "VP/.*/ladder_. : 0.005 0.005 0.01 0.0002 0.0002 0.0001"
+            ".*/Module(00|).. : 0.2 0.2 0.2 0.001 0.001 0.001",
+            ".*/Ladder. : 0.005 0.005 0.01 0.0002 0.0002 0.0001",
+            ".*/ladder_. : 0.005 0.005 0.01 0.0002 0.0002 0.0001"
         ]
         if UseDD4Hep:
             self.Constraints += [
@@ -168,13 +168,11 @@ class SurveyConstraints(LHCbConfigurableUser):
                     self.XmlUncertainties += [
                         "FT/.*/M. : 0.1 0.1 0.1 0.00004 0.0001 0.00004"
                     ]
-                    self.Constraints += [
-                        # removed : 0 +1213 0", previous: see below
-                        #                        "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
-                        #                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
-                        "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002",
-                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0002 0.0002"
-                    ]
+#                    Use this functionality to constrain the Long- or Halfmodules to the top of the frame
+#                    self.Constraints += [
+#                        "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
+#                        "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"
+#                    ]
                 else:
                     self.XmlUncertainties += [
                         "FT/.*/Module. : 0.1 0.1 0.1 0.00004 0.0001 0.00004"
@@ -187,6 +185,8 @@ class SurveyConstraints(LHCbConfigurableUser):
         else:
             if UseDD4Hep:
                 self.XmlUncertainties += [
+                    #".*M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
+                    #"FT/T3/X2/.*/HL./M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
                     "FT/.*/M. : 0.5 0.5 0.5 0.0002 0.0008 0.0002",
                 ]
                 # maybe remove this bottom constraint
@@ -195,9 +195,10 @@ class SurveyConstraints(LHCbConfigurableUser):
                     "FT/T./(X1|X2|U|V)/HL./M. :  0 0 0 0 0 0 : 0.1 0.1 0.1 0.00004 0.0001 0.00004 : 0 +1213 0"  # added this for 01-26
                 ]
             else:
-                self.XmlUncertainties += [
-                    "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
-                ]
+                if 'detdesc' in ver:
+                    self.XmlUncertainties += [
+                        "FT/.*/Module. : 0.5 0.5 0.5 0.0002 0.0008 0.0002"
+                    ]
 
         # SciFi test constraints v0.1
         # translation constraints (somewhat) realistic
@@ -222,7 +223,6 @@ class SurveyConstraints(LHCbConfigurableUser):
                     "FT/.*Mat. : 0 0 0 0 0 0 : 0.05 0.05 0.05 0.1 0.1 0.1"
                 ]
         if addHalfModuleJoints:
-            print('joints in use')
             from TAlignment.Alignables import Alignables
             self.ElementJoints += Alignables().FTHalfModuleJoints()
 
-- 
GitLab


From 7b20fdee71bf1e70166949a60c0f697b753a9c6b Mon Sep 17 00:00:00 2001
From: Nils Breer <nils.breer@cern.ch>
Date: Thu, 17 Oct 2024 10:50:27 +0200
Subject: [PATCH 11/12] added object to only align T3X2M5 modules

---
 .../TAlignment/python/TAlignment/Alignables.py  | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py
index 93edc625d..b0cd0491b 100755
--- a/Alignment/TAlignment/python/TAlignment/Alignables.py
+++ b/Alignment/TAlignment/python/TAlignment/Alignables.py
@@ -401,15 +401,14 @@ class Alignables(list):
                         elements.append(self._FT + i + j + k + l)
         self.__append(elements, dofs)
 
-# WIP: align only the outer layers for each station
-#    def FTHalfModulesOuterLayers(self, dofs=""):
-#        elements = []
-#        for i in self._FTStations:
-#            for j in self._FTOuterLayers:
-#                for k in self._FTRealQuarters:
-#                    for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort:
-#                        elements.append(self._FT + i + j + k + l)
-#        self.__append(elements, dofs)
+    def FTT3X2M5(self, dofs=""):
+        elements = []
+        i = "/T3"
+        for k in self._FTRealQuarters:
+            for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort:
+               	if l == "/M5":
+                    elements.append(self._FT + i + "/X2" + k + l + ";(%s)" % self._FTHalfModuleReadoutSideTranslation)
+        self.__append(elements, dofs)
 
     def FTHalfModuleJoints(
             #            self, errors="0.0000074 0.0012 0.0019 0.0004 0.00000044 0.00022"):
-- 
GitLab


From 00c2fd07f7009e959a632236eaeec185d16e6772 Mon Sep 17 00:00:00 2001
From: Gitlab CI <noreply@cern.ch>
Date: Thu, 17 Oct 2024 08:52:51 +0000
Subject: [PATCH 12/12] Fixed formatting

patch generated by https://gitlab.cern.ch/lhcb/Alignment/-/jobs/44812882
---
 .../Humboldt/options/AlignFT_VP_combined_data_halfmodules.py | 5 +++--
 .../Humboldt/options/AlignFT_VP_combined_data_longmodules.py | 5 +++--
 Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py     | 5 +++--
 Alignment/Humboldt/python/Humboldt/alignment_tracking.py     | 1 +
 Alignment/TAlignment/python/TAlignment/Alignables.py         | 5 +++--
 Alignment/TAlignment/python/TAlignment/SurveyConstraints.py  | 2 ++
 6 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py
index 0e6cadde5..479546285 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_halfmodules.py
@@ -79,7 +79,8 @@ from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
 from Humboldt.AlignmentScenarios import configureGlobalAlignment_halfmodules
 config = configureGlobalAlignment_halfmodules(halfdofs="TxTyTzRxRyRz")
 
-alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf(
+)
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
@@ -103,5 +104,5 @@ with createAlignAlgorithm.bind(
         alignmentPVs=alignmentPVs,
         odin=odin,
         monitorList=monitors,
-#        particles=particles,
+        #        particles=particles,
         usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py b/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py
index 0546a2f93..5494d9f26 100644
--- a/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py
+++ b/Alignment/Humboldt/options/AlignFT_VP_combined_data_longmodules.py
@@ -79,7 +79,8 @@ from PyConf.Algorithms import PrCheckEmptyTracks, PrStoreUTHitEmptyProducer
 from Humboldt.AlignmentScenarios import configureGlobalAlignment_longmodules
 config = configureGlobalAlignment_longmodules(halfdofs="TxTyTzRxRyRz")
 
-alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf()
+alignmentTracks, alignmentPVs, particles, odin, monitors = make_scifi_tracks_and_particles_prkf(
+)
 
 filter_pvs = []
 filter_pvs.append(require_pvs(alignmentPVs))
@@ -103,5 +104,5 @@ with createAlignAlgorithm.bind(
         alignmentPVs=alignmentPVs,
         odin=odin,
         monitorList=monitors,
-#        particles=particles,
+        #        particles=particles,
         usePrKalman=usePrKalman)
diff --git a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
index d307bb107..4b912ee5f 100644
--- a/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
+++ b/Alignment/Humboldt/python/Humboldt/AlignmentScenarios.py
@@ -45,8 +45,8 @@ def configureGlobalAlignment_halfmodules(halfdofs="TxTyTzRy"):
 
     elements = Alignables()
     elements.VP("Rx")
-#    elements.VPRight(halfdofs)
-#    elements.VPLeft(halfdofs)
+    #    elements.VPRight(halfdofs)
+    #    elements.VPLeft(halfdofs)
 
     elements.FTHalfModules("TxRz")
     setup.Elements += list(elements)
@@ -89,6 +89,7 @@ def configureGlobalAlignment_halfmodules(halfdofs="TxTyTzRy"):
 
     return setup
 
+
 def configureGlobalAlignment_Longmodules(halfdofs="TxTyTzRxRyRz"):
     setup = AlignmentScenario('GlobalAlignment_longmodules')
     setup.SubDetectors += ['VP', 'FT']
diff --git a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
index add250e80..2ad24099b 100644
--- a/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
+++ b/Alignment/Humboldt/python/Humboldt/alignment_tracking.py
@@ -216,6 +216,7 @@ def monitor_SciFi_tracks(track_group,
 
     return monitorlist
 
+
 # also uses velo backwards tracks in addition to long tracks, otherwise identical to make_scifi_tracks_and_particles_prkf
 def make_velo_scifi_tracks_and_particles_prkf(usePrKalman=True,
                                               MaxOutlierIterations=2,
diff --git a/Alignment/TAlignment/python/TAlignment/Alignables.py b/Alignment/TAlignment/python/TAlignment/Alignables.py
index b0cd0491b..ba11e83b6 100755
--- a/Alignment/TAlignment/python/TAlignment/Alignables.py
+++ b/Alignment/TAlignment/python/TAlignment/Alignables.py
@@ -406,8 +406,9 @@ class Alignables(list):
         i = "/T3"
         for k in self._FTRealQuarters:
             for l in self._FTModulesAll if i == "/T3" else self._FTModulesShort:
-               	if l == "/M5":
-                    elements.append(self._FT + i + "/X2" + k + l + ";(%s)" % self._FTHalfModuleReadoutSideTranslation)
+                if l == "/M5":
+                    elements.append(self._FT + i + "/X2" + k + l + ";(%s)" %
+                                    self._FTHalfModuleReadoutSideTranslation)
         self.__append(elements, dofs)
 
     def FTHalfModuleJoints(
diff --git a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
index fcbab17d4..7faf333a1 100644
--- a/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
+++ b/Alignment/TAlignment/python/TAlignment/SurveyConstraints.py
@@ -168,6 +168,8 @@ class SurveyConstraints(LHCbConfigurableUser):
                     self.XmlUncertainties += [
                         "FT/.*/M. : 0.1 0.1 0.1 0.00004 0.0001 0.00004"
                     ]
+
+
 #                    Use this functionality to constrain the Long- or Halfmodules to the top of the frame
 #                    self.Constraints += [
 #                        "FT/T./(X1|X2|U|V)/HL./Q./M. :  0 0 0 0 0 0 : 0.2 0.2 0.2 0.0002 0.0008 0.0002 : 0 +1213 0",
-- 
GitLab