4#ifndef ATLASUNCALIBSROUCELINACCESOR_H
5#define ATLASUNCALIBSROUCELINACCESOR_H
16#include <unordered_map>
26 static constexpr unsigned int CONTAINER_IDX_MASK = (1u << 31) | (1u << 30) | (1u << 29) | (1u << 28);
47 MeasurementRange(
unsigned int container_idx,
unsigned int start_element_idx,
unsigned int end_element_idx)
58 void updateEnd(std::size_t container_idx,
unsigned int end_element_idx) {
83 template <
typename T_MeasurementContainerList >
109 template <
typename T_MeasurementContainerList >
134 MeasurementRangeContainer::const_iterator
find(
const MeasurementRangeContainer::value_type::first_type &key)
const {
135 return std::find_if(begin(), end(),
136 [&key](
const auto &c) {
137 return c.first == key;
141 std::pair<MeasurementRangeContainer::iterator, bool>
insert(MeasurementRangeContainer::value_type&& value) {
142 emplace_back(std::forward<MeasurementRangeContainer::value_type>(value));
143 return {std::prev(end()),
true};
151 template <
typename T_MeasurementRangeList>
163 unsigned int container_index,
164 unsigned int element_index)
203 using Iterator = Acts::SourceLinkAdapterIterator<BaseIterator>;
209 std::pair<Iterator, Iterator>
range(
const Acts::Surface &surface)
const
211 typename T_MeasurementRangeList::const_iterator
215 return {
Iterator(BaseIterator(
nullptr, 0u, 0u)),
216 Iterator(BaseIterator(
nullptr, 0u, 0u))};
228 ContainerRefWithDim<xAOD::PixelClusterContainer,2>,
229 ContainerRefWithDim<xAOD::StripClusterContainer,1>,
230 ContainerRefWithDim<xAOD::HGTDClusterContainer,3> >
234 template <std::
size_t DIM>
237 return container.isAvailable(acc.auxid());
247 throw std::runtime_error(
"Unsupported dimension for PixelClusterContainer");
unsigned int getDimension(const xAOD::PixelClusterContainer &container)
static bool isDimension(const SG::AuxVectorBase &container)
std::size_t numContainers() const
const MeasurementContainer & container(unsigned index) const
AtlasMeasurementContainerList m_measurementContainerList
std::pair< MeasurementRangeContainer::iterator, bool > insert(MeasurementRangeContainer::value_type &&value)
const std::vector< MeasurementContainer > & measurementContainerList() const
std::vector< std::pair< std::size_t, MeasurementRange > > MeasurementRangeContainer
typename T_MeasurementContainerList::measurement_container_variant_t MeasurementContainer
MeasurementRangeContainer::const_iterator find(const MeasurementRangeContainer::value_type::first_type &key) const
void setContainer(unsigned int container_index, const xAOD::UncalibratedMeasurementContainer *container)
void setContainer(unsigned int container_index, const xAOD::UncalibratedMeasurementContainer *container)
const MeasurementContainer & container(unsigned index) const
AtlasMeasurementContainerList m_measurementContainerList
typename T_MeasurementContainerList::measurement_container_variant_t MeasurementContainer
std::unordered_map< std::size_t, MeasurementRange > MeasurementRangeContainer
const std::vector< MeasurementContainer > & measurementContainerList() const
std::size_t numContainers() const
const std::vector< MeasurementContainer > & measurementContainerList() const
unsigned int containerIndex() const
const std::vector< MeasurementContainer > * m_containerList
const xAOD::UncalibratedMeasurementContainer * reference
unsigned int index() const
Acts::SourceLink operator*() const
unsigned int m_containerIndex
BaseIterator(const std::vector< MeasurementContainer > *containerList, unsigned int container_index, unsigned int element_index)
std::input_iterator_tag iterator_category
bool operator==(const BaseIterator &a) const
const xAOD::UncalibratedMeasurementContainer ** pointer
unsigned int difference_type
BaseIterator & operator++()
Acts::SourceLinkAdapterIterator< BaseIterator > Iterator
const std::vector< MeasurementContainer > & measurementContainerList() const
const MeasurementRangeList * m_measurementRanges
GenUncalibSourceLinkAccessor(const T_MeasurementRangeList &measurement_ranges)
const MeasurementContainer & container(unsigned index) const
typename T_MeasurementRangeList::MeasurementContainer MeasurementContainer
std::pair< Iterator, Iterator > range(const Acts::Surface &surface) const
Manage index tracking and synchronization of auxiliary data.
Athena definition of the Eigen plugin.
GenMeasurementRangeListFlat< AtlasMeasurementContainerList > MeasurementRangeListFlat
GenUncalibSourceLinkAccessor< MeasurementRangeList > UncalibSourceLinkAccessor
GenMeasurementRangeList< AtlasMeasurementContainerList > MeasurementRangeList
ATLASUncalibSourceLink makeATLASUncalibSourceLink(const xAOD::UncalibratedMeasurementContainer *container, std::size_t index, const EventContext &ctx)
PixelClusterContainer_v1 PixelClusterContainer
Define the version of the pixel cluster container.
SG::AuxElement::Accessor< std::array< float, N > > PosAccessor
xAOD Accessor to the position
UncalibratedMeasurementContainer_v1 UncalibratedMeasurementContainer
Define the version of the uncalibrated measurement container.
static constexpr unsigned int ELEMENT_IDX_MASK
static MeasurementRange noMeasurementExpected()
void updateEnd(std::size_t container_idx, unsigned int end_element_idx)
static constexpr unsigned int CONTAINER_IDX_SHIFT
bool isMeasurementExpected() const
static constexpr unsigned int createRangeValue(unsigned int container_idx, unsigned int index)
static constexpr unsigned int CONTAINER_IDX_MASK
bool isConsistentRange() const
MeasurementRange(unsigned int container_idx, unsigned int start_element_idx, unsigned int end_element_idx)
static constexpr unsigned int extractContainerIndex(unsigned int value)
unsigned int elementEndIndex() const
unsigned int containerIndex() const
static constexpr unsigned int extractElementIndex(unsigned int value)
unsigned int elementBeginIndex() const