From b8374e59f50b78ef0eb2504a22370cff79380a10 Mon Sep 17 00:00:00 2001 From: Bastian Schlag <bastian.schlag@cern.ch> Date: Thu, 27 Feb 2020 18:30:33 +0100 Subject: [PATCH] make vertex finders take vector of const BoundParameter pointer --- .../Vertexing/AdaptiveMultiVertexFinder.hpp | 20 +++++------ .../Vertexing/AdaptiveMultiVertexFinder.ipp | 34 ++++++++----------- .../Acts/Vertexing/GaussianTrackDensity.hpp | 6 ++-- .../Vertexing/TrackDensityVertexFinder.hpp | 2 +- .../Vertexing/TrackDensityVertexFinder.ipp | 6 ++-- Core/src/Vertexing/GaussianTrackDensity.cpp | 6 ++-- Tests/UnitTests/Core/Utilities/CMakeLists.txt | 1 + .../TrackDensityVertexFinderTests.cpp | 16 ++++++--- 8 files changed, 47 insertions(+), 44 deletions(-) diff --git a/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.hpp b/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.hpp index 1acbc7a77..79d72929b 100644 --- a/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.hpp +++ b/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.hpp @@ -181,7 +181,7 @@ class AdaptiveMultiVertexFinder { /// /// @return Vector of all reconstructed vertices Result<std::vector<Vertex<InputTrack_t>>> find( - const std::vector<InputTrack_t>& allTracks, + const std::vector<const InputTrack_t*>& allTracks, const VertexFinderOptions<InputTrack_t>& vFinderOptions) const; private: @@ -210,7 +210,7 @@ class AdaptiveMultiVertexFinder { /// /// @return The seed vertex Result<Vertex<InputTrack_t>> doSeeding( - const std::vector<InputTrack_t>& trackVector, + const std::vector<const InputTrack_t*>& trackVector, Vertex<InputTrack_t>& currentConstraint, const VertexFinderOptions<InputTrack_t>& vFinderOptions) const; @@ -237,7 +237,7 @@ class AdaptiveMultiVertexFinder { /// @param tracks The tracks /// @param[out] vtx The vertex candidate Result<void> addCompatibleTracksToVertex( - const std::vector<InputTrack_t>& tracks, Vertex<InputTrack_t>* vtx) const; + const std::vector<const InputTrack_t*>& tracks, Vertex<InputTrack_t>* vtx) const; /// @brief Method that tries to recover from cases where no tracks /// where added to the vertex candidate after seeding @@ -251,8 +251,8 @@ class AdaptiveMultiVertexFinder { /// /// return True if recovery was successful, false otherwise Result<bool> canRecoverFromNoCompatibleTracks( - const std::vector<InputTrack_t>& myTracks, - const std::vector<InputTrack_t>& seedTracks, Vertex<InputTrack_t>* vtx, + const std::vector<const InputTrack_t*>& myTracks, + const std::vector<const InputTrack_t*>& seedTracks, Vertex<InputTrack_t>* vtx, const Vertex<InputTrack_t>& currentConstraint, FitterState_t& fitterState) const; @@ -267,8 +267,8 @@ class AdaptiveMultiVertexFinder { /// /// @return True if preparation was successful, false otherwise Result<bool> canPrepareVertexForFit( - const std::vector<InputTrack_t>& myTracks, - const std::vector<InputTrack_t>& seedTracks, Vertex<InputTrack_t>* vtx, + const std::vector<const InputTrack_t*>& myTracks, + const std::vector<const InputTrack_t*>& seedTracks, Vertex<InputTrack_t>* vtx, const Vertex<InputTrack_t>& currentConstraint, FitterState_t& fitterState) const; @@ -281,7 +281,7 @@ class AdaptiveMultiVertexFinder { /// @param[out] isGoodVertex Vertex is good vertex void checkVertexAndCompatibleTracks( const Vertex<InputTrack_t>* vtx, - const std::vector<InputTrack_t>& seedTracks, int& nCompatibleTracks, + const std::vector<const InputTrack_t*>& seedTracks, int& nCompatibleTracks, bool& isGoodVertex) const; /// @brief Method that removes all tracks that are compatible with @@ -291,7 +291,7 @@ class AdaptiveMultiVertexFinder { /// @param[out] seedTracks The seed tracks void removeCompatibleTracksFromSeedTracks( const Vertex<InputTrack_t>* vtx, - std::vector<InputTrack_t>& seedTracks) const; + std::vector<const InputTrack_t*>& seedTracks) const; /// @brief Method that tries to remove a non-compatible track /// from seed tracks after removing a compatible track failed. @@ -302,7 +302,7 @@ class AdaptiveMultiVertexFinder { /// @return Non-compatible track was removed bool canRemoveNonCompatibleTrackFromSeedTracks( const Vertex<InputTrack_t>* vtx, - std::vector<InputTrack_t>& seedTracks) const; + std::vector<const InputTrack_t*>& seedTracks) const; /// @brief Method that evaluates if the new vertex candidate should /// be kept, i.e. saved, or not diff --git a/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.ipp b/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.ipp index a742bd332..c578f3a77 100644 --- a/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.ipp +++ b/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.ipp @@ -11,20 +11,17 @@ template <typename vfitter_t, typename sfinder_t> auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>::find( - const std::vector<InputTrack_t>& allTracks, + const std::vector<const InputTrack_t*>& allTracks, const VertexFinderOptions<InputTrack_t>& vFinderOptions) const -> Result<std::vector<Vertex<InputTrack_t>>> { if (allTracks.empty()) { return VertexingError::EmptyInput; } - - std::vector<const InputTrack_t*> seedTracks; - for(const auto& trk : allTracks){ - seedTracks.push_back(&trk); - } - // Original tracks - const std::vector<const InputTrack_t*> origTracks = seedTracks; + const std::vector<const InputTrack_t*>& origTracks = allTracks; + + // Seed tracks + std::vector<const InputTrack_t*> seedTracks = allTracks; // Construct the vertex fitter options from vertex finder options VertexFitterOptions<InputTrack_t> vFitterOptions( @@ -43,7 +40,6 @@ auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>::find( iteration < m_cfg.maxIterations) { // Tracks that are used for searching compatible tracks // near a vertex candidate - // TODO: This involves a lot of copying. Change the way of accessing tracks std::vector<const InputTrack_t*> myTracks; if (m_cfg.realMultiVertex == true) { myTracks = origTracks; @@ -139,7 +135,7 @@ auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>::find( template <typename vfitter_t, typename sfinder_t> auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>::doSeeding( - const std::vector<InputTrack_t>& trackVector, + const std::vector<const InputTrack_t*>& trackVector, Vertex<InputTrack_t>& currentConstraint, const VertexFinderOptions<InputTrack_t>& vFinderOptions) const -> Result<Vertex<InputTrack_t>> { @@ -221,7 +217,7 @@ auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>::getIPSignificance( template <typename vfitter_t, typename sfinder_t> auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>:: - addCompatibleTracksToVertex(const std::vector<InputTrack_t>& tracks, + addCompatibleTracksToVertex(const std::vector<const InputTrack_t*>& tracks, Vertex<InputTrack_t>* vtx) const -> Result<void> { std::vector<TrackAtVertex<InputTrack_t>> tracksAtVtx; @@ -248,8 +244,8 @@ auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>:: template <typename vfitter_t, typename sfinder_t> auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>:: canRecoverFromNoCompatibleTracks( - const std::vector<InputTrack_t>& myTracks, - const std::vector<InputTrack_t>& seedTracks, Vertex<InputTrack_t>* vtx, + const std::vector<const InputTrack_t*>& myTracks, + const std::vector<const InputTrack_t*>& seedTracks, Vertex<InputTrack_t>* vtx, const Vertex<InputTrack_t>& currentConstraint, FitterState_t& fitterState) const -> Result<bool> { // Recover from cases where no compatible tracks to vertex @@ -304,8 +300,8 @@ auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>:: template <typename vfitter_t, typename sfinder_t> auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>:: - canPrepareVertexForFit(const std::vector<InputTrack_t>& myTracks, - const std::vector<InputTrack_t>& seedTracks, + canPrepareVertexForFit(const std::vector<const InputTrack_t*>& myTracks, + const std::vector<const InputTrack_t*>& seedTracks, Vertex<InputTrack_t>* vtx, const Vertex<InputTrack_t>& currentConstraint, FitterState_t& fitterState) const -> Result<bool> { @@ -331,7 +327,7 @@ auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>:: template <typename vfitter_t, typename sfinder_t> auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>:: checkVertexAndCompatibleTracks(const Vertex<InputTrack_t>* vtx, - const std::vector<InputTrack_t>& seedTracks, + const std::vector<const InputTrack_t*>& seedTracks, int& nCompatibleTracks, bool& isGoodVertex) const -> void { for (const auto& trk : vtx->tracks()) { @@ -365,7 +361,7 @@ template <typename vfitter_t, typename sfinder_t> auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>:: removeCompatibleTracksFromSeedTracks( const Vertex<InputTrack_t>* vtx, - std::vector<InputTrack_t>& seedTracks) const -> void { + std::vector<const InputTrack_t*>& seedTracks) const -> void { for (const auto& trk : vtx->tracks()) { if ((trk.vertexCompatibility < m_cfg.maxVertexChi2 && m_cfg.useFastCompatibility) || @@ -390,10 +386,10 @@ template <typename vfitter_t, typename sfinder_t> auto Acts::AdaptiveMultiVertexFinder<vfitter_t, sfinder_t>:: canRemoveNonCompatibleTrackFromSeedTracks( const Vertex<InputTrack_t>* vtx, - std::vector<InputTrack_t>& seedTracks) const -> bool { + std::vector<const InputTrack_t*>& seedTracks) const -> bool { // Try to find the track with highest compatibility double maxCompatibility = 0; - typename std::vector<InputTrack_t>::iterator maxCompSeedIt; + typename std::vector<const InputTrack_t*>::iterator maxCompSeedIt; for (const auto& trk : vtx->tracks()) { double compatibility = trk.vertexCompatibility; if (compatibility > maxCompatibility) { diff --git a/Core/include/Acts/Vertexing/GaussianTrackDensity.hpp b/Core/include/Acts/Vertexing/GaussianTrackDensity.hpp index 6ac751d13..815694f31 100644 --- a/Core/include/Acts/Vertexing/GaussianTrackDensity.hpp +++ b/Core/include/Acts/Vertexing/GaussianTrackDensity.hpp @@ -50,7 +50,7 @@ class GaussianTrackDensity { /// @param state The GaussianTrackDensity state /// /// @return The z position of the maximum - double globalMaximum(const std::vector<Acts::BoundParameters>& trackList, + double globalMaximum(const std::vector<const Acts::BoundParameters>& trackList, State& state) const; /// @brief Calculates the global maximum with width @@ -60,7 +60,7 @@ class GaussianTrackDensity { /// /// @return The z position of the maximum and its width std::pair<double, double> globalMaximumWithWidth( - const std::vector<Acts::BoundParameters>& trackList, State& state) const; + const std::vector<const Acts::BoundParameters>& trackList, State& state) const; private: /// The configuration @@ -70,7 +70,7 @@ class GaussianTrackDensity { /// /// @param trackList The list of tracks /// @param state The GaussianTrackDensity state - void addTracks(const std::vector<Acts::BoundParameters>& trackList, + void addTracks(const std::vector<const Acts::BoundParameters>& trackList, State& state) const; }; } // namespace Acts diff --git a/Core/include/Acts/Vertexing/TrackDensityVertexFinder.hpp b/Core/include/Acts/Vertexing/TrackDensityVertexFinder.hpp index a5379e7c8..f85b29662 100644 --- a/Core/include/Acts/Vertexing/TrackDensityVertexFinder.hpp +++ b/Core/include/Acts/Vertexing/TrackDensityVertexFinder.hpp @@ -56,7 +56,7 @@ class TrackDensityVertexFinder { /// @return Vector of vertices, filled with a single /// vertex (for consistent interfaces) Result<std::vector<Vertex<InputTrack_t>>> find( - const std::vector<InputTrack_t>& trackVector, + const std::vector<const InputTrack_t*>& trackVector, const VertexFinderOptions<InputTrack_t>& vFinderOptions) const; /// @brief Constructor used if InputTrack_t type == BoundParameters diff --git a/Core/include/Acts/Vertexing/TrackDensityVertexFinder.ipp b/Core/include/Acts/Vertexing/TrackDensityVertexFinder.ipp index cf0f02b5f..d2e957f29 100644 --- a/Core/include/Acts/Vertexing/TrackDensityVertexFinder.ipp +++ b/Core/include/Acts/Vertexing/TrackDensityVertexFinder.ipp @@ -8,16 +8,16 @@ template <typename vfitter_t, typename track_density_t> auto Acts::TrackDensityVertexFinder<vfitter_t, track_density_t>::find( - const std::vector<InputTrack_t>& trackVector, + const std::vector<const InputTrack_t*>& trackVector, const VertexFinderOptions<InputTrack_t>& vFinderOptions) const -> Result<std::vector<Vertex<InputTrack_t>>> { typename track_density_t::State densityState; - std::vector<BoundParameters> trackList; + std::vector<const BoundParameters> trackList; trackList.reserve(trackVector.size()); for (const auto& trk : trackVector) { - trackList.push_back(m_extractParameters(trk)); + trackList.push_back(m_extractParameters(*trk)); } // Calculate z seed position diff --git a/Core/src/Vertexing/GaussianTrackDensity.cpp b/Core/src/Vertexing/GaussianTrackDensity.cpp index 44a080f9c..7e701a089 100644 --- a/Core/src/Vertexing/GaussianTrackDensity.cpp +++ b/Core/src/Vertexing/GaussianTrackDensity.cpp @@ -9,19 +9,19 @@ #include "Acts/Vertexing/GaussianTrackDensity.hpp" double Acts::GaussianTrackDensity::globalMaximum( - const std::vector<Acts::BoundParameters>& trackList, State& state) const { + const std::vector<const Acts::BoundParameters>& trackList, State& state) const { addTracks(trackList, state); return state.trackDensity.globalMaximum(state.trackDensityState); } std::pair<double, double> Acts::GaussianTrackDensity::globalMaximumWithWidth( - const std::vector<Acts::BoundParameters>& trackList, State& state) const { + const std::vector<const Acts::BoundParameters>& trackList, State& state) const { addTracks(trackList, state); return state.trackDensity.globalMaximumWithWidth(state.trackDensityState); } void Acts::GaussianTrackDensity::addTracks( - const std::vector<Acts::BoundParameters>& trackList, State& state) const { + const std::vector<const Acts::BoundParameters>& trackList, State& state) const { const double d0SignificanceCut = m_cfg.d0MaxSignificance * m_cfg.d0MaxSignificance; const double z0SignificanceCut = diff --git a/Tests/UnitTests/Core/Utilities/CMakeLists.txt b/Tests/UnitTests/Core/Utilities/CMakeLists.txt index 5462c9b65..82fe124a3 100644 --- a/Tests/UnitTests/Core/Utilities/CMakeLists.txt +++ b/Tests/UnitTests/Core/Utilities/CMakeLists.txt @@ -1,5 +1,6 @@ add_unittest(AnnealingUtilityTests AnnealingUtilityTests.cpp) add_unittest(AxesTests AxesTests.cpp) +add_unittest(BenchmarkTools BenchmarkTools.cpp) add_unittest(BFieldMapUtilsTests BFieldMapUtilsTests.cpp) add_unittest(BinningDataTests BinningDataTests.cpp) add_unittest(BinUtilityTests BinUtilityTests.cpp) diff --git a/Tests/UnitTests/Core/Vertexing/TrackDensityVertexFinderTests.cpp b/Tests/UnitTests/Core/Vertexing/TrackDensityVertexFinderTests.cpp index 1d586c08c..16cbf887a 100644 --- a/Tests/UnitTests/Core/Vertexing/TrackDensityVertexFinderTests.cpp +++ b/Tests/UnitTests/Core/Vertexing/TrackDensityVertexFinderTests.cpp @@ -65,8 +65,8 @@ BOOST_AUTO_TEST_CASE(track_density_finder_test) { perigeeSurface); // Vectors of track parameters in different orders - std::vector<BoundParameters> vec1 = {params1a, params1b, params1c}; - std::vector<BoundParameters> vec2 = {params1c, params1a, params1b}; + std::vector<const BoundParameters*> vec1 = {¶ms1a, ¶ms1b, ¶ms1c}; + std::vector<const BoundParameters*> vec2 = {¶ms1c, ¶ms1a, ¶ms1b}; auto res1 = finder.find(vec1, vFinderOptions); auto res2 = finder.find(vec2, vFinderOptions); @@ -133,7 +133,7 @@ BOOST_AUTO_TEST_CASE(track_density_finder_constr_test) { perigeeSurface); // Vector of track parameters - std::vector<BoundParameters> vec1 = {params1a, params1b, params1c}; + std::vector<const BoundParameters*> vec1 = {¶ms1a, ¶ms1b, ¶ms1c}; auto res = finder.find(vec1, vFinderOptions); @@ -213,7 +213,13 @@ BOOST_AUTO_TEST_CASE(track_density_finder_random_test) { perigeeSurface)); } - auto res3 = finder.find(trackVec, vFinderOptions); + std::vector<const BoundParameters*> trackPtrVec; + for(const auto& trk : trackVec){ + trackPtrVec.push_back(&trk); + } + + + auto res3 = finder.find(trackPtrVec, vFinderOptions); if (!res3.ok()) { std::cout << res3.error().message() << std::endl; } @@ -286,7 +292,7 @@ BOOST_AUTO_TEST_CASE(track_density_finder_usertrack_test) { BoundParameters(tgContext, covMat, pos1c, mom1c, -1, 0, perigeeSurface)); // Vector of track parameters - std::vector<InputTrack> vec1 = {params1a, params1b, params1c}; + std::vector<const InputTrack*> vec1 = {¶ms1a, ¶ms1b, ¶ms1c}; auto res = finder.find(vec1, vFinderOptions); -- GitLab