ATLAS Offline Software
Loading...
Searching...
No Matches
InPlaceClusterization.h File Reference
#include <algorithm>
#include <array>
#include <cassert>
#include <cmath>
#include <concepts>
#include <limits>
#include <ranges>
#include <span>
#include <type_traits>
Include dependency graph for InPlaceClusterization.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  Acts::InPlaceClusterization::Cell< coordinates_t, N, index_t >
 A possible Cell type, that can be clustered. More...
struct  Acts::InPlaceClusterization::ConnectionHelper< cell_t, connection_type >
 default connection helper which should work for arbitrary cells which fulfil the CellWithLabelConcept More...

Namespaces

namespace  Acts
 This class is not to needed in AthSimulation.
namespace  Acts::InPlaceClusterization
namespace  Acts::InPlaceClusterization::traits

Concepts

concept  Acts::InPlaceClusterization::CellWithLabel
 concept of a call object that can be clustered.
concept  Acts::InPlaceClusterization::SequenceContainer
 base concept for the container that can be used for a cell collection
concept  Acts::InPlaceClusterization::CellCollection
 concept of a cell container that can be clustered

Enumerations

enum class  Acts::InPlaceClusterization::EConnectionType { Acts::InPlaceClusterization::CommonEdgeOrCorner , Acts::InPlaceClusterization::CommonEdge }

Functions

template<typename cell_t>
constexpr auto Acts::InPlaceClusterization::traits::getCellDimension ()
template<typename cell_t>
auto Acts::InPlaceClusterization::traits::getCellCoordinate (const cell_t &a, unsigned int axis_i)
 Get the coordinates of a cell.
template<typename cell_t, std::unsigned_integral index_t>
void Acts::InPlaceClusterization::traits::setLabel (cell_t &a, index_t label)
 Set a label for a given cell the label type must fit numbers as high as the number of cells which are clustered.
template<typename cell_t>
auto Acts::InPlaceClusterization::traits::getLabel (const cell_t &a)
 Get the label associated to the given cell.
template<typename coordinates_t>
bool Acts::InPlaceClusterization::isConnectedCommonEdgeOrCorner (const coordinates_t &coordinates_diff)
 test whether cells are connected considering common corners and edges.
template<typename coordinates_t>
bool Acts::InPlaceClusterization::isConnectedCommonEdge (const coordinates_t &coordinates_diff)
 test whether cells are connected considering common edges only.
template<EConnectionType connection_type = EConnectionType::CommonEdgeOrCorner, CellCollection cell_container_t = std::span<Cell<int, 2, unsigned int> >>
auto Acts::InPlaceClusterization::defaultConnectionHelper (const cell_container_t &cells)
template<typename coordinate_t>
auto Acts::InPlaceClusterization::absDifference (coordinate_t a, coordinate_t b)
 compute the absolute difference of two coordinates
template<unsigned int SORT_AXIS, CellCollection cell_collection_t, std::unsigned_integral index_t = unsigned int, typename connection_helper_t>
void Acts::InPlaceClusterization::labelSortedCells (cell_collection_t &cells, connection_helper_t &&connection_helper)
 Label cells which are in ascending order of the coordinate of the given axis.
template<unsigned int AXIS, CellCollection cell_collection_t, std::size_t NDim = 2, std::unsigned_integral index_t = unsigned int>
void Acts::InPlaceClusterization::sortCellsByCoordinate (cell_collection_t &cells)
 Sort the cells in ascending order of the coordinate of the specified axis.
template<CellCollection cell_collection_t>
void Acts::InPlaceClusterization::groupCellsByLabel (cell_collection_t &cells)
 Sort the cells in ascending order of the asscoiated label.
template<unsigned int SORT_AXIS, std::unsigned_integral index_t = unsigned int, CellCollection cell_collection_t = std::span<Cell<int, 2, unsigned int> >, typename connection_helper_t = ConnectionHelper<Cell<int, 2, unsigned int> >>
void Acts::InPlaceClusterization::clusterize (cell_collection_t &cells, connection_helper_t &&connection_helper=ConnectionHelper< typename cell_collection_t::value_type, EConnectionType::CommonEdgeOrCorner >{})
 Sort the cell collection in such a way that cells of a cluster are adjacent.
template<CellCollection cell_collection_t, std::unsigned_integral index_t = unsigned int>
std::size_t Acts::InPlaceClusterization::countLabels (const cell_collection_t &cells)
 determine the number of clusters.
template<CellCollection cell_collection_t, typename func_t>
void Acts::InPlaceClusterization::for_each_cluster (cell_collection_t &cells, func_t func)
 call the given function for each cluster of a label sorted cell collection.
template<CellCollection cell_collection_t, typename range_collection_t>
void Acts::InPlaceClusterization::addCellRanges (const cell_collection_t &cells, range_collection_t &ranges)
 Add element ranges for each cluster in the cell collection to the given range container.
template<unsigned int AXIS, CellCollection cell_collection_t, typename range_collection_t>
void Acts::InPlaceClusterization::addCellRangesAndSort (cell_collection_t &cells, range_collection_t &ranges)
 Sort the cells of each cluster by one coordinate and add cell ranges to the given range container.