From 8198c0f656971751387e0df1eb5172da6c3ad8c1 Mon Sep 17 00:00:00 2001
From: tbold <tomasz.bold@cern.ch>
Date: Tue, 16 Jul 2024 14:23:42 +0200
Subject: [PATCH 1/5] Setup Extension alg in FPGATest on RDO

---
 .../src/TrackExtensionAlg.cxx                 | 10 +++++--
 .../src/TrackExtensionAlg.h                   |  2 +-
 .../ActsTrackReconstruction_entries.cxx       |  2 ++
 .../python/FPGATrackExtensionConfig.py        | 28 +++++++++++++++++++
 .../python/FPGATrackSimAnalysisConfig.py      |  5 ++--
 .../FPGATrackAnalysisOnRDO.sh                 |  3 +-
 .../test/FPGATrackingSimACTSIntTest.sh        |  0
 7 files changed, 43 insertions(+), 7 deletions(-)
 create mode 100644 Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackExtensionConfig.py
 mode change 100644 => 100755 Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/test/FPGATrackingSimACTSIntTest.sh

diff --git a/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.cxx b/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.cxx
index c1bc47b93f5d..22ee8ee7bd38 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.cxx
+++ b/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.cxx
@@ -38,6 +38,7 @@ namespace ActsTrk{
         ActsTrk::prefixFromTrackContainerName(m_trackContainerKey.key())));
     ATH_CHECK(m_ATLASConverterTool.retrieve());
     ATH_CHECK(m_trackingGeometryTool.retrieve());
+    ATH_CHECK(m_pixelDetEleCollKey.initialize());
 
     m_logger = makeActsAthenaLogger(this, name());
 
