ATLAS Offline Software
TrackContainer.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef ACTSTRKEVENT_TRACKCONTAINER_H
6 #define ACTSTRKEVENT_TRACKCONTAINER_H 1
7 
10 #include "Acts/EventData/TrackContainer.hpp"
11 #include "Acts/EventData/VectorTrackContainer.hpp"
12 #include "Acts/EventData/VectorMultiTrajectory.hpp"
13 
14 namespace ActsTrk {
15  using TrackBackend = Acts::ConstVectorTrackContainer;
16  using MutableTrackBackend = Acts::VectorTrackContainer;
17  using TrackStateBackend = Acts::ConstVectorMultiTrajectory;
18  using MutableTrackStateBackend = Acts::VectorMultiTrajectory;
19 
20  // Containers without xAOD backends - this is for transient objects
21  using TrackContainerBase = Acts::TrackContainer<TrackBackend,
23  Acts::detail::ValueHolder>;
24 
25  using MutableTrackContainer = Acts::TrackContainer<MutableTrackBackend,
27  Acts::detail::ValueHolder>;
28 
29 
31  : public TrackContainerBase {
32  public:
34  using value_type = typename TrackContainerBase::ConstTrackProxy;
35 
36  ConstTrackProxy operator[](unsigned int index) const { return getTrack(index); }
37  bool empty() const { return size() == 0; }
38  };
39 
40 
41  // Special indexing policy which will dereference element links
42  // into an std::optional rather than a pointer or reference to an
43  // existing element in the destination collection. This is
44  // needed because the Acts track container does have physical
45  // representations of tracks, but only creats proxy objects
46  // for tracks which are created on demand.
47  template <typename track_container_t>
49  public:
51  using ConstTrackProxy = typename track_container_t::ConstTrackProxy;
53  using ElementType = std::optional<ConstTrackProxy>;
54 
57  if (src) {
58  m_proxy = *src;
59  }
60  }
65 
67  return m_proxy.value();
68  }
69  const ConstTrackProxy *operator->() const {
70  return &m_proxy.value();
71  }
72  bool operator!() const {
73  return !m_proxy.has_value();
74  }
76  if (src) {
77  m_proxy = *src;
78  }
79  else {
80  m_proxy.reset();
81  }
82  return *this;
83  }
84 
85  std::optional<ConstTrackProxy> m_proxy {std::nullopt};
86  };
87 
88  using ElementConstReference = std::optional<ConstTrackProxy>;
90 
93 
96 
97  static bool isValid (const stored_index_type& index) {
98  return index != ConstTrackProxy::kInvalid;
99  }
100 
102  return index;
103  }
104 
105  static void reset (stored_index_type& index) {
106  index=ConstTrackProxy::kInvalid;
107  }
108 
109  static
110  ElementType lookup(const stored_index_type& index, const track_container_t& container) {
111  return container.getTrack(index);
112  }
113 
114  static void
115  reverseLookup([[maybe_unused]] const track_container_t& container,
116  ElementConstReference element,
117  index_type& index) {
118  index = element.has_value() ? element.value().index() : ConstTrackProxy::kInvalid;
119  }
120  };
121 
122 } // namespace ActsTrk
123 
124 // register special indexing policy for element links to Acts tracks i.e.
125 // ElementLink<ActsTrk::TrackContainer>
126 template <>
127 struct DefaultIndexingPolicy < ActsTrk::TrackContainer > {
129 };
130 
131 #include "AthenaKernel/CLASS_DEF.h"
132 CLASS_DEF(ActsTrk::TrackContainer, 1210898253, 1)
133 
134 #endif
DefaultIndexingPolicy< ActsTrk::TrackContainer >::type
typename ActsTrk::IndexingPolicy< ActsTrk::TrackContainer > type
Definition: TrackContainer.h:128
ActsTrk::TrackContainer
Definition: TrackContainer.h:31
ActsTrk::TrackContainer::operator[]
ConstTrackProxy operator[](unsigned int index) const
Definition: TrackContainer.h:36
ActsTrk::IndexingPolicy::ConstTrackProxyPtr::m_proxy
std::optional< ConstTrackProxy > m_proxy
Definition: TrackContainer.h:85
ActsTrk::TrackBackend
Acts::ConstVectorTrackContainer TrackBackend
Definition: TrackContainer.h:15
WriteCellNoiseToCool.src
src
Definition: WriteCellNoiseToCool.py:513
index
Definition: index.py:1
ActsTrk::IndexingPolicy::ConstTrackProxyPtr
Definition: TrackContainer.h:55
ActsTrk::MutableTrackBackend
Acts::VectorTrackContainer MutableTrackBackend
Definition: TrackContainer.h:16
ActsTrk::MutableTrackContainer
Acts::TrackContainer< MutableTrackBackend, MutableTrackStateBackend, Acts::detail::ValueHolder > MutableTrackContainer
Definition: TrackContainer.h:27
ActsTrk::IndexingPolicy::ConstTrackProxyPtr::operator->
const ConstTrackProxy * operator->() const
Definition: TrackContainer.h:69
ActsTrk::IndexingPolicy
Definition: TrackContainer.h:48
ActsTrk::IndexingPolicy::lookup
static ElementType lookup(const stored_index_type &index, const track_container_t &container)
Definition: TrackContainer.h:110
ActsTrk::IndexingPolicy::ConstTrackProxyPtr::operator=
ConstTrackProxyPtr & operator=(const ElementType *src)
Definition: TrackContainer.h:75
ActsTrk::IndexingPolicy::ConstTrackProxyPtr::ConstTrackProxyPtr
ConstTrackProxyPtr(const ConstTrackProxy &val)
Definition: TrackContainer.h:63
ActsTrk::IndexingPolicy::ConstTrackProxyPtr::operator*
ConstTrackProxy operator*() const
Definition: TrackContainer.h:66
ActsTrk::IndexingPolicy::reverseLookup
static void reverseLookup([[maybe_unused]] const track_container_t &container, ElementConstReference element, index_type &index)
Definition: TrackContainer.h:115
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
GeoPrimitives.h
ActsTrk::IndexingPolicy::storedToExternal
static index_type storedToExternal(stored_index_type index)
Definition: TrackContainer.h:101
ActsTrk::IndexingPolicy::reset
static void reset(stored_index_type &index)
Definition: TrackContainer.h:105
ActsTrk::IndexType
std::uint32_t IndexType
Definition: Decoration.h:14
DefaultIndexingPolicy.h
ActsTrk::IndexingPolicy::ConstTrackProxyPtr::operator!
bool operator!() const
Definition: TrackContainer.h:72
ActsTrk::TrackStateBackend
Acts::ConstVectorMultiTrajectory TrackStateBackend
Definition: TrackContainer.h:17
ActsTrk::TrackContainer::empty
bool empty() const
Definition: TrackContainer.h:37
DefaultIndexingPolicy
Definition: DefaultIndexingPolicy.h:23
ActsTrk::MutableTrackStateBackend
Acts::VectorMultiTrajectory MutableTrackStateBackend
Definition: TrackContainer.h:18
DeMoScan.index
string index
Definition: DeMoScan.py:362
ActsTrk::IndexingPolicy::index_type
track_container_t::IndexType index_type
The type of an index, as provided to or returned from a link.
Definition: TrackContainer.h:92
ActsTrk::IndexingPolicy::ElementConstReference
std::optional< ConstTrackProxy > ElementConstReference
Definition: TrackContainer.h:88
ActsTrk::IndexingPolicy::ElementType
std::optional< ConstTrackProxy > ElementType
The type we get when we dereference a link, and derived types.
Definition: TrackContainer.h:53
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
CLASS_DEF
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
Definition: Control/AthenaKernel/AthenaKernel/CLASS_DEF.h:67
ActsTrk::IndexingPolicy::isValid
static bool isValid(const stored_index_type &index)
Definition: TrackContainer.h:97
ActsTrk::IndexingPolicy::ConstTrackProxyPtr::ConstTrackProxyPtr
ConstTrackProxyPtr(ConstTrackProxy &&val)
Definition: TrackContainer.h:64
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MdtCalibInput.h:31
ActsTrk::IndexingPolicy::ConstTrackProxyPtr::ConstTrackProxyPtr
ConstTrackProxyPtr(const ElementType *src)
Definition: TrackContainer.h:56
ActsTrk::IndexingPolicy::ConstTrackProxyPtr::ConstTrackProxyPtr
ConstTrackProxyPtr(ConstTrackProxyPtr &&)=default
ActsTrk::IndexingPolicy::stored_index_type
index_type stored_index_type
The type of an index, as stored internally within a link.
Definition: TrackContainer.h:95
ActsTrk::IndexingPolicy::ConstTrackProxy
typename track_container_t::ConstTrackProxy ConstTrackProxy
The type of the const track proxy.
Definition: TrackContainer.h:51
value_type
Definition: EDM_MasterSearch.h:11
CLASS_DEF.h
macros to associate a CLID to a type
ActsTrk::IndexingPolicy::ConstTrackProxyPtr::ConstTrackProxyPtr
ConstTrackProxyPtr(const ConstTrackProxyPtr &)=default
ActsTrk::TrackContainerBase
Acts::TrackContainer< TrackBackend, TrackStateBackend, Acts::detail::ValueHolder > TrackContainerBase
Definition: TrackContainer.h:23