From bf7db9b903da67cee8eb0eb26d2137df22118bee Mon Sep 17 00:00:00 2001
From: Shaun Roe <shaun.roe@cern.ch>
Date: Mon, 22 Mar 2021 15:15:21 +0000
Subject: [PATCH] 22.0-cleanup-TRT_TrackExtensionTool_DAF

---
 .../ITRT_TrackExtensionTool.h                 |  30 +-
 .../TRT_TrackExtensionTool_DAF.h              |  17 +-
 .../src/TRT_TrackExtensionTool_DAF.cxx        | 201 ++++-------
 .../TRT_TrackExtensionToolCosmics.h           |   6 +-
 .../TRT_TrackExtensionTool_xk.h               |  10 +-
 .../src/TRT_TrackExtensionToolCosmics.cxx     |  10 +-
 .../src/TRT_TrackExtensionTool_xk.cxx         | 336 +++++++-----------
 .../src/TRT_TrackSegmentsMaker_ATLxk.cxx      |   9 +-
 8 files changed, 247 insertions(+), 372 deletions(-)

diff --git a/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/ITRT_TrackExtensionTool.h b/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/ITRT_TrackExtensionTool.h
index af86dd584637..23d1c71c8874 100755
--- a/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/ITRT_TrackExtensionTool.h
+++ b/InnerDetector/InDetRecTools/InDetRecToolInterfaces/InDetRecToolInterfaces/ITRT_TrackExtensionTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /////////////////////////////////////////////////////////////////////////////////
@@ -15,18 +15,20 @@
 #ifndef ITRT_TrackExtensionTool_H
 #define ITRT_TrackExtensionTool_H
 
-#include <list>
-#include "GaudiKernel/AlgTool.h"
-#include "GaudiKernel/EventContext.h"
-#include "TrkTrack/Track.h"
-#include "TrkMeasurementBase/MeasurementBase.h"
-#include "TrkSegment/TrackSegment.h"
+#include "TrkParameters/TrackParameters.h" //typedef, cannot fwd declare
+#include "GaudiKernel/IAlgTool.h"
+#include <vector>
+#include <memory> //for unique_ptr
 
 class MsgStream;
