Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ObjectId.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 
8 #ifndef COLUMNAR_CORE_OBJECT_ID_H
9 #define COLUMNAR_CORE_OBJECT_ID_H
10 
12 #include <iostream>
13 #include <stdexcept>
14 
15 namespace columnar
16 {
18  template<ContainerId O, typename CM = ColumnarModeDefault> class ObjectId;
19 
20 
21 
22 
23 
24  template<ContainerId O> class ObjectId<O,ColumnarModeXAOD> final
25  {
28  public:
29 
30  static_assert (ContainerIdTraits<O>::isDefined, "ContainerId not defined, include the appropriate header");
31 
33 
34  ObjectId (xAODObject& val_object) noexcept
35  : m_object (&val_object)
36  {}
37 
38  ObjectId (const ObjectId<O,ColumnarModeXAOD>& that) noexcept = default;
39 
41  ObjectId (const ObjectId<CI2,ColumnarModeXAOD>& that) noexcept
42  : m_object (&that.getXAODObject())
43  {}
44 
45  ObjectId& operator = (const ObjectId<O,ColumnarModeXAOD>& that) noexcept = default;
46 
47  [[nodiscard]] xAODObject& getXAODObject () const noexcept {
48  return *m_object;}
49 
50  template<typename Acc,typename... Args>
51  requires std::invocable<Acc,ObjectId<O,ColumnarModeXAOD>,Args...>
52  [[nodiscard]] decltype(auto) operator() (Acc& acc, Args&&... args) const {
53  return acc (*this, std::forward<Args> (args)...);}
54 
55 
56 
59  private:
60 
61  xAODObject *m_object = nullptr;
62  };
63 
64  template<ContainerId CI>
66  {
67  return &lhs.getXAODObject() == &rhs.getXAODObject();
68  }
69 
70  template<ContainerId CI>
72  {
73  return &lhs.getXAODObject() != &rhs.getXAODObject();
74  }
75 
76 
77 
78 
79  template<ContainerId O> class ObjectId<O,ColumnarModeArray> final
80  {
83  public:
84 
85  static_assert (ContainerIdTraits<O>::isDefined, "ContainerId not defined, include the appropriate header");
86 
89 
90  ObjectId (xAODObject& /*val_object*/)
91  {
92  throw std::logic_error ("can't call xAOD function in columnar mode");
93  }
94 
95  ObjectId (const ObjectId<O,ColumnarModeArray>& that) noexcept = default;
96 
98  ObjectId (const ObjectId<CI2,ColumnarModeArray>& that) noexcept
99  : m_data (that.getData()), m_index (that.getIndex())
100  {}
101 
102  ObjectId& operator = (const ObjectId<O,ColumnarModeArray>& that) noexcept = default;
103 
104  [[nodiscard]] xAODObject& getXAODObject () const {
105  throw std::logic_error ("can't call xAOD function in columnar mode");}
106 
107  template<typename Acc,typename... Args>
108  requires std::invocable<Acc,ObjectId<O,ColumnarModeArray>,Args...>
109  [[nodiscard]] decltype(auto) operator() (Acc& acc, Args&&... args) const {
110  return acc (*this, std::forward<Args> (args)...);}
111 
112 
113 
116  public:
117 
118  explicit ObjectId (void **val_data, std::size_t val_index) noexcept
119  : m_data (val_data), m_index (val_index)
120  {}
121 
122  [[nodiscard]] std::size_t getIndex () const noexcept {
123  return m_index;}
124 
125  [[nodiscard]] void **getData () const noexcept {
126  return m_data;}
127 
128 
129 
132  private:
133 
134  void **m_data = nullptr;
135  std::size_t m_index = 0u;
136  };
137 
138  template<ContainerId CI>
140  {
141  return lhs.getIndex() == rhs.getIndex();
142  }
143 
144  template<ContainerId CI>
146  {
147  return lhs.getIndex() != rhs.getIndex();
148  }
149 
150 
151 
152 
172 }
173 
174 #endif
columnar::ObjectId< O, ColumnarModeArray >::xAODObject
typename ContainerIdTraits< O >::xAODObjectIdType xAODObject
Definition: ObjectId.h:88
columnar::ContainerIdTraits
Definition: ContainerId.h:97
columnar::final
CM final
Definition: ColumnAccessor.h:106
InDetSimDataHelpers::getData
const InDetSimData * getData(const InDetSimDataCollection &coll, const Identifier &id)
Definition: InDetSimDataDict.h:24
columnar::ObjectId< O, ColumnarModeArray >::getXAODObject
xAODObject & getXAODObject() const
Definition: ObjectId.h:104
columnar::ObjectId< O, ColumnarModeXAOD >::getXAODObject
xAODObject & getXAODObject() const noexcept
Definition: ObjectId.h:47
columnar::ObjectId< O, ColumnarModeXAOD >::requires
requires(ContainerIdTraits< CI2 >::isMutable &&ContainerIdTraits< CI2 >::constId==O) ObjectId(const ObjectId< CI2
python.CaloAddPedShiftConfig.args
args
Definition: CaloAddPedShiftConfig.py:45
m_data
std::vector< T > m_data
Definition: TrackTruthMatchingBaseAlg.cxx:660
columnar::getXAODObject
xAODContainer & getXAODObject() const noexcept
Definition: ObjectRange.h:121
columnar::ObjectId< O, ColumnarModeArray >::requires
requires(ContainerIdTraits< CI2 >::isMutable &&ContainerIdTraits< CI2 >::constId==O) ObjectId(const ObjectId< CI2
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
Args
Definition: test_lwtnn_fastgraph.cxx:12
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
columnar::operator==
bool operator==(const ObjectId< CI, ColumnarModeXAOD > &lhs, const ObjectId< CI, ColumnarModeXAOD > &rhs)
Definition: ObjectId.h:65
columnar::ObjectId< O, ColumnarModeXAOD >
Definition: ObjectId.h:25
columnar::operator!=
bool operator!=(const ObjectId< CI, ColumnarModeXAOD > &lhs, const ObjectId< CI, ColumnarModeXAOD > &rhs)
Definition: ObjectId.h:71
columnar::ObjectId< O, ColumnarModeArray >
Definition: ObjectId.h:80
columnar::ObjectId< O, ColumnarModeArray >::getIndex
std::size_t getIndex() const noexcept
Definition: ObjectId.h:122
columnar::ObjectId< O, ColumnarModeArray >::ObjectId
ObjectId(const ObjectId< O, ColumnarModeArray > &that) noexcept=default
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
columnar::requires
requires((std::is_integral_v< CT >||std::is_floating_point_v< CT >) &&!std::is_same_v< CT, bool >) struct ColumnTypeTraits< CT
columnar::ObjectId
a class representing a single object (electron, muons, etc.)
Definition: ObjectId.h:18
columnar::ObjectId< O, ColumnarModeArray >::ObjectId
ObjectId(xAODObject &)
Definition: ObjectId.h:90
columnar::ColumnarModeArray
Definition: ColumnarDef.h:30
columnar::ObjectId< O, ColumnarModeXAOD >::ObjectId
ObjectId(const ObjectId< O, ColumnarModeXAOD > &that) noexcept=default
columnar
Definition: ColumnAccessor.h:23
ContainerId.h
columnar::ColumnarModeXAOD
Definition: ColumnarDef.h:15
columnar::ObjectId< O, ColumnarModeXAOD >::ObjectId
ObjectId(xAODObject &val_object) noexcept
Definition: ObjectId.h:34
columnar::ObjectId< O, ColumnarModeXAOD >::xAODObject
typename ContainerIdTraits< O >::xAODObjectIdType xAODObject
Definition: ObjectId.h:32
columnar::ObjectId< O, ColumnarModeArray >::ObjectId
ObjectId(void **val_data, std::size_t val_index) noexcept
Definition: ObjectId.h:118
columnar::ObjectId< O, ColumnarModeArray >::getData
void ** getData() const noexcept
Definition: ObjectId.h:125