File GeometryHierarchyMap.hpp
-
namespace Acts
Note
This file is foreseen for the
Geometry
module to replaceExtent
-
template<typename value_t>
class GeometryHierarchyMap - #include <Acts/Geometry/GeometryHierarchyMap.hpp>
Store values mapped into the geometry hierarchy.
The core functionality is to find an equivalent element, i.e. an identifier-value pair, for a given geometry identifier via
Trailing zero levels of stored geometry identifiers are used as broadcast values to refer to higher-level objects within the geometry, e.g. a geometry identifier with vanishing approach and sensitive index identifies a layer. An entry will all geometry identifier levels set to zero acts as the global default value.auto it = container.find(GeometryIdentifier(...)); if (it != container.end()) { ... }
The container also supports range-based iteration over all stored elements
and index-based access to stored elements and associated geometry identifiersfor (const auto& element : container) { ... }
Adding elements is potentially expensive as the internal lookup structure must be updated. In addition, modifying an element in-place could change its identifier which would also break the lookup. Thus, the container can not be modified after construction to prevent misuse.GeometryIdentifier id3 = container.idAt(3); const auto& element4 = container.valueAt(4);
Note
No guarantees are given for the element order when using range-based or index-based access. Any apparent ordering must be considered an implementation detail and might change.
- Template Parameters
value_t – stored value type
Public Types
-
using InputElement = typename std::pair<GeometryIdentifier, value_t>
Combined geometry identifier and value element. Only used for input.
-
using Iterator = typename std::vector<value_t>::const_iterator
-
using Size = typename std::vector<value_t>::size_type
-
using Value = value_t
Public Functions
-
GeometryHierarchyMap() = default
-
GeometryHierarchyMap(const GeometryHierarchyMap&) = default
-
GeometryHierarchyMap(GeometryHierarchyMap&&) = default
-
inline GeometryHierarchyMap(std::initializer_list<InputElement> elements)
Construct the container from an initializer list.
- Parameters
elements – input initializer list
-
inline GeometryHierarchyMap(std::vector<InputElement> elements)
Construct the container from the given elements.
- Parameters
elements – input elements (must be unique with respect to identifier)
-
~GeometryHierarchyMap() = default
-
inline Iterator begin() const
Return an iterator pointing to the beginning of the stored values.
-
inline bool empty() const
Check if any elements are stored.
-
inline Iterator end() const
Return an iterator pointing to the end of the stored values.
-
inline Iterator find(GeometryIdentifier id) const
Find the most specific value for a given geometry identifier.
This can be either from the element matching exactly to the given geometry id, if it exists, or from the element for the next available higher level within the geometry hierarchy.
- Parameters
id – geometry identifier for which information is requested
- Return values
iterator – to an existing value
<tt>.end()</tt> – iterator if no matching element exists
-
inline GeometryIdentifier idAt(Size index) const
Access the geometry identifier for the i-th element with bounds check.
- Throws
std::out_of_range – for invalid indices
-
GeometryHierarchyMap &operator=(const GeometryHierarchyMap&) = default
-
GeometryHierarchyMap &operator=(GeometryHierarchyMap&&) = default
-
inline Size size() const
Return the number of stored elements.
Private Types
-
using Identifier = GeometryIdentifier::Value
Private Functions
-
template<typename iterator_t>
inline void fill(iterator_t beg, iterator_t end) Fill the container from the input elements.
This assumes that the elements are ordered and unique with respect to their identifiers.
Private Static Functions
-
static inline constexpr bool equalWithinMask(Identifier lhs, Identifier rhs, Identifier mask)
Compare the two identifiers only within the masked bits.
-
static inline constexpr Identifier makeHighestLevelMask()
Construct a mask where only the highest level is set.
-
static inline constexpr Identifier makeLeadingLevelsMask(GeometryIdentifier id)
Construct a mask where all leading non-zero levels are set.
-
template<typename iterator_t>
static inline void sortAndCheckDuplicates(iterator_t beg, iterator_t end) Ensure identifier ordering and uniqueness.
-
template<typename value_t>