From f44c624a07448afdfc79cb9dc75e4cc02e120d86 Mon Sep 17 00:00:00 2001
From: Federico <federicoscutti@gmail.com>
Date: Wed, 27 Sep 2017 07:05:57 +0000
Subject: [PATCH] use smart pointers to get rid of mem-leak

---
 .../tauRecTools/Root/TauWPDecorator.cxx           | 15 ++++++++-------
 .../tauRecTools/tauRecTools/TauWPDecorator.h      |  3 +--
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/Reconstruction/tauRecTools/Root/TauWPDecorator.cxx b/Reconstruction/tauRecTools/Root/TauWPDecorator.cxx
index 3cab3b1d2550..bd69013071f5 100644
--- a/Reconstruction/tauRecTools/Root/TauWPDecorator.cxx
+++ b/Reconstruction/tauRecTools/Root/TauWPDecorator.cxx
@@ -75,13 +75,15 @@ StatusCode TauWPDecorator::retrieveHistos(int nProng) {
       }
 
       // Clone histogram and store locally
-      TH2* myLocalGraph = (TH2*)myGraph->Clone();
-      myLocalGraph->SetDirectory(0);
+      std::unique_ptr<TH2> myLocalGraph1P((TH2*)myGraph->Clone());
+      std::unique_ptr<TH2> myLocalGraph3P((TH2*)myGraph->Clone());
+      myLocalGraph1P->SetDirectory(0);
+      myLocalGraph3P->SetDirectory(0);
       
       if(nProng == 1)
-	m_hists1P.push_back(m_pair_t(float(i)/100., myLocalGraph));
+	m_hists1P.push_back(m_pair_t(float(i)/100., std::move(myLocalGraph1P)));
       else
-	m_hists3P.push_back(m_pair_t(float(i)/100., myLocalGraph));
+	m_hists3P.push_back(m_pair_t(float(i)/100., std::move(myLocalGraph3P)));
     }
   
   return StatusCode::SUCCESS;  
@@ -102,8 +104,7 @@ StatusCode TauWPDecorator::storeLimits(int nProng) {
   // Store limits
   for (unsigned int i=0; i<histArray->size(); i++)
     {
-      TH2* myHist = histArray->at(i).second;
-      
+      TH2* myHist = histArray->at(i).second.get();
       m_xmin[nProng] = TMath::Min(myHist->GetXaxis()->GetXmin(), m_xmin[nProng]);
       m_ymin[nProng] = TMath::Min(myHist->GetYaxis()->GetXmin(), m_ymin[nProng]);
 
@@ -198,7 +199,7 @@ StatusCode TauWPDecorator::execute(xAOD::TauJet& pTau)
   
   // Loop over all histograms
   for (unsigned int i=0; i<histArray->size(); i++) {
-    TH2* myHist = histArray->at(i).second;
+    TH2* myHist = histArray->at(i).second.get();
     double myCut = myHist->Interpolate(pt, y_var);
     
     // Find upper and lower cuts
diff --git a/Reconstruction/tauRecTools/tauRecTools/TauWPDecorator.h b/Reconstruction/tauRecTools/tauRecTools/TauWPDecorator.h
index a2a612ae249a..d037a90cc759 100644
--- a/Reconstruction/tauRecTools/tauRecTools/TauWPDecorator.h
+++ b/Reconstruction/tauRecTools/tauRecTools/TauWPDecorator.h
@@ -24,7 +24,6 @@ class TH2;
  *                                                                              
  */
 
-
 class TauWPDecorator : public TauRecToolBase {
 public:
 
@@ -50,7 +49,7 @@ private:
     std::string m_file1P; //!< energy calibration file
     std::string m_file3P; //!< energy calibration file
     
-    typedef std::pair<double, TH2* > m_pair_t;
+    typedef std::pair<double, std::unique_ptr<TH2> > m_pair_t;
     
     std::vector<m_pair_t> m_hists1P;
     std::vector<m_pair_t> m_hists3P;
-- 
GitLab