From 1276ebed8df2274772897b73458aeee2bb7c80c2 Mon Sep 17 00:00:00 2001
From: Susumu Oda <Susumu.Oda@cern.ch>
Date: Tue, 25 Apr 2017 11:40:12 +0200
Subject: [PATCH] Use ReadHandles in SCT_Monitoring

---
 .../SCT_Monitoring/CMakeLists.txt             |  1 +
 .../SCT_Monitoring/SCTHitsNoiseMonTool.h      |  1 -
 .../SCT_Monitoring/src/SCTErrMonTool.cxx      | 12 ++---
 .../SCT_Monitoring/src/SCTHitEffMonTool.cxx   | 24 ++++-----
 .../src/SCTHitsNoiseMonTool.cxx               | 53 +++++++++----------
 .../SCT_Monitoring/src/SCTLorentzMonTool.cxx  |  5 +-
 .../src/SCTMotherTrigMonTool.cxx              |  9 ++--
 .../src/SCTRatioNoiseMonTool.cxx              | 10 ++--
 8 files changed, 55 insertions(+), 60 deletions(-)

diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/CMakeLists.txt b/InnerDetector/InDetMonitoring/SCT_Monitoring/CMakeLists.txt
index 65014e9bb11..40a789ec03a 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/CMakeLists.txt
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/CMakeLists.txt
@@ -23,6 +23,7 @@ atlas_depends_on_subdirs( PUBLIC
                           Commission/CommissionEvent
                           Control/AthenaKernel
                           Control/DataModel
+                          Control/StoreGate
                           DetectorDescription/Identifier
                           Event/EventInfo
                           Event/xAOD/xAODEventInfo
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitsNoiseMonTool.h b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitsNoiseMonTool.h
index 401bb5166ec..87c816b52cb 100644
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitsNoiseMonTool.h
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/SCT_Monitoring/SCTHitsNoiseMonTool.h
@@ -263,7 +263,6 @@ class SCTHitsNoiseMonTool : public SCTMotherTrigMonTool{
   unsigned int m_maxTracks;
   std::vector<Identifier> m_RDOsOnTracks;
   StatusCode makeVectorOfTrackRDOIdentifiers();
-  const DataVector<Trk::Track> *m_tracks;
   VecH2_t m_ptrackhitsHistoVector;
   VecH2_t m_ptrackhitsHistoVectorECp;
   VecH2_t m_ptrackhitsHistoVectorECm;
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
index 04137e54389..b5d27b25411 100755
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTErrMonTool.cxx
@@ -39,6 +39,7 @@
 #include "InDetReadoutGeometry/SiDetectorElement.h"
 #include "xAODEventInfo/EventInfo.h"
 #include "cArrayUtilities.h"
+#include "StoreGate/ReadHandle.h"
 #include <vector>
 #include <set>
 #include <iostream>
@@ -671,8 +672,8 @@ StatusCode
 SCTErrMonTool::fillHistograms() {
 
   typedef SCT_RDORawData SCTRawDataType;
-  const xAOD::EventInfo *pEvent(0);
-  if (evtStore()->retrieve(pEvent).isFailure()) {
+  SG::ReadHandle<xAOD::EventInfo> pEvent;
+  if (not pEvent.isValid()) {
     ATH_MSG_WARNING("Could not retrieve event info!");
     return StatusCode::RECOVERABLE;
   }
@@ -698,8 +699,7 @@ SCTErrMonTool::fillHistograms() {
   }
 
   m_NumberOfEventsVsLB->Fill(m_current_lb);
-  const SCT_RDO_Container *p_rdocontainer;
-  ATH_CHECK(evtStore()->retrieve(p_rdocontainer, m_dataObjectName));
+  SG::ReadHandle<SCT_RDO_Container> p_rdocontainer(m_dataObjectName);
   Identifier SCT_Identifier;
 
   // Define variables for error histograms
@@ -1010,10 +1010,10 @@ SCTErrMonTool::numByteStreamErrors(const std::set<IdentifierHash> *errors, int &
 StatusCode
 SCTErrMonTool::fillByteStreamErrors() {
   // Masked and ROB Fragment vs. lb
-  const xAOD::EventInfo *pEvent(0);
+  SG::ReadHandle<xAOD::EventInfo> pEvent;
   msg(MSG::INFO) << "INFO|| monitor ||INFO" << endmsg;
 
-  if (evtStore()->retrieve(pEvent).isFailure()) {
+  if (not pEvent.isValid()) {
     if (msgLvl(MSG::ERROR)) {
       msg(MSG::ERROR) << "Could not retrieve event info!" << endmsg;
     }
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx
index ebe167deb26..cc2a113ecd8 100755
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitEffMonTool.cxx
@@ -31,6 +31,7 @@
 #include "AthenaMonitoring/AthenaMonManager.h"
 #include "EventInfo/EventID.h"
 #include "EventInfo/EventInfo.h"
+#include "StoreGate/ReadHandle.h"
 
 #include "SCT_ConditionsServices/ISCT_ConfigurationConditionsSvc.h"
 
@@ -1104,10 +1105,10 @@ SCTHitEffMonTool::fillHistograms() {
   VERBOSE("SCTHitEffMonTool::fillHistograms()");
   string m_comTimeName("TRT_Phase");
   Double_t timecor(-20.);
-  const ComTime *theComTime;
+  SG::ReadHandle<ComTime> theComTime(m_comTimeName);
   if (m_useTRTPhase or m_isCosmic) {
     if (evtStore()->contains<ComTime>(m_comTimeName)) {
-      if (StatusCode::SUCCESS == evtStore()->retrieve(theComTime, m_comTimeName)) {
+      if (theComTime.isValid()) {
         timecor = theComTime->getTime();
         VERBOSE("Retrieved ComTime object with name " << m_comTimeName << " found: Time = " << timecor);
       } else {
@@ -1121,10 +1122,9 @@ SCTHitEffMonTool::fillHistograms() {
   }
   // If we are going to use TRT phase in anger, need run-dependent corrections.
   EventID *eventID;
-  const EventInfo *pEvent(0);
-  CHECK(evtStore()->retrieve(pEvent));
-  if (not pEvent) {
-    return ERROR("Could not find event pointer"), StatusCode::FAILURE;
+  SG::ReadHandle<EventInfo> pEvent;
+  if (not pEvent.isValid()) {
+    return ERROR("Could not find EventInfo"), StatusCode::FAILURE;
   }
   eventID = pEvent->event_ID();
   unsigned BCID = eventID->bunch_crossing_id();
@@ -1138,9 +1138,9 @@ SCTHitEffMonTool::fillHistograms() {
   }
 
   // ---- First try if m_tracksName is a TrackCollection
-  const TrackCollection *m_tracks(0);
+  SG::ReadHandle<TrackCollection>m_tracks(m_TrackName);
   if (evtStore()->contains<TrackCollection> (m_TrackName)) {
-    if (evtStore()->retrieve(m_tracks, m_TrackName).isFailure()) {
+    if (not m_tracks.isValid()) {
       WARNING("Tracks not found: " << m_tracks << " / " << m_TrackName);
       if (m_chronotime) {
         m_chrono->chronoStop("SCTHitEff");
@@ -1157,8 +1157,8 @@ SCTHitEffMonTool::fillHistograms() {
     return StatusCode::SUCCESS;
   }
 
-  const InDet::SCT_ClusterContainer *p_sctclcontainer;
-  if (evtStore()->retrieve(p_sctclcontainer, "SCT_Clusters").isFailure()) {
+  SG::ReadHandle<InDet::SCT_ClusterContainer> p_sctclcontainer("SCT_Clusters");
+  if (not p_sctclcontainer.isValid()) {
     WARNING("SCT clusters container not found: " << p_sctclcontainer);
     if (m_chronotime) {
       m_chrono->chronoStop("SCTHitEff");
@@ -1307,7 +1307,7 @@ SCTHitEffMonTool::fillHistograms() {
         }
         if (m_sctId->is_sct(surfaceID)) {
           m_NHits[bec2Index(m_sctId->barrel_ec(surfaceID))]++;
-          mapOfTrackHitResiduals[surfaceID] = getResidual(surfaceID, (*TSOSItr)->trackParameters(), p_sctclcontainer);
+          mapOfTrackHitResiduals[surfaceID] = getResidual(surfaceID, (*TSOSItr)->trackParameters(), &*p_sctclcontainer);
         }
       }
 
@@ -1374,7 +1374,7 @@ SCTHitEffMonTool::fillHistograms() {
       Float_t layerPlusHalfSide(float(layer) + float(side) * 0.5);
       Float_t dedicated_layerPlusHalfSide(float(layer) + float((side + 1) % 2) * 0.5);
       const Trk::TrackParameters *trkParamOnSurface((*TSOSItr)->trackParameters());
-      Double_t trackHitResidual(getResidual(surfaceID, trkParamOnSurface, p_sctclcontainer));
+      Double_t trackHitResidual(getResidual(surfaceID, trkParamOnSurface, &*p_sctclcontainer));
 
 
       Float_t distCut(m_effdistcut);
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonTool.cxx
index fe6cff824a5..ba0e6f09f0b 100755
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTHitsNoiseMonTool.cxx
@@ -64,6 +64,8 @@
 #include "InDetRIO_OnTrack/PixelClusterOnTrack.h" // ?
 #include "cArrayUtilities.h"
 
+#include "StoreGate/ReadHandle.h"
+
 typedef Trk::SpacePoint SpacePoint;
 using namespace std;
 using namespace SCT_Monitoring;
@@ -219,7 +221,6 @@ SCTHitsNoiseMonTool::SCTHitsNoiseMonTool(const std::string &type,
   m_booltxscan(false),
   m_current_lb(0),
   m_last_reset_lb(0),
-  m_tracks(nullptr),
   m_tbinHisto(nullptr),
   m_tbinHistoECp(nullptr),
   m_tbinHistoECm(nullptr),
@@ -538,8 +539,8 @@ StatusCode
 SCTHitsNoiseMonTool::fillHistograms() {
   ++m_numberOfEvents;
   ++m_numberOfEventsRecent;
-  const EventInfo *pEvent(0);
-  if (evtStore()->retrieve(pEvent).isFailure()) {
+  SG::ReadHandle<EventInfo> pEvent;
+  if (not pEvent.isValid()) {
     if (msgLvl(MSG::ERROR)) {
       msg(MSG::ERROR) << "Could not retrieve event info!" << endmsg;
     }
@@ -795,22 +796,22 @@ SCTHitsNoiseMonTool::checkHists(bool /*fromFinalize*/) {
 StatusCode
 SCTHitsNoiseMonTool::generalHistsandNoise() {
   typedef SCT_RDORawData SCTRawDataType;
-  const SCT_RDO_Container *p_rdocontainer;
-  const EventInfo *pEvent(0);
-  if (evtStore()->retrieve(pEvent).isFailure()) {
+  SG::ReadHandle<SCT_RDO_Container> p_rdocontainer(m_dataObjectName);
+  SG::ReadHandle<EventInfo> pEvent;
+  if (not pEvent.isValid()) {
     if (msgLvl(MSG::ERROR)) {
       msg(MSG::ERROR) << "Could not retrieve event info!" << endmsg;
     }
     return StatusCode::FAILURE;
   }
   unsigned int current_lb = pEvent->event_ID()->lumi_block();
-  if (evtStore()->retrieve(p_rdocontainer, m_dataObjectName).isFailure()) {
+  if (not p_rdocontainer.isValid()) {
     return StatusCode::FAILURE;
   }
   // Get the space point container
-  const SpacePointContainer *sctContainer;
   m_SCTSPContainerName = "SCT_SpacePoints";
-  if (evtStore()->retrieve(sctContainer, m_SCTSPContainerName).isFailure()) {
+  SG::ReadHandle<SpacePointContainer> sctContainer(m_SCTSPContainerName);
+  if (not sctContainer.isValid()) {
     return StatusCode::FAILURE;
   }
   Identifier SCT_Identifier;
@@ -1255,9 +1256,8 @@ SCTHitsNoiseMonTool::generalHistsandNoise() {
 
   // if(m_environment!=AthenaMonManager::online){ // Uncomment this line to turn off cluster hists in online
   // Fill Cluster size histogram
-  const InDet::SCT_ClusterContainer *p_clucontainer;
-  StatusCode sc = evtStore()->retrieve(p_clucontainer, "SCT_Clusters");
-  if (sc.isFailure()) {
+  SG::ReadHandle<InDet::SCT_ClusterContainer> p_clucontainer("SCT_Clusters");
+  if (not p_clucontainer.isValid()) {
     if (msgLvl(MSG::WARNING)) {
       msg(MSG::WARNING) << "Couldn't retrieve clusters" << endmsg;
     }
@@ -3058,12 +3058,10 @@ SCTHitsNoiseMonTool::bookSPvsEventNumber() {
 StatusCode
 SCTHitsNoiseMonTool::makeSPvsEventNumber() {
   // Retrieve the spacepoint collection
-  StatusCode sc;
-  const SpacePointContainer *m_SCT_spcontainer;
+  SG::ReadHandle<SpacePointContainer> SCT_spcontainer("SCT_SpacePoints");
 
   // get space points for SCT from TDS
-  sc = evtStore()->retrieve(m_SCT_spcontainer, "SCT_SpacePoints");
-  if (sc.isFailure() || !m_SCT_spcontainer) {
+  if (not SCT_spcontainer.isValid()) {
     if (msgLvl(MSG::WARNING)) {
       msg(MSG::WARNING) << "Si SpacePoint container for SCT not found" << endmsg;
     }
@@ -3071,8 +3069,8 @@ SCTHitsNoiseMonTool::makeSPvsEventNumber() {
   }
   int m_sct_nspacepoints(0);
   // loop over SCT space points collections
-  SpacePointContainer::const_iterator it = m_SCT_spcontainer->begin();
-  SpacePointContainer::const_iterator endit = m_SCT_spcontainer->end();
+  SpacePointContainer::const_iterator it = SCT_spcontainer->begin();
+  SpacePointContainer::const_iterator endit = SCT_spcontainer->end();
   for (; it != endit; ++it) {
     const SpacePointCollection *colNext = &(**it);
     if (!colNext) {
@@ -3143,9 +3141,8 @@ SCTHitsNoiseMonTool::makeVectorOfTrackRDOIdentifiers() {
 
   // Clear the RDOsOnTracks vector
   m_RDOsOnTracks.clear();
-  const SCT_RDO_Container *p_rdocontainer;
-  sc = evtStore()->retrieve(p_rdocontainer, m_dataObjectName);
-  if (sc.isFailure() || !p_rdocontainer) {
+  SG::ReadHandle<SCT_RDO_Container> p_rdocontainer(m_dataObjectName);
+  if (not p_rdocontainer.isValid()) {
     msg(MSG::FATAL) << "Could not find the data object " << m_dataObjectName << " !" << endmsg;
     return StatusCode::FAILURE;
   } else {
@@ -3153,14 +3150,14 @@ SCTHitsNoiseMonTool::makeVectorOfTrackRDOIdentifiers() {
       msg(MSG::DEBUG) << "Data object " << m_dataObjectName << " found" << endmsg;
     }
   }
-
-  sc = evtStore()->retrieve(m_tracks, m_tracksName);
-  if (sc.isFailure()) {
+  
+  SG::ReadHandle<DataVector<Trk::Track> > tracks(m_tracksName);
+  if (not tracks.isValid()) {
     msg(MSG::FATAL) << "No tracks for you!" << endmsg;
-    return sc;
+    return StatusCode::FAILURE;
   }
   // Only do for events with less than some number of tracks
-  if (m_tracks->size() > m_maxTracks) {
+  if (tracks->size() > m_maxTracks) {
     if (msgLvl(MSG::DEBUG)) {
       msg(MSG::DEBUG) << "The event has more than " << m_maxTracks
                       << " tracks. Don't do hits-on-track-hists" << endmsg;
@@ -3168,8 +3165,8 @@ SCTHitsNoiseMonTool::makeVectorOfTrackRDOIdentifiers() {
     return StatusCode::SUCCESS;
   }
   // assemble list of rdo ids associated with tracks
-  for (int i = 0; i < (int) m_tracks->size(); i++) {
-    const Trk::Track *track = (*m_tracks)[i];
+  for (int i = 0; i < (int) tracks->size(); i++) {
+    const Trk::Track *track = (*tracks)[i];
     if (track == 0) {
       if (msgLvl(MSG::WARNING)) {
         msg(MSG::WARNING) << "no pointer to track!!!" << endmsg;
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTLorentzMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTLorentzMonTool.cxx
index 58abc0f6db4..18837d8ada7 100755
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTLorentzMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTLorentzMonTool.cxx
@@ -16,6 +16,7 @@
 
 #include "GaudiKernel/StatusCode.h"
 #include "GaudiKernel/IToolSvc.h"
+#include "StoreGate/ReadHandle.h"
 
 #include "TH1F.h"
 #include "TH2F.h"
@@ -158,9 +159,9 @@ SCTLorentzMonTool::fillHistograms() {
 
   ATH_MSG_DEBUG("enters fillHistograms");
 
-  const TrackCollection *tracks(0);
+  SG::ReadHandle<TrackCollection> tracks(m_tracksName);
   if (evtStore()->contains<TrackCollection> (m_tracksName)) {
-    if (evtStore()->retrieve(tracks, m_tracksName).isFailure()) {
+    if (not tracks.isValid()) {
       msg(MSG::WARNING) << " TrackCollection not found: Exit SCTLorentzTool" << m_tracksName << endmsg;
       return StatusCode::SUCCESS;
     }
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTMotherTrigMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTMotherTrigMonTool.cxx
index b2aa155c89c..60007d62506 100755
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTMotherTrigMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTMotherTrigMonTool.cxx
@@ -14,6 +14,7 @@
 #include "GaudiKernel/StatusCode.h"
 #include "EventInfo/EventInfo.h"
 #include "EventInfo/TriggerInfo.h"
+#include "StoreGate/ReadHandle.h"
 
 const std::string SCTMotherTrigMonTool::m_triggerNames[] = {
   "RNDM", "BPTX", "L1CAL", "TGC", "RPC", "MBTS", "COSM", "Calib"
@@ -40,10 +41,8 @@ SCTMotherTrigMonTool::initialize() {
 // ---------------------------------------------------------
 StatusCode
 SCTMotherTrigMonTool::checkTriggers() {
-  const EventInfo *evtInfo(0);
-
   if (evtStore()->contains<EventInfo>("ByteStreamEventInfo")) {
-    evtStore()->retrieve(evtInfo, "ByteStreamEventInfo");
+    SG::ReadHandle<EventInfo> evtInfo("ByteStreamEventInfo");
     m_firedTriggers = evtInfo->trigger_info()->level1TriggerType();
 
     return StatusCode::SUCCESS;
@@ -83,10 +82,8 @@ SCTMotherTrigMonTool::isCalibrationNoise(const std::string &L1_Item) {
 
 bool
 SCTMotherTrigMonTool::isStream(const std::string &StreamName) {
-  const EventInfo *evtInfo(0);
-
   if (evtStore()->contains<EventInfo>("ByteStreamEventInfo")) {
-    evtStore()->retrieve(evtInfo, "ByteStreamEventInfo");
+    SG::ReadHandle<EventInfo> evtInfo("ByteStreamEventInfo");
 
     m_isStream = false;
 
diff --git a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTRatioNoiseMonTool.cxx b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTRatioNoiseMonTool.cxx
index 0418652c781..8da03ec450c 100755
--- a/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTRatioNoiseMonTool.cxx
+++ b/InnerDetector/InDetMonitoring/SCT_Monitoring/src/SCTRatioNoiseMonTool.cxx
@@ -47,6 +47,7 @@
 #include "InDetConditionsSummaryService/IInDetConditionsSvc.h"
 #include "EventInfo/EventID.h"
 #include "EventInfo/EventInfo.h"
+#include "StoreGate/ReadHandle.h"
 
 //
 using namespace std;
@@ -322,8 +323,8 @@ SCTRatioNoiseMonTool::fillHistograms() {
   ATH_MSG_DEBUG("enters fillHistograms");
   // lets get the raw hit container
   typedef SCT_RDORawData SCTRawDataType;
-  const SCT_RDO_Container *p_rdocontainer;
-  if (evtStore()->retrieve(p_rdocontainer, m_dataObjectName).isFailure()) {
+  SG::ReadHandle<SCT_RDO_Container> p_rdocontainer(m_dataObjectName);
+  if (not p_rdocontainer.isValid()) {
     return StatusCode::FAILURE;
   }
 
@@ -364,9 +365,8 @@ SCTRatioNoiseMonTool::fillHistograms() {
     goodModules[i] = true;
   }
 
-  const EventInfo *pEvent(0);
-  CHECK(evtStore()->retrieve(pEvent));
-  if (not pEvent) {
+  SG::ReadHandle<EventInfo> pEvent;
+  if (not pEvent.isValid()) {
     return ERROR("Could not find event pointer"), StatusCode::FAILURE;
   }
 
-- 
GitLab