From ade94a7874bb46b0fe678b7d8110f9cc44648d72 Mon Sep 17 00:00:00 2001
From: Marcin Wandas <marcin.piotr.wandas@cern.ch>
Date: Mon, 27 Apr 2020 23:59:53 +0200
Subject: [PATCH] Make executeVertexFinder() const in TauVertexFinder

---
 .../tauRecTools/src/TauVertexFinder.cxx       | 18 +++++++------
 .../tauRecTools/src/TauVertexFinder.h         | 27 ++++++++++++-------
 2 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/Reconstruction/tauRecTools/src/TauVertexFinder.cxx b/Reconstruction/tauRecTools/src/TauVertexFinder.cxx
index d3869a9dc67c..e50ff0a9793e 100644
--- a/Reconstruction/tauRecTools/src/TauVertexFinder.cxx
+++ b/Reconstruction/tauRecTools/src/TauVertexFinder.cxx
@@ -43,7 +43,7 @@ StatusCode TauVertexFinder::finalize() {
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 StatusCode TauVertexFinder::executeVertexFinder(xAOD::TauJet& pTau, 
                                                 const xAOD::VertexContainer* vertexContainer, 
-                                                const xAOD::TrackParticleContainer* trackContainer) {
+                                                const xAOD::TrackParticleContainer* trackContainer) const {
   
   const xAOD::VertexContainer * vxContainer = 0;
     
@@ -117,13 +117,13 @@ ElementLink<xAOD::VertexContainer>
 TauVertexFinder::getPV_TJVA(const xAOD::TauJet& pTau,
                             const xAOD::VertexContainer& vertices,
                             const xAOD::TrackParticleContainer * trackContainer,
-                            float& maxJVF)
+                            float& maxJVF) const
 {
   const xAOD::Jet* pJetSeed = (*pTau.jetLink());
   std::vector<const xAOD::TrackParticle*> tracksForTJVA;
   const double dDeltaRMax(0.2);
 
-  m_matchedVertexOnline.clear(); 
+  std::vector<const xAOD::Vertex*> matchedVertexOnline;
   // the implementation follows closely the example given in modifyJet(...) in https://svnweb.cern.ch/trac/atlasoff/browser/Reconstruction/Jet/JetMomentTools/trunk/Root/JetVertexFractionTool.cxx#15
   
   const xAOD::TrackParticleContainer* trackParticleCont = 0;
@@ -180,7 +180,7 @@ TauVertexFinder::getPV_TJVA(const xAOD::TauJet& pTau,
       ATH_MSG_DEBUG("Creating online TJVA"); 
       ATH_MSG_DEBUG("Building online track-vertex association trk size="<< tracksForTJVA.size()
                       << "  vtx size="<< vertices.size());
-      m_matchedVertexOnline.resize(tracksForTJVA.size(), 0 );
+      matchedVertexOnline.resize(tracksForTJVA.size(), 0 );
 
       for (size_t iTrack = 0; iTrack < tracksForTJVA.size(); ++iTrack)
       {
@@ -221,7 +221,7 @@ TauVertexFinder::getPV_TJVA(const xAOD::TauJet& pTau,
           
           // If we matched a vertex, then associate that vertex to the track
           if (foundMatch)
-              m_matchedVertexOnline[ iTrack ] = vertices.at(matchedIndex);
+              matchedVertexOnline[ iTrack ] = vertices.at(matchedIndex);
       }
   } else {
 
@@ -243,7 +243,7 @@ TauVertexFinder::getPV_TJVA(const xAOD::TauJet& pTau,
   for (const xAOD::Vertex* vert : vertices) {
     float jvf = 0;
     if(!inTrigger()) jvf = getJetVertexFraction(vert,tracksForTJVA,tva);
-    else jvf = getJetVertexFraction(vert,tracksForTJVA);
+    else jvf = getJetVertexFraction(vert,tracksForTJVA,matchedVertexOnline);
     if (jvf > maxJVF) {
       maxJVF = jvf;
       max_vert = vert;
@@ -278,13 +278,15 @@ float TauVertexFinder::getJetVertexFraction(const xAOD::Vertex* vertex, const st
   return sumTrackAll!=0 ? sumTrackPV/sumTrackAll : 0;
 }
 // for online ATR-15665: reimplementation needed for online because the tva doesn't work. The size of the track collection from TE is not the same as the max track index
-float TauVertexFinder::getJetVertexFraction(const xAOD::Vertex* vertex, const std::vector<const xAOD::TrackParticle*>& tracks) const
+float TauVertexFinder::getJetVertexFraction(const xAOD::Vertex* vertex,
+                                            const std::vector<const xAOD::TrackParticle*>& tracks,
+                                            const std::vector<const xAOD::Vertex*>& matchedVertexOnline) const
 {
   float sumTrackPV = 0;
   float sumTrackAll = 0;
   for (size_t iTrack = 0; iTrack < tracks.size(); ++iTrack)
     {
-      const xAOD::Vertex* ptvtx = m_matchedVertexOnline[iTrack];
+      const xAOD::Vertex* ptvtx = matchedVertexOnline[iTrack];
       if (ptvtx != nullptr) {  // C++11 feature
         if (ptvtx->index() == vertex->index()) sumTrackPV += tracks.at(iTrack)->pt();
       }
diff --git a/Reconstruction/tauRecTools/src/TauVertexFinder.h b/Reconstruction/tauRecTools/src/TauVertexFinder.h
index 2e773c2fcd20..3243fece37aa 100644
--- a/Reconstruction/tauRecTools/src/TauVertexFinder.h
+++ b/Reconstruction/tauRecTools/src/TauVertexFinder.h
@@ -39,22 +39,32 @@ public:
   //-------------------------------------------------------------
   //! Algorithm functions
   //-------------------------------------------------------------
-  virtual StatusCode initialize() override;
-  virtual StatusCode executeVertexFinder(xAOD::TauJet& pTau, 
-                                         const xAOD::VertexContainer* vertexContainer = nullptr, 
-                                         const xAOD::TrackParticleContainer* trackContainer = nullptr) override;
-  virtual StatusCode finalize() override;
+  StatusCode initialize() override;
+  StatusCode executeVertexFinder(xAOD::TauJet& pTau,
+                                const xAOD::VertexContainer* vertexContainer = nullptr,
+                                const xAOD::TrackParticleContainer* trackContainer = nullptr) override
+  {
+    return static_cast<const TauVertexFinder*>(this)->executeVertexFinder(pTau, vertexContainer, trackContainer);
+  }
+
+  StatusCode executeVertexFinder(xAOD::TauJet& pTau,
+                                         const xAOD::VertexContainer* vertexContainer = nullptr,
+                                         const xAOD::TrackParticleContainer* trackContainer = nullptr) const;
+
+  StatusCode finalize() override;
 
 private:
   ElementLink<xAOD::VertexContainer>
   getPV_TJVA(const xAOD::TauJet& tauJet,
              const xAOD::VertexContainer& vertices,
              const xAOD::TrackParticleContainer* trackContainer,
-             float& maxJVF);
+             float& maxJVF) const;
 
   float getJetVertexFraction(const xAOD::Vertex* vertex, const std::vector<const xAOD::TrackParticle*>& tracks, const jet::TrackVertexAssociation* tva) const;
   // for online ATR-15665
-  float getJetVertexFraction(const xAOD::Vertex* vertex, const std::vector<const xAOD::TrackParticle*>& tracks) const;      
+  float getJetVertexFraction(const xAOD::Vertex* vertex,
+                             const std::vector<const xAOD::TrackParticle*>& tracks,
+                             const std::vector<const xAOD::Vertex*>& matchedVertexOnline) const;
   
 private:
   
@@ -69,9 +79,6 @@ private:
   SG::ReadHandleKey<xAOD::VertexContainer> m_vertexInputContainer{this,"Key_vertexInputContainer", "PrimaryVertices", "input vertex container key"};
   SG::ReadHandleKey<xAOD::TrackParticleContainer> m_trackPartInputContainer{this,"Key_trackPartInputContainer", "InDetTrackParticles", "input track particle container key"};   
   SG::ReadHandleKey<jet::TrackVertexAssociation> m_jetTrackVtxAssoc{this, "Key_JetTrackVtxAssoc_forTaus", "JetTrackVtxAssoc_forTaus", "input TVA for taus"};
-  
-  std::vector<const xAOD::Vertex*> m_matchedVertexOnline;
-
 };
 
 #endif // not TAUREC_TAUVERTEXFINDER_H
-- 
GitLab