From 5f65d045d6d736a496cdec1c323f81a93b1e3cf5 Mon Sep 17 00:00:00 2001 From: Bastian Schlag <bastian.schlag@cern.ch> Date: Thu, 18 Jun 2020 10:16:24 +0200 Subject: [PATCH] replace ITrackLink raw pointers by unique_ptr --- .../ActsAdaptiveMultiPriVtxFinderTool.h | 2 +- .../src/ActsAdaptiveMultiPriVtxFinderTool.cxx | 39 ++++++++----------- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/Tracking/Acts/ActsPriVtxFinder/ActsPriVtxFinder/ActsAdaptiveMultiPriVtxFinderTool.h b/Tracking/Acts/ActsPriVtxFinder/ActsPriVtxFinder/ActsAdaptiveMultiPriVtxFinderTool.h index b8bf035bc7f..6b5389ab994 100644 --- a/Tracking/Acts/ActsPriVtxFinder/ActsPriVtxFinder/ActsAdaptiveMultiPriVtxFinderTool.h +++ b/Tracking/Acts/ActsPriVtxFinder/ActsPriVtxFinder/ActsAdaptiveMultiPriVtxFinderTool.h @@ -92,7 +92,7 @@ public: private: std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> - findVertex(const EventContext& ctx, const std::vector<const Trk::ITrackLink*>& trackVector) const; + findVertex(const EventContext& ctx, std::vector<std::unique_ptr<Trk::ITrackLink>> trackVector) const; Trk::Perigee* actsBoundToTrkPerigee( const Acts::BoundParameters& bound, const Acts::Vector3D& surfCenter) const; diff --git a/Tracking/Acts/ActsPriVtxFinder/src/ActsAdaptiveMultiPriVtxFinderTool.cxx b/Tracking/Acts/ActsPriVtxFinder/src/ActsAdaptiveMultiPriVtxFinderTool.cxx index aff92690a93..2ca64719ffa 100755 --- a/Tracking/Acts/ActsPriVtxFinder/src/ActsAdaptiveMultiPriVtxFinderTool.cxx +++ b/Tracking/Acts/ActsPriVtxFinder/src/ActsAdaptiveMultiPriVtxFinderTool.cxx @@ -141,7 +141,7 @@ ActsAdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, const Tra SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx}; const Trk::RecVertex& beamposition(beamSpotHandle->beamVtx()); - std::vector<const Trk::ITrackLink*> selectedTracks; + std::vector<std::unique_ptr<Trk::ITrackLink>> selectedTracks; typedef DataVector<Trk::Track>::const_iterator TrackDataVecIter; @@ -156,17 +156,13 @@ ActsAdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, const Tra if (selectionPassed) { ElementLink<TrackCollection> link; link.setElement(const_cast<Trk::Track*>(*itr)); - Trk::LinkToTrack* linkTT = new Trk::LinkToTrack(link); - linkTT->setStorableObject(*trackTES); - selectedTracks.push_back(linkTT); + auto trkPtr = std::make_unique<Trk::LinkToTrack>(link); + trkPtr->setStorableObject(*trackTES); + selectedTracks.push_back(std::move(trkPtr)); } } - std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> returnContainers = findVertex(ctx, selectedTracks); - - for(auto& trk : selectedTracks){ - delete trk; - } + std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> returnContainers = findVertex(ctx, std::move(selectedTracks)); return returnContainers; } @@ -174,8 +170,7 @@ ActsAdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, const Tra std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> ActsAdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, const xAOD::TrackParticleContainer* trackParticles) const { - - std::vector<const Trk::ITrackLink*> selectedTracks; + std::vector<std::unique_ptr<Trk::ITrackLink>> selectedTracks; SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx}; xAOD::Vertex beamposition; beamposition.makePrivateStore(); @@ -201,20 +196,20 @@ ActsAdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, const xAO if (selectionPassed) { ElementLink<xAOD::TrackParticleContainer> link; link.setElement(const_cast<xAOD::TrackParticle*>(*itr)); - Trk::LinkToXAODTrackParticle* linkTT = new Trk::LinkToXAODTrackParticle(link); - linkTT->setStorableObject(*trackParticles); - selectedTracks.push_back(linkTT); + auto trkPtr = std::make_unique<Trk::LinkToXAODTrackParticle>(link); + trkPtr->setStorableObject(*trackParticles); + selectedTracks.push_back(std::move(trkPtr)); } } - std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> returnContainers = findVertex(ctx, selectedTracks); + std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> returnContainers = findVertex(ctx, std::move(selectedTracks)); return returnContainers; } std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> -ActsAdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, const std::vector<const Trk::ITrackLink*>& trackVector) const +ActsAdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, std::vector<std::unique_ptr<Trk::ITrackLink>> trackVector) const { using namespace Acts::UnitLiterals; @@ -232,15 +227,12 @@ ActsAdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, const std const auto& geoContext = m_trackingGeometryTool->getGeometryContext(ctx).any(); - std::vector<const Trk::ITrackLink*>::const_iterator mytrkB = trackVector.begin(); - std::vector<const Trk::ITrackLink*>::const_iterator myTrkE = trackVector.end(); - // Convert tracks to Acts::BoundParameters std::vector<TrackWrapper> allTracks; - for (std::vector<const Trk::ITrackLink*>::const_iterator trkiter = mytrkB; trkiter != myTrkE; ++trkiter) { + for (const auto& trk : trackVector) { - const auto& trkParams = (*trkiter)->parameters(); + const auto& trkParams = trk->parameters(); const auto& params = trkParams->parameters(); Acts::BoundVector actsParams; @@ -251,6 +243,9 @@ ActsAdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, const std } auto cov = *(trkParams->covariance()); + // TODO: check if the following works as well: + // cov->col(4) *= 1./1_MeV; + // cov->row(4) *= 1./1_MeV; Acts::BoundSymMatrix covMat; covMat << cov(0,0) , cov(0,1) , cov(0,2) , cov(0,3) , cov(0,4) *1./(1_MeV), 0 , cov(1,0) , cov(1,1) , cov(1,2) , cov(1,3) , cov(1,4) *1./(1_MeV) , 0 @@ -259,7 +254,7 @@ ActsAdaptiveMultiPriVtxFinderTool::findVertex(const EventContext& ctx, const std , cov(4,0) *1./(1_MeV) , cov(4,1) *1./(1_MeV) , cov(4,2) *1./(1_MeV) , cov(4,3) *1./(1_MeV) , cov(4,4) *1./(1_MeV*1_MeV), 0 , 0. , 0. , 0. , 0., 0., 1.; - allTracks.emplace_back((*trkiter),Acts::BoundParameters(geoContext, covMat, actsParams, perigeeSurface)); + allTracks.emplace_back(trk.get(),Acts::BoundParameters(geoContext, covMat, actsParams, perigeeSurface)); } std::vector<const TrackWrapper*> allTrackPtrs; -- GitLab