From e4eae54d14c793991d50739fa76fb84899110b17 Mon Sep 17 00:00:00 2001
From: christos <christos@cern.ch>
Date: Thu, 10 Dec 2020 04:45:54 +0100
Subject: [PATCH] Make updateHitInfo EventContextAware, pass the EventContext
 down the call chain

---
 .../IInDetTestBLayerTool.h                    |  62 +++-
 .../InDetTestBLayer/InDetTestBLayerTool.h     |  78 +++--
 .../src/InDetTestBLayerTool.cxx               | 266 ++++++++++--------
 .../InDetTrackSummaryHelperTool.h             |  14 +-
 .../src/InDetTrackSummaryHelperTool.cxx       |  23 +-
 .../src/MuonTrackSummaryHelperTool.h          |  14 +-
 .../ISF_TrackSummaryHelperTool.h              |   1 +
 .../IExtendedTrackSummaryHelperTool.h         |  29 +-
 .../ITrackSummaryHelperTool.h                 |   3 +-
 .../TrkTrackSummaryTool/TrackSummaryTool.icc  |   2 +-
 10 files changed, 307 insertions(+), 185 deletions(-)

diff --git a/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/IInDetTestBLayerTool.h b/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/IInDetTestBLayerTool.h
index bb50a1cac65e..a294fbeb9ba4 100755
--- a/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/IInDetTestBLayerTool.h
+++ b/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/IInDetTestBLayerTool.h
@@ -4,7 +4,9 @@
 
 #ifndef IInDetTestBLayerTool_H
 #define IInDetTestBLayerTool_H
-#include "GaudiKernel/AlgTool.h"
+#include "GaudiKernel/EventContext.h"
+#include "GaudiKernel/IAlgTool.h"
+#include "GaudiKernel/ThreadLocalContext.h"
 #include "TrkParameters/TrackParameters.h"
 #include "TrkEventPrimitives/ResidualPull.h"
 #include <vector>
