The Gaudi Framework
master (53dee381)
Toggle main menu visibility
Loading...
Searching...
No Matches
EventContext.h
Go to the documentation of this file.
1
/***********************************************************************************\
2
* (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3
* *
4
* This software is distributed under the terms of the Apache version 2 licence, *
5
* copied verbatim in the file "LICENSE". *
6
* *
7
* In applying this licence, CERN does not waive the privileges and immunities *
8
* granted to it by virtue of its status as an Intergovernmental Organization *
9
* or submit itself to any jurisdiction. *
10
\***********************************************************************************/
11
#pragma once
12
13
#include <
GaudiKernel/EventIDBase.h
>
14
#include <any>
15
#include <cstddef>
16
#include <fmt/format.h>
17
#include <format>
18
#include <iostream>
19
#include <limits>
20
34
35
class
EventContext
{
36
public
:
37
using
ContextID_t
= size_t;
38
using
ContextEvt_t
= size_t;
39
40
static
constexpr
ContextID_t
INVALID_CONTEXT_ID
= std::numeric_limits<ContextID_t>::max();
41
static
constexpr
ContextEvt_t
INVALID_CONTEXT_EVT
= std::numeric_limits<ContextEvt_t>::max();
42
43
EventContext
() =
default
;
44
45
explicit
EventContext
(
const
ContextEvt_t
e,
const
ContextID_t
s =
INVALID_CONTEXT_ID
,
46
const
ContextID_t
subSlot
=
INVALID_CONTEXT_ID
)
47
:
m_evt_num
( e ),
m_evt_slot
( s ),
m_sub_slot
(
subSlot
) {
48
m_valid
= ( e !=
INVALID_CONTEXT_EVT
&& s !=
INVALID_CONTEXT_ID
);
49
}
50
51
ContextEvt_t
evt
()
const
{
return
m_evt_num
; }
52
ContextID_t
slot
()
const
{
return
m_evt_slot
; }
53
ContextID_t
subSlot
()
const
{
return
m_sub_slot
; }
54
bool
usesSubSlot
()
const
{
return
m_sub_slot
!=
INVALID_CONTEXT_ID
; }
55
bool
valid
()
const
{
return
m_valid
; }
56
const
EventIDBase
&
eventID
()
const
{
return
m_eid
; }
57
58
void
set
(
const
ContextEvt_t
e = 0,
const
ContextID_t
s =
INVALID_CONTEXT_ID
,
59
const
ContextID_t
subSlot
=
INVALID_CONTEXT_ID
) {
60
m_valid
= ( e !=
INVALID_CONTEXT_EVT
&& s !=
INVALID_CONTEXT_ID
);
61
m_evt_num
= e;
62
m_evt_slot
= s;
63
m_sub_slot
=
subSlot
;
64
}
65
66
void
setEvt
(
const
ContextEvt_t
e ) {
67
if
( e ==
INVALID_CONTEXT_EVT
)
setValid
(
false
);
68
m_evt_num
= e;
69
}
70
71
void
setSlot
(
const
ContextID_t
s ) {
72
if
( s ==
INVALID_CONTEXT_ID
)
setValid
(
false
);
73
m_evt_slot
= s;
74
}
75
76
void
setSubSlot
(
const
ContextID_t
subslot ) {
m_sub_slot
= subslot; }
77
78
void
setValid
(
const
bool
b =
true
) {
79
m_valid
= b;
80
if
( !
m_valid
) {
81
m_evt_slot
=
INVALID_CONTEXT_ID
;
82
m_evt_num
=
INVALID_CONTEXT_EVT
;
83
}
84
}
85
86
void
setEventID
(
const
EventIDBase
& e ) {
m_eid
= e; }
87
88
template
<
typename
ValueType,
typename
... Args>
89
auto
&
emplaceExtension
( Args&&... args ) {
90
return
m_extension
.emplace<ValueType>( std::forward<Args>( args )... );
91
}
92
93
template
<
typename
T>
94
auto
&
setExtension
( T&& t ) {
95
m_extension
= std::forward<T>( t );
96
return
getExtension<T>
();
97
}
98
99
void
resetExtension
() {
m_extension
.reset(); }
100
101
std::any
detachExtension
() {
return
std::move(
m_extension
); }
102
103
template
<
typename
T>
104
auto
&
getExtension
() {
105
return
std::any_cast<std::decay_t<T>&>(
m_extension
);
106
}
107
108
template
<
typename
T>
109
const
auto
&
getExtension
()
const
{
110
return
std::any_cast<std::decay_t<T>
const
&>(
m_extension
);
111
}
112
113
template
<
typename
T>
114
T*
tryGetExtension
() noexcept {
115
return
std::any_cast<T>( &
m_extension
);
116
}
117
118
template
<
typename
T>
119
const
T*
tryGetExtension
() const noexcept {
120
return
std::any_cast<T>( &
m_extension
);
121
}
122
123
bool
hasExtension
()
const
{
return
m_extension
.has_value(); }
124
125
template
<
typename
T>
126
bool
hasExtension
()
const
{
127
return
hasExtension
() &&
m_extension
.type() ==
typeid
( std::decay_t<T> );
128
}
129
130
const
std::type_info&
getExtensionType
()
const
{
return
m_extension
.type(); }
131
132
friend
std::ostream&
operator<<
( std::ostream& os,
const
EventContext
& ctx );
133
friend
std::ostream&
operator<<
( std::ostream& os,
const
EventContext
* ctx );
134
135
private
:
136
EventIDBase
m_eid
{};
137
ContextEvt_t
m_evt_num
{
INVALID_CONTEXT_EVT
};
138
ContextID_t
m_evt_slot
{
INVALID_CONTEXT_ID
};
139
ContextID_t
m_sub_slot
{
INVALID_CONTEXT_ID
};
140
bool
m_valid
{
false
};
141
142
std::any
m_extension
;
143
};
144
147
template
<
class
BASE>
148
struct
EventContextFormatter
: BASE {
149
auto
format
(
const
EventContext
& ec,
auto
& ctx )
const
{
150
if
( ec.
valid
() ) {
151
std::string out;
152
if
( ec.
usesSubSlot
() ) {
153
out = std::format(
"s: {} e: {} sub: {}"
, ec.
slot
(), ec.
evt
(), ec.
subSlot
() );
154
}
else
{
155
out = std::format(
"s: {} e: {}"
, ec.
slot
(), ec.
evt
() );
156
}
157
return
BASE::format( out, ctx );
158
159
}
else
{
160
return
BASE::format(
"INVALID"
, ctx );
161
}
162
}
163
};
164
165
template
<>
166
struct
std::formatter<
EventContext
> :
EventContextFormatter
<std::formatter<std::string_view>> {};
167
168
template
<>
169
struct
fmt::formatter<
EventContext
> :
EventContextFormatter
<fmt::formatter<std::string_view>> {};
EventIDBase.h
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
EventContext
This class represents an entry point to all the event specific data.
Definition
EventContext.h:35
EventContext::EventContext
EventContext()=default
EventContext::evt
ContextEvt_t evt() const
Definition
EventContext.h:51
EventContext::eventID
const EventIDBase & eventID() const
Definition
EventContext.h:56
EventContext::emplaceExtension
auto & emplaceExtension(Args &&... args)
Definition
EventContext.h:89
EventContext::setSubSlot
void setSubSlot(const ContextID_t subslot)
Definition
EventContext.h:76
EventContext::setValid
void setValid(const bool b=true)
Definition
EventContext.h:78
EventContext::subSlot
ContextID_t subSlot() const
Definition
EventContext.h:53
EventContext::EventContext
EventContext(const ContextEvt_t e, const ContextID_t s=INVALID_CONTEXT_ID, const ContextID_t subSlot=INVALID_CONTEXT_ID)
Definition
EventContext.h:45
EventContext::slot
ContextID_t slot() const
Definition
EventContext.h:52
EventContext::hasExtension
bool hasExtension() const
Definition
EventContext.h:126
EventContext::getExtension
const auto & getExtension() const
Definition
EventContext.h:109
EventContext::hasExtension
bool hasExtension() const
Definition
EventContext.h:123
EventContext::set
void set(const ContextEvt_t e=0, const ContextID_t s=INVALID_CONTEXT_ID, const ContextID_t subSlot=INVALID_CONTEXT_ID)
Definition
EventContext.h:58
EventContext::m_sub_slot
ContextID_t m_sub_slot
Definition
EventContext.h:139
EventContext::tryGetExtension
const T * tryGetExtension() const noexcept
Definition
EventContext.h:119
EventContext::valid
bool valid() const
Definition
EventContext.h:55
EventContext::m_evt_slot
ContextID_t m_evt_slot
Definition
EventContext.h:138
EventContext::usesSubSlot
bool usesSubSlot() const
Definition
EventContext.h:54
EventContext::INVALID_CONTEXT_EVT
static constexpr ContextEvt_t INVALID_CONTEXT_EVT
Definition
EventContext.h:41
EventContext::operator<<
friend std::ostream & operator<<(std::ostream &os, const EventContext &ctx)
Definition
EventContext.cpp:13
EventContext::getExtensionType
const std::type_info & getExtensionType() const
Definition
EventContext.h:130
EventContext::setEventID
void setEventID(const EventIDBase &e)
Definition
EventContext.h:86
EventContext::getExtension
auto & getExtension()
Definition
EventContext.h:104
EventContext::detachExtension
std::any detachExtension()
Definition
EventContext.h:101
EventContext::setEvt
void setEvt(const ContextEvt_t e)
Definition
EventContext.h:66
EventContext::resetExtension
void resetExtension()
Definition
EventContext.h:99
EventContext::setExtension
auto & setExtension(T &&t)
Definition
EventContext.h:94
EventContext::setSlot
void setSlot(const ContextID_t s)
Definition
EventContext.h:71
EventContext::m_evt_num
ContextEvt_t m_evt_num
Definition
EventContext.h:137
EventContext::m_valid
bool m_valid
Definition
EventContext.h:140
EventContext::ContextID_t
size_t ContextID_t
Definition
EventContext.h:37
EventContext::m_eid
EventIDBase m_eid
Definition
EventContext.h:136
EventContext::tryGetExtension
T * tryGetExtension() noexcept
Definition
EventContext.h:114
EventContext::INVALID_CONTEXT_ID
static constexpr ContextID_t INVALID_CONTEXT_ID
Definition
EventContext.h:40
EventContext::m_extension
std::any m_extension
Definition
EventContext.h:142
EventContext::ContextEvt_t
size_t ContextEvt_t
Definition
EventContext.h:38
EventIDBase
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
Definition
EventIDBase.h:65
EventContextFormatter
Custom formatter for EventContext to support std::format and fmt.
Definition
EventContext.h:148
EventContextFormatter::format
auto format(const EventContext &ec, auto &ctx) const
Definition
EventContext.h:149
GaudiKernel
include
GaudiKernel
EventContext.h
Generated on
for The Gaudi Framework by
1.17.0