From e2f2993a05b15952f149739d7714ab6ce509ea37 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicolas=20K=C3=B6hler?= <nicolas.koehler@cern.ch>
Date: Mon, 8 Jun 2020 16:22:46 +0200
Subject: [PATCH] remove atomic TrackingVolume pointer by setting it in
 initialize

---
 .../CombinedMuonTrackBuilder.h                |  7 ++---
 .../src/CombinedMuonTrackBuilder.cxx          | 29 +++++++++----------
 2 files changed, 15 insertions(+), 21 deletions(-)

diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h
index 32a3cc6e9ed3..6846bb641070 100755
--- a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h
+++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h
@@ -221,8 +221,7 @@ class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuon
     ToolHandle<Trk::ITrackSummaryTool>              m_trackSummary;
     ToolHandle<Trk::ITrkMaterialProviderTool>       m_materialUpdator;
 
-    ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc",
-                                                        "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
+    ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
 
     // Read handle for conditions object to get the field cache
     SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
@@ -265,9 +264,7 @@ class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuon
     // constants
     const Trk::Volume* m_calorimeterVolume;
     const Trk::Volume* m_indetVolume;
-
-    // constant initialized the first time it's needed
-    mutable std::atomic<const Trk::TrackingVolume*> m_spectrometerEntrance{nullptr};
+    const Trk::TrackingVolume* m_spectrometerEntrance;
 
     // vertex region and phi modularity for pseudo-measurement constraints
     Trk::RecVertex*      m_beamAxis;
diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx
index bbeeef5eb042..bf8204a11ef2 100755
--- a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx
+++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx
@@ -107,6 +107,7 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, cons
       m_inputSlimming(false),
       m_calorimeterVolume(nullptr),
       m_indetVolume(nullptr),
+      m_spectrometerEntrance(nullptr),
       m_beamAxis(nullptr),
       m_perigeeSurface(nullptr),
       m_sigmaPhiSector(0),
@@ -366,6 +367,15 @@ CombinedMuonTrackBuilder::initialize()
     m_vertex->dump(msg(MSG::DEBUG));
 #endif
 
+    if (!m_trackingGeometrySvc) {
+        m_perigeeAtSpectrometerEntranceLocal = false;
+        // missing TrackingGeometrySvc - no perigee will be added at MS entrance
+        m_messageHelper->printWarning(41);
+    } else {
+      const Trk::TrackingGeometry* trkGeo = m_trackingGeometrySvc->trackingGeometry();
+      if (trkGeo) m_spectrometerEntrance = trkGeo->trackingVolume("MuonSpectrometerEntrance");
+    }
+
     return StatusCode::SUCCESS;
 }
 
@@ -3916,27 +3926,14 @@ CombinedMuonTrackBuilder::entrancePerigee(const Trk::TrackParameters* parameters
     // make sure the spectrometer entrance volume is available
     if (!parameters) return nullptr;
 
-    if (!m_spectrometerEntrance.load()) {
-        if (!m_trackingGeometrySvc) {
-            m_perigeeAtSpectrometerEntranceLocal = false;
-            // missing TrackingGeometrySvc - no perigee will be added at MS entrance
-            m_messageHelper->printWarning(41);
-        } else {
-            m_spectrometerEntrance.store(
-                m_trackingGeometrySvc->trackingGeometry()->trackingVolume("MuonSpectrometerEntrance"));
-        }
-    }
-
-    if (!m_spectrometerEntrance.load()) {
-        return nullptr;
-    }
+    if (!m_spectrometerEntrance) return nullptr;
 
     const Trk::TrackParameters* entranceParameters = m_extrapolator->extrapolateToVolume(
-        *parameters, *m_spectrometerEntrance.load(), Trk::anyDirection, Trk::nonInteracting);
+        *parameters, *m_spectrometerEntrance, Trk::anyDirection, Trk::nonInteracting);
 
     if (!entranceParameters) return nullptr;
 
-    Trk::PerigeeSurface         surface(entranceParameters->position());
+    Trk::PerigeeSurface surface(entranceParameters->position());
     const Trk::TrackParameters* trackParameters = m_extrapolator->extrapolateDirectly(*entranceParameters, surface);
     delete entranceParameters;
 
-- 
GitLab