ATLAS Offline Software
Loading...
Searching...
No Matches
TrigMonTE.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 <cassert>
7#include <iostream>
8#include <sstream>
9#include <set>
10
13
14namespace SeqBits
15{
16 const uint32_t maskLow16 = 0x0000ffff; // mask 2 type bits
17 const uint32_t maskType = 0x00c00000; // mask 2 type bits
18
19 const uint32_t shiftType = 22; // shift 2 type bits
20}
21
22//--------------------------------------------------------------------------------------
24 :m_id(0),
25 m_encoded(0x0)
26{
27}
28
29//--------------------------------------------------------------------------------------
30TrigMonTE::TrigMonTE(uint32_t id, uint16_t index)
31 :m_id(id),
33{
34}
35
36//--------------------------------------------------------------------------------------
38{
39 //
40 // Store variable as int and float, reserve 0-9 keys
41 //
42 if(var.getKey() > 9) {
43 m_var_key.push_back(var.getKey());
44 m_var_val.push_back(var.getData());
45 }
46}
47
48//--------------------------------------------------------------------------------------
50{
51 //
52 // Set trigger element type: use 2 bits
53 //
55}
56
57//--------------------------------------------------------------------------------------
59{
60 //
61 // Set state bits directly
62 //
63 m_encoded |= state;
64}
65
66//--------------------------------------------------------------------------------------
68{
69 //
70 // Return trigger element type
71 //
72 const unsigned int val = (m_encoded & SeqBits::maskType) >> SeqBits::shiftType;
73
74 switch (val) {
75 case 0: return kELEM;
76 case 1: return kINIT;
77 case 2: return kROI;
78 case 3: return kL1TH;
79 default: break;
80 }
81 REPORT_MESSAGE_WITH_CONTEXT(MSG::ERROR, "TrigMonTE")
82 << "getType error! Bad value";
83 return kELEM;
84}
85
86//--------------------------------------------------------------------------------------
87uint16_t TrigMonTE::getIndex() const
88{
89 //
90 // Return index - mask low 16 bits
91 //
93}
94
95//--------------------------------------------------------------------------------------
96const std::vector<TrigMonVar> TrigMonTE::getVar() const
97{
98 //
99 // Build variables on a fly and return vector by value
100 //
101 std::vector<TrigMonVar> var;
102
103 if(m_var_key.size() == m_var_val.size()) {
104 //
105 // Iterate over keys abd values
106 //
107 var.reserve(m_var_key.size());
108
109 for(unsigned int i = 0; i < m_var_key.size(); ++i) {
110 var.push_back(TrigMonVar(m_var_key[i], m_var_val[i]));
111 }
112 }
113
114 return var;
115}
116
117//--------------------------------------------------------------------------------------
118void TrigMonTE::print(std::ostream &os)
119{
120 os << str(*this) << std::endl;
121}
122
123//--------------------------------------------------------------------------------------
124std::string str(const TrigMonTE &o)
125{
126 std::stringstream s;
127
128 s << "TrigMonTE id=" << o.getId() << " status=";
129 if (o.getType() == TrigMonTE::kINIT) s << "init";
130 else if(o.getType() == TrigMonTE::kROI) s << "roi ";
131 else if(o.getType() == TrigMonTE::kL1TH) s << "L1th";
132 else if(o.getType() == TrigMonTE::kELEM) s << "elem";
133 else s << "bad ";
134 s << " index=" << o.getIndex();
135
136 s << std::endl << " children " << o.getChildIndex().size() << ": ";
137 for(unsigned int i = 0; i < o.getChildIndex().size(); ++i) s << o.getChildIndex()[i] << " ";
138 s << std::endl;
139
140 s << std::endl << " parents " << o.getParentIndex().size() << ": ";
141 for(unsigned int i = 0; i < o.getParentIndex().size(); ++i) s << o.getParentIndex()[i] << " ";
142 s << std::endl;
143
144 s << std::endl << " features " << o.getClid().size() << ": ";
145 for(unsigned int i = 0; i < o.getClid().size(); ++i) s << o.getClid()[i] << " ";
146 s << std::endl;
147
148 return s.str();
149}
150
151//--------------------------------------------------------------------------------------
152bool Equal(const TrigMonTE &lhs, const TrigMonTE &rhs)
153{
154 //
155 // Compare TriggerElements by id and roi parents
156 //
157
158 // 1st: compare types
159 if(lhs.getType() != rhs.getType()) return false;
160
161 // 2nd: initial node?
162 if(lhs.getType() == TrigMonTE::kINIT) return true;
163
164 // 3rd: RoI or ELEM node?
165 if(lhs.getId() != rhs.getId()) return false;
166
167 const std::set<uint8_t> lhs_set(lhs.getRoiId().begin(), lhs.getRoiId().end());
168 const std::set<uint8_t> rhs_set(rhs.getRoiId().begin(), rhs.getRoiId().end());
169
170 return lhs_set == rhs_set;
171}
Helpers for checking error return status codes and reporting errors.
#define REPORT_MESSAGE_WITH_CONTEXT(LVL, CONTEXT_NAME)
Report a message, with an explicitly specified context name.
bool Equal(const TrigMonTE &lhs, const TrigMonTE &rhs)
Summary of one trigger element from navigation tree.
Definition TrigMonTE.h:28
void setType(Type type)
Definition TrigMonTE.cxx:49
void addVar(const TrigMonVar &var)
Definition TrigMonTE.cxx:37
const std::vector< uint8_t > & getRoiId() const
Definition TrigMonTE.h:78
const std::vector< TrigMonVar > getVar() const
Definition TrigMonTE.cxx:96
const std::vector< uint16_t > & getParentIndex() const
Definition TrigMonTE.h:76
uint32_t m_id
Definition TrigMonTE.h:90
void addState(State state)
Definition TrigMonTE.cxx:58
uint16_t getIndex() const
Definition TrigMonTE.cxx:87
const std::vector< uint32_t > & getClid() const
Definition TrigMonTE.h:79
uint32_t m_encoded
Definition TrigMonTE.h:91
void print(std::ostream &os=std::cout)
uint32_t getId() const
Definition TrigMonTE.h:64
const std::vector< uint16_t > & getChildIndex() const
Definition TrigMonTE.h:75
std::vector< float > m_var_val
Definition TrigMonTE.h:99
Type getType() const
Definition TrigMonTE.cxx:67
std::vector< uint16_t > m_var_key
Definition TrigMonTE.h:98
const uint32_t maskLow16
const uint32_t maskType
Definition TrigMonTE.cxx:17
const uint32_t shiftType
Definition TrigMonTE.cxx:19
Definition index.py:1
setEventNumber uint32_t