From 123746ce319d7782288af1b67db5f7aa18937669 Mon Sep 17 00:00:00 2001 From: Andreas Stefl Date: Wed, 21 Feb 2024 12:48:50 +0100 Subject: [PATCH] fix!: Fix vertex finding for seeds with `z=0` (#2917) While working on the 4D vertexing performance I realized that our vertex finders will abort if a seed with `z=0` is found. This can happen using a grid based seeder as it can round to exactly 0. As far as I could see the vertex constraint was only used to signal the finish line for the vertex finding. I exchanged that with an optional and also removed the vector which had no use as far as I could tell --- .../performance_ivf_truth_estimated_hist.root | Bin 44408 -> 44484 bytes .../AdaptiveGridDensityVertexFinder.ipp | 9 ++-- .../Vertexing/AdaptiveMultiVertexFinder.hpp | 2 +- .../Vertexing/AdaptiveMultiVertexFinder.ipp | 50 +++++++++++------- .../Vertexing/GridDensityVertexFinder.ipp | 9 ++-- .../Acts/Vertexing/IterativeVertexFinder.hpp | 11 ++-- .../Acts/Vertexing/IterativeVertexFinder.ipp | 26 ++++----- .../Vertexing/TrackDensityVertexFinder.ipp | 4 +- .../Acts/Vertexing/ZScanVertexFinder.ipp | 8 +-- 9 files changed, 55 insertions(+), 64 deletions(-) diff --git a/CI/physmon/reference/performance_ivf_truth_estimated_hist.root b/CI/physmon/reference/performance_ivf_truth_estimated_hist.root index 1d2048cf09e274f3b75b650ed670cac201fb4061..379d5bddde40ccf86353802cd1ee103645cd74ac 100644 GIT binary patch delta 29046 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 E2OFl4xc~qF delta 29172 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 seedVec{vertexingOptions.constraint}; - return seedVec; + return std::vector{}; } double z = 0; @@ -90,9 +89,7 @@ inline auto Acts::AdaptiveGridDensityVertexFinder::find( returnVertex.setFullCovariance(seedCov); - std::vector seedVec{returnVertex}; - - return seedVec; + return std::vector{returnVertex}; } inline auto Acts::AdaptiveGridDensityVertexFinder::doesPassTrackSelection( diff --git a/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.hpp b/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.hpp index b1fae6dd153..56654006676 100644 --- a/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.hpp +++ b/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.hpp @@ -221,7 +221,7 @@ class AdaptiveMultiVertexFinder final : public IVertexFinder { /// from seed track collection in last iteration /// /// @return The seed vertex - Result doSeeding( + Result> doSeeding( const std::vector& trackVector, Vertex& currentConstraint, const VertexingOptions& vertexingOptions, IVertexFinder::State& seedFinderState, diff --git a/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.ipp b/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.ipp index 641f0b70fc9..17c3d41cf05 100644 --- a/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.ipp +++ b/Core/include/Acts/Vertexing/AdaptiveMultiVertexFinder.ipp @@ -38,41 +38,43 @@ inline auto Acts::AdaptiveMultiVertexFinder::find( std::vector removedSeedTracks; while (!seedTracks.empty() && iteration < m_cfg.maxIterations && (m_cfg.addSingleTrackVertices || seedTracks.size() >= 2)) { - // Tracks that are used for searching compatible tracks - // near a vertex candidate - std::vector searchTracks; - if (m_cfg.doRealMultiVertex) { - searchTracks = origTracks; - } else { - searchTracks = seedTracks; - } Vertex currentConstraint = vertexingOptions.constraint; + // Retrieve seed vertex from all remaining seedTracks auto seedResult = doSeeding(seedTracks, currentConstraint, vertexingOptions, seedFinderState, removedSeedTracks); if (!seedResult.ok()) { return seedResult.error(); } - allVertices.push_back(std::make_unique(*seedResult)); + const auto& seedOptional = *seedResult; - Vertex& vtxCandidate = *allVertices.back(); - allVerticesPtr.push_back(&vtxCandidate); - - ACTS_DEBUG("Position of vertex candidate after seeding: " - << vtxCandidate.fullPosition().transpose()); - if (vtxCandidate.position().z() == - vertexingOptions.constraint.position().z()) { + if (!seedOptional.has_value()) { ACTS_DEBUG( "No seed found anymore. Break and stop primary vertex finding."); - allVertices.pop_back(); - allVerticesPtr.pop_back(); break; } + const auto& seedVertex = seedOptional.value(); + + ACTS_DEBUG("Position of vertex candidate after seeding: " + << seedVertex.fullPosition().transpose()); + + allVertices.push_back(std::make_unique(seedVertex)); + Vertex& vtxCandidate = *allVertices.back(); + allVerticesPtr.push_back(&vtxCandidate); // Clear the seed track collection that has been removed in last iteration // now after seed finding is done removedSeedTracks.clear(); + // Tracks that are used for searching compatible tracks near a vertex + // candidate + std::vector searchTracks; + if (m_cfg.doRealMultiVertex) { + searchTracks = origTracks; + } else { + searchTracks = seedTracks; + } + auto prepResult = canPrepareVertexForFit(searchTracks, seedTracks, vtxCandidate, currentConstraint, fitterState, vertexingOptions); @@ -144,7 +146,8 @@ inline auto Acts::AdaptiveMultiVertexFinder::doSeeding( const std::vector& trackVector, Vertex& currentConstraint, const VertexingOptions& vertexingOptions, IVertexFinder::State& seedFinderState, - const std::vector& removedSeedTracks) const -> Result { + const std::vector& removedSeedTracks) const + -> Result> { VertexingOptions seedOptions = vertexingOptions; seedOptions.constraint = currentConstraint; @@ -157,8 +160,15 @@ inline auto Acts::AdaptiveMultiVertexFinder::doSeeding( if (!seedResult.ok()) { return seedResult.error(); } + const auto& seedVector = *seedResult; + + ACTS_DEBUG("Found " << seedVector.size() << " seeds"); + + if (seedVector.empty()) { + return std::nullopt; + } + Vertex seedVertex = seedVector.back(); - Vertex seedVertex = (*seedResult).back(); // Update constraints according to seed vertex setConstraintAfterSeeding(currentConstraint, seedOptions.useConstraintInFit, seedVertex); diff --git a/Core/include/Acts/Vertexing/GridDensityVertexFinder.ipp b/Core/include/Acts/Vertexing/GridDensityVertexFinder.ipp index 9c3585f5ba6..50af5deee3b 100644 --- a/Core/include/Acts/Vertexing/GridDensityVertexFinder.ipp +++ b/Core/include/Acts/Vertexing/GridDensityVertexFinder.ipp @@ -29,10 +29,9 @@ auto Acts::GridDensityVertexFinder::find( } if (!couldRemoveTracks) { // No tracks were removed anymore - // Return empty seed, i.e. vertex at constraint position + // Return empty seed // (Note: Upstream finder should check for this break condition) - std::vector seedVec{vertexingOptions.constraint}; - return seedVec; + return std::vector{}; } } else { state.mainGrid = MainGridVector::Zero(); @@ -94,9 +93,7 @@ auto Acts::GridDensityVertexFinder::find( returnVertex.setFullCovariance(seedCov); - std::vector seedVec{returnVertex}; - - return seedVec; + return std::vector{returnVertex}; } template diff --git a/Core/include/Acts/Vertexing/IterativeVertexFinder.hpp b/Core/include/Acts/Vertexing/IterativeVertexFinder.hpp index f34a4998821..bd0ec27cd3e 100644 --- a/Core/include/Acts/Vertexing/IterativeVertexFinder.hpp +++ b/Core/include/Acts/Vertexing/IterativeVertexFinder.hpp @@ -14,7 +14,6 @@ #include "Acts/MagneticField/MagneticFieldProvider.hpp" #include "Acts/Utilities/Logger.hpp" #include "Acts/Utilities/Result.hpp" -#include "Acts/Vertexing/FsmwMode1dFinder.hpp" #include "Acts/Vertexing/FullBilloirVertexFitter.hpp" #include "Acts/Vertexing/HelicalTrackLinearizer.hpp" #include "Acts/Vertexing/IVertexFinder.hpp" @@ -22,7 +21,6 @@ #include "Acts/Vertexing/TrackLinearizer.hpp" #include "Acts/Vertexing/Vertex.hpp" #include "Acts/Vertexing/VertexingOptions.hpp" -#include "Acts/Vertexing/ZScanVertexFinder.hpp" #include @@ -203,11 +201,14 @@ class IterativeVertexFinder final : public IVertexFinder { /// @brief Method that calls seed finder to retrieve a vertex seed /// + /// @param state The state object /// @param seedTracks Seeding tracks /// @param vertexingOptions Vertexing options - Result getVertexSeed(State& state, - const std::vector& seedTracks, - const VertexingOptions& vertexingOptions) const; + /// + /// @return Vertex seed + Result> getVertexSeed( + State& state, const std::vector& seedTracks, + const VertexingOptions& vertexingOptions) const; /// @brief Removes all tracks in tracksToRemove from seedTracks /// diff --git a/Core/include/Acts/Vertexing/IterativeVertexFinder.ipp b/Core/include/Acts/Vertexing/IterativeVertexFinder.ipp index 9cf443cfe8a..0206d07591a 100644 --- a/Core/include/Acts/Vertexing/IterativeVertexFinder.ipp +++ b/Core/include/Acts/Vertexing/IterativeVertexFinder.ipp @@ -28,14 +28,13 @@ inline auto Acts::IterativeVertexFinder::find( if (!seedRes.ok()) { return seedRes.error(); } + const auto& seedOptional = *seedRes; - const auto& seedVertex = *seedRes; - - if (seedVertex.fullPosition()[eZ] == - vertexingOptions.constraint.position().z()) { + if (!seedOptional.has_value()) { ACTS_DEBUG("No more seed found. Break and stop primary vertex finding."); break; } + const auto& seedVertex = *seedOptional; /// End seeding /// Now take only tracks compatible with current seed @@ -156,7 +155,8 @@ inline auto Acts::IterativeVertexFinder::find( inline auto Acts::IterativeVertexFinder::getVertexSeed( State& state, const std::vector& seedTracks, - const VertexingOptions& vertexingOptions) const -> Result { + const VertexingOptions& vertexingOptions) const + -> Result> { auto finderState = m_cfg.seedFinder->makeState(state.magContext); auto res = m_cfg.seedFinder->find(seedTracks, vertexingOptions, finderState); @@ -165,20 +165,14 @@ inline auto Acts::IterativeVertexFinder::getVertexSeed( << seedTracks.size()); return VertexingError::SeedingError; } + const auto& seedVector = *res; - const auto& vertexCollection = *res; + ACTS_DEBUG("Found " << seedVector.size() << " seeds"); - if (vertexCollection.empty()) { - ACTS_ERROR("Empty seed collection was returned. Number of input tracks: " - << seedTracks.size()); - return VertexingError::SeedingError; + if (seedVector.empty()) { + return std::nullopt; } - - ACTS_DEBUG("Found " << vertexCollection.size() << " seeds"); - - // retrieve the seed vertex as the last element in - // the seed vertexCollection - Vertex seedVertex = vertexCollection.back(); + const Vertex& seedVertex = seedVector.back(); ACTS_DEBUG("Use " << seedTracks.size() << " tracks for vertex seed finding.") ACTS_DEBUG( diff --git a/Core/include/Acts/Vertexing/TrackDensityVertexFinder.ipp b/Core/include/Acts/Vertexing/TrackDensityVertexFinder.ipp index 9ad55a03c34..beb6bdc58f6 100644 --- a/Core/include/Acts/Vertexing/TrackDensityVertexFinder.ipp +++ b/Core/include/Acts/Vertexing/TrackDensityVertexFinder.ipp @@ -35,7 +35,5 @@ inline auto Acts::TrackDensityVertexFinder::find( returnVertex.setFullCovariance(seedCov); - std::vector seedVec{returnVertex}; - - return seedVec; + return std::vector{returnVertex}; } diff --git a/Core/include/Acts/Vertexing/ZScanVertexFinder.ipp b/Core/include/Acts/Vertexing/ZScanVertexFinder.ipp index 76ea5e4c0ca..b3bdb1f9095 100644 --- a/Core/include/Acts/Vertexing/ZScanVertexFinder.ipp +++ b/Core/include/Acts/Vertexing/ZScanVertexFinder.ipp @@ -95,11 +95,5 @@ inline auto Acts::ZScanVertexFinder::find( vertexingOptions.constraint.time()); Vertex vtxResult = Vertex(output); - // Vector to be filled with one single vertex - std::vector vertexCollection; - - // Add vertex to vertexCollection - vertexCollection.push_back(vtxResult); - - return vertexCollection; + return std::vector{vtxResult}; }