@@ -26,10 +28,18 @@ namespace InDet {
     static const InterfaceID& interfaceID() { return IID_IInDetTestBLayerTool; };
 
     virtual ~IInDetTestBLayerTool() {};
-    
-    virtual bool expectHitInBLayer(const Trk::TrackParticleBase*, bool recompute=false) const=0;
-    virtual bool expectHitInBLayer(const Trk::Track*, bool recompute=false) const=0;
-    virtual bool expectHitInBLayer(const Trk::TrackParameters* trackpar) const=0;
+
+    virtual bool expectHitInBLayer(const EventContext& ctx,
+                                   const Trk::Track* track,
+                                   bool recompute = false) const = 0;
+    virtual bool expectHitInBLayer(const Trk::TrackParticleBase*,
+                                   bool recompute = false) const = 0;
+    bool expectHitInBLayer(const Trk::Track* track, bool recompute = false) const
+    {
+      return expectHitInBLayer(Gaudi::Hive::currentContext(), track, recompute);
+    }
+    virtual bool expectHitInBLayer(
+      const Trk::TrackParameters* trackpar) const = 0;
 
     virtual const Trk::ResidualPull* bLayerHitResidual(const Trk::Track* ) const=0;
     virtual const Trk::ResidualPull* bLayerHitResidual(const Trk::TrackParticleBase*) const=0;
@@ -41,10 +51,21 @@ namespace InDet {
     virtual bool getTrackStateOnBlayerInfo(const Trk::TrackParameters* trackpar, 
 				   std::vector<TrackStateOnBLayerInfo>& infoList)  const=0;
 
-
-    virtual bool expectHitInInnermostPixelLayer(const Trk::TrackParticleBase*, bool recompute=false) const=0;
-    virtual bool expectHitInInnermostPixelLayer(const Trk::Track*, bool recompute=false) const=0;
-    virtual bool expectHitInInnermostPixelLayer(const Trk::TrackParameters* trackpar) const=0;
+    virtual bool expectHitInInnermostPixelLayer(
+      const EventContext& ctx,
+      const Trk::Track* track,
+      bool recompute = false) const = 0;
+    virtual bool expectHitInInnermostPixelLayer(
+      const Trk::TrackParticleBase*,
+      bool recompute = false) const = 0;
+    bool expectHitInInnermostPixelLayer(const Trk::Track* track,
+                                        bool recompute = false) const
+    {
+      return expectHitInInnermostPixelLayer(
+        Gaudi::Hive::currentContext(), track, recompute);
+    }
+    virtual bool expectHitInInnermostPixelLayer(
+      const Trk::TrackParameters* trackpar) const = 0;
 
     virtual const Trk::ResidualPull* innermostPixelLayerHitResidual(const Trk::Track* ) const=0;
     virtual const Trk::ResidualPull* innermostPixelLayerHitResidual(const Trk::TrackParticleBase*) const=0;
@@ -56,11 +77,24 @@ namespace InDet {
     virtual bool getTrackStateOnInnermostPixelLayerInfo(const Trk::TrackParameters* trackpar, 
 				   std::vector<TrackStateOnBLayerInfo>& infoList)  const=0;
 
-    virtual bool expectHitInNextToInnermostPixelLayer(const Trk::TrackParticleBase*, bool recompute=false) const=0;
-    virtual bool expectHitInNextToInnermostPixelLayer(const Trk::Track*, bool recompute=false) const=0;
-    virtual bool expectHitInNextToInnermostPixelLayer(const Trk::TrackParameters* trackpar) const=0;
-    
-    virtual const Trk::ResidualPull* nextToInnermostPixelLayerHitResidual(const Trk::Track* ) const=0;
+    virtual bool expectHitInNextToInnermostPixelLayer(
+      const EventContext& ctx,
+      const Trk::Track* track,
+      bool recompute = false) const = 0;
+    virtual bool expectHitInNextToInnermostPixelLayer(
+      const Trk::TrackParticleBase*,
+      bool recompute = false) const = 0;
+    bool expectHitInNextToInnermostPixelLayer(const Trk::Track* track,
+                                              bool recompute = false) const
+    {
+      return expectHitInInnermostPixelLayer(
+        Gaudi::Hive::currentContext(), track, recompute);
+    }
+    virtual bool expectHitInNextToInnermostPixelLayer(
+      const Trk::TrackParameters* trackpar) const = 0;
+
+    virtual const Trk::ResidualPull* nextToInnermostPixelLayerHitResidual(
+      const Trk::Track*) const = 0;
     virtual const Trk::ResidualPull* nextToInnermostPixelLayerHitResidual(const Trk::TrackParticleBase*) const=0;
     
     virtual bool getTrackStateOnNextToInnermostPixelLayerInfo(const Trk::TrackParticleBase*, 
diff --git a/InnerDetector/InDetRecTools/InDetTestBLayer/InDetTestBLayer/InDetTestBLayerTool.h b/InnerDetector/InDetRecTools/InDetTestBLayer/InDetTestBLayer/InDetTestBLayerTool.h
index 9369c7c7c4c5..3e42bc06d7a5 100644
--- a/InnerDetector/InDetRecTools/InDetTestBLayer/InDetTestBLayer/InDetTestBLayerTool.h
+++ b/InnerDetector/InDetRecTools/InDetTestBLayer/InDetTestBLayer/InDetTestBLayerTool.h
@@ -41,12 +41,17 @@ namespace InDet {
     virtual StatusCode initialize() override;
     virtual StatusCode finalize() override;
 
-    //    bool expectHitInBLayer(const Rec::TrackParticle*) const ;
-    virtual bool expectHitInBLayer(const Trk::TrackParticleBase*, bool recompute = false) const override;
-    virtual bool expectHitInBLayer(const Trk::Track*, bool recompute = false) const override;
-    virtual bool expectHitInBLayer(const Trk::TrackParameters* trackpar) const override;
+    virtual bool expectHitInBLayer(const EventContext& ctx,
+                                   const Trk::Track*,
+                                   bool recompute = false) const override final;
 
-    virtual const Trk::ResidualPull* bLayerHitResidual(const Trk::Track*) const override;
+    virtual bool expectHitInBLayer(const Trk::TrackParticleBase*,
+                                   bool recompute = false) const override final;
+    virtual bool expectHitInBLayer(
+      const Trk::TrackParameters* trackpar) const override final;
+
+    virtual const Trk::ResidualPull* bLayerHitResidual(
+      const Trk::Track*) const override;
     virtual const Trk::ResidualPull* bLayerHitResidual(const Trk::TrackParticleBase*) const override;
 
     //// return false if extrapolation failed
@@ -57,10 +62,15 @@ namespace InDet {
     virtual bool getTrackStateOnBlayerInfo(const Trk::TrackParameters* trackpar,
                                            std::vector<TrackStateOnBLayerInfo>& infoList) const override;
 
-    virtual bool expectHitInInnermostPixelLayer(const Trk::TrackParticleBase*,
-                                                bool recompute = false) const override;
-    virtual bool expectHitInInnermostPixelLayer(const Trk::Track*, bool recompute = false) const override;
-    virtual bool expectHitInInnermostPixelLayer(const Trk::TrackParameters* trackpar) const override;
+    virtual bool expectHitInInnermostPixelLayer(
+      const EventContext& ctx,
+      const Trk::Track* track,
+      bool recompute = false) const override final;
+    virtual bool expectHitInInnermostPixelLayer(
+      const Trk::TrackParticleBase*,
+      bool recompute = false) const override final;
+    virtual bool expectHitInInnermostPixelLayer(
+      const Trk::TrackParameters* trackpar) const override final;
 
     virtual const Trk::ResidualPull* innermostPixelLayerHitResidual(const Trk::Track*) const override;
     virtual const Trk::ResidualPull* innermostPixelLayerHitResidual(
@@ -78,11 +88,15 @@ namespace InDet {
       const Trk::TrackParameters* trackpar,
       std::vector<TrackStateOnBLayerInfo>& infoList) const override;
 
-    virtual bool expectHitInNextToInnermostPixelLayer(const Trk::TrackParticleBase*,
-                                                      bool recompute = false) const override;
-    virtual bool expectHitInNextToInnermostPixelLayer(const Trk::Track*,
-                                                      bool recompute = false) const override;
-    virtual bool expectHitInNextToInnermostPixelLayer(const Trk::TrackParameters* trackpar) const override;
+    virtual bool expectHitInNextToInnermostPixelLayer(
+      const EventContext& ctx,
+      const Trk::Track*,
+      bool recompute = false) const override final;
+    virtual bool expectHitInNextToInnermostPixelLayer(
+      const Trk::TrackParticleBase*,
+      bool recompute = false) const override final;
+    virtual bool expectHitInNextToInnermostPixelLayer(
+      const Trk::TrackParameters* trackpar) const override final;
 
     virtual const Trk::ResidualPull* nextToInnermostPixelLayerHitResidual(const Trk::Track*) const override;
     virtual const Trk::ResidualPull* nextToInnermostPixelLayerHitResidual(
@@ -99,9 +113,22 @@ namespace InDet {
       std::vector<TrackStateOnBLayerInfo>& infoList) const override;
 
   private:
-    bool expectHitInPixelLayer(const Trk::TrackParticleBase*, int layer, bool recompute = false) const;
-    bool expectHitInPixelLayer(const Trk::Track*, int layer, bool recompute = false) const;
-    bool expectHitInPixelLayer(const Trk::TrackParameters* trackpar, int layer) const;
+    bool expectHitInPixelLayer(const EventContext& ctx,
+                               const Trk::Track*,
+                               int layer,
+                               bool recompute = false) const;
+    bool expectHitInPixelLayer(const Trk::TrackParticleBase*,
+                               int layer,
+                               bool recompute = false) const;
+    bool expectHitInPixelLayer(const EventContext& ctx,
+                               const Trk::TrackParameters* trackpar,
+                               int layer) const;
+    bool expectHitInPixelLayer(const Trk::TrackParameters* trackpar,
+                               int layer) const
+    {
+      return expectHitInPixelLayer(
+        Gaudi::Hive::currentContext(), trackpar, layer);
+    }
 
     const Trk::ResidualPull* pixelLayerHitResidual(const Trk::Track*, int layer) const;
    
@@ -119,9 +146,20 @@ namespace InDet {
 
     bool isActive(const Trk::TrackParameters* trackpar) const;
 
-    bool getPixelLayerParameters(const Trk::TrackParameters* trackpar,
-                                 std::vector<std::unique_ptr<const Trk::TrackParameters>>& blayerParam,
-                                 int layer) const;
+    bool getPixelLayerParameters(
+      const EventContext& ctx,
+      const Trk::TrackParameters* trackpar,
+      std::vector<std::unique_ptr<const Trk::TrackParameters>>& blayerParam,
+      int layer) const;
+
+    bool getPixelLayerParameters(
+      const Trk::TrackParameters* trackpar,
+      std::vector<std::unique_ptr<const Trk::TrackParameters>>& blayerParam,
+      int layer) const
+    {
+      return getPixelLayerParameters(
+        Gaudi::Hive::currentContext(), trackpar, blayerParam, layer);
+    }
 
     double getFracGood(const Trk::TrackParameters* trackpar,
                        double phiRegionSize,
diff --git a/InnerDetector/InDetRecTools/InDetTestBLayer/src/InDetTestBLayerTool.cxx b/InnerDetector/InDetRecTools/InDetTestBLayer/src/InDetTestBLayerTool.cxx
index 180dde76a47b..53a0749595c2 100644
--- a/InnerDetector/InDetRecTools/InDetTestBLayer/src/InDetTestBLayerTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetTestBLayer/src/InDetTestBLayerTool.cxx
@@ -228,55 +228,73 @@ namespace InDet {
 
   }
 
-  bool InDet::InDetTestBLayerTool::expectHitInBLayer(const Trk::Track* track, bool recompute) const
+  bool
+  InDet::InDetTestBLayerTool::expectHitInBLayer(const EventContext& ctx,
+                                                const Trk::Track* track,
+                                                bool recompute) const
   {
-    return expectHitInPixelLayer(track,0, recompute);
+    return expectHitInPixelLayer(ctx, track, 0, recompute);
   }
 
-   bool InDet::InDetTestBLayerTool::expectHitInInnermostPixelLayer(const Trk::Track* track, bool recompute) const
+  bool
+  InDet::InDetTestBLayerTool::expectHitInInnermostPixelLayer(
+    const EventContext& ctx,
+    const Trk::Track* track,
+    bool recompute) const
   {
-    return expectHitInPixelLayer(track,0, recompute);
+    return expectHitInPixelLayer(ctx, track, 0, recompute);
   }
 
-  bool InDet::InDetTestBLayerTool::expectHitInNextToInnermostPixelLayer(const Trk::Track* track, bool recompute) const
+  bool
+  InDet::InDetTestBLayerTool::expectHitInNextToInnermostPixelLayer(
+    const EventContext& ctx,
+    const Trk::Track* track,
+    bool recompute) const
   {
-    return expectHitInPixelLayer(track,1, recompute);
+    return expectHitInPixelLayer(ctx, track, 1, recompute);
   }
 
-  bool InDet::InDetTestBLayerTool::expectHitInPixelLayer(const Trk::Track *track, int layer, bool recompute) const {
-    assert( layer>=0 && layer<=1);
-    if(!recompute){
-      const Trk::TrackSummary* ts =  track->trackSummary();
-      if(ts){
-	int ehbl = ts->get(s_layerSummaryTypeExpectHit[layer]);
-	if(0==ehbl || 1==ehbl ){
-	  ATH_MSG_DEBUG("Found the expected hit in the " << s_layerNames[layer] << " info in TrackSummary: return cached value" );
-	  return ehbl;
-	}
+  bool
+  InDet::InDetTestBLayerTool::expectHitInPixelLayer(const EventContext& ctx,
+                                                    const Trk::Track* track,
+                                                    int layer,
+                                                    bool recompute) const
+  {
+    assert(layer >= 0 && layer <= 1);
+    if (!recompute) {
+      const Trk::TrackSummary* ts = track->trackSummary();
+      if (ts) {
+        int ehbl = ts->get(s_layerSummaryTypeExpectHit[layer]);
+        if (0 == ehbl || 1 == ehbl) {
+          ATH_MSG_DEBUG("Found the expected hit in the "
+                        << s_layerNames[layer]
+                        << " info in TrackSummary: return cached value");
+          return ehbl;
+        }
       }
-    }
-    else{
-      ATH_MSG_DEBUG("Forced to recompute whether a hit is expected in the " << s_layerNames[layer] << " or not." );
+    } else {
+      ATH_MSG_DEBUG("Forced to recompute whether a hit is expected in the "
+                    << s_layerNames[layer] << " or not.");
     }
 
-    ATH_MSG_DEBUG("Computing whether a hit is expected in the " << s_layerNames[layer] << " or not." );
+    ATH_MSG_DEBUG("Computing whether a hit is expected in the "
+                  << s_layerNames[layer] << " or not.");
 
     const Trk::Perigee* mp = track->perigeeParameters();
 
-    if (!mp)
-      {
-	//This can happen if re-creating the summary for tracks prior to ambi-solving and final fit, e.g. in StatisticAlg 
-        ATH_MSG_DEBUG("Found Track with no perigee parameters: no information whether a hit is expected in the " << s_layerNames[layer] << " will be provided." );
-	return false;
-      }
-    else
-      {
-	ATH_MSG_DEBUG("Track perigee parameters");
-	return this->expectHitInPixelLayer(mp,layer);
-      }
+    if (!mp) {
+      // This can happen if re-creating the summary for tracks prior to
+      // ambi-solving and final fit, e.g. in StatisticAlg
+      ATH_MSG_DEBUG("Found Track with no perigee parameters: no information "
+                    "whether a hit is expected in the "
+                    << s_layerNames[layer] << " will be provided.");
+      return false;
+    } else {
+      ATH_MSG_DEBUG("Track perigee parameters");
+      return this->expectHitInPixelLayer(ctx,mp, layer);
+    }
   }
 
-
   bool InDet::InDetTestBLayerTool::expectHitInBLayer(const Trk::TrackParticleBase* track, bool recompute) const
   {
     return expectHitInPixelLayer(track,0,recompute);
@@ -343,75 +361,80 @@ namespace InDet {
     return expectHitInPixelLayer(trackpar, 1);
   }
 
-  bool InDet::InDetTestBLayerTool::expectHitInPixelLayer(const Trk::TrackParameters* trackpar,int layer) const
+  bool
+  InDet::InDetTestBLayerTool::expectHitInPixelLayer(
+    const EventContext& ctx,
+    const Trk::TrackParameters* trackpar,
+    int layer) const
   {
-    assert( layer >=0 && layer<=1);
-    const std::string layer_name=s_layerNames[layer];
+    assert(layer >= 0 && layer <= 1);
+    const std::string layer_name = s_layerNames[layer];
 
-    if(!m_configured){
-      ATH_MSG_WARNING("Unconfigured tool, unable to compute expected hit in the " << layer_name << ".");
+    if (!m_configured) {
+      ATH_MSG_WARNING(
+        "Unconfigured tool, unable to compute expected hit in the "
+        << layer_name << ".");
       return false;
     }
 
-    bool expect_hit = false; /// will be set to true if at least on good module is passed
+    bool expect_hit =
+      false; /// will be set to true if at least on good module is passed
 
     //// Cylinder bigger than the given layer ? ////
-    std::vector<std::unique_ptr<const Trk::TrackParameters> > blayerParam;
-    if(!this->getPixelLayerParameters(trackpar, blayerParam,layer)) return false;
-
+    std::vector<std::unique_ptr<const Trk::TrackParameters>> blayerParam;
+    if (!this->getPixelLayerParameters(ctx,trackpar, blayerParam, layer))
+      return false;
 
     for (std::unique_ptr<const Trk::TrackParameters>& p : blayerParam) {
 
-      Identifier id = p->associatedSurface().associatedDetectorElement()->identify();
+      Identifier id =
+        p->associatedSurface().associatedDetectorElement()->identify();
 
-      if( m_pixelCondSummaryTool->isGood(id,InDetConditions::PIXEL_MODULE) ){
+      if (m_pixelCondSummaryTool->isGood(id, InDetConditions::PIXEL_MODULE,ctx)) {
 
-	if( m_checkActiveAreas ){
+        if (m_checkActiveAreas) {
 
-	  if( isActive(p.get()) ){
+          if (isActive(p.get())) {
 
-	    if(m_checkDeadRegions){
+            if (m_checkDeadRegions) {
 
-	      double fracGood = getFracGood(p.get(), m_phiRegionSize, m_etaRegionSize);
-	      if(fracGood>m_goodFracCut){
-		ATH_MSG_DEBUG("Condition Summary: " << layer_name << " good");
-		expect_hit=true;  /// pass good module -> hit is expected on blayer
-	      }
-	      else{
-		ATH_MSG_DEBUG( layer_name << " in dead region");
-	      }
+              double fracGood =
+                getFracGood(p.get(), m_phiRegionSize, m_etaRegionSize);
+              if (fracGood > m_goodFracCut) {
+                ATH_MSG_DEBUG("Condition Summary: " << layer_name << " good");
+                expect_hit =
+                  true; /// pass good module -> hit is expected on blayer
+              } else {
+                ATH_MSG_DEBUG(layer_name << " in dead region");
+              }
 
-	    }
-	    else{ /// check dead regios
-	      ATH_MSG_DEBUG("Condition Summary: " << layer_name << " good");
-	      expect_hit=true;  /// pass good module -> hit is expected on blayer
-	    }
+            } else { /// check dead regios
+              ATH_MSG_DEBUG("Condition Summary: " << layer_name << " good");
+              expect_hit =
+                true; /// pass good module -> hit is expected on blayer
+            }
 
-	  }
-	  else{
-	    ATH_MSG_DEBUG("Condition Summary: " << layer_name << " good but outside active area");
-	  }
+          } else {
+            ATH_MSG_DEBUG("Condition Summary: "
+                          << layer_name << " good but outside active area");
+          }
 
-	} /// check active area (check edges)
-	else{
-	  ATH_MSG_DEBUG("Condition Summary: " << layer_name << " good, active areas not checked");
-	  expect_hit=true; /// pass good module -> hit is expected on blayer
-	}
+        } /// check active area (check edges)
+        else {
+          ATH_MSG_DEBUG("Condition Summary: "
+                        << layer_name << " good, active areas not checked");
+          expect_hit = true; /// pass good module -> hit is expected on blayer
+        }
 
-      }
-      else{
-	ATH_MSG_DEBUG( layer_name << " not good");
+      } else {
+        ATH_MSG_DEBUG(layer_name << " not good");
       }
 
     } /// blayer param
 
-
     return expect_hit;
-
   }
 
-
-
   bool InDet::InDetTestBLayerTool::isActive(const Trk::TrackParameters* trackpar) const
   {
 
@@ -639,73 +662,70 @@ namespace InDet {
 
   }
 
-  bool InDet::InDetTestBLayerTool::getPixelLayerParameters
-    (const Trk::TrackParameters* trackpar,
-     std::vector<std::unique_ptr<const Trk::TrackParameters> >& blayerParam,
+  bool
+  InDet::InDetTestBLayerTool::getPixelLayerParameters
+
+    (const EventContext& ctx,
+     const Trk::TrackParameters* trackpar,
+     std::vector<std::unique_ptr<const Trk::TrackParameters>>& blayerParam,
      int layer) const
   {
 
     //// Cylinder bigger than the b-layer ////
     ATH_MSG_DEBUG("Trying to extrapolate to Pixel layer " << layer);
 
-    Trk::CylinderSurface BiggerThanBLayerSurface (new Transform3D(Transform3D::Identity()),
-						  100.0,
-						  10000.0);
-
-    // extrapolate stepwise to this parameter (be careful, sorting might be wrong)
-    std::vector<std::unique_ptr<const Trk::TrackParameters> > paramList =
-      m_extrapolator->extrapolateStepwise(*trackpar,
-					  BiggerThanBLayerSurface,
-					  Trk::alongMomentum,
-					  false);
-
+    Trk::CylinderSurface BiggerThanBLayerSurface(
+      new Transform3D(Transform3D::Identity()), 100.0, 10000.0);
 
+    // extrapolate stepwise to this parameter (be careful, sorting might be
+    // wrong)
+    std::vector<std::unique_ptr<const Trk::TrackParameters>> paramList =
+      m_extrapolator->extrapolateStepwise(
+        ctx, *trackpar, BiggerThanBLayerSurface, Trk::alongMomentum, false);
 
+    if (paramList.empty()) {
+      ATH_MSG_DEBUG("No parameter returned by propagator ");
+      ATH_MSG_VERBOSE("dumping track parameters " << *trackpar);
+      return false;
+    }
 
-   if(paramList.empty()){
-     ATH_MSG_DEBUG("No parameter returned by propagator ");
-     ATH_MSG_VERBOSE("dumping track parameters " <<*trackpar);
-     return false;
-   }
-
-   ATH_MSG_DEBUG(" Number of generated parameters by propagator: " << paramList.size() );
-
+    ATH_MSG_DEBUG(
+      " Number of generated parameters by propagator: " << paramList.size());
 
-   int s_int = 0;
-   for (std::unique_ptr<const Trk::TrackParameters>& p : paramList) {
+    int s_int = 0;
+    for (std::unique_ptr<const Trk::TrackParameters>& p : paramList) {
 
-     ATH_MSG_DEBUG( s_int++ << "th surface : ");
+      ATH_MSG_DEBUG(s_int++ << "th surface : ");
 
-     Identifier id;
-     if( !( p->associatedSurface().associatedDetectorElement() !=0 &&
-	 p->associatedSurface().associatedDetectorElement()->identify() !=0 ) )
-     {
-       continue;
-     }
+      Identifier id;
+      if (!(p->associatedSurface().associatedDetectorElement() != 0 &&
+            p->associatedSurface().associatedDetectorElement()->identify() !=
+              0)) {
+        continue;
+      }
 
-     id = p->associatedSurface().associatedDetectorElement()->identify();
-     if (!m_idHelper->is_pixel(id)){
-       continue;
-     }
+      id = p->associatedSurface().associatedDetectorElement()->identify();
+      if (!m_idHelper->is_pixel(id)) {
+        continue;
+      }
 
-     ATH_MSG_DEBUG("Found pixel module : Associated track parameter");
-     if(!m_pixelId->is_barrel(id)){
-       continue;
-     }
-     ATH_MSG_DEBUG("Found pixel barrel");
-     if(m_pixelId->layer_disk(id)!=layer) {
-       continue;
-     }
+      ATH_MSG_DEBUG("Found pixel module : Associated track parameter");
+      if (!m_pixelId->is_barrel(id)) {
+        continue;
+      }
+      ATH_MSG_DEBUG("Found pixel barrel");
+      if (m_pixelId->layer_disk(id) != layer) {
+        continue;
+      }
 
-     ATH_MSG_DEBUG( "Found layer  " <<  layer << " ID: " << id.get_compact() );
-     blayerParam.push_back (std::move (p));
+      ATH_MSG_DEBUG("Found layer  " << layer << " ID: " << id.get_compact());
+      blayerParam.push_back(std::move(p));
 
-   } /// all params
+    } /// all params
 
-   return true;
+    return true;
   }
 
-
   double InDet::InDetTestBLayerTool::getFracGood(const Trk::TrackParameters* trkParam,
 						 double phiRegionSize, double etaRegionSize) const{
 
diff --git a/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/InDetTrackSummaryHelperTool/InDetTrackSummaryHelperTool.h b/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/InDetTrackSummaryHelperTool/InDetTrackSummaryHelperTool.h
index 1309b85481c2..77aa32e2186c 100755
--- a/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/InDetTrackSummaryHelperTool/InDetTrackSummaryHelperTool.h
+++ b/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/InDetTrackSummaryHelperTool/InDetTrackSummaryHelperTool.h
@@ -59,7 +59,8 @@ namespace InDet {
     */
     using IExtendedTrackSummaryHelperTool::analyse;
     using IExtendedTrackSummaryHelperTool::addDetailedTrackSummary;
-
+    using IExtendedTrackSummaryHelperTool::updateExpectedHitInfo;
+    
     virtual void analyse(
       const EventContext& ctx,
       const Trk::Track& track,
@@ -84,6 +85,12 @@ namespace InDet {
                                          const Trk::Track&,
                                          Trk::TrackSummary&) const override final;
 
+    /** This method updates the expect... hit info*/
+    virtual void updateExpectedHitInfo(
+      const EventContext& ctx,
+      const Trk::Track& track,
+      Trk::TrackSummary& summary) const override final;
+
     /** Input : track, partHyp
         Output: Changes in information
         This method first calls the method getListOfHits to isolate the relevant
@@ -113,11 +120,6 @@ namespace InDet {
                                       int& nclus,
                                       int& noverflowclus) const override final;
 
-    /** This method updates the expect... hit info*/
-    virtual void updateExpectedHitInfo(
-      const Trk::Track& track,
-      Trk::TrackSummary& summary) const override final;
-
   private:
     const Trk::ClusterSplitProbabilityContainer::ProbabilityInfo&
     getClusterSplittingProbability(const EventContext& ctx,
diff --git a/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/src/InDetTrackSummaryHelperTool.cxx b/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/src/InDetTrackSummaryHelperTool.cxx
index 5e2967a1bb7b..88a876652059 100755
--- a/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/src/InDetTrackSummaryHelperTool.cxx
+++ b/InnerDetector/InDetRecTools/InDetTrackSummaryHelperTool/src/InDetTrackSummaryHelperTool.cxx
@@ -441,23 +441,25 @@ void InDet::InDetTrackSummaryHelperTool::updateSharedHitCount(const Trk::Track &
 
 void
 InDet::InDetTrackSummaryHelperTool::updateExpectedHitInfo(
+  const EventContext& ctx,
   const Trk::Track& track,
   Trk::TrackSummary& summary) const
 {
 
-  if (m_usePixel and not m_testBLayerTool.empty() ) {
+  if (m_usePixel and not m_testBLayerTool.empty()) {
 
-    if ( summary.m_information[Trk::numberOfContribPixelLayers] == 0 ) {
+    if (summary.m_information[Trk::numberOfContribPixelLayers] == 0) {
       ATH_MSG_DEBUG("No pxiels on track, so wo do not expect a B-Layer hit !");
       summary.m_information[Trk::expectInnermostPixelLayerHit] = 0;
       summary.m_information[Trk::expectNextToInnermostPixelLayerHit] = 0;
-    } else{
-      //innermost layer block
-      if (summary.m_information[Trk::numberOfInnermostPixelLayerHits] > 0){
-        ATH_MSG_DEBUG("Innermost pixel Layer hit on track, so we expect a innermost pixel layer hit !");
+    } else {
+      // innermost layer block
+      if (summary.m_information[Trk::numberOfInnermostPixelLayerHits] > 0) {
+        ATH_MSG_DEBUG("Innermost pixel Layer hit on track, so we expect a "
+                      "innermost pixel layer hit !");
         summary.m_information[Trk::expectInnermostPixelLayerHit] = 1;
       } else {
-        if (m_testBLayerTool->expectHitInInnermostPixelLayer(&track) ) {
+        if (m_testBLayerTool->expectHitInInnermostPixelLayer(ctx,&track)) {
           ATH_MSG_DEBUG("expect Pixel Layer 0 hit !");
           summary.m_information[Trk::expectInnermostPixelLayerHit] = 1;
         } else {
@@ -466,11 +468,12 @@ InDet::InDetTrackSummaryHelperTool::updateExpectedHitInfo(
         }
       }
 
-      //next to innermost block
-      if (summary.m_information[Trk::numberOfNextToInnermostPixelLayerHits] > 0){
+      // next to innermost block
+      if (summary.m_information[Trk::numberOfNextToInnermostPixelLayerHits] >
+          0) {
         summary.m_information[Trk::expectNextToInnermostPixelLayerHit] = 1;
       } else {
-        if (m_testBLayerTool->expectHitInNextToInnermostPixelLayer(&track) ) {
+        if (m_testBLayerTool->expectHitInNextToInnermostPixelLayer(ctx,&track)) {
           ATH_MSG_DEBUG("expect Pixel Layer 1 hit !");
           summary.m_information[Trk::expectNextToInnermostPixelLayerHit] = 1;
         } else {
diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTrackSummaryHelperTool/src/MuonTrackSummaryHelperTool.h b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTrackSummaryHelperTool/src/MuonTrackSummaryHelperTool.h
index 879a5f3f0fea..9d0c6d715cdc 100755
--- a/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTrackSummaryHelperTool/src/MuonTrackSummaryHelperTool.h
+++ b/MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonTrackSummaryHelperTool/src/MuonTrackSummaryHelperTool.h
@@ -47,6 +47,7 @@ namespace Muon {
 
     using IExtendedTrackSummaryHelperTool::analyse;
     using IExtendedTrackSummaryHelperTool::updateSharedHitCount;
+    using IExtendedTrackSummaryHelperTool::updateExpectedHitInfo;
     using IExtendedTrackSummaryHelperTool::addDetailedTrackSummary;
     virtual void analyse(
       const Trk::Track& trk,
@@ -67,10 +68,15 @@ namespace Muon {
       std::vector<int>& information,
       Trk::ParticleHypothesis hyp) const override final;
 
-    virtual void updateSharedHitCount(
-      const Trk::Track&,
-      const Trk::PRDtoTrackMap*,
-      Trk::TrackSummary&) const override final{};
+    virtual void updateSharedHitCount(const Trk::Track&,
+                                      const Trk::PRDtoTrackMap*,
+                                      Trk::TrackSummary&) const override final
+    {}
+
+    virtual void updateExpectedHitInfo(
+      const Trk::Track&, 
+      Trk::TrackSummary&) const override final
+    {}
 
     virtual void addDetailedTrackSummary(
       const Trk::Track& track,
diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasRecoTools/ISF_FatrasRecoTools/ISF_TrackSummaryHelperTool.h b/Simulation/ISF/ISF_Fatras/ISF_FatrasRecoTools/ISF_FatrasRecoTools/ISF_TrackSummaryHelperTool.h
index dc4609482708..faf554d3fc9c 100644
--- a/Simulation/ISF/ISF_Fatras/ISF_FatrasRecoTools/ISF_FatrasRecoTools/ISF_TrackSummaryHelperTool.h
+++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasRecoTools/ISF_FatrasRecoTools/ISF_TrackSummaryHelperTool.h
@@ -46,6 +46,7 @@ namespace iFatras {
     */
     using IExtendedTrackSummaryHelperTool::analyse;
     using IExtendedTrackSummaryHelperTool::updateSharedHitCount;
+    using IExtendedTrackSummaryHelperTool::updateExpectedHitInfo;
     using IExtendedTrackSummaryHelperTool::addDetailedTrackSummary;
     virtual void analyse(
       const EventContext& ctx,
diff --git a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IExtendedTrackSummaryHelperTool.h b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IExtendedTrackSummaryHelperTool.h
index 2bb75e741c86..11d6e06e0c73 100644
--- a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IExtendedTrackSummaryHelperTool.h
+++ b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IExtendedTrackSummaryHelperTool.h
@@ -42,7 +42,11 @@ namespace Trk {
 
     /* Expand/Extend the interface , with methods  using the EventContext
      * and Trk::PRDtoTrackMap.
-     * For now due to compatibility we provide a default  implementation
+     */
+
+     /*
+     * For now due to client compatibility 
+     * we provide a default  implementations
      * in terms of the the older interface
      */
 
@@ -81,15 +85,21 @@ namespace Trk {
       (void)ctx;
       addDetailedTrackSummary(track,summary);
     };
+
+    virtual void updateExpectedHitInfo(const EventContext& ctx, 
+                                       const Trk::Track& track,
+                                       Trk::TrackSummary& summary) const{
+
+      (void)ctx;
+      updateExpectedHitInfo(track,summary);
+    }
+ 
     virtual void updateSharedHitCount(
       const Trk::Track&,
       const Trk::PRDtoTrackMap*,
       Trk::TrackSummary&) const {};
 
-    virtual void updateExpectedHitInfo(const Trk::Track&,
-                                       Trk::TrackSummary&) const {};
-
-    virtual void updateAdditionalInfo(Trk::TrackSummary&,
+   virtual void updateAdditionalInfo(Trk::TrackSummary&,
                                       std::vector<float>&,
                                       float&,
                                       int&,
@@ -100,7 +110,6 @@ namespace Trk {
      * of the interface for  the methods with the same
      * name as the method above.
      */
-
     virtual void analyse(
       const Trk::Track& track,
       const RIO_OnTrack* rot,
@@ -139,6 +148,14 @@ namespace Trk {
     {
       addDetailedTrackSummary(Gaudi::Hive::currentContext(), track, summary);
     }
+  
+     virtual void updateExpectedHitInfo(const Trk::Track& track,
+                                       Trk::TrackSummary& summary) const override{
+
+      updateExpectedHitInfo(Gaudi::Hive::currentContext(),track,summary);
+    }
+  
+
   };
 
   inline const InterfaceID& Trk::IExtendedTrackSummaryHelperTool::interfaceID()
diff --git a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITrackSummaryHelperTool.h b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITrackSummaryHelperTool.h
index 068e6e8f3bfd..e8487834004c 100755
--- a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITrackSummaryHelperTool.h
+++ b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITrackSummaryHelperTool.h
@@ -64,7 +64,8 @@ namespace Trk {
     virtual void addDetailedTrackSummary(const Trk::Track& track,
                                          Trk::TrackSummary& summary) const = 0;
 
-
+    virtual void updateExpectedHitInfo(const Trk::Track&,
+                                       Trk::TrackSummary&) const = 0;
   };
   
   inline const InterfaceID& Trk::ITrackSummaryHelperTool::interfaceID()
diff --git a/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.icc b/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.icc
index 59c6cc29031c..9c6472d28fd5 100644
--- a/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.icc
+++ b/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.icc
@@ -17,7 +17,7 @@ TrackSummaryTool::updateTrackSummary(const EventContext& ctx,
   /*suppress hole search*/
   UpdateSummary(ctx, track, nullptr, true);
   /*Needed for expected B-Layer*/
-  m_idTool->updateExpectedHitInfo(track, *track.trackSummary());
+  m_idTool->updateExpectedHitInfo(ctx,track, *track.trackSummary());
 }
 
 inline void
-- 
GitLab