ATLAS Offline Software
Loading...
Searching...
No Matches
EventInfo.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3 */
4
13
14
15
16#include "EventInfo/EventInfo.h"
17#include "EventInfo/EventID.h"
18#include "EventInfo/EventType.h"
20
21#include <memory>
22
24 : m_event_ID(std::make_unique<EventID>(0, 0)),
25 m_event_type(std::make_unique<EventType>()),
26 m_trigger_info(std::make_unique<TriggerInfo>()) {}
27
31
32EventInfo::EventInfo(std::unique_ptr<EventID> id,
33 std::unique_ptr<EventType> type)
34 : m_event_ID(std::move(id)),
35 m_event_type(std::move(type)),
36 m_trigger_info(std::make_unique<TriggerInfo>()) {}
37
42
43EventInfo::EventInfo(std::unique_ptr<EventID> id,
44 std::unique_ptr<EventType> type,
45 std::unique_ptr<TriggerInfo> trig_info)
46 : m_event_ID(std::move(id)),
47 m_event_type(std::move(type)),
48 m_trigger_info(std::move(trig_info)) {}
49
51 : m_event_ID(e.m_event_ID ? std::make_unique<EventID>(*(e.m_event_ID))
52 : std::make_unique<EventID>(0, 0)),
54 ? std::make_unique<EventType>(*(e.m_event_type))
55 : std::make_unique<EventType>()),
57 ? std::make_unique<TriggerInfo>(*(e.m_trigger_info))
58 : std::make_unique<TriggerInfo>()),
60
61EventInfo& EventInfo::operator = (const EventInfo& e) {
62 if (this != &e) {
63 setEventID(e.m_event_ID ? std::make_unique<EventID>(*(e.m_event_ID))
64 : std::make_unique<EventID>(0, 0));
65
66 setEventType(e.m_event_type ? std::make_unique<EventType>(*(e.m_event_type))
67 : std::make_unique<EventType>());
68
69 setTriggerInfo(e.m_trigger_info
70 ? std::make_unique<TriggerInfo>(*(e.m_trigger_info))
71 : std::make_unique<TriggerInfo>());
72
73 m_event_flags = e.m_event_flags;
74 }
75 return *this;
76}
77
78// Needs to be defined here as unique_ptr's deleter needs the pointee's type to
79// be a complete type when called
80EventInfo::~EventInfo() = default;
81EventInfo::EventInfo(EventInfo&& e) noexcept = default;
82EventInfo& EventInfo::operator=(EventInfo&& e) noexcept = default;
83
85 m_event_ID.reset(pid);
86}
87
88void EventInfo::setEventID(std::unique_ptr<EventID> pid) {
89 m_event_ID = std::move(pid);
90}
91
93 m_event_type.reset(pType);
94}
95
96void EventInfo::setEventType(std::unique_ptr<EventType> pType) {
97 m_event_type = std::move(pType);
98}
99
103
104void EventInfo::setTriggerInfo(std::unique_ptr<TriggerInfo> pTrig) {
105 m_trigger_info = std::move(pTrig);
106}
107
108bool
109EventInfo::setEventFlags(EventFlagSubDet subDet, unsigned int flags) {
110 // If event_flags has been cleared on input, reset size to just
111 // before lumi
112 if (m_event_flags.size() < (unsigned int) Lumi) m_event_flags.resize(Lumi, 0);
113 if ((unsigned) subDet < m_event_flags.size()) {
114 // Combine potentially-existing error states with new flags
115 m_event_flags[subDet] = (EF_ERROR_BITS & m_event_flags[subDet]) | (EF_BITS & flags);
116 return(true);
117 }
118 return(false);
119}
120
121bool
122EventInfo::setEventFlagBit(EventFlagSubDet subDet, unsigned char bit, bool set) {
123 // If event_flags has been cleared on input, reset size to just
124 // before lumi
125 if (m_event_flags.size() < (unsigned int) Lumi) m_event_flags.resize(Lumi, 0);
126 if ((unsigned) subDet < m_event_flags.size() && bit < EF_ERROR_SHIFT) {
127 if (set) {
128 m_event_flags[subDet] = (EF_ERROR_BITS & m_event_flags[subDet]) |
129 ((1u << bit) | m_event_flags[subDet]);
130 } else {
131 unsigned int mask = EF_BITS ^ (1u << bit);
132 m_event_flags[subDet] = (EF_ERROR_BITS & m_event_flags[subDet]) |
133 (mask & m_event_flags[subDet]);
134 }
135 return(true);
136 }
137 return(false);
138}
139
140bool
142 // If event_flags has been cleared on input, reset size to just
143 // before lumi
144 if (m_event_flags.size() < (unsigned int) Lumi) m_event_flags.resize(Lumi, 0);
145 // check that subdet index is in range and that we have a valid error state
146 if ((unsigned) subDet < m_event_flags.size() &&
148 // Combine potentially-existing flags with new error states
149 m_event_flags[subDet] =
150 (unsigned int) ((EF_BITS & m_event_flags[subDet]) | ((unsigned int) errorState << EF_ERROR_SHIFT));
151 return(true);
152 }
153 return(false);
154}
155
157void
159 // pack interaction into 16 bits saving the precision to the 0.01
160 // level
161 unsigned int ivalue = (unsigned int) (interactions * 100.f);
162
163 if (ivalue > ACTUAL_INTERACTS_BITS) {
164 std::cout <<
165 "EventInfo::setActualInteractionsPerCrossing *** ERROR ***: trying to store too large of value: interactions/ivalue/max value: "
166 << interactions << " " << ivalue << " " << ACTUAL_INTERACTS_BITS << std::endl;
167 }
168 ivalue &= ACTUAL_INTERACTS_BITS;
169 // If event_flags has been cleared on input, reset size AND INCLUDE lumi
170 if (m_event_flags.size() < nDets) m_event_flags.resize(nDets, 0);
171 m_event_flags[Lumi] |= ivalue; // store lower 16 bits
172}
173
174void
176 // pack interaction into 16 bits saving the precision to the 0.01
177 // level
178 unsigned int ivalue = (unsigned int) (interactions * 100.f);
179
180 if (ivalue > ACTUAL_INTERACTS_BITS) {
181 std::cout <<
182 "EventInfo::setAverageInteractionsPerCrossing *** ERROR ***: trying to store too large of value: interactions/ivalue/max value: "
183 << interactions << " " << ivalue << " " << ACTUAL_INTERACTS_BITS << std::endl;
184 }
185 ivalue = (ivalue << AVE_INTERACTS_SHIFT) & AVE_INTERACTS_BITS;
186 // If event_flags has been cleared on input, reset size AND INCLUDE lumi
187 if (m_event_flags.size() < nDets) m_event_flags.resize(nDets, 0);
188 m_event_flags[Lumi] |= ivalue; // store upper 16 bits
189}
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
This class provides general information about an event.
This class contains trigger related information.
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
Definition EventID.h:35
void setEventID(owner< EventID * > pid)
Definition EventInfo.cxx:84
bool setEventFlagBit(EventFlagSubDet subDet, unsigned char bit, bool set=true)
Set a bit for an event flag of a particular sub detector.
void setEventType(owner< EventType * >)
Definition EventInfo.cxx:92
std::unique_ptr< TriggerInfo > m_trigger_info
void setTriggerInfo(owner< TriggerInfo * > pTrig)
Add TriggerInfo to existing object.
EventFlagErrorState errorState(EventFlagSubDet subDet) const
return error state for a particular sub-detector
bool setEventFlags(EventFlagSubDet subDet, unsigned int flags)
Set event flag for a particular sub detector - maximun size is 28 bits.
bool setErrorState(EventFlagSubDet subDet, EventFlagErrorState errorState)
Set error state flag for a particular sub detector.
void setActualInteractionsPerCrossing(float interactions)
Setting the number of interactions per crossing:
std::unique_ptr< EventType > m_event_type
std::unique_ptr< EventID > m_event_ID
std::vector< unsigned int > m_event_flags
void setAverageInteractionsPerCrossing(float interactions)
average interactions per crossing for all BCIDs - for out-of-time pile-up
This class represents the "type of event" where the type is given by one or more "characteristics".
Definition EventType.h:92
This class contains trigger related information.
Definition TriggerInfo.h:77
STL class.
STL class.
STL namespace.