From 67facf31a3d3390c8f170ad78dbfc3101771fed9 Mon Sep 17 00:00:00 2001
From: Chris Jones <jonesc@hep.phy.cam.ac.uk>
Date: Fri, 12 Mar 2021 09:41:48 +0000
Subject: [PATCH 1/4] calibration.py - remove unused import

---
 Rich/Panoptes/python/Panoptes/calibration.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Rich/Panoptes/python/Panoptes/calibration.py b/Rich/Panoptes/python/Panoptes/calibration.py
index 08f29fc50..b16756cc3 100644
--- a/Rich/Panoptes/python/Panoptes/calibration.py
+++ b/Rich/Panoptes/python/Panoptes/calibration.py
@@ -11,9 +11,9 @@
 
 from PyConf.tonic import configurable
 from PyConf.application import make_odin
-from PyConf.Algorithms import (
-    TracksToSelection, Rich__Future__Rec__SIMDRecoSummary as RecSummary,
-    Rich__Future__Rec__Calib__RefIndexCalib as RefIndexCalib)
+from PyConf.Algorithms import (TracksToSelection,
+                               Rich__Future__Rec__Calib__RefIndexCalib as
+                               RefIndexCalib)
 
 from RecoConf.hlt2_tracking import make_hlt2_tracks
 from RecoConf.rich_reconstruction import (
@@ -26,7 +26,7 @@ from Moore.config import Reconstruction
 
 @configurable
 def standalone_rich_ref_index_calib():
-    """ RICH the track and RICH reco for refractive index calibration
+    """ The tracking and RICH reco for the RICH refractive index calibration
     """
 
     # Make the tracks
-- 
GitLab


From 73557077132f4e1ee1eb22a86a56b9fbbfca15b9 Mon Sep 17 00:00:00 2001
From: Chris Jones <jonesc@hep.phy.cam.ac.uk>
Date: Fri, 12 Mar 2021 10:47:14 +0000
Subject: [PATCH 2/4] Add tests to run Rich1 and Rich1 reconstruction for
 mirror alignment

---
 Rich/Panoptes/options/Rich1MirrorAlignReco.py | 26 +++++
 Rich/Panoptes/options/Rich2MirrorAlignReco.py | 26 +++++
 Rich/Panoptes/python/Panoptes/alignment.py    | 84 ++++++++++++++++
 .../tests/qmtest/rich1_mirror_align_reco.qmt  | 37 +++++++
 .../tests/qmtest/rich2_mirror_align_reco.qmt  | 37 +++++++
 .../tests/refs/rich1_mirror_align_reco.ref    | 99 +++++++++++++++++++
 ...1_mirror_align_reco.ref.skylake_avx512-opt |  1 +
 ..._mirror_align_reco.ref.x86_64+avx2+fma-opt | 99 +++++++++++++++++++
 .../tests/refs/rich2_mirror_align_reco.ref    | 99 +++++++++++++++++++
 ...2_mirror_align_reco.ref.skylake_avx512-opt |  1 +
 ..._mirror_align_reco.ref.x86_64+avx2+fma-opt | 99 +++++++++++++++++++
 11 files changed, 608 insertions(+)
 create mode 100644 Rich/Panoptes/options/Rich1MirrorAlignReco.py
 create mode 100644 Rich/Panoptes/options/Rich2MirrorAlignReco.py
 create mode 100644 Rich/Panoptes/python/Panoptes/alignment.py
 create mode 100644 Rich/Panoptes/tests/qmtest/rich1_mirror_align_reco.qmt
 create mode 100644 Rich/Panoptes/tests/qmtest/rich2_mirror_align_reco.qmt
 create mode 100644 Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref
 create mode 120000 Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref.skylake_avx512-opt
 create mode 100644 Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref.x86_64+avx2+fma-opt
 create mode 100644 Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref
 create mode 120000 Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref.skylake_avx512-opt
 create mode 100644 Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref.x86_64+avx2+fma-opt

diff --git a/Rich/Panoptes/options/Rich1MirrorAlignReco.py b/Rich/Panoptes/options/Rich1MirrorAlignReco.py
new file mode 100644
index 000000000..17d9c1fcb
--- /dev/null
+++ b/Rich/Panoptes/options/Rich1MirrorAlignReco.py
@@ -0,0 +1,26 @@
+###############################################################################
+# (c) Copyright 2019 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 Moore import options, run_reconstruction
+from Panoptes.alignment import standalone_rich_mirror_align_reco
+from PyConf.Tools import TrackMasterFitter
+from RecoConf.hlt2_tracking import make_hlt2_tracks, make_light_reco_best_tracks
+
+options.histo_file = "Rich1MirrorAlignReco.root"
+
+# Override previously set defaults
+#options.evt_max = 100000
+#options.n_threads = 4
+
+with make_light_reco_best_tracks.bind(fit_preselection="(TrP>5000.0) & (TrPT>300.0)"),\
+     TrackMasterFitter.bind(FastMaterialApproximation=True),\
+     make_hlt2_tracks.bind(use_pr_kf=False, light_reco=True, fast_reco=True),\
+     standalone_rich_mirror_align_reco.bind(RichGas="Rich1Gas"):
+    run_reconstruction(options, standalone_rich_mirror_align_reco)
diff --git a/Rich/Panoptes/options/Rich2MirrorAlignReco.py b/Rich/Panoptes/options/Rich2MirrorAlignReco.py
new file mode 100644
index 000000000..614aa8902
--- /dev/null
+++ b/Rich/Panoptes/options/Rich2MirrorAlignReco.py
@@ -0,0 +1,26 @@
+###############################################################################
+# (c) Copyright 2019 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 Moore import options, run_reconstruction
+from Panoptes.alignment import standalone_rich_mirror_align_reco
+from PyConf.Tools import TrackMasterFitter
+from RecoConf.hlt2_tracking import make_hlt2_tracks, make_light_reco_best_tracks
+
+options.histo_file = "Rich2MirrorAlignReco.root"
+
+# Override previously set defaults
+#options.evt_max = 100000
+#options.n_threads = 4
+
+with make_light_reco_best_tracks.bind(fit_preselection="(TrP>5000.0) & (TrPT>300.0)"),\
+     TrackMasterFitter.bind(FastMaterialApproximation=True),\
+     make_hlt2_tracks.bind(use_pr_kf=False, light_reco=True, fast_reco=True),\
+     standalone_rich_mirror_align_reco.bind(RichGas="Rich2Gas"):
+    run_reconstruction(options, standalone_rich_mirror_align_reco)
diff --git a/Rich/Panoptes/python/Panoptes/alignment.py b/Rich/Panoptes/python/Panoptes/alignment.py
new file mode 100644
index 000000000..5a3cc8ba4
--- /dev/null
+++ b/Rich/Panoptes/python/Panoptes/alignment.py
@@ -0,0 +1,84 @@
+###############################################################################
+# (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 PyConf.tonic import configurable
+from PyConf.Algorithms import (
+    TracksToSelection, Rich__Future__Rec__Moni__SIMDAlignment as MirrorAlign)
+
+from RecoConf.hlt2_tracking import make_hlt2_tracks
+from RecoConf.rich_reconstruction import (
+    default_rich_reco_options, make_rich_pids, get_radiator_bool_opts,
+    get_detector_bool_opts)
+from RecoConf.standalone import reco_prefilters
+
+from Moore.config import Reconstruction
+
+
+@configurable
+def standalone_rich_mirror_align_reco(RichGas="Rich1Gas"):
+    """ Reconstruction for RICH mirror alignment
+    """
+
+    # Make the tracks
+    hlt2_tracks = make_hlt2_tracks()
+
+    # The track type we use
+    track_version = "v1"
+    tkType = "Long"
+
+    # Get the fitted long tracks to use
+    tks = hlt2_tracks["Best" + tkType]
+
+    # Default RICH reco options
+    reco_opts = default_rich_reco_options()
+
+    # Radiators
+    reco_opts["RichGases"] = [RichGas]
+
+    # Enable online mode for wider CK theta side bands
+    # Paras/Anatoly - Do you need this or is the nominal setting enough ?
+    reco_opts["PhotonSelection"] = "Online"
+
+    # Enable extra photon info
+    reco_opts["SaveMirrorData"] = True
+
+    # As we aren't running PID, we do not need all hypos
+    #reco_opts["Particles"] = ["muon","pion","kaon"]
+
+    # Track selection
+    tkSel = TracksToSelection(InputLocation=tks[track_version])
+
+    # RICH photon reco
+    conf = make_rich_pids(
+        track_name=tkType,
+        input_tracks=tkSel.OutputLocation,
+        options=reco_opts)
+
+    # The detector and radiator options
+    rad_opts = get_radiator_bool_opts(reco_opts, tkType)
+    det_opts = get_detector_bool_opts(reco_opts, tkType)
+
+    # mirror alignment plots
+    alignMon = MirrorAlign(
+        name=RichGas + "MirrorAlign" + tkType,
+        Detectors=det_opts,
+        Radiators=rad_opts,
+        RichGases=[RichGas],
+        TracksLocation=tkSel.OutputLocation,
+        TrackSegmentsLocation=conf["TrackSegments"],
+        CherenkovPhotonLocation=conf["CherenkovPhotons"],
+        CherenkovAnglesLocation=conf["SignalCKAngles"],
+        SummaryTracksLocation=conf["SummaryTracks"],
+        PhotonToParentsLocation=conf["PhotonToParents"],
+        PhotonMirrorDataLocation=conf["PhotonMirrorData"])
+
+    return Reconstruction(RichGas + '_mirror_align_reco', [alignMon],
+                          reco_prefilters())
diff --git a/Rich/Panoptes/tests/qmtest/rich1_mirror_align_reco.qmt b/Rich/Panoptes/tests/qmtest/rich1_mirror_align_reco.qmt
new file mode 100644
index 000000000..b37fb6c5e
--- /dev/null
+++ b/Rich/Panoptes/tests/qmtest/rich1_mirror_align_reco.qmt
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (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.
+-->
+<!--
+Run RICH1 mirror alignment reconstruction task
+-->
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="program"><text>gaudirun.py</text></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="timeout"><integer>1200</integer></argument>
+<argument name="args"><set>
+  <text>$MOOREROOT/tests/options/mdf_input_and_conds.py</text>
+  <text>$MOOREROOT/tests/options/download_mdf_input.py</text>
+  <text>$MOOREROOT/tests/options/multi_threaded_4_threads.py</text>
+  <text>$PANOPTESROOT/options/Rich1MirrorAlignReco.py</text>
+</set></argument>
+<argument name="reference"><text>../refs/rich1_mirror_align_reco.ref</text></argument>
+<argument name="error_reference"><text>../refs/empty.ref</text></argument>
+<argument name="validator"><text>
+
+from Panoptes.qmtest.exclusions import ref_preprocessor
+validateWithReference(preproc = ref_preprocessor)
+
+from Panoptes.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "ERROR": 0, "WARNING": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
diff --git a/Rich/Panoptes/tests/qmtest/rich2_mirror_align_reco.qmt b/Rich/Panoptes/tests/qmtest/rich2_mirror_align_reco.qmt
new file mode 100644
index 000000000..40098b00f
--- /dev/null
+++ b/Rich/Panoptes/tests/qmtest/rich2_mirror_align_reco.qmt
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
+<!--
+    (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.
+-->
+<!--
+Run RICH2 mirror alignment reconstruction task
+-->
+<extension class="GaudiTest.GaudiExeTest" kind="test">
+<argument name="program"><text>gaudirun.py</text></argument>
+<argument name="use_temp_dir"><enumeral>true</enumeral></argument>
+<argument name="timeout"><integer>1200</integer></argument>
+<argument name="args"><set>
+  <text>$MOOREROOT/tests/options/mdf_input_and_conds.py</text>
+  <text>$MOOREROOT/tests/options/download_mdf_input.py</text>
+  <text>$MOOREROOT/tests/options/multi_threaded_4_threads.py</text>
+  <text>$PANOPTESROOT/options/Rich2MirrorAlignReco.py</text>
+</set></argument>
+<argument name="reference"><text>../refs/rich2_mirror_align_reco.ref</text></argument>
+<argument name="error_reference"><text>../refs/empty.ref</text></argument>
+<argument name="validator"><text>
+
+from Panoptes.qmtest.exclusions import ref_preprocessor
+validateWithReference(preproc = ref_preprocessor)
+
+from Panoptes.qmtest.exclusions import remove_known_warnings
+countErrorLines({"FATAL": 0, "ERROR": 0, "WARNING": 0},
+                stdout=remove_known_warnings(stdout))
+
+</text></argument>
+</extension>
diff --git a/Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref b/Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref
new file mode 100644
index 000000000..019c593d9
--- /dev/null
+++ b/Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref
@@ -0,0 +1,99 @@
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Skip'     map has the size 0
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Recover'  map has the size 0
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Codes'    map has the size 0
+TransportSvc                           INFO Reset the static pointer to DetDesc::IGeometyrErrorSvc
+ToolSvc                                INFO Removing all tools created by ToolSvc
+ApplicationMgr                         INFO Application Manager Finalized successfully
+ApplicationMgr                         INFO Application Manager Terminated successfully
+BestTrackCreatorForward                INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"BadInput"                                      |       958 |          0 |( 0.000000 +- 0.000000)% |
+ |*"FitFailed"                                     |       958 |          0 |( 0.000000 +- 0.000000)% |
+ | "FittedBefore"                                  |       958 |
+BestTrackCreatorMatch                  INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"BadInput"                                      |     25869 |          0 |( 0.000000 +- 0.000000)% |
+ |*"FitFailed"                                     |     25869 |          0 |( 0.000000 +- 0.000000)% |
+ | "FittedBefore"                                  |     25869 |
+LHCb__Converters__Track__PrSeedi...    INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of converted Tracks"                        |       935 |      88915 |     95.096 |
+LHCb__MDF__IOAlg                       INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks in raw event"                           |      1000 |    1025000 |     1025.0 |     0.0000 |      1025.0 |      1025.0 |
+PrForwardTrackingVelo                  INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb output tracks"                              |       929 |       5308 |     5.7137 |
+PrForwardTrackingVelo.PrAddUTHit...    INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#UT hits added"                                |      3468 |      13272 |     3.8270 |
+ | "#tracks with hits added"                       |      3468 |
+PrGECFilter                            INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb Events Processed"                           |      1000 |
+ | "Nb events removed"                             |        65 |
+PrMatchNN                              INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#MatchingChi2"                                 |    160419 |   860731.9 |     5.3655 |
+ | "#MatchingTracks"                               |       928 |      58318 |     62.843 |
+ | "TracksMLP"                                     |    160419 |   57076.32 |     0.3558 |
+PrMatchNN.PrAddUTHitsTool              INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#UT hits added"                                |     51616 |     205788 |     3.9869 |
+ | "#tracks with hits added"                       |     51616 |
+PrStorePrUTHits                        INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks"                                        |       935 |     168300 |     180.00 |
+PrStoreUTHit                           INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks"                                        |       935 |     168300 |     180.00 |
+ToolSvc.TrackFunctorFactory            INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "# loaded from PYTHON"                          |         2 |
+TrackContainerSplitterForward          INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#inputs"                                       |       935 |       5308 |     5.6770 |     4.4422 |      0.0000 |      23.000 |
+ | "#passed"                                       |       935 |        958 |     1.0246 |     1.2506 |      0.0000 |      9.0000 |
+TrackContainerSplitterMatch            INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#inputs"                                       |       935 |      58318 |     62.372 |     36.320 |      0.0000 |      191.00 |
+ | "#passed"                                       |       935 |      25903 |     27.704 |     17.027 |      0.0000 |      97.000 |
+TrackEventFitterForward                INFO Number of counters : 8
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"Fit Failure Rate"                              |       958 |          0 |( 0.000000 +- 0.000000)% |
+ | "badChisq"                                      |       958 |        473 |    0.49374 |    0.49996 |      0.0000 |      1.0000 |
+ | "chisqprobSum"                                  |       958 |   194.3273 |    0.20285 |    0.28845 |      0.0000 |      0.9977 |
+ | "flipCharge"                                    |       958 |          1 |  0.0010438 |   0.032292 |      0.0000 |      1.0000 |
+ | "nBadInput"                                     |       935 |          0 |     0.0000 |     0.0000 |      0.0000 |      0.0000 |
+ | "nFitted"                                       |       935 |        958 |     1.0246 |     1.2506 |      0.0000 |      9.0000 |
+ | "nTracks"                                       |       935 |        958 |     1.0246 |     1.2506 |      0.0000 |      9.0000 |
+ | "numOutliers"                                   |       958 |       1187 |     1.2390 |    0.87189 |      0.0000 |      2.0000 |
+TrackEventFitterMatch                  INFO Number of counters : 8
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"Fit Failure Rate"                              |     25903 |          0 |( 0.000000 +- 0.000000)% |
+ | "badChisq"                                      |     25903 |       3958 |     0.1528 |     0.3598 |      0.0000 |      1.0000 |
+ | "chisqprobSum"                                  |     25903 |   9003.377 |    0.34758 |    0.30558 |      0.0000 |     0.99999 |
+ | "flipCharge"                                    |     25903 |          1 | 3.8606e-05 |  0.0062132 |      0.0000 |      1.0000 |
+ | "nBadInput"                                     |       935 |          0 |     0.0000 |     0.0000 |      0.0000 |      0.0000 |
+ | "nFitted"                                       |       935 |      25903 |     27.704 |     17.027 |      0.0000 |      97.000 |
+ | "nTracks"                                       |       935 |      25903 |     27.704 |     17.027 |      0.0000 |      97.000 |
+ | "numOutliers"                                   |     25903 |      15713 |    0.60661 |    0.75234 |      0.0000 |      2.0000 |
+TracksFTConverter#1                    INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |       5308 |     5.6770 |
+TracksMatchConverter                   INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |      58318 |     62.372 |
+TracksVPConverter                      INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |      72102 |     77.114 |
+TracksVPMergerConverter                INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |     208195 |     222.67 |
+VPClus                                 INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Clusters"                       |       935 |    1617568 |     1730.0 |
+VeloClusterTrackingSIMD                INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Clusters"                       |       935 |    1617568 |     1730.0 |
+ | "Nb of Produced Tracks"                         |       935 |     208195 |     222.67 |
diff --git a/Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref.skylake_avx512-opt b/Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref.skylake_avx512-opt
new file mode 120000
index 000000000..97152ce7e
--- /dev/null
+++ b/Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref.skylake_avx512-opt
@@ -0,0 +1 @@
+rich_mirror_align_reco.ref.x86_64+avx2+fma-opt
\ No newline at end of file
diff --git a/Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref.x86_64+avx2+fma-opt b/Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref.x86_64+avx2+fma-opt
new file mode 100644
index 000000000..4aa88698a
--- /dev/null
+++ b/Rich/Panoptes/tests/refs/rich1_mirror_align_reco.ref.x86_64+avx2+fma-opt
@@ -0,0 +1,99 @@
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Skip'     map has the size 0
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Recover'  map has the size 0
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Codes'    map has the size 0
+TransportSvc                           INFO Reset the static pointer to DetDesc::IGeometyrErrorSvc
+ToolSvc                                INFO Removing all tools created by ToolSvc
+ApplicationMgr                         INFO Application Manager Finalized successfully
+ApplicationMgr                         INFO Application Manager Terminated successfully
+BestTrackCreatorForward                INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"BadInput"                                      |       960 |          0 |( 0.000000 +- 0.000000)% |
+ |*"FitFailed"                                     |       960 |          0 |( 0.000000 +- 0.000000)% |
+ | "FittedBefore"                                  |       960 |
+BestTrackCreatorMatch                  INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"BadInput"                                      |     25870 |          0 |( 0.000000 +- 0.000000)% |
+ |*"FitFailed"                                     |     25870 |          0 |( 0.000000 +- 0.000000)% |
+ | "FittedBefore"                                  |     25870 |
+LHCb__Converters__Track__PrSeedi...    INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of converted Tracks"                        |       935 |      88914 |     95.095 |
+LHCb__MDF__IOAlg                       INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks in raw event"                           |      1000 |    1025000 |     1025.0 |     0.0000 |      1025.0 |      1025.0 |
+PrForwardTrackingVelo                  INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb output tracks"                              |       929 |       5319 |     5.7255 |
+PrForwardTrackingVelo.PrAddUTHit...    INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#UT hits added"                                |      3485 |      13336 |     3.8267 |
+ | "#tracks with hits added"                       |      3485 |
+PrGECFilter                            INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb Events Processed"                           |      1000 |
+ | "Nb events removed"                             |        65 |
+PrMatchNN                              INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#MatchingChi2"                                 |    160714 |   862298.1 |     5.3654 |
+ | "#MatchingTracks"                               |       928 |      58410 |     62.942 |
+ | "TracksMLP"                                     |    160714 |   57166.44 |     0.3557 |
+PrMatchNN.PrAddUTHitsTool              INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#UT hits added"                                |     51690 |     206086 |     3.9870 |
+ | "#tracks with hits added"                       |     51690 |
+PrStorePrUTHits                        INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks"                                        |       935 |     168300 |     180.00 |
+PrStoreUTHit                           INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks"                                        |       935 |     168300 |     180.00 |
+ToolSvc.TrackFunctorFactory            INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "# loaded from PYTHON"                          |         2 |
+TrackContainerSplitterForward          INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#inputs"                                       |       935 |       5319 |     5.6888 |     4.4465 |      0.0000 |      24.000 |
+ | "#passed"                                       |       935 |        960 |     1.0267 |     1.2566 |      0.0000 |      9.0000 |
+TrackContainerSplitterMatch            INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#inputs"                                       |       935 |      58410 |     62.471 |     36.330 |      0.0000 |      190.00 |
+ | "#passed"                                       |       935 |      25939 |     27.742 |     17.018 |      0.0000 |      96.000 |
+TrackEventFitterForward                INFO Number of counters : 8
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"Fit Failure Rate"                              |       960 |          0 |( 0.000000 +- 0.000000)% |
+ | "badChisq"                                      |       960 |        475 |    0.49479 |    0.49997 |      0.0000 |      1.0000 |
+ | "chisqprobSum"                                  |       960 |   194.3615 |    0.20246 |    0.28831 |      0.0000 |      0.9977 |
+ | "flipCharge"                                    |       960 |          1 |  0.0010417 |   0.032258 |      0.0000 |      1.0000 |
+ | "nBadInput"                                     |       935 |          0 |     0.0000 |     0.0000 |      0.0000 |      0.0000 |
+ | "nFitted"                                       |       935 |        960 |     1.0267 |     1.2566 |      0.0000 |      9.0000 |
+ | "nTracks"                                       |       935 |        960 |     1.0267 |     1.2566 |      0.0000 |      9.0000 |
+ | "numOutliers"                                   |       960 |       1191 |     1.2406 |    0.87167 |      0.0000 |      2.0000 |
+TrackEventFitterMatch                  INFO Number of counters : 8
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"Fit Failure Rate"                              |     25939 |          0 |( 0.000000 +- 0.000000)% |
+ | "badChisq"                                      |     25939 |       3977 |    0.15332 |     0.3603 |      0.0000 |      1.0000 |
+ | "chisqprobSum"                                  |     25939 |   9009.085 |    0.34732 |    0.30559 |      0.0000 |     0.99999 |
+ | "flipCharge"                                    |     25939 |          1 | 3.8552e-05 |  0.0062089 |      0.0000 |      1.0000 |
+ | "nBadInput"                                     |       935 |          0 |     0.0000 |     0.0000 |      0.0000 |      0.0000 |
+ | "nFitted"                                       |       935 |      25939 |     27.742 |     17.018 |      0.0000 |      96.000 |
+ | "nTracks"                                       |       935 |      25939 |     27.742 |     17.018 |      0.0000 |      96.000 |
+ | "numOutliers"                                   |     25939 |      15757 |    0.60746 |    0.75263 |      0.0000 |      2.0000 |
+TracksFTConverter#1                    INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |       5319 |     5.6888 |
+TracksMatchConverter                   INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |      58410 |     62.471 |
+TracksVPConverter                      INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |      72320 |     77.348 |
+TracksVPMergerConverter                INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |     208704 |     223.21 |
+VPClus                                 INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Clusters"                       |       935 |    1617568 |     1730.0 |
+VeloClusterTrackingSIMD                INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Clusters"                       |       935 |    1617568 |     1730.0 |
+ | "Nb of Produced Tracks"                         |       935 |     208704 |     223.21 |
diff --git a/Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref b/Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref
new file mode 100644
index 000000000..cb385b8aa
--- /dev/null
+++ b/Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref
@@ -0,0 +1,99 @@
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Skip'     map has the size 0
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Recover'  map has the size 0
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Codes'    map has the size 0
+TransportSvc                           INFO Reset the static pointer to DetDesc::IGeometyrErrorSvc
+ToolSvc                                INFO Removing all tools created by ToolSvc
+ApplicationMgr                         INFO Application Manager Finalized successfully
+ApplicationMgr                         INFO Application Manager Terminated successfully
+BestTrackCreatorForward                INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"BadInput"                                      |       958 |          0 |( 0.000000 +- 0.000000)% |
+ |*"FitFailed"                                     |       958 |          0 |( 0.000000 +- 0.000000)% |
+ | "FittedBefore"                                  |       958 |
+BestTrackCreatorMatch                  INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"BadInput"                                      |     25869 |          0 |( 0.000000 +- 0.000000)% |
+ |*"FitFailed"                                     |     25869 |          0 |( 0.000000 +- 0.000000)% |
+ | "FittedBefore"                                  |     25869 |
+LHCb__Converters__Track__PrSeedi...    INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of converted Tracks"                        |       935 |      88915 |     95.096 |
+LHCb__MDF__IOAlg                       INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks in raw event"                           |      1000 |    1025000 |     1025.0 |     0.0000 |      1025.0 |      1025.0 |
+PrForwardTrackingVelo                  INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb output tracks"                              |       929 |       5308 |     5.7137 |
+PrForwardTrackingVelo.PrAddUTHit...    INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#UT hits added"                                |      3468 |      13272 |     3.8270 |
+ | "#tracks with hits added"                       |      3468 |
+PrGECFilter                            INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb Events Processed"                           |      1000 |
+ | "Nb events removed"                             |        65 |
+PrMatchNN                              INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#MatchingChi2"                                 |    160419 |   860731.9 |     5.3655 |
+ | "#MatchingTracks"                               |       928 |      58318 |     62.843 |
+ | "TracksMLP"                                     |    160419 |   57076.33 |     0.3558 |
+PrMatchNN.PrAddUTHitsTool              INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#UT hits added"                                |     51616 |     205788 |     3.9869 |
+ | "#tracks with hits added"                       |     51616 |
+PrStorePrUTHits                        INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks"                                        |       935 |     168300 |     180.00 |
+PrStoreUTHit                           INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks"                                        |       935 |     168300 |     180.00 |
+ToolSvc.TrackFunctorFactory            INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "# loaded from PYTHON"                          |         2 |
+TrackContainerSplitterForward          INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#inputs"                                       |       935 |       5308 |     5.6770 |     4.4422 |      0.0000 |      23.000 |
+ | "#passed"                                       |       935 |        958 |     1.0246 |     1.2506 |      0.0000 |      9.0000 |
+TrackContainerSplitterMatch            INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#inputs"                                       |       935 |      58318 |     62.372 |     36.320 |      0.0000 |      191.00 |
+ | "#passed"                                       |       935 |      25903 |     27.704 |     17.027 |      0.0000 |      97.000 |
+TrackEventFitterForward                INFO Number of counters : 8
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"Fit Failure Rate"                              |       958 |          0 |( 0.000000 +- 0.000000)% |
+ | "badChisq"                                      |       958 |        473 |    0.49374 |    0.49996 |      0.0000 |      1.0000 |
+ | "chisqprobSum"                                  |       958 |   194.3273 |    0.20285 |    0.28845 |      0.0000 |      0.9977 |
+ | "flipCharge"                                    |       958 |          1 |  0.0010438 |   0.032292 |      0.0000 |      1.0000 |
+ | "nBadInput"                                     |       935 |          0 |     0.0000 |     0.0000 |      0.0000 |      0.0000 |
+ | "nFitted"                                       |       935 |        958 |     1.0246 |     1.2506 |      0.0000 |      9.0000 |
+ | "nTracks"                                       |       935 |        958 |     1.0246 |     1.2506 |      0.0000 |      9.0000 |
+ | "numOutliers"                                   |       958 |       1187 |     1.2390 |    0.87189 |      0.0000 |      2.0000 |
+TrackEventFitterMatch                  INFO Number of counters : 8
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"Fit Failure Rate"                              |     25903 |          0 |( 0.000000 +- 0.000000)% |
+ | "badChisq"                                      |     25903 |       3958 |     0.1528 |     0.3598 |      0.0000 |      1.0000 |
+ | "chisqprobSum"                                  |     25903 |   9003.377 |    0.34758 |    0.30558 |      0.0000 |     0.99999 |
+ | "flipCharge"                                    |     25903 |          1 | 3.8606e-05 |  0.0062132 |      0.0000 |      1.0000 |
+ | "nBadInput"                                     |       935 |          0 |     0.0000 |     0.0000 |      0.0000 |      0.0000 |
+ | "nFitted"                                       |       935 |      25903 |     27.704 |     17.027 |      0.0000 |      97.000 |
+ | "nTracks"                                       |       935 |      25903 |     27.704 |     17.027 |      0.0000 |      97.000 |
+ | "numOutliers"                                   |     25903 |      15713 |    0.60661 |    0.75234 |      0.0000 |      2.0000 |
+TracksFTConverter#1                    INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |       5308 |     5.6770 |
+TracksMatchConverter                   INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |      58318 |     62.372 |
+TracksVPConverter                      INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |      72102 |     77.114 |
+TracksVPMergerConverter                INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |     208195 |     222.67 |
+VPClus                                 INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Clusters"                       |       935 |    1617568 |     1730.0 |
+VeloClusterTrackingSIMD                INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Clusters"                       |       935 |    1617568 |     1730.0 |
+ | "Nb of Produced Tracks"                         |       935 |     208195 |     222.67 |
diff --git a/Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref.skylake_avx512-opt b/Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref.skylake_avx512-opt
new file mode 120000
index 000000000..2087b2698
--- /dev/null
+++ b/Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref.skylake_avx512-opt
@@ -0,0 +1 @@
+rich2_mirror_align_reco.ref.x86_64+avx2+fma-opt
\ No newline at end of file
diff --git a/Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref.x86_64+avx2+fma-opt b/Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref.x86_64+avx2+fma-opt
new file mode 100644
index 000000000..4aa88698a
--- /dev/null
+++ b/Rich/Panoptes/tests/refs/rich2_mirror_align_reco.ref.x86_64+avx2+fma-opt
@@ -0,0 +1,99 @@
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Skip'     map has the size 0
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Recover'  map has the size 0
+TransportSvc                        SUCCESS  GEOMETRY ERRORS: 'Codes'    map has the size 0
+TransportSvc                           INFO Reset the static pointer to DetDesc::IGeometyrErrorSvc
+ToolSvc                                INFO Removing all tools created by ToolSvc
+ApplicationMgr                         INFO Application Manager Finalized successfully
+ApplicationMgr                         INFO Application Manager Terminated successfully
+BestTrackCreatorForward                INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"BadInput"                                      |       960 |          0 |( 0.000000 +- 0.000000)% |
+ |*"FitFailed"                                     |       960 |          0 |( 0.000000 +- 0.000000)% |
+ | "FittedBefore"                                  |       960 |
+BestTrackCreatorMatch                  INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"BadInput"                                      |     25870 |          0 |( 0.000000 +- 0.000000)% |
+ |*"FitFailed"                                     |     25870 |          0 |( 0.000000 +- 0.000000)% |
+ | "FittedBefore"                                  |     25870 |
+LHCb__Converters__Track__PrSeedi...    INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of converted Tracks"                        |       935 |      88914 |     95.095 |
+LHCb__MDF__IOAlg                       INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks in raw event"                           |      1000 |    1025000 |     1025.0 |     0.0000 |      1025.0 |      1025.0 |
+PrForwardTrackingVelo                  INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb output tracks"                              |       929 |       5319 |     5.7255 |
+PrForwardTrackingVelo.PrAddUTHit...    INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#UT hits added"                                |      3485 |      13336 |     3.8267 |
+ | "#tracks with hits added"                       |      3485 |
+PrGECFilter                            INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb Events Processed"                           |      1000 |
+ | "Nb events removed"                             |        65 |
+PrMatchNN                              INFO Number of counters : 3
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#MatchingChi2"                                 |    160714 |   862298.1 |     5.3654 |
+ | "#MatchingTracks"                               |       928 |      58410 |     62.942 |
+ | "TracksMLP"                                     |    160714 |   57166.44 |     0.3557 |
+PrMatchNN.PrAddUTHitsTool              INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#UT hits added"                                |     51690 |     206086 |     3.9870 |
+ | "#tracks with hits added"                       |     51690 |
+PrStorePrUTHits                        INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks"                                        |       935 |     168300 |     180.00 |
+PrStoreUTHit                           INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#banks"                                        |       935 |     168300 |     180.00 |
+ToolSvc.TrackFunctorFactory            INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "# loaded from PYTHON"                          |         2 |
+TrackContainerSplitterForward          INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#inputs"                                       |       935 |       5319 |     5.6888 |     4.4465 |      0.0000 |      24.000 |
+ | "#passed"                                       |       935 |        960 |     1.0267 |     1.2566 |      0.0000 |      9.0000 |
+TrackContainerSplitterMatch            INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "#inputs"                                       |       935 |      58410 |     62.471 |     36.330 |      0.0000 |      190.00 |
+ | "#passed"                                       |       935 |      25939 |     27.742 |     17.018 |      0.0000 |      96.000 |
+TrackEventFitterForward                INFO Number of counters : 8
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"Fit Failure Rate"                              |       960 |          0 |( 0.000000 +- 0.000000)% |
+ | "badChisq"                                      |       960 |        475 |    0.49479 |    0.49997 |      0.0000 |      1.0000 |
+ | "chisqprobSum"                                  |       960 |   194.3615 |    0.20246 |    0.28831 |      0.0000 |      0.9977 |
+ | "flipCharge"                                    |       960 |          1 |  0.0010417 |   0.032258 |      0.0000 |      1.0000 |
+ | "nBadInput"                                     |       935 |          0 |     0.0000 |     0.0000 |      0.0000 |      0.0000 |
+ | "nFitted"                                       |       935 |        960 |     1.0267 |     1.2566 |      0.0000 |      9.0000 |
+ | "nTracks"                                       |       935 |        960 |     1.0267 |     1.2566 |      0.0000 |      9.0000 |
+ | "numOutliers"                                   |       960 |       1191 |     1.2406 |    0.87167 |      0.0000 |      2.0000 |
+TrackEventFitterMatch                  INFO Number of counters : 8
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ |*"Fit Failure Rate"                              |     25939 |          0 |( 0.000000 +- 0.000000)% |
+ | "badChisq"                                      |     25939 |       3977 |    0.15332 |     0.3603 |      0.0000 |      1.0000 |
+ | "chisqprobSum"                                  |     25939 |   9009.085 |    0.34732 |    0.30559 |      0.0000 |     0.99999 |
+ | "flipCharge"                                    |     25939 |          1 | 3.8552e-05 |  0.0062089 |      0.0000 |      1.0000 |
+ | "nBadInput"                                     |       935 |          0 |     0.0000 |     0.0000 |      0.0000 |      0.0000 |
+ | "nFitted"                                       |       935 |      25939 |     27.742 |     17.018 |      0.0000 |      96.000 |
+ | "nTracks"                                       |       935 |      25939 |     27.742 |     17.018 |      0.0000 |      96.000 |
+ | "numOutliers"                                   |     25939 |      15757 |    0.60746 |    0.75263 |      0.0000 |      2.0000 |
+TracksFTConverter#1                    INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |       5319 |     5.6888 |
+TracksMatchConverter                   INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |      58410 |     62.471 |
+TracksVPConverter                      INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |      72320 |     77.348 |
+TracksVPMergerConverter                INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Tracks"                         |       935 |     208704 |     223.21 |
+VPClus                                 INFO Number of counters : 1
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Clusters"                       |       935 |    1617568 |     1730.0 |
+VeloClusterTrackingSIMD                INFO Number of counters : 2
+ |    Counter                                      |     #     |    sum     | mean/eff^* | rms/err^*  |     min     |     max     |
+ | "Nb of Produced Clusters"                       |       935 |    1617568 |     1730.0 |
+ | "Nb of Produced Tracks"                         |       935 |     208704 |     223.21 |
-- 
GitLab


From 530339aae2b1adfa1a9e5bf4e8666c633ba83390 Mon Sep 17 00:00:00 2001
From: Anatoly Solomin <anatoly.solomin@bristol.ac.uk>
Date: Sun, 6 Jun 2021 23:23:10 +0300
Subject: [PATCH 3/4] Add handles to more options, specific to mirror alignment

---
 Rich/Panoptes/options/Rich1MirrorAlignReco.py | 19 ++++--
 Rich/Panoptes/options/Rich2MirrorAlignReco.py | 19 ++++--
 Rich/Panoptes/python/Panoptes/alignment.py    | 58 ++++++++++++++-----
 .../tests/qmtest/rich1_mirror_align_reco.qmt  |  3 +-
 .../tests/qmtest/rich2_mirror_align_reco.qmt  |  3 +-
 5 files changed, 75 insertions(+), 27 deletions(-)

diff --git a/Rich/Panoptes/options/Rich1MirrorAlignReco.py b/Rich/Panoptes/options/Rich1MirrorAlignReco.py
index 17d9c1fcb..c8e67e782 100644
--- a/Rich/Panoptes/options/Rich1MirrorAlignReco.py
+++ b/Rich/Panoptes/options/Rich1MirrorAlignReco.py
@@ -8,11 +8,20 @@
 # granted to it by virtue of its status as an Intergovernmental Organization  #
 # or submit itself to any jurisdiction.                                       #
 ###############################################################################
-from Moore import options, run_reconstruction
-from Panoptes.alignment import standalone_rich_mirror_align_reco
-from PyConf.Tools import TrackMasterFitter
-from RecoConf.hlt2_tracking import make_hlt2_tracks, make_light_reco_best_tracks
+from Moore import (
+    options,
+    run_reconstruction,
+)
+from Panoptes.alignment import (
+    standalone_rich_mirror_align_reco, )
 
+from PyConf.Tools import {
+    TrackMasterFitter, )
+
+from RecoConf.hlt2_tracking import (
+    make_hlt2_tracks,
+    make_light_reco_best_tracks,
+)
 options.histo_file = "Rich1MirrorAlignReco.root"
 
 # Override previously set defaults
@@ -22,5 +31,5 @@ options.histo_file = "Rich1MirrorAlignReco.root"
 with make_light_reco_best_tracks.bind(fit_preselection="(TrP>5000.0) & (TrPT>300.0)"),\
      TrackMasterFitter.bind(FastMaterialApproximation=True),\
      make_hlt2_tracks.bind(use_pr_kf=False, light_reco=True, fast_reco=True),\
-     standalone_rich_mirror_align_reco.bind(RichGas="Rich1Gas"):
+     standalone_rich_mirror_align_reco.bind(RichGas="Rich1Gas", align_tasks=["Produce"]):
     run_reconstruction(options, standalone_rich_mirror_align_reco)
diff --git a/Rich/Panoptes/options/Rich2MirrorAlignReco.py b/Rich/Panoptes/options/Rich2MirrorAlignReco.py
index 614aa8902..c235d7c80 100644
--- a/Rich/Panoptes/options/Rich2MirrorAlignReco.py
+++ b/Rich/Panoptes/options/Rich2MirrorAlignReco.py
@@ -8,11 +8,20 @@
 # granted to it by virtue of its status as an Intergovernmental Organization  #
 # or submit itself to any jurisdiction.                                       #
 ###############################################################################
-from Moore import options, run_reconstruction
-from Panoptes.alignment import standalone_rich_mirror_align_reco
-from PyConf.Tools import TrackMasterFitter
-from RecoConf.hlt2_tracking import make_hlt2_tracks, make_light_reco_best_tracks
+from Moore import (
+    options,
+    run_reconstruction,
+)
+from Panoptes.alignment import (
+    standalone_rich_mirror_align_reco, )
 
+from PyConf.Tools import {
+    TrackMasterFitter, )
+
+from RecoConf.hlt2_tracking import (
+    make_hlt2_tracks,
+    make_light_reco_best_tracks,
+)
 options.histo_file = "Rich2MirrorAlignReco.root"
 
 # Override previously set defaults
@@ -22,5 +31,5 @@ options.histo_file = "Rich2MirrorAlignReco.root"
 with make_light_reco_best_tracks.bind(fit_preselection="(TrP>5000.0) & (TrPT>300.0)"),\
      TrackMasterFitter.bind(FastMaterialApproximation=True),\
      make_hlt2_tracks.bind(use_pr_kf=False, light_reco=True, fast_reco=True),\
-     standalone_rich_mirror_align_reco.bind(RichGas="Rich2Gas"):
+     standalone_rich_mirror_align_reco.bind(RichGas="Rich2Gas", align_tasks=["Produce"]):
     run_reconstruction(options, standalone_rich_mirror_align_reco)
diff --git a/Rich/Panoptes/python/Panoptes/alignment.py b/Rich/Panoptes/python/Panoptes/alignment.py
index 5a3cc8ba4..177b18a95 100644
--- a/Rich/Panoptes/python/Panoptes/alignment.py
+++ b/Rich/Panoptes/python/Panoptes/alignment.py
@@ -8,22 +8,37 @@
 # granted to it by virtue of its status as an Intergovernmental Organization  #
 # or submit itself to any jurisdiction.                                       #
 ###############################################################################
+from Moore.config import (
+    Reconstruction, )
 
-from PyConf.tonic import configurable
 from PyConf.Algorithms import (
-    TracksToSelection, Rich__Future__Rec__Moni__SIMDAlignment as MirrorAlign)
-
-from RecoConf.hlt2_tracking import make_hlt2_tracks
+    TracksToSelection,
+    Rich__Future__Rec__Moni__SIMDAlignment as MirrorAlign,
+)
+from PyConf.tonic import (
+    configurable, )
+
+from RecoConf.hlt2_tracking import (
+    make_hlt2_tracks, )
+
+from RecoConf.rich_data_monitoring import (
+    alignment_rich_monitoring_options,
+    default_rich_monitoring_options,
+)
 from RecoConf.rich_reconstruction import (
-    default_rich_reco_options, make_rich_pids, get_radiator_bool_opts,
-    get_detector_bool_opts)
-from RecoConf.standalone import reco_prefilters
-
-from Moore.config import Reconstruction
-
+    default_rich_reco_options,
+    get_radiator_bool_opts,
+    get_detector_bool_opts,
+    make_rich_pids,
+)
+from RecoConf.standalone import (
+    reco_prefilters, )
 
 @configurable
-def standalone_rich_mirror_align_reco(RichGas="Rich1Gas"):
+def standalone_rich_mirror_align_reco(
+    RichGas="Rich1Gas",
+    align_tasks=["Produce"],
+):
     """ Reconstruction for RICH mirror alignment
     """
 
@@ -66,7 +81,15 @@ def standalone_rich_mirror_align_reco(RichGas="Rich1Gas"):
     rad_opts = get_radiator_bool_opts(reco_opts, tkType)
     det_opts = get_detector_bool_opts(reco_opts, tkType)
 
-    # mirror alignment plots
+    # Data monitoring options
+    moni_opts = default_rich_monitoring_options()
+    # More monitoring options in case of the RICH alignment monitoring.
+    more_moni_opts = alignment_rich_monitoring_options(
+        radiator=[RichGas])
+    moni_opts.update(more_moni_opts)
+
+
+    # mirror alignment histograms
     alignMon = MirrorAlign(
         name=RichGas + "MirrorAlign" + tkType,
         Detectors=det_opts,
@@ -78,7 +101,16 @@ def standalone_rich_mirror_align_reco(RichGas="Rich1Gas"):
         CherenkovAnglesLocation=conf["SignalCKAngles"],
         SummaryTracksLocation=conf["SummaryTracks"],
         PhotonToParentsLocation=conf["PhotonToParents"],
-        PhotonMirrorDataLocation=conf["PhotonMirrorData"])
+        PhotonMirrorDataLocation=conf["PhotonMirrorData"],
+        # more options for RICH mirror alignment:
+        PrebookHistos=moni_opts["PrebookHistos"],
+        MinPtot=moni_opts["MinPtot"],
+        DeltaThetaRange=moni_opts["DeltaThetaRange"],
+        NPhiBins=moni_opts["NPhiBins"],
+        NThetaBins=moni_opts["NThetaBins"],
+        HistoOutputLevel=moni_opts["HistoOutputLevel"],
+        AlignmentTasks=align_tasks,
+    )
 
     return Reconstruction(RichGas + '_mirror_align_reco', [alignMon],
                           reco_prefilters())
diff --git a/Rich/Panoptes/tests/qmtest/rich1_mirror_align_reco.qmt b/Rich/Panoptes/tests/qmtest/rich1_mirror_align_reco.qmt
index b37fb6c5e..625e14343 100644
--- a/Rich/Panoptes/tests/qmtest/rich1_mirror_align_reco.qmt
+++ b/Rich/Panoptes/tests/qmtest/rich1_mirror_align_reco.qmt
@@ -17,8 +17,7 @@ Run RICH1 mirror alignment reconstruction task
 <argument name="use_temp_dir"><enumeral>true</enumeral></argument>
 <argument name="timeout"><integer>1200</integer></argument>
 <argument name="args"><set>
-  <text>$MOOREROOT/tests/options/mdf_input_and_conds.py</text>
-  <text>$MOOREROOT/tests/options/download_mdf_input.py</text>
+  <text>$MOOREROOT/tests/options/default_input_and_conds_hlt2.py</text>
   <text>$MOOREROOT/tests/options/multi_threaded_4_threads.py</text>
   <text>$PANOPTESROOT/options/Rich1MirrorAlignReco.py</text>
 </set></argument>
diff --git a/Rich/Panoptes/tests/qmtest/rich2_mirror_align_reco.qmt b/Rich/Panoptes/tests/qmtest/rich2_mirror_align_reco.qmt
index 40098b00f..e3db40b99 100644
--- a/Rich/Panoptes/tests/qmtest/rich2_mirror_align_reco.qmt
+++ b/Rich/Panoptes/tests/qmtest/rich2_mirror_align_reco.qmt
@@ -17,8 +17,7 @@ Run RICH2 mirror alignment reconstruction task
 <argument name="use_temp_dir"><enumeral>true</enumeral></argument>
 <argument name="timeout"><integer>1200</integer></argument>
 <argument name="args"><set>
-  <text>$MOOREROOT/tests/options/mdf_input_and_conds.py</text>
-  <text>$MOOREROOT/tests/options/download_mdf_input.py</text>
+  <text>$MOOREROOT/tests/options/default_input_and_conds_hlt2.py</text>
   <text>$MOOREROOT/tests/options/multi_threaded_4_threads.py</text>
   <text>$PANOPTESROOT/options/Rich2MirrorAlignReco.py</text>
 </set></argument>
-- 
GitLab


From 4c9c15b850502d569171a67c124c18ff9feeaf2c Mon Sep 17 00:00:00 2001
From: Gitlab CI <noreply@cern.ch>
Date: Sun, 6 Jun 2021 20:23:36 +0000
Subject: [PATCH 4/4] Fixed formatting

patch generated by https://gitlab.cern.ch/lhcb/Panoptes/-/jobs/14325149
---
 Rich/Panoptes/python/Panoptes/alignment.py | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/Rich/Panoptes/python/Panoptes/alignment.py b/Rich/Panoptes/python/Panoptes/alignment.py
index 177b18a95..e35d9df3c 100644
--- a/Rich/Panoptes/python/Panoptes/alignment.py
+++ b/Rich/Panoptes/python/Panoptes/alignment.py
@@ -34,10 +34,11 @@ from RecoConf.rich_reconstruction import (
 from RecoConf.standalone import (
     reco_prefilters, )
 
+
 @configurable
 def standalone_rich_mirror_align_reco(
-    RichGas="Rich1Gas",
-    align_tasks=["Produce"],
+        RichGas="Rich1Gas",
+        align_tasks=["Produce"],
 ):
     """ Reconstruction for RICH mirror alignment
     """
@@ -84,11 +85,9 @@ def standalone_rich_mirror_align_reco(
     # Data monitoring options
     moni_opts = default_rich_monitoring_options()
     # More monitoring options in case of the RICH alignment monitoring.
-    more_moni_opts = alignment_rich_monitoring_options(
-        radiator=[RichGas])
+    more_moni_opts = alignment_rich_monitoring_options(radiator=[RichGas])
     moni_opts.update(more_moni_opts)
 
-
     # mirror alignment histograms
     alignMon = MirrorAlign(
         name=RichGas + "MirrorAlign" + tkType,
-- 
GitLab