+class EventContext;
+namespace Trk{
+  class Track;
+  class TrackSegment;
+  class MeasurementBase; //only the ptr is template parameter
+}
 
 namespace InDet {
-
- 
   static const InterfaceID IID_ITRT_TrackExtensionTool
     ("InDet::ITRT_TrackExtensionTool",1,0);
 
@@ -47,15 +49,13 @@ namespace InDet {
       ///////////////////////////////////////////////////////////////////
 
       static const InterfaceID& interfaceID();
-      virtual StatusCode initialize ()=0;
-      virtual StatusCode finalize   ()=0;
 
       ///////////////////////////////////////////////////////////////////
       // Main methods for track extension to TRT
       ///////////////////////////////////////////////////////////////////
 
       ///////////////////////////////////////////////////////////////////
-      // Pixles and sct track extension to TRT
+      // Pixels and sct track extension to TRT
       ///////////////////////////////////////////////////////////////////
 
       virtual std::vector<const Trk::MeasurementBase*>& extendTrack
@@ -65,7 +65,7 @@ namespace InDet {
 
       virtual std::vector<const Trk::MeasurementBase*>& extendTrack
         (const EventContext& ctx,
-         const Trk::TrackParameters&,
+         const Trk::TrackParameters * pTrackParams,
          InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const = 0;
 
       virtual Trk::Track* newTrack
@@ -79,11 +79,11 @@ namespace InDet {
 
       virtual Trk::TrackSegment* findSegment
         (const EventContext& ctx,
-         const Trk::TrackParameters&,
+         const Trk::TrackParameters *,
          InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const = 0;
 
       ///////////////////////////////////////////////////////////////////
-      //  Tool initialisation  for new eevent
+      //  Tool initialisation  for new event
       ///////////////////////////////////////////////////////////////////
 
       virtual std::unique_ptr<InDet::ITRT_TrackExtensionTool::IEventData> newEvent(const EventContext& ctx) const = 0;
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h
index bd97d0ea30da..e988846479d2 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF/TRT_TrackExtensionTool_DAF.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /////////////////////////////////////////////////////////////////////////////////
@@ -7,7 +7,7 @@
 /////////////////////////////////////////////////////////////////////////////////
 // (c) ATLAS Detector software
 /////////////////////////////////////////////////////////////////////////////////
-//  Concret implementation for base class ITRT_TrackExtensionTool
+//  Concrete implementation for base class ITRT_TrackExtensionTool
 /////////////////////////////////////////////////////////////////////////////////
 // Sebastian Fleischmann
 /////////////////////////////////////////////////////////////////////////////////
@@ -82,7 +82,7 @@ public:
 
     virtual std::vector<const Trk::MeasurementBase*>&
        extendTrack(const EventContext& ctx,
-                   const Trk::TrackParameters&,
+                   const Trk::TrackParameters * pTrackParams,
                    InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override;
 
     virtual Trk::Track*
@@ -96,7 +96,7 @@ public:
     ///////////////////////////////////////////////////////////////////
 
     virtual Trk::TrackSegment* findSegment(const EventContext& ctx,
-                                           const Trk::TrackParameters&,
+                                           const Trk::TrackParameters *,
                                            InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override;
 
     ///////////////////////////////////////////////////////////////////
@@ -133,9 +133,8 @@ protected:
        const TRT_DriftCircleContainer               *m_trtcontainer = nullptr;
        std::vector<const Trk::MeasurementBase*>      m_measurement;               //!< vector of MeasurementBase for the output
        std::vector <const InDetDD::TRT_BaseElement*> m_detectorElements;          //!< vector to store the detElements
-       std::vector <const Trk::TrackParameters*>     m_propagatedTrackParameters; //!< vector to store the propagated track parameters (propagated to the related entry of m_detectorElements)
-
-       const Trk::TrackParameters                  *m_siliconTrkParams = nullptr; //!< track parameters at the outermost Silicon layer
+       std::vector <std::shared_ptr< const Trk::TrackParameters>>     m_propagatedTrackParameters; //!< vector to store the propagated track parameters (propagated to the related entry of m_detectorElements)
+       const Trk::TrackParameters                   *m_siliconTrkParams = nullptr; //!< track parameters at the outermost Silicon layer
     };
 
 
@@ -162,9 +161,9 @@ protected:
     ///////////////////////////////////////////////////////////////////
 
     /** find an element-wise extension (ie. the RIOs in a CompROT belong to one detElement) */
-    StatusCode elementWiseExtension(int, int, InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const;
+    bool elementWiseExtension(int, int, InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const;
     /** find a barrel extension with RIOs grouped along the globalPositions of the track */
-    StatusCode groupedBarrelExtension(int, int, InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const;
+    bool groupedBarrelExtension(int, int, InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const;
 
 };
 
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx
index 1474a4acf7d6..3b14950f1248 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_DAF/src/TRT_TrackExtensionTool_DAF.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -11,9 +11,7 @@
 // Sebastian Fleischmann
 ///////////////////////////////////////////////////////////////////
 
-#include <iostream>
-#include <iomanip>
-#include <utility>
+
 #include "TrkParameters/TrackParameters.h"
 
 // tools:
@@ -29,6 +27,10 @@
 
 #include "TRT_ReadoutGeometry/TRT_BaseElement.h"
 #include "InDetIdentifier/TRT_ID.h"
+#include <cmath>
+#include <iostream>
+#include <iomanip>
+#include <utility>
 
 //http://www-zeuthen.desy.de/geant4/clhep-2.0.4.3/BasicVector3D_8h-source.html
 double perp2( const Amg::Vector3D& v1, const Amg::Vector3D& v2 ) {
@@ -94,35 +96,20 @@ StatusCode InDet::TRT_TrackExtensionTool_DAF::initialize() {
     else                                  m_fieldprop = Trk::MagneticFieldProperties(Trk::FullField);
     // -------------------
     // Get propagator tool
-    sc = m_propagator.retrieve();
-    if (sc.isFailure()) {
-        ATH_MSG_FATAL( "Could not retrieve the propagator: "<< m_propagator );
-        return sc;
-    }
-
+    ATH_CHECK(m_propagator.retrieve());
+    
     // --------------------------------
     // Get CompetingRIOsOnTrack creator
-    sc = m_compROTcreator.retrieve();
-    if (sc.isFailure()) {
-        ATH_MSG_FATAL( "Could not retrieve CompetingRIOsOnTrack creator: "<< m_compROTcreator );
-        return sc;
-    }
-
+    ATH_CHECK(m_compROTcreator.retrieve());
+    
     // ------------------------------------
     // Get detector elements road maker tool
-    sc = m_roadtool.retrieve();
-    if (sc.isFailure()) {
-        ATH_MSG_FATAL( "Could not retrieve the TRT road tool: "<< m_roadtool );
-        return sc;
-    }
-
+    ATH_CHECK( m_roadtool.retrieve());
+    
     // -------------------------
     // Get  TRT identifier:
     // First get TRT manager
-    if (detStore()->retrieve(m_trtID, "TRT_ID").isFailure()) {
-        msg(MSG::FATAL) << "Could not get TRT ID helper" << endmsg;
-        return StatusCode::FAILURE;
-    }
+    ATH_CHECK(detStore()->retrieve(m_trtID, "TRT_ID")); 
     // ----------------------------
     // init the size of the vectors
 
@@ -168,18 +155,15 @@ InDet::TRT_TrackExtensionTool_DAF::newEvent(const EventContext& ctx) const {
     // -----------
     // get the container with TRT RIOs
    SG::ReadHandle<TRT_DriftCircleContainer> trtcontainer(m_jo_trtcontainername, ctx);
-
    if((not trtcontainer.isValid())) {
       std::stringstream msg;
       msg << "Missing TRT_DriftCircleContainer " << m_jo_trtcontainername.key();
       throw std::runtime_error( msg.str() );
    }
-
-   std::unique_ptr<EventData> event_data(new EventData(trtcontainer.cptr()));
-   event_data->m_measurement.reserve(200);
-   event_data->m_propagatedTrackParameters.reserve(200);
-
-   return std::unique_ptr<InDet::ITRT_TrackExtensionTool::IEventData>(event_data.release());
+   auto eventData = std::make_unique<EventData>(trtcontainer.cptr());
+   eventData->m_measurement.reserve(200);
+   eventData->m_propagatedTrackParameters.reserve(200);
+   return eventData;
 }
 
 ///////////////////////////////////////////////////////////////////
@@ -188,44 +172,34 @@ InDet::TRT_TrackExtensionTool_DAF::newEvent(const EventContext& ctx) const {
 std::vector<const Trk::MeasurementBase*>&
 InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx,
                                                const Trk::Track& track,
-                                               InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const
+                                               InDet::ITRT_TrackExtensionTool::IEventData &eventDataBaseclass) const
 {
-  InDet::TRT_TrackExtensionTool_DAF::EventData &
-     event_data=InDet::TRT_TrackExtensionTool_DAF::EventData::getPrivateEventData(virt_event_data);
-    //StatusCode sc;
-
-    const Trk::TrackParameters *trackPar = 0;
+  EventData & event_data=EventData::getPrivateEventData(eventDataBaseclass);
     // -------------
     // get the last TrackStateOnSurface of the Track: this should be the outermost Silicon measurement
-    trackPar = track.trackStateOnSurfaces()->back()->trackParameters();
-    if (!trackPar) {
+    auto pTrackPar = track.trackStateOnSurfaces()->back()->trackParameters();
+    if (!pTrackPar) {
         // if the last TSoS does not like us we use the perigee
         ATH_MSG_DEBUG("last track state has no trackParameters, use Perigee instead.");
-        trackPar = track.perigeeParameters();
-        if(!trackPar) {
+        pTrackPar = track.perigeeParameters();
+        if(!pTrackPar) {
             // now I am upset...
             ATH_MSG_ERROR("even the Perigee == Null, stop!");
             return event_data.m_measurement;
         }
     }
     // call main function
-    return extendTrack(ctx, *trackPar,event_data);
+    return extendTrack(ctx, pTrackPar,event_data);
 }
 
 
 std::vector<const Trk::MeasurementBase*>&
 InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx,
-                                               const Trk::TrackParameters& trackPar,
-                                               InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const
+                                               const  Trk::TrackParameters * pTrackPar, //I don't own this
+                                               InDet::ITRT_TrackExtensionTool::IEventData &eventDataBaseclass) const
 {
    InDet::TRT_TrackExtensionTool_DAF::EventData &
-      event_data=InDet::TRT_TrackExtensionTool_DAF::EventData::getPrivateEventData(virt_event_data);
-
-    StatusCode sc(StatusCode::SUCCESS);
-    // fake check of StatusCode to avoid "unchecked return codes" warning
-    if (sc.isFailure()) {
-        ATH_MSG_FATAL("StatusCode has gone insane!" );
-    }
+      event_data=InDet::TRT_TrackExtensionTool_DAF::EventData::getPrivateEventData(eventDataBaseclass);
     // ------------
     // reset the output vector
     event_data.m_measurement.clear();
@@ -233,19 +207,14 @@ InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx,
     event_data.m_detectorElements.clear();
     // reset the vector with propagated trackParameters
     event_data.m_propagatedTrackParameters.clear();
-
     // ------------
     // stop immediately if no RIO container could be retrieved
     if(!event_data.m_trtcontainer) {
         ATH_MSG_DEBUG("no RIO container retrieved, stop!");
         return event_data.m_measurement;
     }
-
-    event_data.m_siliconTrkParams = &trackPar;
-
-    ATH_MSG_DEBUG("starting TRT detector elements road maker with initial TrackParemeters: "<< *event_data.m_siliconTrkParams );
-
-
+    event_data.m_siliconTrkParams = pTrackPar;
+    ATH_MSG_DEBUG("starting TRT detector elements road maker with initial TrackParameters: "<< *event_data.m_siliconTrkParams );
     // Get AtlasFieldCache
     SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx};
     const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
@@ -254,41 +223,37 @@ InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx,
     }
     MagField::AtlasFieldCache fieldCache;
     fieldCondObj->getInitializedCache (fieldCache);
-
     // ----------------------------------
     // start the TRT detector elements road maker to get a list of possibly interesting detector elements
     std::vector<const InDetDD::TRT_BaseElement*> detElements;
     m_roadtool->detElementsRoad(ctx, fieldCache, *event_data.m_siliconTrkParams, Trk::alongMomentum, detElements);
-
     ATH_MSG_DEBUG("TRT detector elements road maker found "<< detElements.size()<< " detElements" );
-
+    if(detElements.empty()) {
+        ATH_MSG_DEBUG("TRT_DetElementsRoadMaker found no road, stop!");
+        return event_data.m_measurement;
+    }
     // ----------------------------------
     // extrapolate to get a list of global track positions:
     // (extrapolate just parameters, not covariance)
 
     // the index of the detElement vector where the track changes from one sub type to another
-    //   in the most general case the track crosses the TRT in the way: Endcap, Barrel, Encap (including cosmics)
+    // in the most general case the track crosses the TRT in the way: Endcap, Barrel, Encap (including cosmics)
     int beginBarrelRoad = 0;
     int beginSecondEndcapRoad = 0;
-    //int nDetElements = 0;
     // was the barrel already crossed?
     bool barrelCrossed = false;
-    // start extrapolation with TrkParameters from Silicon
-    const Trk::TrackParameters* previousTrkPar = event_data.m_siliconTrkParams;
-    // loop over detElements
-    std::vector<const InDetDD::TRT_BaseElement*>::const_iterator detElIter=detElements.begin();
-    if(detElIter == detElements.end()) {
-        ATH_MSG_DEBUG("TRT_DetElementsRoadMaker found no road, stop!");
-        return event_data.m_measurement;
-    }
-    for(; detElIter!=detElements.end(); ++detElIter) {
+    // start extrapolation with TrkParameters from Silicon, but don't touch the original
+    // object in case the shared ptr goes out of scope
+    std::shared_ptr<const Trk::TrackParameters> previousTrkPar(event_data.m_siliconTrkParams->uniqueClone());
+    // loop over detElements    
+    for(const auto & pThisDetectorElement: detElements) {
         // propagate without boundary checks to detElement
-        const Trk::TrackParameters* nextTrkPar = m_propagator->propagateParameters(*previousTrkPar, (*detElIter)->surface(), Trk::alongMomentum, false, m_fieldprop, Trk::nonInteracting).release();
+        std::shared_ptr<const Trk::TrackParameters> nextTrkPar = m_propagator->propagateParameters(*previousTrkPar, pThisDetectorElement->surface(), Trk::alongMomentum, false, m_fieldprop, Trk::nonInteracting);
         if(!nextTrkPar) {
             // propagate directly to this detElement and hope that the Fitter will do a better job:
             ATH_MSG_DEBUG("step by step propagation of track parameters to TRT detector element failed: Try direct propagation (this may cause problems for the Fitter)");
-            ATH_MSG_DEBUG("Problem was in " << (*detElIter)->type() <<" at (" << (*detElIter)->center().x() <<", "<< (*detElIter)->center().y() <<", "<< (*detElIter)->center().z() << ")" );
-            nextTrkPar = m_propagator->propagateParameters(*event_data.m_siliconTrkParams, (*detElIter)->surface(), Trk::alongMomentum, false, m_fieldprop, Trk::nonInteracting).release();
+            ATH_MSG_DEBUG("Problem was in " << pThisDetectorElement->type() <<" at (" << pThisDetectorElement->center().x() <<", "<< pThisDetectorElement->center().y() <<", "<< pThisDetectorElement->center().z() << ")" );
+            nextTrkPar = m_propagator->propagateParameters(*event_data.m_siliconTrkParams, pThisDetectorElement->surface(), Trk::alongMomentum, false, m_fieldprop, Trk::nonInteracting);
             if (!nextTrkPar) {
                 ATH_MSG_WARNING("direct propagation of track parameters to TRT detector element failed:");
                 ATH_MSG_WARNING("   this detector element will be dropped and RIOs on the road may be lost!");
@@ -296,14 +261,14 @@ InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx,
             }
             //return m_measurement;
         } // end if !nextTrkPar
-        ATH_MSG_VERBOSE("propagated TrackParameters: ("<< nextTrkPar->position().x() <<", "<< nextTrkPar->position().y() <<", "<< nextTrkPar->position().z() << ") in detectorType: " << (*detElIter)->type() );
+        ATH_MSG_VERBOSE("propagated TrackParameters: ("<< nextTrkPar->position().x() <<", "<< nextTrkPar->position().y() <<", "<< nextTrkPar->position().z() << ") in detectorType: " << pThisDetectorElement->type() );
 
         // append the detElement and the trkParameters to the vectors
-        event_data.m_detectorElements.push_back((*detElIter));
+        event_data.m_detectorElements.push_back(pThisDetectorElement);
         event_data.m_propagatedTrackParameters.push_back(nextTrkPar);
 
         // set the index if subdetector crossed:
-        if ((*detElIter)->type() == InDetDD::TRT_BaseElement::BARREL) {
+        if (pThisDetectorElement->type() == InDetDD::TRT_BaseElement::BARREL) {
             if (!barrelCrossed) {
                 barrelCrossed = true;
                 beginBarrelRoad = event_data.m_detectorElements.size()-1;
@@ -314,68 +279,59 @@ InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx,
                 beginSecondEndcapRoad = event_data.m_detectorElements.size()-1;
             }
         }
-
         // prepare for next propagation
         previousTrkPar = nextTrkPar;
     } // end for loop over detElements
 
     ATH_MSG_DEBUG("Barrel Road starts at index "<< beginBarrelRoad << ",  second Encap Road at "<< beginSecondEndcapRoad << " with a total of "<< event_data.m_detectorElements.size()<< " detElements" );
-
+    bool anExtensionFailed{false};
     if (m_jo_simpleExtension) {
         ATH_MSG_DEBUG("run the simpleExtension" );
         // -----------------
         // build the complete extension element-wise:
-        sc = elementWiseExtension(0, event_data.m_detectorElements.size()-1,event_data);
+        anExtensionFailed |= elementWiseExtension(0, event_data.m_detectorElements.size()-1,event_data);
     } else {
         // -----------------
         // build the extensions for the three road parts and combine them:
         // endcap before barrel
         if (beginBarrelRoad > 0) {
             ATH_MSG_DEBUG("start processing of endcap road before barrel" );
-            sc = elementWiseExtension(0, beginBarrelRoad-1,event_data);
+            anExtensionFailed |= elementWiseExtension(0, beginBarrelRoad-1,event_data);
         } else if (!barrelCrossed) {
             ATH_MSG_DEBUG("start processing of endcap road (endcap only track)" );
-            sc = elementWiseExtension(0, event_data.m_detectorElements.size()-1,event_data);
+            anExtensionFailed |= elementWiseExtension(0, event_data.m_detectorElements.size()-1,event_data);
         }
         // barrel
-        if (barrelCrossed && (!(sc.isFailure()))) {
+        if (barrelCrossed and not(anExtensionFailed)) {
             ATH_MSG_DEBUG("start processing of barrel road" );
             if (beginSecondEndcapRoad > 0) {
                 // endcap was reached after the barrel was crossed
-                sc = groupedBarrelExtension(beginBarrelRoad, beginSecondEndcapRoad-1,event_data);
+                anExtensionFailed |= groupedBarrelExtension(beginBarrelRoad, beginSecondEndcapRoad-1,event_data);
             } else {
                 // after the barrel no endcap was hit
-                sc = groupedBarrelExtension(beginBarrelRoad, event_data.m_detectorElements.size()-1,event_data);
+                anExtensionFailed |= groupedBarrelExtension(beginBarrelRoad, event_data.m_detectorElements.size()-1,event_data);
             }
         }
-        // encap after barrel
-        if ((beginSecondEndcapRoad > 0) && !(sc.isFailure())) {
+        // endcap after barrel
+        if ((beginSecondEndcapRoad > 0) and not(anExtensionFailed)) {
             ATH_MSG_DEBUG("start processing of endcap road after barrel" );
-            sc = elementWiseExtension(beginSecondEndcapRoad, event_data.m_detectorElements.size()-1,event_data);
+            anExtensionFailed |= elementWiseExtension(beginSecondEndcapRoad, event_data.m_detectorElements.size()-1,event_data);
         }
     }// end if (simpleExtension)
 
     // did one of the extensions fail?
-    if (sc.isFailure()) {
+    if (anExtensionFailed) {
         ATH_MSG_WARNING("extensions failed: Return empty MeasurementBase vector" );
         // delete extension made so far
-        std::vector<const Trk::MeasurementBase*>::const_iterator createdCompROTsIter = event_data.m_measurement.begin();
-        for(; createdCompROTsIter!=event_data.m_measurement.end(); ++createdCompROTsIter) {
-            delete (*createdCompROTsIter);
+        for(auto pThisROT : event_data.m_measurement) {
+            delete (pThisROT);
         }
         event_data.m_measurement.clear();
     }
-
-
     // ------------------------------------------
     // delete all the propagated track parameters:
-    std::vector<const Trk::TrackParameters*>::const_iterator trkParIter = event_data.m_propagatedTrackParameters.begin();
-    for(; trkParIter!=event_data.m_propagatedTrackParameters.end(); ++trkParIter) {
-        delete (*trkParIter);
-    }
     event_data.m_propagatedTrackParameters.clear();
     event_data.m_detectorElements.clear();
-
     ATH_MSG_DEBUG("** done: Made TRT extension with "<< event_data.m_measurement.size() << " CompetingTRT_DriftCirclesOnTrack");
     return event_data.m_measurement;
 }
@@ -384,16 +340,13 @@ InDet::TRT_TrackExtensionTool_DAF::extendTrack(const EventContext& ctx,
 // find an element-wise extension (ie. the RIOs in a CompROT belong to one detElement)
 ///////////////////////////////////////////////////////////////////
 
-StatusCode InDet::TRT_TrackExtensionTool_DAF::elementWiseExtension(int beginIndex,
-                                                                   int endIndex,
-                                                                   InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const
+bool
+InDet::TRT_TrackExtensionTool_DAF::elementWiseExtension(int beginIndex,
+                                                        int endIndex,
+                                                        InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const
 {
-
-
     const double squaredMaxBarrelRIOdistance = m_jo_roadwidth * m_jo_roadwidth;
     const double squaredMaxEndcapRIOdistance = m_jo_roadwidth * m_jo_roadwidth;
-
-
     double lastEndCapZ = -10000.;
     // create a new list of RIOs
     std::list< const Trk::PrepRawData * > RIOlist;
@@ -460,7 +413,7 @@ StatusCode InDet::TRT_TrackExtensionTool_DAF::elementWiseExtension(int beginInde
             if (isBarrel) {
                 // calc squared distance in the x-y-plane
                 double distance = (trkPos - strawGlobPos).squaredNorm();
-                ATH_MSG_DEBUG("distance in the x-y-plane: " << sqrt(distance) );
+                ATH_MSG_DEBUG("distance in the x-y-plane: " << std::sqrt(distance) );
                 // exclude RIOs too far from global track position on the detElement:
                 if ( distance > squaredMaxBarrelRIOdistance ) {
                     ATH_MSG_DEBUG("distance too large, RIO will be dropped." );
@@ -471,7 +424,7 @@ StatusCode InDet::TRT_TrackExtensionTool_DAF::elementWiseExtension(int beginInde
                 int straw = m_trtID->straw( (*driftCircleIterator)->identify() );
                 // calc squared distance of straw and track prediction perpendicular to the straw axis
                 double distance = perp2(strawGlobPos-trkPos, event_data.m_detectorElements[index]->strawAxis(straw));
-                ATH_MSG_DEBUG("distance perp. to straw axis: " << sqrt(distance) );
+                ATH_MSG_DEBUG("distance perp. to straw axis: " << std::sqrt(distance) );
 
                 if ( distance > squaredMaxEndcapRIOdistance ) {
                     ATH_MSG_DEBUG("distance too large, RIO will be dropped." );
@@ -494,13 +447,13 @@ StatusCode InDet::TRT_TrackExtensionTool_DAF::elementWiseExtension(int beginInde
             event_data.m_measurement.push_back(compROT);
         }
     }
-    return StatusCode::SUCCESS;
+    return true;
 }
 
 ///////////////////////////////////////////////////////////////////
 // find a barrel extension with RIOs grouped along the globalPositions of the track
 ///////////////////////////////////////////////////////////////////
-StatusCode
+bool
 InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex,
                                                           int endIndex,
                                                           InDet::TRT_TrackExtensionTool_DAF::EventData &event_data) const
@@ -520,14 +473,10 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex,
     // index of the last global position belonging to the detElement
     std::vector<int> detElementGlobPosIndex(event_data.m_propagatedTrackParameters.size(), 0);
 
+
+    ATH_MSG_DEBUG("looping over detElements between index " << beginIndex << " and " << endIndex << "to produce a list of global positions" );
     // do the first iteration manually to get the
     //    last global position
-    //    double lastPosX = m_propagatedTrackParameters[beginIndex]->position().x();
-    //    double lastPosY = m_propagatedTrackParameters[beginIndex]->position().y();
-    //    trackGlobalPosX.push_back( lastPosX );
-    //    trackGlobalPosY.push_back( lastPosY );
-    ATH_MSG_DEBUG("looping over detElements between index " << beginIndex << " and " << endIndex << "to produce a list of global positions" );
-
     Amg::Vector3D* lastPos = new Amg::Vector3D( event_data.m_propagatedTrackParameters[beginIndex]->position() );
     ATH_MSG_VERBOSE("global position: ("<< lastPos->x() <<", "<< lastPos->y() << ")" );
     // ignore z coordinate (along the straw)
@@ -537,8 +486,6 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex,
 
     for(int index = beginIndex+1; index <= endIndex; ++index) {
         // get the global track position and fill it into vectors
-        //double posX = m_propagatedTrackParameters[index]->position().x();
-        //double posY = m_propagatedTrackParameters[index]->position().y();
         Amg::Vector3D* Pos = new Amg::Vector3D( event_data.m_propagatedTrackParameters[index]->position() );
         // ignore z coordinate (along the straw)
         (*Pos)[Amg::z]=0.;
@@ -604,7 +551,7 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex,
             unsigned int minDistIndex = detElementGlobPosIndex[index];
             //double minDistance = strawGlobPos.distance2(*(trackGlobalPos[minDistIndex]));
             double minDistance = (*(trackGlobalPos[minDistIndex]) - strawGlobPos).squaredNorm();
-            ATH_MSG_VERBOSE("global position of the RIO belonging to globPos index "<< minDistIndex <<" : ("<< strawGlobPos.x() <<", "<< strawGlobPos.y() << ") --> distance: " << sqrt(minDistance) );
+            ATH_MSG_VERBOSE("global position of the RIO belonging to globPos index "<< minDistIndex <<" : ("<< strawGlobPos.x() <<", "<< strawGlobPos.y() << ") --> distance: " << std::sqrt(minDistance) );
 
             // Perhaps already exclude RIOs too far from global track position on the detElement:
             if ( minDistance > squaredMaxRIOdistanceFromTrackOnDetElement ) {
@@ -668,7 +615,7 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex,
             // calc the distance of the straw center to the secant
             //double distToSecant = ((*(trackGlobalPos[groupIndex]))- (*(trackGlobalPos[groupIndex+1]))).perp( (strawGlobPos - (*(trackGlobalPos[groupIndex]))) );
             //double distToSecant = (strawGlobPos - (*(trackGlobalPos[groupIndex]))).perp( ((*(trackGlobalPos[groupIndex]))- (*(trackGlobalPos[groupIndex+1]))) );
-            double distToSecant = sqrt(perp2(strawGlobPos - (*(trackGlobalPos[groupIndex])),  ((*(trackGlobalPos[groupIndex]))- (*(trackGlobalPos[groupIndex+1]))) ) );
+            double distToSecant = std::sqrt(perp2(strawGlobPos - (*(trackGlobalPos[groupIndex])),  ((*(trackGlobalPos[groupIndex]))- (*(trackGlobalPos[groupIndex+1]))) ) );
             ATH_MSG_VERBOSE(" belongs to group "<< groupIndex <<", distance to secant: "<< distToSecant );
             if (distToSecant > m_jo_roadwidth ) {
                 // ignore the current RIO
@@ -760,7 +707,7 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex,
         (*RIOlistIterator) = 0;
     }
 
-    return StatusCode::SUCCESS;
+    return true;
 }
 
 ///////////////////////////////////////////////////////////////////
@@ -768,10 +715,10 @@ InDet::TRT_TrackExtensionTool_DAF::groupedBarrelExtension(int beginIndex,
 ///////////////////////////////////////////////////////////////////
 Trk::TrackSegment*
 InDet::TRT_TrackExtensionTool_DAF::findSegment(const EventContext& /*ctx*/,
-                                               const Trk::TrackParameters&,
+                                               const Trk::TrackParameters *,
                                                InDet::ITRT_TrackExtensionTool::IEventData &) const
 {
-    return 0;
+    return nullptr;
 }
 ///////////////////////////////////////////////////////////////////
 // Methods for track extension to TRT for pixles+sct tracks
@@ -783,5 +730,5 @@ InDet::TRT_TrackExtensionTool_DAF::newTrack(const EventContext& /*ctx*/,
                                             const Trk::Track&,
                                             InDet::ITRT_TrackExtensionTool::IEventData &) const
 {
-  return 0;
+  return nullptr;
 }
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h
index c5e03a4be1c3..04bb5787fe87 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionToolCosmics.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /////////////////////////////////////////////////////////////////////////////////
@@ -78,12 +78,12 @@ namespace InDet {
 
       virtual std::vector<const Trk::MeasurementBase*>& extendTrack
          (const EventContext& ctx,
-          const Trk::TrackParameters&,
+          const Trk::TrackParameters *,
           InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override;
 
       virtual Trk::TrackSegment* findSegment
 	 (const EventContext& ctx,
-          const Trk::TrackParameters&,
+          const Trk::TrackParameters *,
           InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override;
 
       virtual Trk::Track* newTrack
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h
index a1eccb56f266..455dad7a8e64 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk/TRT_TrackExtensionTool_xk.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /////////////////////////////////////////////////////////////////////////////////
@@ -75,9 +75,9 @@ namespace InDet{
       virtual std::vector<const Trk::MeasurementBase*>& extendTrack
         (const EventContext& ctx, const Trk::Track&,InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override;
       virtual std::vector<const Trk::MeasurementBase*>& extendTrack
-        (const EventContext& ctx, const Trk::TrackParameters&,InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override;
+        (const EventContext& ctx, const Trk::TrackParameters *,InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override;
       virtual Trk::TrackSegment* findSegment
-        (const EventContext& ctx, const Trk::TrackParameters&, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override;
+        (const EventContext& ctx, const Trk::TrackParameters *, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override;
       virtual Trk::Track* newTrack
         (const EventContext& ctx, const Trk::Track&, InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const override;
       virtual std::unique_ptr<InDet::ITRT_TrackExtensionTool::IEventData> newEvent(const EventContext& ctx) const override;
@@ -111,7 +111,7 @@ namespace InDet{
 
       std::vector<const Trk::MeasurementBase*>& extendTrackFromParameters
       (const EventContext& ctx,
-       const Trk::TrackParameters&,
+       const Trk::TrackParameters *,
        InDet::TRT_TrackExtensionTool_xk::EventData &event_data) const;
 
       ///////////////////////////////////////////////////////////////////
@@ -156,7 +156,7 @@ namespace InDet{
       void       magneticFieldInit();
       StatusCode magneticFieldInit(IOVSVC_CALLBACK_ARGS);
       bool isGoodExtension(const EventContext& ctx,
-                           const Trk::TrackParameters&,
+                           const Trk::TrackParameters *,
                            InDet::TRT_TrackExtensionTool_xk::EventData &event_data) const;
       bool numberPIXandSCTclustersCut(const Trk::Track&) const;
 
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx
index be35916d7c51..4fcc0deff8ef 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionToolCosmics.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -264,7 +264,7 @@ InDet::TRT_TrackExtensionToolCosmics::extendTrack(const EventContext& ctx,
   }
 
   if(Tr.perigeeParameters()) {
-    return extendTrack(ctx, *Tr.perigeeParameters(),event_data);
+    return extendTrack(ctx, Tr.perigeeParameters(),event_data);
   }
   event_data.m_measurement.clear();
   return event_data.m_measurement;
@@ -397,7 +397,7 @@ class tp_sort_cosmics{
 
 std::vector<const Trk::MeasurementBase*>&
 InDet::TRT_TrackExtensionToolCosmics::extendTrack(const EventContext& /*ctx*/,
-                                                  const Trk::TrackParameters& par,
+                                                  const Trk::TrackParameters * par,
                                                   InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const
 {
   InDet::TRT_TrackExtensionToolCosmics::EventData &
@@ -412,7 +412,7 @@ InDet::TRT_TrackExtensionToolCosmics::extendTrack(const EventContext& /*ctx*/,
 
   std::vector<const Trk::TrackParameters* >* tpars_down=0;
   std::vector<const Trk::TrackParameters* >* tpars_up=0;
-  const Trk::Perigee *per=dynamic_cast<const Trk::Perigee *>(&par);
+  const Trk::Perigee *per=dynamic_cast<const Trk::Perigee *>(par);
   if (!per) {
     msg(MSG::FATAL)<<"Track perigee not found!"<<endmsg;
     return event_data.m_measurement;
@@ -492,7 +492,7 @@ InDet::TRT_TrackExtensionToolCosmics::extendTrack(const EventContext& /*ctx*/,
 
 Trk::TrackSegment* 
 InDet::TRT_TrackExtensionToolCosmics::findSegment(const EventContext& /*ctx*/,
-                                                  const Trk::TrackParameters&,
+                                                  const Trk::TrackParameters *,
                                                   InDet::ITRT_TrackExtensionTool::IEventData &) const
 {
   return NULL;
diff --git a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx
index 1e5afc0595ad..67f5de99ba8f 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx
+++ b/InnerDetector/InDetRecTools/TRT_TrackExtensionTool_xk/src/TRT_TrackExtensionTool_xk.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 ///////////////////////////////////////////////////////////////////
@@ -18,9 +18,28 @@
 #include "InDetRecToolInterfaces/ITrtDriftCircleCutTool.h"
 #include "TrkRIO_OnTrack/RIO_OnTrack.h"
 #include "InDetPrepRawData/SCT_Cluster.h"
+#include "TrkTrack/Track.h"
+#include "TrkTrack/TrackStateOnSurface.h"
+#include <array>
 #include <list>
 #include <iostream>
 
+namespace{
+  constexpr size_t MAX_ROAD_SIZE(399);
+
+  std::list<const Trk::Surface*> 
+  listOfSurfacesFromVectorOfElements(std::vector<const InDetDD::TRT_BaseElement*> & v){
+    size_t roadsize{0};
+    std::list<const Trk::Surface*> surfaces;
+    for(const auto &pThisElement: v) {
+     surfaces.emplace_back(&(pThisElement->surface())); 
+     if(++roadsize==MAX_ROAD_SIZE) break;
+    }
+    return surfaces;
+  }
+
+}
+
 ///////////////////////////////////////////////////////////////////
 // Constructor
 ///////////////////////////////////////////////////////////////////
@@ -85,16 +104,12 @@ InDet::TRT_TrackExtensionTool_xk::~TRT_TrackExtensionTool_xk()
 
 StatusCode InDet::TRT_TrackExtensionTool_xk::initialize()
 {
-  StatusCode sc = AlgTool::initialize();
 
-  // Get tTools servise
+  // Get tTools service
   //
   IToolSvc* toolSvc;
-  if ((sc=service("ToolSvc", toolSvc)).isFailure())  {
-    msg(MSG::FATAL)<<"Toll service not found !"<<endmsg;
-    return StatusCode::FAILURE;
-  }
-
+  ATH_CHECK(service("ToolSvc", toolSvc));
+  
   // Get magnetic field service
   //
   if(m_fieldmode != "NoField" ) {
@@ -107,66 +122,36 @@ StatusCode InDet::TRT_TrackExtensionTool_xk::initialize()
 
   // Get RIO_OnTrack creator with drift time information
   //
-  if(m_riontrackD.retrieve().isFailure()) {
-    msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_riontrackD <<endmsg;
-    return StatusCode::FAILURE;
-  } else {
-    msg(MSG::INFO) << "Retrieved tool " << m_riontrackD << endmsg;
-  }
-
+  ATH_CHECK(m_riontrackD.retrieve());
+  ATH_MSG_INFO( "Retrieved tool " << m_riontrackD);
+  
   // Get RIO_OnTrack creator without drift time information
   //
-  if(m_riontrackN.retrieve().isFailure()) {
-    msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_riontrackN <<endmsg;
-    return StatusCode::FAILURE;
-  } else {
-    msg(MSG::INFO) << "Retrieved tool " << m_riontrackN << endmsg;
-  }
+  ATH_CHECK(m_riontrackN.retrieve());
+  ATH_MSG_INFO("Retrieved tool " << m_riontrackN ) ;
 
   // Get detector elements road maker tool
   //
-  if(m_roadtool.retrieve().isFailure()) {
-    msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_roadtool <<endmsg;
-    return StatusCode::FAILURE;
-  } else {
-    msg(MSG::INFO) << "Retrieved tool " << m_roadtool << endmsg;
-  }
+  ATH_CHECK(m_roadtool.retrieve());
+  ATH_MSG_INFO( "Retrieved tool " << m_roadtool);
 
   // Get propagator tool
   //
-  if(m_proptool.retrieve().isFailure()) {
-    msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_proptool <<endmsg;
-    return StatusCode::FAILURE;
-  } else {
-    msg(MSG::INFO) << "Retrieved tool " << m_proptool << endmsg;
-  }
+  ATH_CHECK(m_proptool.retrieve());
+  ATH_MSG_INFO( "Retrieved tool " << m_proptool);
 
   // Get updator tool
   //
-  if(m_updatortool.retrieve().isFailure()) {
-    msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_updatortool <<endmsg;
-    return StatusCode::FAILURE;
-  } else {
-    msg(MSG::INFO) << "Retrieved tool " << m_updatortool << endmsg;
-  }
+  ATH_CHECK(m_updatortool.retrieve());
+  ATH_MSG_INFO("Retrieved tool " << m_updatortool);
 
   // Get segment selector tool
   //
-  if(m_selectortool.retrieve().isFailure()) {
-    msg(MSG::FATAL)<<"Failed to retrieve tool "<< m_selectortool <<endmsg;
-    return StatusCode::FAILURE;
-  } else {
-    msg(MSG::INFO) << "Retrieved tool " << m_selectortool << endmsg;
-  }
-
-
+  ATH_CHECK(m_selectortool.retrieve());
+  ATH_MSG_INFO("Retrieved tool " << m_selectortool);
 
   // TRT
-  if (detStore()->retrieve(m_trtid,"TRT_ID").isFailure()) {
-    msg(MSG::FATAL) << "Could not get TRT ID helper" << endmsg;
-    return StatusCode::FAILURE;
-  }
-
+  ATH_CHECK(detStore()->retrieve(m_trtid,"TRT_ID"));
 
   //Initialize container
   ATH_CHECK(m_trtname.initialize());
@@ -174,7 +159,7 @@ StatusCode InDet::TRT_TrackExtensionTool_xk::initialize()
   // Get output print level
   //
   m_outputlevel = msg().level()-MSG::DEBUG;
-  return sc;
+  return StatusCode::SUCCESS;
 }
 
 ///////////////////////////////////////////////////////////////////
@@ -183,7 +168,7 @@ StatusCode InDet::TRT_TrackExtensionTool_xk::initialize()
 
 StatusCode InDet::TRT_TrackExtensionTool_xk::finalize()
 {
-   StatusCode sc = AlgTool::finalize(); return sc;
+   return StatusCode::SUCCESS;
 }
 
 ///////////////////////////////////////////////////////////////////
@@ -204,63 +189,37 @@ MsgStream& InDet::TRT_TrackExtensionTool_xk::dump( MsgStream& out ) const
 
 MsgStream& InDet::TRT_TrackExtensionTool_xk::dumpConditions( MsgStream& out ) const
 {
-  int n = 64-m_proptool.type().size();
-  std::string s1; for(int i=0; i<n; ++i) s1.append(" "); s1.append("|");
-  n     = 64-m_updatortool.type().size();
-  std::string s10; for(int i=0; i<n; ++i) s10.append(" "); s10.append("|");
-
-  std::string fieldmode[9] ={"NoField"       ,"ConstantField","SolenoidalField",
+  auto pad = [](const std::string & s)->std::string{
+    std::string s1(s.size(),' ');
+    s1+="|";
+    return s + s1 +"\n";
+  };
+  const std::array<std::string,9> fieldmode{"NoField"       ,"ConstantField","SolenoidalField",
 			     "ToroidalField" ,"Grid3DField"  ,"RealisticField" ,
 			     "UndefinedField","AthenaField"  , "?????"         };
-
   int mode = m_fieldprop.magneticFieldMode();
   if(mode<0 || mode>8 ) mode = 8;
-
-  n     = 64-fieldmode[mode].size();
-  std::string s3; for(int i=0; i<n; ++i) s3.append(" "); s3.append("|");
-  n     = 64-m_roadtool.type().size();
-  std::string s6; for(int i=0; i<n; ++i) s6.append(" "); s6.append("|");
-  n     = 64-m_trtname.key().size();
-  std::string s7; for(int i=0; i<n; ++i) s7.append(" "); s7.append("|");
-  n     = 64-m_riontrackD.type().size();
-  std::string s8; for(int i=0; i<n; ++i) s8.append(" "); s8.append("|");
-  n     = 64-m_riontrackN.type().size();
-  std::string s9; for(int i=0; i<n; ++i) s9.append(" "); s9.append("|");
-
-  out<<"|----------------------------------------------------------------------"
-     <<"---------------------|"
-     <<std::endl;
-  out<<"| TRT container           | "<<m_trtname.key()           <<s7 <<std::endl;
-  out<<"| Tool for propagation    | "<<m_proptool    .type()<<s1 <<std::endl;
-  out<<"| Tool for updator        | "<<m_updatortool .type()<<s10<<std::endl;
-  out<<"| Tool for rio  on trackD | "<<m_riontrackD.type()<<s8 <<std::endl;
-  out<<"| Tool for rio  on trackN | "<<m_riontrackN.type()<<s9 <<std::endl;
-  out<<"| Tool for road builder   | "<<m_roadtool  .type()<<s6 <<std::endl;
-  out<<"| Magnetic field mode     | "<<fieldmode[mode]<<s3<<std::endl;
-  out<<"| Segments find  mode     | "
-     <<std::setw(12)<<m_segmentFindMode
-     <<"                                                    |"<<std::endl;
-  out<<"| TRT road half width (mm)| "
-     <<std::setw(12)<<std::setprecision(5)<<m_roadwidth
-     <<"                                                    |"<<std::endl;
-  out<<"| Min number DriftCircles | "
-     <<std::setw(12)<<m_minNumberDCs
-     <<"                                                    |"<<std::endl;
-  out<<"| Use drift time  ?       | "
-     <<std::setw(12)<<m_usedriftrad
-     <<"                                                    |"<<std::endl;
- out<<"| Z vertex half width      | "
-     <<std::setw(12)<<m_zVertexWidth
-     <<"                                                    |"<<std::endl;
- out<<"| Scalefactor hit error    | "
-     <<std::setw(12)<<m_scale_error
-     <<"                                                    |"<<std::endl;
- out<<"| Max impact parameter     | "
-     <<std::setw(12)<<m_impact
-     <<"                                                    |"<<std::endl;
-  out<<"|----------------------------------------------------------------------"
-     <<"---------------------|"
-     <<std::endl;
+  std::string lineSeparator(90,'-');
+  lineSeparator = "|" + lineSeparator + "|\n";
+  const auto & w12 = std::setw(12);
+  const auto & sp5 = std::setprecision(5);
+  const std::string spaces = "                                                    |\n";
+  out<< lineSeparator;
+  out<<"| TRT container           | "<< pad(m_trtname.key());
+  out<<"| Tool for propagation    | "<< pad(m_proptool.type());
+  out<<"| Tool for updator        | "<< pad(m_updatortool.type());
+  out<<"| Tool for rio  on trackD | "<< pad(m_riontrackD.type());
+  out<<"| Tool for rio  on trackN | "<< pad(m_riontrackN.type());
+  out<<"| Tool for road builder   | "<< pad(m_roadtool.type());
+  out<<"| Magnetic field mode     | "<< pad(fieldmode[mode]);
+  out<<"| Segments find  mode     | "<< w12 << m_segmentFindMode << spaces;
+  out<<"| TRT road half width (mm)| "<< w12 << sp5<< m_roadwidth << spaces;
+  out<<"| Min number DriftCircles | "<< w12 << m_minNumberDCs << spaces;
+  out<<"| Use drift time  ?       | "<< w12 << m_usedriftrad << spaces;
+  out<<"| Z vertex half width     | "<< w12 << m_zVertexWidth << spaces;
+  out<<"| Scalefactor hit error   | "<< w12 << m_scale_error <<spaces;
+  out<<"| Max impact parameter    | "<< w12 << m_impact <<spaces;
+  out<< lineSeparator;
   return out;
 }
 
@@ -332,21 +291,20 @@ InDet::TRT_TrackExtensionTool_xk::newEvent(const EventContext& ctx) const
                                                   ? m_fieldprop
                                                   : Trk::MagneticFieldProperties(Trk::NoField  ));
 
-  std::unique_ptr<EventData> event_data(new EventData(trtcontainer.cptr(), m_maxslope));
+  auto event_data = std::make_unique<EventData>(EventData(trtcontainer.cptr(), m_maxslope));
   event_data->m_trajectory.set(fieldprop, fieldCondObj);
   event_data->m_trajectory.set (m_trtid,
-                                &(*m_proptool),
-                                &(*m_updatortool),
-                                &(*m_riontrackD),
-                                &(*m_riontrackN),
+                                m_proptool.get(),
+                                m_updatortool.get(),
+                                m_riontrackD.get(),
+                                m_riontrackN.get(),
                                 m_roadwidth,
                                 m_zVertexWidth,
                                 m_impact,
                                 m_scale_error,
                                 m_minTRTSegmentpT);
   event_data->m_measurement.reserve(200);
-
-  return std::unique_ptr<InDet::ITRT_TrackExtensionTool::IEventData>(event_data.release());
+  return event_data;
 }
 
 ///////////////////////////////////////////////////////////////////
@@ -360,25 +318,17 @@ InDet::TRT_TrackExtensionTool_xk::extendTrack(const EventContext& ctx,
 {
   InDet::TRT_TrackExtensionTool_xk::EventData &
      event_data=InDet::TRT_TrackExtensionTool_xk::EventData::getPrivateEventData(virt_event_data);
-
   event_data.m_measurement.clear();
-
-  const DataVector<const Trk::TrackStateOnSurface>*
-    tsos = Tr.trackStateOnSurfaces();
-
-  const Trk::TrackParameters*
-    par = (*(tsos->rbegin()))->trackParameters(); if(!par ) return event_data.m_measurement;
-  const Trk::TrackParameters*
-    parb = (*(tsos->begin()))->trackParameters();
-
-
+  const DataVector<const Trk::TrackStateOnSurface>* tsos = Tr.trackStateOnSurfaces();
+  const Trk::TrackParameters* par = tsos->back()->trackParameters(); //tsos owns this
+  if(!par ) return event_data.m_measurement;
+  const Trk::TrackParameters* parb = tsos->front()->trackParameters(); //tsos owns this
   if(parb && par!=parb) {
-
     const Amg::Vector3D& g1 = par ->position();
     const Amg::Vector3D& g2 = parb->position();
     if((g2.x()*g2.x()+g2.y()*g2.y()) > (g1.x()*g1.x()+g1.y()*g1.y())) par=parb;
   }
-  return extendTrackFromParameters(ctx, *par, event_data);
+  return extendTrackFromParameters(ctx, par, event_data);
 }
 
 ///////////////////////////////////////////////////////////////////
@@ -387,7 +337,7 @@ InDet::TRT_TrackExtensionTool_xk::extendTrack(const EventContext& ctx,
 
 std::vector<const Trk::MeasurementBase*>&
 InDet::TRT_TrackExtensionTool_xk::extendTrack(const EventContext& ctx,
-                                              const Trk::TrackParameters& par,
+                                              const Trk::TrackParameters * par,
                                               InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const
 {
   InDet::TRT_TrackExtensionTool_xk::EventData &
@@ -398,7 +348,7 @@ InDet::TRT_TrackExtensionTool_xk::extendTrack(const EventContext& ctx,
 
 std::vector<const Trk::MeasurementBase*>&
 InDet::TRT_TrackExtensionTool_xk::extendTrackFromParameters(const EventContext& ctx,
-                                                            const Trk::TrackParameters& par,
+                                                            const Trk::TrackParameters * par,
                                                             InDet::TRT_TrackExtensionTool_xk::EventData &event_data) const
 {
   event_data.m_measurement.clear();
@@ -412,15 +362,15 @@ InDet::TRT_TrackExtensionTool_xk::extendTrackFromParameters(const EventContext&
 
 Trk::TrackSegment*
 InDet::TRT_TrackExtensionTool_xk::findSegment(const EventContext& ctx,
-                                              const Trk::TrackParameters& par,
+                                              const Trk::TrackParameters * par,
                                               InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const
 {
   InDet::TRT_TrackExtensionTool_xk::EventData &
      event_data=InDet::TRT_TrackExtensionTool_xk::EventData::getPrivateEventData(virt_event_data);
 
   int nCut = m_minNumberDCs;
-  if(m_parameterization) {nCut = m_selectortool->minNumberDCs(&par); if(nCut<m_minNumberDCs) nCut=m_minNumberDCs;}
-
+  if(m_parameterization) {nCut = m_selectortool->minNumberDCs(par); 
+  if(nCut<m_minNumberDCs) nCut=m_minNumberDCs;}
 
   // Get AtlasFieldCache
   MagField::AtlasFieldCache fieldCache;
@@ -429,87 +379,75 @@ InDet::TRT_TrackExtensionTool_xk::findSegment(const EventContext& ctx,
   const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
   if (fieldCondObj == nullptr) {
       ATH_MSG_ERROR("InDet::TRT_TrackExtensionTool_xk::findSegment: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
-      return 0;
+      return nullptr;
   }
   fieldCondObj->getInitializedCache (fieldCache);
 
-
   // TRT detector elements road builder
   //
-  std::vector<const InDetDD::TRT_BaseElement*> DE;
-  m_roadtool->detElementsRoad(ctx, fieldCache, par, Trk::alongMomentum,DE);
+  std::vector<const InDetDD::TRT_BaseElement*> detectorElements;
+  m_roadtool->detElementsRoad(ctx, fieldCache, *par, Trk::alongMomentum,detectorElements);
 
-  if(int(DE.size())< nCut) return 0;
+  if(int(detectorElements.size())< nCut) return nullptr;
 
   // Array pointers to surface preparation
   //
-  std::list<const Trk::Surface*> surfaces;
-  int roadsize = 0;
-  std::vector<const InDetDD::TRT_BaseElement*>::iterator d,de=DE.end();
-  for(d=DE.begin(); d!=de; ++d) {
-    surfaces.push_back(&(*d)->surface()); if(++roadsize==399) break;
-  }
+  auto surfaces = listOfSurfacesFromVectorOfElements(detectorElements);
 
   // Global position on surfaces production
   //
-  Trk::PatternTrackParameters Tp; if(!Tp.production(&par)) return 0;
+  Trk::PatternTrackParameters Tp; 
+  if(!Tp.production(par)) return nullptr;
   std::list< std::pair<Amg::Vector3D,double> > gpos;
   m_proptool->globalPositions(ctx, Tp, surfaces, gpos, m_fieldprop);
 
   // Initiate trajectory
   //
-
-  event_data.m_trajectory.initiateForTRTSeed(gpos,DE,event_data.m_trtcontainer,Tp);
-
-  if(event_data.m_trajectory.naElements() < nCut) return 0;
+  event_data.m_trajectory.initiateForTRTSeed(gpos,detectorElements,event_data.m_trtcontainer,Tp);
+  if(event_data.m_trajectory.naElements() < nCut) return nullptr;
   event_data.m_maxslope      = .0002     ;
-
   if(event_data.m_trajectory.isFirstElementBarrel()) {
-
     if(m_usedriftrad)  event_data.m_trajectory.trackFindingWithDriftTime   (event_data.m_maxslope);
     else               event_data.m_trajectory.trackFindingWithoutDriftTime(event_data.m_maxslope);
-    if(!event_data.m_trajectory.searchStartStop()) {return 0;}
-  }
-  else   {
-
+    if(!event_data.m_trajectory.searchStartStop()) {return nullptr;}
+  } else   {
     event_data.m_trajectory.trackFindingWithoutDriftTime(event_data.m_maxslope);
-    if(!event_data.m_trajectory.searchStartStop()) { return 0;}
+    if(!event_data.m_trajectory.searchStartStop()) { return nullptr;}
     event_data.m_trajectory.radiusCorrection();
     if(m_usedriftrad) event_data.m_trajectory.trackFindingWithDriftTimeBL   (event_data.m_maxslope);
     else              event_data.m_trajectory.trackFindingWithoutDriftTimeBL(event_data.m_maxslope);
-    if(!event_data.m_trajectory.searchStartStop()) { return 0;}
+    if(!event_data.m_trajectory.searchStartStop()) { return nullptr;}
   }
 
   // Track associate with clusters and holes
   //
   event_data.m_trajectory.buildTrajectoryForTRTSeed(m_usedriftrad);
-
   event_data.m_maxslope = m_maxslope;
 
   // Trajectory quality test
   //
   int nc = event_data.m_trajectory.nclusters();
   int nh = event_data.m_trajectory.nholes   ();
-  if( nc < nCut  || (1000*nc) < (700*(nc+nh)) ) return 0;
+  if( nc < nCut  || (1000*nc) < (700*(nc+nh)) ) return nullptr;
 
   if     (m_segmentFindMode==0) {
     if(!event_data.m_trajectory.trackParametersEstimationForPerigeeWithVertexConstraint())
-      return 0;
+      return nullptr;
   }
   else if(m_segmentFindMode==1) {
     if(!event_data.m_trajectory.trackParametersEstimationForFirstPointWithVertexConstraint())
-      return 0;
+      return nullptr;
   }
   else if(m_segmentFindMode==2) {
     if(!event_data.m_trajectory.trackParametersEstimationForFirstPoint())
-      return 0;
+      return nullptr;
   }
   else                          {
     if(!event_data.m_trajectory.fitter())
-      return 0;
+      return nullptr;
   }
 
-  if(event_data.m_trajectory.nclusters() < nCut) return 0;
+  if(event_data.m_trajectory.nclusters() < nCut) return nullptr;
 
   // Trk::TrackSegment production
   //
@@ -517,14 +455,14 @@ InDet::TRT_TrackExtensionTool_xk::findSegment(const EventContext& ctx,
 }
 
 ///////////////////////////////////////////////////////////////////
-// Test possiblity extend track to TRT for pixles+sct tracks
+// Test possiblity extend track to TRT for pixels+sct tracks
 ///////////////////////////////////////////////////////////////////
 
-bool InDet::TRT_TrackExtensionTool_xk::isGoodExtension(const EventContext& ctx,
-                                                       const Trk::TrackParameters& par,
+bool 
+InDet::TRT_TrackExtensionTool_xk::isGoodExtension(const EventContext& ctx,
+                                                       const Trk::TrackParameters * par,
                                                        InDet::TRT_TrackExtensionTool_xk::EventData &event_data) const
 {
-
   // Get AtlasFieldCache
   MagField::AtlasFieldCache fieldCache;
 
@@ -532,36 +470,29 @@ bool InDet::TRT_TrackExtensionTool_xk::isGoodExtension(const EventContext& ctx,
   const AtlasFieldCacheCondObj* fieldCondObj{*readHandle};
   if (fieldCondObj == nullptr) {
       ATH_MSG_ERROR("InDet::TRT_TrackExtensionTool_xk::findSegment: Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCondObjInputKey.key());
-      return 0;
+      return false;
   }
   fieldCondObj->getInitializedCache (fieldCache);
-
-
   // TRT detector elements road builder
   //
-  std::vector<const InDetDD::TRT_BaseElement*> DE;
-  m_roadtool->detElementsRoad(ctx, fieldCache, par,Trk::alongMomentum,DE);
-  if(int(DE.size()) < m_minNumberDCs) return false;
-
+  std::vector<const InDetDD::TRT_BaseElement*> detectorElements;
+  m_roadtool->detElementsRoad(ctx, fieldCache, *par,Trk::alongMomentum,detectorElements);
+  if(int(detectorElements.size()) < m_minNumberDCs) return false;
   // Array pointers to surface preparation
   //
-  std::list<const Trk::Surface*> surfaces;
-  int roadsize = 0;
-  std::vector<const InDetDD::TRT_BaseElement*>::iterator d,de=DE.end();
-  for(d=DE.begin(); d!=de; ++d) {
-    surfaces.push_back(&(*d)->surface()); if(++roadsize==399) break;
-  }
-
+  auto surfaces = listOfSurfacesFromVectorOfElements(detectorElements);
+  
   // Global position on surfaces production
   //
-  Trk::PatternTrackParameters Tp; if(!Tp.production(&par)) return false;
+  Trk::PatternTrackParameters Tp; 
+  if(!Tp.production(par)) return false;
   std::list< std::pair<Amg::Vector3D,double> > gpos;
   m_proptool->globalPositions(ctx, Tp,surfaces,gpos,m_fieldprop);
 
   // Initiate trajectory
   //
 
-  event_data.m_trajectory.initiateForPrecisionSeed(gpos,DE,event_data.m_trtcontainer,Tp);
+  event_data.m_trajectory.initiateForPrecisionSeed(gpos,detectorElements,event_data.m_trtcontainer,Tp);
   if(event_data.m_trajectory.naElements() < m_minNumberDCs) return false;
 
   // Track finding
@@ -584,22 +515,24 @@ bool InDet::TRT_TrackExtensionTool_xk::isGoodExtension(const EventContext& ctx,
 // and new track production
 ///////////////////////////////////////////////////////////////////
 
-Trk::Track* InDet::TRT_TrackExtensionTool_xk::newTrack(const EventContext& ctx,
-                                                       const Trk::Track& Tr,
-                                                       InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const
+Trk::Track* 
+InDet::TRT_TrackExtensionTool_xk::newTrack(const EventContext& ctx,
+                                           const Trk::Track& Tr,
+                                           InDet::ITRT_TrackExtensionTool::IEventData &virt_event_data) const
 {
   InDet::TRT_TrackExtensionTool_xk::EventData &
      event_data=InDet::TRT_TrackExtensionTool_xk::EventData::getPrivateEventData(virt_event_data);
 
-  const DataVector<const Trk::TrackStateOnSurface>*
-    tsos = Tr.trackStateOnSurfaces();
+  const DataVector<const Trk::TrackStateOnSurface>* tsos = Tr.trackStateOnSurfaces();
 
   // Test conditions to start track extension to TRT
   //
-  const Trk::TrackParameters*
-    pe  = (*(tsos->rbegin()))->trackParameters(); if(!pe) return 0; if(!pe->covariance()) return 0;
-  const Trk::TrackParameters*
-    pb  = (*(tsos->begin ()))->trackParameters(); if(!pb) return 0; if(!pb->covariance()) return 0;
+  const Trk::TrackParameters* pe  = tsos->back()->trackParameters(); 
+  if(!pe) return 0; 
+  if(!pe->covariance()) return 0;
+  const Trk::TrackParameters* pb  = tsos->front()->trackParameters(); 
+  if(!pb) return 0;
+  if(!pb->covariance()) return 0;
 
   // Number PIX and SCT clusters cuts
   //
@@ -607,7 +540,7 @@ Trk::Track* InDet::TRT_TrackExtensionTool_xk::newTrack(const EventContext& ctx,
 
   // Test possibility extend track and new track production
   //
-  if(isGoodExtension(ctx, *pe,event_data)) return event_data.m_trajectory.convert(Tr);
+  if(isGoodExtension(ctx, pe,event_data)) return event_data.m_trajectory.convert(Tr);
   return 0;
 }
 
@@ -615,20 +548,15 @@ Trk::Track* InDet::TRT_TrackExtensionTool_xk::newTrack(const EventContext& ctx,
 // Number of SCT clusters test for start extension
 ///////////////////////////////////////////////////////////////////
 
-bool InDet::TRT_TrackExtensionTool_xk::numberPIXandSCTclustersCut(const Trk::Track& Tr) const
+bool 
+InDet::TRT_TrackExtensionTool_xk::numberPIXandSCTclustersCut(const Trk::Track& Tr) const
 {
   if(m_minNumberSCT <=0 && m_minNumberPIX <=0) return true;
-
-  const DataVector<const Trk::TrackStateOnSurface>*
-    tsos = Tr.trackStateOnSurfaces();
-
-  DataVector<const Trk::TrackStateOnSurface>::const_iterator
-    s = tsos->begin(), se = tsos->end();
-
+  const DataVector<const Trk::TrackStateOnSurface>*tsos = Tr.trackStateOnSurfaces();
+  DataVector<const Trk::TrackStateOnSurface>::const_iterator s = tsos->begin(), se = tsos->end();
   int npix = 0;
   int nsct = 0;
   for(; s!=se; ++s) {
-
     if((*s)->type(Trk::TrackStateOnSurface::Measurement)) {
       const Trk::MeasurementBase* mb = (*s)->measurementOnTrack();
       if(!mb) continue;
@@ -638,8 +566,8 @@ bool InDet::TRT_TrackExtensionTool_xk::numberPIXandSCTclustersCut(const Trk::Tra
       if(!rd) continue;
       const InDet::SiCluster*     si = dynamic_cast<const InDet::SiCluster*>(rd);
       if(si) {
-	if(dynamic_cast<const InDet::SCT_Cluster*>(si)) ++nsct;
-	else                                            ++npix;
+        if(dynamic_cast<const InDet::SCT_Cluster*>(si)) ++nsct;
+        else                                            ++npix;
       }
       else return false;
     }
diff --git a/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/src/TRT_TrackSegmentsMaker_ATLxk.cxx b/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/src/TRT_TrackSegmentsMaker_ATLxk.cxx
index 70312a4e196f..d496feca36f1 100755
--- a/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/src/TRT_TrackSegmentsMaker_ATLxk.cxx
+++ b/InnerDetector/InDetRecTools/TRT_TrackSegmentsTool_xk/src/TRT_TrackSegmentsMaker_ATLxk.cxx
@@ -17,6 +17,7 @@
 #include "TrkSurfaces/CylinderBounds.h"
 #include "TrkSurfaces/RectangleBounds.h"
 #include "TrkSurfaces/DiscBounds.h"
+#include "TrkEventPrimitives/FitQuality.h"
 #include "GeoModelInterfaces/IGeoModelTool.h"
 #include "InDetRIO_OnTrack/TRT_DriftCircleOnTrack.h"
 #include "TRT_ReadoutGeometry/TRT_Numerology.h"
@@ -215,7 +216,7 @@ InDet::TRT_TrackSegmentsMaker_ATLxk::newEvent(const EventContext &ctx) const
 
       int               ns = m_trtid->straw((*c)->identify());
       const Amg::Vector3D& sc = (*c)->detectorElement()->strawCenter(ns);
-      float             Fs = atan2(sc.y(),sc.x()); if(Fs<0.) Fs+=pi2;
+      float             Fs = std::atan2(sc.y(),sc.x()); if(Fs<0.) Fs+=pi2;
       event_data->m_circles[n].set((*c),Fs,ad);
       
       // Loop through all dz/dr for given cluster 
@@ -299,7 +300,7 @@ InDet::TRT_TrackSegmentsMaker_ATLxk::newRegion
 	
 	int               ns = m_trtid->straw((*c)->identify());
 	const Amg::Vector3D& sc = (*c)->detectorElement()->strawCenter(ns);
-	float             Fs = atan2(sc.y(),sc.x()); if(Fs<0.) Fs+=pi2;
+	float             Fs = std::atan2(sc.y(),sc.x()); if(Fs<0.) Fs+=pi2;
 	event_data->m_circles[n].set((*c),Fs,ad);
 	
 	// Loop through all dz/dr for given cluster 
@@ -694,10 +695,10 @@ void InDet::TRT_TrackSegmentsMaker_ATLxk::findLocaly(const EventContext &ctx,
   double pin = 1./(pT*std::sqrt((1.+condData.m_dzdr[ndzdr]*condData.m_dzdr[ndzdr])));
 
   Amg::Vector3D PSV(0.,0.,0.); Trk::PerigeeSurface PS(PSV);
-  auto Tp = PS.createUniqueTrackParameters(0.,0.,fm,atan2(1.,condData.m_dzdr[ndzdr]),pin,0);
+  auto Tp = PS.createUniqueTrackParameters(0.,0.,fm, std::atan2(1.,condData.m_dzdr[ndzdr]),pin,0);
     ++event_data.m_nlocal;
 
-  Trk::TrackSegment* seg = m_extensionTool->findSegment(ctx, *Tp, *(event_data.m_extEventData) );
+  Trk::TrackSegment* seg = m_extensionTool->findSegment(ctx, Tp.get(), *(event_data.m_extEventData) );
   if(!seg) return;
 
   // Momentum cut
-- 
GitLab