ATLAS Offline Software
Loading...
Searching...
No Matches
EventInfo.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4
13
14#include <memory>
15
16#include "EventInfo/EventInfo.h"
17#include "EventInfo/EventID.h"
18#include "EventInfo/EventType.h"
20
22 : m_event_ID(std::make_unique<EventID>(0, 0)),
23 m_event_type(std::make_unique<EventType>()),
24 m_trigger_info(std::make_unique<TriggerInfo>()) {}
25
29
30EventInfo::EventInfo(std::unique_ptr<EventID> id,
31 std::unique_ptr<EventType> type)
32 : m_event_ID(std::move(id)),
33 m_event_type(std::move(type)),
34 m_trigger_info(std::make_unique<TriggerInfo>()) {}
35
40
41EventInfo::EventInfo(std::unique_ptr<EventID> id,
42 std::unique_ptr<EventType> type,
43 std::unique_ptr<TriggerInfo> trig_info)
44 : m_event_ID(std::move(id)),
45 m_event_type(std::move(type)),
46 m_trigger_info(std::move(trig_info)) {}
47
49 : m_event_ID(e.m_event_ID ? std::make_unique<EventID>(*(e.m_event_ID))
50 : std::make_unique<EventID>(0, 0)),
52 ? std::make_unique<EventType>(*(e.m_event_type))
53 : std::make_unique<EventType>()),
55 ? std::make_unique<TriggerInfo>(*(e.m_trigger_info))
56 : std::make_unique<TriggerInfo>()),
58
59EventInfo& EventInfo::operator = (const EventInfo& e) {
60 if (this != &e) {
61 setEventID(e.m_event_ID ? std::make_unique<EventID>(*(e.m_event_ID))
62 : std::make_unique<EventID>(0, 0));
63
64 setEventType(e.m_event_type ? std::make_unique<EventType>(*(e.m_event_type))
65 : std::make_unique<EventType>());
66
67 setTriggerInfo(e.m_trigger_info
68 ? std::make_unique<TriggerInfo>(*(e.m_trigger_info))
69 : std::make_unique<TriggerInfo>());
70
71 m_event_flags = e.m_event_flags;
72 }
73 return *this;
74}
75
76// Needs to be defined here as unique_ptr's deleter needs the pointee's type to
77// be a complete type when called
78EventInfo::~EventInfo() = default;
79EventInfo::EventInfo(EventInfo&& e) noexcept = default;
80EventInfo& EventInfo::operator=(EventInfo&& e) noexcept = default;
81
83 m_event_ID.reset(pid);
84}
85
86void EventInfo::setEventID(std::unique_ptr<EventID> pid) {
87 m_event_ID = std::move(pid);
88}
89
91 m_event_type.reset(pType);
92}
93
94void EventInfo::setEventType(std::unique_ptr<EventType> pType) {
95 m_event_type = std::move(pType);
96}
97
101
102void EventInfo::setTriggerInfo(std::unique_ptr<TriggerInfo> pTrig) {
103 m_trigger_info = std::move(pTrig);
104}
105
106bool
108 // If event_flags has been cleared on input, reset size to just
109 // before lumi
110 if (m_event_flags.size() < (unsigned int) Lumi) m_event_flags.resize(Lumi, 0);
111 if ((unsigned) subDet < m_event_flags.size()) {
112 // Combine potentially-existing error states with new flags
113 m_event_flags[subDet] = (EF_ERROR_BITS & m_event_flags[subDet]) | (EF_BITS & flags);
114 return(true);
115 }
116 return(false);
117}
118
119bool
120EventInfo::setEventFlagBit(EventFlagSubDet subDet, unsigned char bit, bool set) {
121 // If event_flags has been cleared on input, reset size to just
122 // before lumi
123 if (m_event_flags.size() < (unsigned int) Lumi) m_event_flags.resize(Lumi, 0);
124 if ((unsigned) subDet < m_event_flags.size() && bit < EF_ERROR_SHIFT) {
125 if (set) {
126 m_event_flags[subDet] = (EF_ERROR_BITS & m_event_flags[subDet]) |
127 ((1u << bit) | m_event_flags[subDet]);
128 } else {
129 unsigned int mask = EF_BITS ^ (1u << bit);
130 m_event_flags[subDet] = (EF_ERROR_BITS & m_event_flags[subDet]) |
131 (mask & m_event_flags[subDet]);
132 }
133 return(true);
134 }
135 return(false);
136}
137
138bool
140 // If event_flags has been cleared on input, reset size to just
141 // before lumi
142 if (m_event_flags.size() < (unsigned int) Lumi) m_event_flags.resize(Lumi, 0);
143 // check that subdet index is in range and that we have a valid error state
144 if ((unsigned) subDet < m_event_flags.size() &&
146 // Combine potentially-existing flags with new error states
147 m_event_flags[subDet] =
148 (unsigned int) ((EF_BITS & m_event_flags[subDet]) | ((unsigned int) errorState << EF_ERROR_SHIFT));
149 return(true);
150 }
151 return(false);
152}
153
155void
157 // pack interaction into 16 bits saving the precision to the 0.01
158 // level
159 unsigned int ivalue = (unsigned int) (interactions * 100.f);
160
161 if (ivalue > ACTUAL_INTERACTS_BITS) {
162 std::cout <<
163 "EventInfo::setActualInteractionsPerCrossing *** ERROR ***: trying to store too large of value: interactions/ivalue/max value: "
164 << interactions << " " << ivalue << " " << ACTUAL_INTERACTS_BITS << std::endl;
165 }
166 ivalue &= ACTUAL_INTERACTS_BITS;
167 // If event_flags has been cleared on input, reset size AND INCLUDE lumi
168 if (m_event_flags.size() < nDets) m_event_flags.resize(nDets, 0);
169 m_event_flags[Lumi] |= ivalue; // store lower 16 bits
170}
171
172void
174 // pack interaction into 16 bits saving the precision to the 0.01
175 // level
176 unsigned int ivalue = (unsigned int) (interactions * 100.f);
177
178 if (ivalue > ACTUAL_INTERACTS_BITS) {
179 std::cout <<
180 "EventInfo::setAverageInteractionsPerCrossing *** ERROR ***: trying to store too large of value: interactions/ivalue/max value: "
181 << interactions << " " << ivalue << " " << ACTUAL_INTERACTS_BITS << std::endl;
182 }
183 ivalue = (ivalue << AVE_INTERACTS_SHIFT) & AVE_INTERACTS_BITS;
184 // If event_flags has been cleared on input, reset size AND INCLUDE lumi
185 if (m_event_flags.size() < nDets) m_event_flags.resize(nDets, 0);
186 m_event_flags[Lumi] |= ivalue; // store upper 16 bits
187}
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:82
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:90
std::unique_ptr< TriggerInfo > m_trigger_info
void setTriggerInfo(owner< TriggerInfo * > pTrig)
Add TriggerInfo to existing object.
Definition EventInfo.cxx:98
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.