ATLAS Offline Software
Loading...
Searching...
No Matches
TrigMonEvent.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
5// C/C++
6#include <algorithm>
7#include <cmath>
8
9// Local
11
12namespace EventBits
13{
14 const uint32_t maskLumi = 0x0000ffff;
15 const uint32_t maskBxid = 0xffff0000;
16 const uint32_t shftBxid = 16;
17
18 static const unsigned TrigMonEventVersion = 2;
19}
20
21using namespace std;
22
23//--------------------------------------------------------------------------------------
24// Helper function for decoding/encoding event content
25//
29
30//--------------------------------------------------------------------------------------
32 :m_event(0),
33 m_lumi(0),
34 m_bxid(0),
35 m_run(0),
36 m_sec(0),
37 m_nsec(0)
38{
39}
40
41//--------------------------------------------------------------------------------------
43{
44 //
45 // Erase all event data
46 //
47 m_event = 0;
48 m_lumi = 0;
49 m_bxid = 0;
50 m_run = 0;
51 m_sec = 0;
52 m_nsec = 0;
53
54 m_word.clear();
55 m_rob.clear();
56 m_roi.clear();
57 m_seq.clear();
58 m_te.clear();
59 m_l1.clear();
60 m_hlt.clear();
61 m_var_key.clear();
62 m_var_val.clear();
63}
64
65//--------------------------------------------------------------------------------------
66void TrigMonEvent::setEventID(uint32_t event,
67 uint32_t lumi,
68 uint32_t bxid,
69 uint32_t run,
70 uint32_t sec,
71 uint32_t nsec)
72{
73 //
74 // Fill EventID data
75 //
76 m_event = event;
77 m_run = run;
78 m_sec = sec;
79 m_nsec = nsec;
80
81 //
82 // Pack luminosity block and bunch crossing id into m_lumi variable
83 //
84 m_lumi = 0;
86 m_lumi |= bxid << EventBits::shftBxid;
87
88 /*
89 cout << "TrigMonEvent::setEventID -"
90 << " lumi=" << lumi << "=" << getLumi()
91 << " bxid=" << bxid << "=" << getBunchId() << endl;
92 */
93}
94
95//--------------------------------------------------------------------------------------
96void TrigMonEvent::setTimer(float timer)
97{
98 //
99 // Convert timer to int with 0.1ms precision and 4.0e5s maximum: stored in m_bxid variable
100 //
101 timer *= 10.0;
102
103 if(timer > 4.0e9) timer = 4.0e9;
104
105 const float timerI = std::floor(timer);
106
107 if(timer - timerI > 0.499) {
108 timer = timerI + 1;
109 }
110 else {
111 timer = timerI;
112 }
113
114 m_bxid = static_cast<uint32_t>(timer);
115}
116
117//--------------------------------------------------------------------------------------
119{
120 //
121 // Read timer stored as m_bxid variable
122 //
123 return static_cast<float>(m_bxid)/10.0;
124}
125
126//--------------------------------------------------------------------------------------
127uint32_t TrigMonEvent::getLumi() const
128{
129 return (m_lumi & EventBits::maskLumi);
130}
131
132//--------------------------------------------------------------------------------------
134{
136}
137
138//--------------------------------------------------------------------------------------
139void TrigMonEvent::addVar(uint32_t key, float var)
140{
141 //
142 // Add new variable
143 //
144 m_var_key.push_back(key);
145 m_var_val.push_back(var);
146}
147
148//--------------------------------------------------------------------------------------
149bool TrigMonEvent::getVar(uint32_t key, float &var) const
150{
151 //
152 // Get float variable
153 //
154 if(m_var_val.size() != m_var_key.size()) return false;
155
156 for(unsigned int i = 0; i < m_var_key.size(); ++i) {
157 if(key == m_var_key[i]) {
158 var = m_var_val[i];
159 return true;
160 }
161 }
162
163 return false;
164}
165
166//--------------------------------------------------------------------------------------
167bool TrigMonEvent::getKey(uint32_t &key, float var) const
168{
169 //
170 // Get int variable
171 //
172 if(m_var_val.size() != m_var_key.size()) return false;
173
174 for(unsigned int i = 0; i < m_var_val.size(); ++i) {
175 if(var == m_var_val[i]) {
176 key = m_var_key[i];
177 return true;
178 }
179 }
180
181 return false;
182}
183
184//--------------------------------------------------------------------------------------
185const std::vector<TrigMonL1Item> TrigMonEvent::getL1Items() const
186{
187 //
188 // Build variables on a fly and return vector by value
189 //
190 std::vector<TrigMonL1Item> l1vec;
191
192 //
193 // Iterate over encoded items
194 //
195 l1vec.reserve(m_l1.size());
196
197 for(unsigned int i = 0; i < m_l1.size(); ++i) {
198 l1vec.push_back(TrigMonL1Item(m_l1[i]));
199 }
200
201 return l1vec;
202}
203
204//--------------------------------------------------------------------------------------
205const std::vector<TrigMonChain> TrigMonEvent::getChains() const
206{
207 //
208 // Build variables on a fly and return vector by value
209 //
210 std::vector<TrigMonChain> chvec;
211
212 //
213 // Iterate over chains
214 //
215 chvec.reserve(m_hlt.size());
216
217 for(unsigned int i = 0; i < m_hlt.size(); ++i) {
218 chvec.push_back(TrigMonChain(m_hlt[i]));
219 }
220
221 return chvec;
222}
223
224//--------------------------------------------------------------------------------------
225const std::vector<TrigMonVar> TrigMonEvent::getVar() const
226{
227 //
228 // Build variables on a fly and return vector by value
229 //
230 std::vector<TrigMonVar> var;
231
232 if(m_var_key.size() == m_var_val.size()) {
233 //
234 // Iterate over keys abd values
235 //
236 var.reserve(m_var_key.size());
237
238 for(unsigned int i = 0; i < m_var_key.size(); ++i) {
239 var.push_back(TrigMonVar(m_var_key[i], m_var_val[i]));
240 }
241 }
242
243 return var;
244}
unsigned getTrigMonEventVersion()
Summary of chain decisions.
std::vector< uint16_t > m_l1
uint32_t m_bxid
uint32_t getLumi() const
void setEventID(uint32_t event, uint32_t lumi, uint32_t bxid, uint32_t run, uint32_t sec, uint32_t nsec)
bool getKey(uint32_t &key, float var) const
std::vector< TrigMonSeq > m_seq
void setTimer(float timer)
const std::vector< TrigMonChain > getChains() const
std::vector< uint32_t > m_var_key
uint32_t m_sec
uint32_t m_lumi
void addVar(uint32_t key, float var)
std::vector< uint32_t > m_hlt
std::vector< TrigMonROB > m_rob
std::vector< uint32_t > m_word
std::vector< float > m_var_val
std::vector< TrigMonTE > m_te
uint32_t m_run
float getTimer() const
uint32_t getBunchId() const
uint32_t m_nsec
const std::vector< TrigMonL1Item > getL1Items() const
const std::vector< TrigMonVar > getVar() const
uint32_t m_event
std::vector< TrigMonRoi > m_roi
Encoded L1 decision for one item.
const uint32_t maskLumi
const uint32_t shftBxid
const uint32_t maskBxid
static const unsigned TrigMonEventVersion
Definition run.py:1
STL namespace.