From 45899353ff8048d753e9f3317363dd48791b2598 Mon Sep 17 00:00:00 2001 From: cvarni Date: Tue, 1 Oct 2024 20:42:54 +0200 Subject: [PATCH] inherits --- .../Clusterization/TimedClusterization.hpp | 9 +- .../TimedClusterizationTests.cpp | 120 ++++++++++++++---- 2 files changed, 105 insertions(+), 24 deletions(-) diff --git a/Core/include/Acts/Clusterization/TimedClusterization.hpp b/Core/include/Acts/Clusterization/TimedClusterization.hpp index 77f512d906e6..30668f9ddbf1 100644 --- a/Core/include/Acts/Clusterization/TimedClusterization.hpp +++ b/Core/include/Acts/Clusterization/TimedClusterization.hpp @@ -11,6 +11,8 @@ #include "Acts/Clusterization/Clusterization.hpp" #include "Acts/Definitions/Algebra.hpp" +#include + namespace Acts::Ccl { template @@ -19,6 +21,11 @@ concept HasRetrievableTimeInfo = requires(Cell cell) { }; template -struct TimedConnect {}; +struct TimedConnect : public Acts::Ccl::DefaultConnect { + Acts::ActsScalar timeTollerance{std::numeric_limits::max()}; + + TimedConnect() = default; + TimedConnect(Acts::ActsScalar time) : timeTollerance(time) {} +}; } // namespace Acts::Ccl diff --git a/Tests/UnitTests/Core/Clusterization/TimedClusterizationTests.cpp b/Tests/UnitTests/Core/Clusterization/TimedClusterizationTests.cpp index e679e019f8b3..2a6206274756 100644 --- a/Tests/UnitTests/Core/Clusterization/TimedClusterizationTests.cpp +++ b/Tests/UnitTests/Core/Clusterization/TimedClusterizationTests.cpp @@ -11,29 +11,103 @@ #include "Acts/Clusterization/TimedClusterization.hpp" namespace Acts::Test { - - // Define objects - using Identifier = std::size_t; - struct Cell { - Cell(Identifier identifier, int c, int r, double t) + +// Define objects +using Identifier = std::size_t; +struct Cell { + Cell(Identifier identifier, int c, int r, double t) : id(identifier), column(c), row(r), time(t) {} - - Identifier id{}; - int column{0}; - int row{0}; - int label{-1}; - double time{0.}; - }; - - struct Cluster { - std::vector ids{}; - }; - - using CellCollection = std::vector; - using ClusterCollection = std::vector; - - BOOST_AUTO_TEST_CASE(TimedGrid_2D_notime) { - - } + Identifier id{}; + int column{0}; + int row{0}; + int label{-1}; + double time{0.}; +}; + +struct Cluster { + std::vector ids{}; +}; + +using CellCollection = std::vector; +using ClusterCollection = std::vector; + +// Define functions +static inline int getCellRow(const Cell& cell) { + return cell.row; +} + +static inline int getCellColumn(const Cell& cell) { + return cell.column; +} + +static inline int& getCellLabel(Cell& cell) { + return cell.label; +} + +static inline double getCellTime(const Cell& cell) { + return cell.time; +} + +static void clusterAddCell(Cluster& cl, const Cell& cell) { + cl.ids.push_back(cell.id); +} + +BOOST_AUTO_TEST_CASE(TimedGrid_2D_notime) { + // 4x4 matrix + /* + X O O X + O O O X + X X O O + X O O X + */ + // 7 cells -> 4 clusters in total + + std::vector cells; + cells.emplace_back(0ul, 0, 0, 0); + cells.emplace_back(1ul, 3, 0, 0); + cells.emplace_back(2ul, 3, 1, 0); + cells.emplace_back(3ul, 0, 2, 0); + cells.emplace_back(4ul, 1, 2, 0); + cells.emplace_back(5ul, 0, 3, 0); + cells.emplace_back(6ul, 3, 3, 0); + + std::vector> expectedResults; + expectedResults.push_back({0ul}); + expectedResults.push_back({3ul, 4ul, 5ul}); + expectedResults.push_back({1ul, 2ul}); + expectedResults.push_back({6ul}); + + ClusterCollection clusters = + Acts::Ccl::createClusters( + cells, + Acts::Ccl::TimedConnect(std::numeric_limits::max())); + + BOOST_CHECK_EQUAL(4ul, clusters.size()); + + // Compare against default connect (only space) + ClusterCollection defaultClusters = + Acts::Ccl::createClusters( + cells, Acts::Ccl::DefaultConnect()); + + BOOST_CHECK_EQUAL(4ul, defaultClusters.size()); + BOOST_CHECK_EQUAL(defaultClusters.size(), expectedResults.size()); + + std::vector sizes{1, 3, 2, 1}; + for (std::size_t i(0); i < clusters.size(); ++i) { + std::vector& timedIds = clusters[i].ids; + std::vector& defaultIds = defaultClusters[i].ids; + const std::vector& expected = expectedResults[i]; + BOOST_CHECK_EQUAL(timedIds.size(), defaultIds.size()); + BOOST_CHECK_EQUAL(timedIds.size(), sizes[i]); + BOOST_CHECK_EQUAL(timedIds.size(), expected.size()); + + std::sort(timedIds.begin(), timedIds.end()); + std::sort(defaultIds.begin(), defaultIds.end()); + for (std::size_t j(0); j < timedIds.size(); ++j) { + BOOST_CHECK_EQUAL(timedIds[j], defaultIds[j]); + BOOST_CHECK_EQUAL(timedIds[j], expected[j]); + } + } } +} // namespace Acts::Test