@@ -93,12 +94,15 @@ namespace ActsTrk{
     std::shared_ptr<Acts::PerigeeSurface> perigeeSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
 
 
-    for (const ActsTrk::ProtoTrack& protTrack : *protoTracksHandle) {
-      auto result = m_ckfConfig->ckf.findTracks(*protTrack.parameters, buildCKFOptions(context, perigeeSurface.get()),
+    for (const ActsTrk::ProtoTrack& protoTrack : *protoTracksHandle) {
+      ATH_MSG_DEBUG("Extending proto track of " << protoTrack.measurements.size() << " measurements");
+      auto result = m_ckfConfig->ckf.findTracks(*protoTrack.parameters, buildCKFOptions(context, perigeeSurface.get()),
                                                        tracksContainerTemp);
-
+      ATH_MSG_DEBUG("Built " << tracksContainerTemp.size() << " tracks from it");
       for (detail::RecoTrackContainer::TrackProxy tempTrackProxy : tracksContainerTemp) {
         ActsTrk::MutableTrackContainer::TrackProxy destTrackProxy = trackContainer.makeTrack();
+        ATH_MSG_DEBUG("This track has now " << tempTrackProxy.nMeasurements());
+
         destTrackProxy.copyFrom(tempTrackProxy);
       }
     }
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.h b/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.h
index a464fa3525e1..08498930586b 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.h
+++ b/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.h
@@ -51,7 +51,7 @@ class TrackExtensionAlg : public AthReentrantAlgorithm {
   ToolHandle<ActsTrk::IActsToTrkConverterTool> m_ATLASConverterTool{
       this, "ATLASConverterTool", ""};
   SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection>
-      m_pixelDetEleCollKey{this, "PixelDetEleCollKey", "",
+      m_pixelDetEleCollKey{this, "PixelDetEleCollKey", "ITkPixelDetectorElementCollection",
                            "Key of SiDetectorElementCollection for Pixel"};
   ToolHandle<IActsTrackingGeometryTool> m_trackingGeometryTool{
       this, "TrackingGeometryTool", ""};
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/components/ActsTrackReconstruction_entries.cxx b/Tracking/Acts/ActsTrackReconstruction/src/components/ActsTrackReconstruction_entries.cxx
index a1312a782bc4..1179b3b9659b 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/components/ActsTrackReconstruction_entries.cxx
+++ b/Tracking/Acts/ActsTrackReconstruction/src/components/ActsTrackReconstruction_entries.cxx
@@ -12,6 +12,7 @@
 #include "src/KalmanFitter.h"
 #include "src/GaussianSumFitter.h"
 #include "src/ProtoTrackCreationAndFitAlg.h"
+#include "src/TrackExtensionAlg.h"
 #include "src/ProtoTrackReportingAlg.h"
 #include "src/RandomProtoTrackCreator.h"
 #include "src/TruthGuidedProtoTrackCreator.h"
@@ -20,6 +21,7 @@ DECLARE_COMPONENT( ActsTrk::TrackFindingAlg )
 DECLARE_COMPONENT( ActsTrk::ReFitterAlg )
 DECLARE_COMPONENT( ActsTrk::AmbiguityResolutionAlg )
 DECLARE_COMPONENT( ActsTrk::ProtoTrackCreationAndFitAlg )
+DECLARE_COMPONENT( ActsTrk::TrackExtensionAlg )
 DECLARE_COMPONENT( ActsTrk::ProtoTrackReportingAlg )
 DECLARE_COMPONENT( ActsTrk::TrackToTrackParticleCnvAlg )
 
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackExtensionConfig.py b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackExtensionConfig.py
new file mode 100644
index 000000000000..205de126ef01
--- /dev/null
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackExtensionConfig.py
@@ -0,0 +1,28 @@
+    #  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.ComponentFactory import CompFactory
+
+def FPGATrackExtensionAlgCfg(flags, **kwargs):
+    acc = ComponentAccumulator()
+
+    kwargs.setdefault("PixelClusterContainer", "ITkPixelClusters")
+    kwargs.setdefault("ACTSTracksLocation", "ExtendedFPGATracks")
+    if "ExtrapolationTool" not in kwargs:
+        from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
+        kwargs["ExtrapolationTool"] = acc.popToolsAndMerge(
+            ActsExtrapolationToolCfg(flags, MaxSteps=100)
+        ) # PrivateToolHandle
+    if 'ATLASConverterTool' not in kwargs:
+        from ActsConfig.ActsEventCnvConfig import ActsToTrkConverterToolCfg
+        kwargs["ATLASConverterTool"] = acc.popToolsAndMerge(ActsToTrkConverterToolCfg(flags))
+
+    if "TrackingGeometryTool" not in kwargs:
+        from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
+        kwargs["TrackingGeometryTool"] = acc.popToolsAndMerge(ActsTrackingGeometryToolCfg(flags))
+
+    from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
+    acc.merge(ITkPixelReadoutGeometryCfg(flags))
+
+    acc.addEventAlgo(CompFactory.ActsTrk.TrackExtensionAlg(**kwargs))
+    return acc
\ No newline at end of file
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
index 4cb6776c2288..ec4beb6dcbcd 100755
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
@@ -610,8 +610,9 @@ if __name__ == "__main__":
         
         from FPGATrackSimPrototrackFitter.FPGATrackSimPrototrackFitterConfig import FPGAPrototrackFitAndTruthDecorationCfg
         acc.merge(FPGAPrototrackFitAndTruthDecorationCfg(flags,FinalProtoTrackChainxAODTracksKey=FinalProtoTrackChainxAODTracksKey,stage='_1st')) # Run ACTS KF for 1st stage
-        
-        # write to AOD
+        from FPGATrackSimConfTools.FPGATrackExtensionConfig import FPGATrackExtensionAlgCfg
+        acc.merge(FPGATrackExtensionAlgCfg(flags, name="FPGATrackExtension", ProtoTracksLocation=FinalProtoTrackChainxAODTracksKey, OutputLevel=2)) # run CKF track extension on FPGA tracks
+
         if flags.Trigger.FPGATrackSim.writeToAOD: acc.merge(WriteToAOD(flags, stage = '_1st'))
         if flags.Trigger.FPGATrackSim.Hough.secondStage : acc.merge(FPGAConversionAlgCfg(flags, name = 'FPGAConversionAlg_2nd', stage = '_2nd')) # Default disabled, doesn't work if enabled
         if flags.Trigger.FPGATrackSim.convertUnmappedHits: acc.merge(FPGAConversionAlgCfg(flags, name = 'FPGAConversionAlgUnmapped_1st', stage = 'Unmapped_1st', doClusters = False))
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/test/FPGATrackWorkflow/FPGATrackAnalysisOnRDO.sh b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/test/FPGATrackWorkflow/FPGATrackAnalysisOnRDO.sh
index d81f4c2240c3..53c1d5cfb3b2 100755
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/test/FPGATrackWorkflow/FPGATrackAnalysisOnRDO.sh
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/test/FPGATrackWorkflow/FPGATrackAnalysisOnRDO.sh
@@ -17,7 +17,8 @@ python -m FPGATrackSimConfTools.FPGATrackSimAnalysisConfig \
     Trigger.FPGATrackSim.mapsDir=${MAPS} \
     Trigger.FPGATrackSim.tracking=True \
     Trigger.FPGATrackSim.sampleType='singleMuons' \
-    Trigger.FPGATrackSim.bankDir=${BANKS}
+    Trigger.FPGATrackSim.bankDir=${BANKS} \
+    Trigger.FPGATrackSim.doEDMConversion=True
 ls -l
 echo "... analysis on RDO, this part is done ..."
 
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/test/FPGATrackingSimACTSIntTest.sh b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/test/FPGATrackingSimACTSIntTest.sh
old mode 100644
new mode 100755
-- 
GitLab


From 03a6670b36e4ae4dca4cc42ed1ed7d86dd1a5fb0 Mon Sep 17 00:00:00 2001
From: tbold <tomasz.bold@cern.ch>
Date: Wed, 17 Jul 2024 15:30:36 +0200
Subject: [PATCH 2/5] Advance in configuring extension alg

---
 .../python/FPGATrackSimAnalysisConfig.py      | 22 ++++++++++++-------
 .../FPGATrackSimPrototrackFitterConfig.py     | 11 +++++++---
 2 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
index ec4beb6dcbcd..640b5a58d7a7 100755
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
@@ -355,7 +355,8 @@ def prepareFlagsForFPGATrackSimLogicalHistProcessAlg(flags):
 
 def FPGAClusterConverterCfg(flags):
     result=ComponentAccumulator()
-    FPGAClusterConverter = CompFactory.FPGAClusterConverter()
+    from SiLorentzAngleTool.ITkStripLorentzAngleConfig import ITkStripLorentzAngleToolCfg
+    FPGAClusterConverter = CompFactory.FPGAClusterConverter(LorentzAngleTool=acc.popToolsAndMerge(ITkStripLorentzAngleToolCfg(flags)))
     result.setPrivateTools(FPGAClusterConverter)
 
     return result
@@ -490,6 +491,8 @@ def FPGAConversionAlgCfg(inputFlags, name = 'FPGAConversionAlg', stage = '', **k
     flags = prepareFlagsForFPGATrackSimLogicalHistProcessAlg(inputFlags)
    
     result=ComponentAccumulator()
+    from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
+    result.merge(ITkStripReadoutGeometryCfg(flags))
 
     kwargs.setdefault("FPGATrackSimClusterKey", "FPGAClusters%s" %(stage))
     kwargs.setdefault("FPGATrackSimHitKey", "FPGAHits%s" %(stage))
@@ -547,7 +550,6 @@ if __name__ == "__main__":
     from AthenaConfiguration.MainServicesConfig import MainServicesCfg
 
     flags = initConfigFlags()
-    flags.fillFromArgs()
     
     from AthenaConfiguration.TestDefaults import defaultGeometryTags
     flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN4
@@ -576,7 +578,9 @@ if __name__ == "__main__":
     flags.PhysVal.IDPVM.doTechnicalEfficiency = False # should figure out if 'True' is needed and what's missing to enable it
     flags.PhysVal.OutputFileName = "IDPVM.root"
     ############################################
-    
+    flags.Concurrency.NumThreads=1
+    flags.Scheduler.ShowDataDeps=True
+    flags.fillFromArgs()
     flags.lock()
     flags = flags.cloneAndReplace("Tracking.ActiveConfig","Tracking.MainPass")
     acc=MainServicesCfg(flags)
@@ -608,10 +612,12 @@ if __name__ == "__main__":
         from FPGATrackSimReporting.FPGATrackSimReportingConfig import FPGATrackSimReportingCfg
         acc.merge(FPGATrackSimReportingCfg(flags,perEventReports=False))        
         
-        from FPGATrackSimPrototrackFitter.FPGATrackSimPrototrackFitterConfig import FPGAPrototrackFitAndTruthDecorationCfg
-        acc.merge(FPGAPrototrackFitAndTruthDecorationCfg(flags,FinalProtoTrackChainxAODTracksKey=FinalProtoTrackChainxAODTracksKey,stage='_1st')) # Run ACTS KF for 1st stage
-        from FPGATrackSimConfTools.FPGATrackExtensionConfig import FPGATrackExtensionAlgCfg
-        acc.merge(FPGATrackExtensionAlgCfg(flags, name="FPGATrackExtension", ProtoTracksLocation=FinalProtoTrackChainxAODTracksKey, OutputLevel=2)) # run CKF track extension on FPGA tracks
+        from FPGATrackSimPrototrackFitter.FPGATrackSimPrototrackFitterConfig import FPGATruthDecorationCfg, FPGAProtoTrackFitCfg
+        acc.merge(FPGAProtoTrackFitCfg(flags,stage='_1st')) # Run ACTS KF for 1st stage
+        acc.merge(FPGATruthDecorationCfg(flags,FinalProtoTrackChainxAODTracksKey=FinalProtoTrackChainxAODTracksKey,stage='_1st')) # Run ACTS KF for 1st stage
+        # TODO enable once debugged
+        # from FPGATrackSimConfTools.FPGATrackExtensionConfig import FPGATrackExtensionAlgCfg
+        # acc.merge(FPGATrackExtensionAlgCfg(flags, name="FPGATrackExtension", ProtoTracksLocation="ActsProtoTracks_1stFromFPGATrack", OutputLevel=2)) # run CKF track extension on FPGA tracks
 
         if flags.Trigger.FPGATrackSim.writeToAOD: acc.merge(WriteToAOD(flags, stage = '_1st'))
         if flags.Trigger.FPGATrackSim.Hough.secondStage : acc.merge(FPGAConversionAlgCfg(flags, name = 'FPGAConversionAlg_2nd', stage = '_2nd')) # Default disabled, doesn't work if enabled
@@ -623,7 +629,7 @@ if __name__ == "__main__":
         from InDetPhysValMonitoring.InDetPhysValDecorationConfig import AddDecoratorCfg
         acc.merge(AddDecoratorCfg(flags))
 
-        # IDPVM running
+        # # IDPVM running
         from InDetPhysValMonitoring.InDetPhysValMonitoringConfig import InDetPhysValMonitoringCfg
         acc.merge(InDetPhysValMonitoringCfg(flags))
     
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimPrototrackFitter/python/FPGATrackSimPrototrackFitterConfig.py b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimPrototrackFitter/python/FPGATrackSimPrototrackFitterConfig.py
index d3dd461c5730..bf506157643c 100755
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimPrototrackFitter/python/FPGATrackSimPrototrackFitterConfig.py
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimPrototrackFitter/python/FPGATrackSimPrototrackFitterConfig.py
@@ -48,10 +48,9 @@ def FPGAPrototrackFitAlgCfg(flags,
                      primary=True)
     return acc
 
-def FPGAPrototrackFitAndTruthDecorationCfg(flags,FinalProtoTrackChainxAODTracksKey="xAODFPGAPrototracks",name="FPGAPrototrackFitterConfig", stage = '',**kwargs):
+def FPGAProtoTrackFitCfg(flags,  name="FPGAPrototrackFitterConfig", stage = '', **kwargs):
 
     ACTSProtoTrackChainTrackKey = "ACTSProtoTrackChainTestTracks"
-    FinalProtoTrackChainxAODTracksKey=FinalProtoTrackChainxAODTracksKey
 
     acc = ComponentAccumulator()
     from InDetConfig.ITkTrackRecoConfig import ITkTrackRecoCfg
@@ -63,12 +62,18 @@ def FPGAPrototrackFitAndTruthDecorationCfg(flags,FinalProtoTrackChainxAODTracksK
                                       ACTSTracksLocation=ACTSProtoTrackChainTrackKey,
                                       FPGATrackSimActsProtoTracks=f"ActsProtoTracks{stage}FromFPGATrack",
                                       **kwargs))
+    return acc
 
+def FPGATruthDecorationCfg(flags, FinalProtoTrackChainxAODTracksKey="xAODFPGAPrototracks", stage = '', **kwargs):
     ################################################################################
     # Track to Truth association and validation
     from ActsConfig.ActsTruthConfig import ActsTruthParticleHitCountAlgCfg, ActsPixelClusterToTruthAssociationAlgCfg,ActsStripClusterToTruthAssociationAlgCfg
     
-    
+    ACTSProtoTrackChainTrackKey = "ACTSProtoTrackChainTestTracks"
+    FinalProtoTrackChainxAODTracksKey=FinalProtoTrackChainxAODTracksKey
+
+    acc = ComponentAccumulator()
+
     acc.merge(ActsPixelClusterToTruthAssociationAlgCfg(flags,
                                                        name="ActsFPGAPixelClusterToTruthAssociationAlg",
                                                        InputTruthParticleLinks="xAODFPGATruthLinks",
-- 
GitLab


From b75512d35b068e207930963249d1f15cf94655a7 Mon Sep 17 00:00:00 2001
From: tbold <tomasz.bold@cern.ch>
Date: Thu, 18 Jul 2024 15:02:14 +0200
Subject: [PATCH 3/5] Alg is executing

---
 .../src/TrackExtensionAlg.cxx                 | 49 +++++++++----------
 .../src/TrackExtensionAlg.h                   |  1 -
 .../src/TrackFindingData.h                    |  3 +-
 .../FPGATrackSimConfTools/CMakeLists.txt      |  4 ++
 .../python/FPGATrackExtensionConfig.py        |  7 +--
 .../python/FPGATrackSimAnalysisConfig.py      |  5 +-
 6 files changed, 37 insertions(+), 32 deletions(-)

diff --git a/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.cxx b/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.cxx
index 22ee8ee7bd38..1631cba375ac 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.cxx
+++ b/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.cxx
@@ -39,7 +39,7 @@ namespace ActsTrk{
     ATH_CHECK(m_ATLASConverterTool.retrieve());
     ATH_CHECK(m_trackingGeometryTool.retrieve());
     ATH_CHECK(m_pixelDetEleCollKey.initialize());
-
+    ATH_CHECK(m_extrapolationTool.retrieve());
     m_logger = makeActsAthenaLogger(this, name());
 
     auto magneticField = std::make_unique<ATLASMagneticFieldWrapper>();
@@ -93,10 +93,30 @@ namespace ActsTrk{
     detail::RecoTrackContainer tracksContainerTemp(trackBackend, trackStateBackend);
     std::shared_ptr<Acts::PerigeeSurface> perigeeSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(Acts::Vector3::Zero());
 
+    Acts::GeometryContext tgContext = m_trackingGeometryTool->getGeometryContext(context).context();
+    Acts::MagneticFieldContext mfContext = m_extrapolationTool->getMagneticFieldContext(context);
+    detail::TrackFindingMeasurements measurements = collectMeasurements(context);
+
+
+    ActsTrk::UncalibSourceLinkAccessor slAccessor(measurements.orderedGeoIds(),
+                                                  measurements.measurementRanges());
+    Acts::SourceLinkAccessorDelegate<ActsTrk::UncalibSourceLinkAccessor::Iterator> slAccessorDelegate;
+    slAccessorDelegate.connect<&ActsTrk::UncalibSourceLinkAccessor::range>(&slAccessor);
+
+
+    TrackExtensionAlg::CKFOptions options(tgContext,
+                      mfContext,
+                      m_calibrationContext,
+                      slAccessorDelegate,
+                      m_ckfConfig->ckfExtensions,
+                      m_ckfConfig->pOptions,
+                      perigeeSurface.get());
+
+
 
     for (const ActsTrk::ProtoTrack& protoTrack : *protoTracksHandle) {
       ATH_MSG_DEBUG("Extending proto track of " << protoTrack.measurements.size() << " measurements");
-      auto result = m_ckfConfig->ckf.findTracks(*protoTrack.parameters, buildCKFOptions(context, perigeeSurface.get()),
+      auto result = m_ckfConfig->ckf.findTracks(*protoTrack.parameters, options,
                                                        tracksContainerTemp);
       ATH_MSG_DEBUG("Built " << tracksContainerTemp.size() << " tracks from it");
       for (detail::RecoTrackContainer::TrackProxy tempTrackProxy : tracksContainerTemp) {
@@ -124,32 +144,11 @@ namespace ActsTrk{
     SG::ReadCondHandle<InDetDD::SiDetectorElementCollection> pixelDetEleHandle(m_pixelDetEleCollKey, context);
 
     detail::TrackFindingMeasurements measurements(pixelClustersHandle->size());
+    measurements.addDetectorElements(xAOD::UncalibMeasType::PixelClusterType, **pixelDetEleHandle, m_ATLASConverterTool);
     // potential TODO: filtering only certain layers
     measurements.addMeasurements(0, *pixelClustersHandle, **pixelDetEleHandle,
-                                m_ATLASConverterTool);
+                                 m_ATLASConverterTool);
     return measurements;
   }
-  TrackExtensionAlg::CKFOptions TrackExtensionAlg::buildCKFOptions(const EventContext& context, const Acts::PerigeeSurface* perigeeSurface) const {
-    Acts::GeometryContext tgContext = m_trackingGeometryTool->getGeometryContext(context).context();
-    Acts::MagneticFieldContext mfContext = m_extrapolationTool->getMagneticFieldContext(context);
-
-    detail::TrackFindingMeasurements measurements = collectMeasurements(context);
-
-
-    ActsTrk::UncalibSourceLinkAccessor slAccessor(measurements.orderedGeoIds(),
-                                                  measurements.measurementRanges());
-    Acts::SourceLinkAccessorDelegate<ActsTrk::UncalibSourceLinkAccessor::Iterator> slAccessorDelegate;
-    slAccessorDelegate.connect<&ActsTrk::UncalibSourceLinkAccessor::range>(&slAccessor);
-
-
-    return CKFOptions(tgContext,
-                      mfContext,
-                      m_calibrationContext,
-                      slAccessorDelegate,
-                      m_ckfConfig->ckfExtensions,
-                      m_ckfConfig->pOptions,
-                      perigeeSurface);
-  }
-
 
 } // EOF namespace
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.h b/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.h
index 08498930586b..4d5c27794aba 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.h
+++ b/Tracking/Acts/ActsTrackReconstruction/src/TrackExtensionAlg.h
@@ -60,7 +60,6 @@ class TrackExtensionAlg : public AthReentrantAlgorithm {
   std::unique_ptr<detail::CKF_config> m_ckfConfig;
   std::unique_ptr<const Acts::Logger> m_logger;
 
-  CKFOptions buildCKFOptions(const EventContext& context, const Acts::PerigeeSurface* perigeeSurface) const;
   detail::TrackFindingMeasurements collectMeasurements(const EventContext& context) const;
 
   Acts::CalibrationContext m_calibrationContext; // this will change in future to be updatable event by event
diff --git a/Tracking/Acts/ActsTrackReconstruction/src/TrackFindingData.h b/Tracking/Acts/ActsTrackReconstruction/src/TrackFindingData.h
index 64e25991ab14..41938be78b14 100644
--- a/Tracking/Acts/ActsTrackReconstruction/src/TrackFindingData.h
+++ b/Tracking/Acts/ActsTrackReconstruction/src/TrackFindingData.h
@@ -266,7 +266,8 @@ namespace ActsTrk::detail {
             std::stringstream msg;
             msg << "Measurement with unexpected Acts geometryId: " << surface.geometryId()
                 << " type = " << static_cast<unsigned int>(measurement->type())
-                << " idHash=" << measurement->identifierHash();
+                << " idHash=" << measurement->identifierHash()
+                << (geo_iter == m_orderedGeoIds.end() ? " not" :"") << " found GeoId in orderedGeoIds, that are of size " << m_orderedGeoIds.size();
             throw std::runtime_error(msg.str());
           }
           range_idx = geo_iter - m_orderedGeoIds.begin();
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/CMakeLists.txt b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/CMakeLists.txt
index a05810d95648..9cfe101dfae7 100755
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/CMakeLists.txt
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/CMakeLists.txt
@@ -33,3 +33,7 @@ atlas_add_test( FPGATrackSimRegionSlices_test
 atlas_add_test( FPGATrackSimConfigFlags_test
                 SCRIPT python -m FPGATrackSimConfTools.FPGATrackSimConfigFlags
                 POST_EXEC_SCRIPT noerror.sh ) 
+
+atlas_add_test( FPGATrackSimFromRDO_test
+                SCRIPT FPGATrackAnalysisOnRDO.sh
+                POST_EXEC_SCRIPT noerror.sh )
\ No newline at end of file
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackExtensionConfig.py b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackExtensionConfig.py
index 205de126ef01..e8bc3f515b2d 100644
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackExtensionConfig.py
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackExtensionConfig.py
@@ -10,9 +10,10 @@ def FPGATrackExtensionAlgCfg(flags, **kwargs):
     kwargs.setdefault("ACTSTracksLocation", "ExtendedFPGATracks")
     if "ExtrapolationTool" not in kwargs:
         from ActsConfig.ActsGeometryConfig import ActsExtrapolationToolCfg
-        kwargs["ExtrapolationTool"] = acc.popToolsAndMerge(
-            ActsExtrapolationToolCfg(flags, MaxSteps=100)
-        ) # PrivateToolHandle
+        kwargs.setdefault(
+            "ExtrapolationTool",
+            acc.popToolsAndMerge(ActsExtrapolationToolCfg(flags, MaxSteps=100)),
+        )
     if 'ATLASConverterTool' not in kwargs:
         from ActsConfig.ActsEventCnvConfig import ActsToTrkConverterToolCfg
         kwargs["ATLASConverterTool"] = acc.popToolsAndMerge(ActsToTrkConverterToolCfg(flags))
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
index 640b5a58d7a7..37cb2b310560 100755
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
@@ -580,6 +580,7 @@ if __name__ == "__main__":
     ############################################
     flags.Concurrency.NumThreads=1
     flags.Scheduler.ShowDataDeps=True
+    # flags.Exec.DebugStage="exec" # useful option to debug the execution of the job - we want it commented out for production
     flags.fillFromArgs()
     flags.lock()
     flags = flags.cloneAndReplace("Tracking.ActiveConfig","Tracking.MainPass")
@@ -616,8 +617,8 @@ if __name__ == "__main__":
         acc.merge(FPGAProtoTrackFitCfg(flags,stage='_1st')) # Run ACTS KF for 1st stage
         acc.merge(FPGATruthDecorationCfg(flags,FinalProtoTrackChainxAODTracksKey=FinalProtoTrackChainxAODTracksKey,stage='_1st')) # Run ACTS KF for 1st stage
         # TODO enable once debugged
-        # from FPGATrackSimConfTools.FPGATrackExtensionConfig import FPGATrackExtensionAlgCfg
-        # acc.merge(FPGATrackExtensionAlgCfg(flags, name="FPGATrackExtension", ProtoTracksLocation="ActsProtoTracks_1stFromFPGATrack", OutputLevel=2)) # run CKF track extension on FPGA tracks
+        from FPGATrackSimConfTools.FPGATrackExtensionConfig import FPGATrackExtensionAlgCfg
+        acc.merge(FPGATrackExtensionAlgCfg(flags, name="FPGATrackExtension", ProtoTracksLocation="ActsProtoTracks_1stFromFPGATrack", OutputLevel=2)) # run CKF track extension on FPGA tracks
 
         if flags.Trigger.FPGATrackSim.writeToAOD: acc.merge(WriteToAOD(flags, stage = '_1st'))
         if flags.Trigger.FPGATrackSim.Hough.secondStage : acc.merge(FPGAConversionAlgCfg(flags, name = 'FPGAConversionAlg_2nd', stage = '_2nd')) # Default disabled, doesn't work if enabled
-- 
GitLab


From ac5c2973755f1a10d2263b5fe01a8e45793d3182 Mon Sep 17 00:00:00 2001
From: tbold <tomasz.bold@cern.ch>
Date: Sat, 20 Jul 2024 16:44:29 +0200
Subject: [PATCH 4/5] fix test issue

---
 .../python/FPGATrackSimAnalysisConfig.py                 | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
index 37cb2b310560..c57dbb04a5f8 100755
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
@@ -553,10 +553,6 @@ if __name__ == "__main__":
     
     from AthenaConfiguration.TestDefaults import defaultGeometryTags
     flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN4
-    if isinstance(flags.Trigger.FPGATrackSim.wrapperFileName, str):
-        log.info("wrapperFile is string, converting to list")
-        flags.Trigger.FPGATrackSim.wrapperFileName = [flags.Trigger.FPGATrackSim.wrapperFileName]
-        flags.Input.Files = lambda f: [f.Trigger.FPGATrackSim.wrapperFileName]
     
     ############################################
     # Flags used in the prototrack chain
@@ -582,6 +578,11 @@ if __name__ == "__main__":
     flags.Scheduler.ShowDataDeps=True
     # flags.Exec.DebugStage="exec" # useful option to debug the execution of the job - we want it commented out for production
     flags.fillFromArgs()
+    if isinstance(flags.Trigger.FPGATrackSim.wrapperFileName, str):
+        log.info("wrapperFile is string, converting to list")
+        flags.Trigger.FPGATrackSim.wrapperFileName = [flags.Trigger.FPGATrackSim.wrapperFileName]
+        flags.Input.Files = lambda f: [f.Trigger.FPGATrackSim.wrapperFileName]
+
     flags.lock()
     flags = flags.cloneAndReplace("Tracking.ActiveConfig","Tracking.MainPass")
     acc=MainServicesCfg(flags)
-- 
GitLab


From b3f86259e844842e374870723b6337e8c275ecba Mon Sep 17 00:00:00 2001
From: tbold <tomasz.bold@cern.ch>
Date: Mon, 22 Jul 2024 14:47:41 +0200
Subject: [PATCH 5/5] Remove debug output

---
 .../FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py | 2 +-
 .../test/FPGATrackWorkflow/FPGATrackAnalysisOnRDO.sh           | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
index c57dbb04a5f8..23e678eeeb25 100755
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/python/FPGATrackSimAnalysisConfig.py
@@ -619,7 +619,7 @@ if __name__ == "__main__":
         acc.merge(FPGATruthDecorationCfg(flags,FinalProtoTrackChainxAODTracksKey=FinalProtoTrackChainxAODTracksKey,stage='_1st')) # Run ACTS KF for 1st stage
         # TODO enable once debugged
         from FPGATrackSimConfTools.FPGATrackExtensionConfig import FPGATrackExtensionAlgCfg
-        acc.merge(FPGATrackExtensionAlgCfg(flags, name="FPGATrackExtension", ProtoTracksLocation="ActsProtoTracks_1stFromFPGATrack", OutputLevel=2)) # run CKF track extension on FPGA tracks
+        acc.merge(FPGATrackExtensionAlgCfg(flags, name="FPGATrackExtension", ProtoTracksLocation="ActsProtoTracks_1stFromFPGATrack")) # run CKF track extension on FPGA tracks
 
         if flags.Trigger.FPGATrackSim.writeToAOD: acc.merge(WriteToAOD(flags, stage = '_1st'))
         if flags.Trigger.FPGATrackSim.Hough.secondStage : acc.merge(FPGAConversionAlgCfg(flags, name = 'FPGAConversionAlg_2nd', stage = '_2nd')) # Default disabled, doesn't work if enabled
diff --git a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/test/FPGATrackWorkflow/FPGATrackAnalysisOnRDO.sh b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/test/FPGATrackWorkflow/FPGATrackAnalysisOnRDO.sh
index 53c1d5cfb3b2..d81f4c2240c3 100755
--- a/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/test/FPGATrackWorkflow/FPGATrackAnalysisOnRDO.sh
+++ b/Trigger/EFTracking/FPGATrackSim/FPGATrackSimConfTools/test/FPGATrackWorkflow/FPGATrackAnalysisOnRDO.sh
@@ -17,8 +17,7 @@ python -m FPGATrackSimConfTools.FPGATrackSimAnalysisConfig \
     Trigger.FPGATrackSim.mapsDir=${MAPS} \
     Trigger.FPGATrackSim.tracking=True \
     Trigger.FPGATrackSim.sampleType='singleMuons' \
-    Trigger.FPGATrackSim.bankDir=${BANKS} \
-    Trigger.FPGATrackSim.doEDMConversion=True
+    Trigger.FPGATrackSim.bankDir=${BANKS}
 ls -l
 echo "... analysis on RDO, this part is done ..."
 
-- 
GitLab