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