8#ifndef COLUMNAR_CORE_OPT_OBJECT_ID_H
9#define COLUMNAR_CORE_OPT_OBJECT_ID_H
24 template<ContainerIdConcept CI,
typename CM>
class OptObjectId;
43 :
m_object (&val_object.getXAODObjectNoexcept())
54 explicit operator bool ()
const noexcept {
62 throw std::bad_optional_access();
71 throw std::bad_optional_access();
93 template<ContainerIdConcept CI>
96 return lhs.getXAODObjectNoexcept() == rhs.getXAODObjectNoexcept();
99 template<ContainerIdConcept CI>
102 return lhs.getXAODObjectNoexcept() != rhs.getXAODObjectNoexcept();
108 template<ContainerIdConcept CI,ColumnarArrayMode CM>
class OptObjectId<
CI,CM> final
114 using xAODObject =
typename CI::xAODObjectIdType;
116 OptObjectId () noexcept = default;
118 OptObjectId (
std::nullopt_t) noexcept {}
120 OptObjectId (ObjectId<CI,CM> val_object) noexcept
121 : m_data (val_object.getData()), m_index (val_object.getIndex())
128 OptObjectId (xAODObject * )
130 throw std::logic_error (
"can't call xAOD function in columnar mode");
133 OptObjectId (
const OptObjectId<CI,CM>& that)
noexcept =
default;
135 OptObjectId& operator = (
const OptObjectId<CI,CM>& that)
noexcept =
default;
141 [[nodiscard]] xAODObject *getXAODObject ()
const {
142 throw std::logic_error (
"can't call xAOD function in columnar mode");}
144 explicit operator bool () const noexcept {
147 [[nodiscard]]
bool has_value () const noexcept {
150 [[nodiscard]] ObjectId<CI,CM>
value ()
const {
152 throw std::bad_optional_access();
153 return ObjectId<CI,CM> (m_data, m_index);}
155 [[nodiscard]] ObjectId<CI,CM>
operator * ()
const {
157 throw std::bad_optional_access();
158 return ObjectId<CI,CM> (m_data, m_index);}
160 [[nodiscard]]
bool operator == (
const OptObjectId<CI,CM>& that)
const noexcept {
161 return m_index == that.m_index;}
169 explicit OptObjectId (
void **val_data,
int val_index) noexcept
170 : m_data (val_data), m_index (val_index)
173 explicit OptObjectId (
void **val_data,
unsigned val_index) noexcept
174 : m_data (val_data), m_index (val_index)
177 explicit OptObjectId (
void **val_data, std::size_t val_index) noexcept
178 : m_data (val_data), m_index (val_index)
181 [[nodiscard]] std::size_t getIndex () const noexcept {
184 [[nodiscard]]
void **
getData () const noexcept {
193 void **m_data =
nullptr;
197 template<ContainerIdConcept CI, ColumnarArrayMode CM>
200 return lhs.getIndex() == rhs.getIndex();
203 template<ContainerIdConcept CI, ColumnarArrayMode CM>
206 return lhs.getIndex() != rhs.getIndex();
xAOD::MissingET_v1 operator*(const xAOD::MissingET_v1 &met, float scale)
Create new MET object from source with scaled (weighted) kinematics.
#define ATLAS_THREAD_SAFE
a class representing a single object (electron, muons, etc.)
ObjectId< CI, ColumnarModeXAOD > value() const
bool has_value() const noexcept
OptObjectId(const OptObjectId< CI, ColumnarModeXAOD > &that) noexcept=default
OptObjectId() noexcept=default
OptObjectId(ObjectId< CI, ColumnarModeXAOD > val_object) noexcept
OptObjectId(xAODObject *val_object) noexcept
xAODObject * getXAODObjectNoexcept() const noexcept
xAODObject * getXAODObject() const noexcept
typename CI::xAODObjectIdType xAODObject
a class representing a single optional object (electron, muons, etc.)
const InDetSimData * getData(const InDetSimDataCollection &coll, const Identifier &id)
bool operator==(const ObjectId< CI, ColumnarModeXAOD > &lhs, const ObjectId< CI, ColumnarModeXAOD > &rhs)
bool operator!=(const ObjectId< CI, ColumnarModeXAOD > &lhs, const ObjectId< CI, ColumnarModeXAOD > &rhs)
constexpr ColumnarOffsetType invalidObjectIndex
the value for an invalid element index
setBGCode setTAP setLVL2ErrorBits bool
std::map< std::string, HypoJetVector >::const_iterator CI