ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigT1
TrigT1CaloEvent
src
CPCMXTopoData.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// Local include(s):
6
#include "
TrigT1CaloEvent/CPCMXTopoData.h
"
7
8
#include <algorithm>
9
10
namespace
LVL1
{
11
13
const
unsigned
int
CPCMXTopoData::s_maxTOBsPerLink
;
14
const
unsigned
int
CPCMXTopoData::s_maxTOBsPerCpm
;
15
16
19
CPCMXTopoData::CPCMXTopoData
(
int
crate
,
int
cmx
,
bool
overflow
,
const
std::vector< CPTopoTOB >&
tobs
)
20
:
m_crate
(
crate
),
m_cmx
(
cmx
),
m_overflow
(
overflow
),
21
m_cpm_overflow
(false)
22
{
23
24
m_tobWords
.clear();
25
for
(std::vector<CPTopoTOB>::const_iterator it =
tobs
.begin(); it !=
tobs
.end(); ++it) {
26
if (m_tobWords.size() < s_maxTOBsPerLink) m_tobWords.push_back( (*it).tobWord() );
27
else m_overflow = true;
28
}
29
checkCpmOverflow
();
30
}
31
32
34
CPCMXTopoData::CPCMXTopoData
(
int
crate
,
int
cmx
,
bool
overflow
,
const
std::vector< uint32_t >&
tobWords
)
35
:
m_crate
(
crate
),
m_cmx
(
cmx
),
m_overflow
(
overflow
),
36
m_cpm_overflow
(false)
37
{
38
39
m_tobWords
.clear();
40
for
(std::vector<uint32_t>::const_iterator it =
tobWords
.begin(); it !=
tobWords
.end(); ++it) {
41
if (m_tobWords.size() < s_maxTOBsPerLink) m_tobWords.push_back( (*it) );
42
else m_overflow = true;
43
}
44
checkCpmOverflow
();
45
}
46
47
49
CPCMXTopoData::CPCMXTopoData
(
int
crate
,
int
cmx
,
const
std::vector< uint32_t >& roiWords )
50
:
m_crate
(
crate
),
m_cmx
(
cmx
),
51
m_cpm_overflow
(false)
52
{
53
54
m_overflow
=
false
;
55
m_tobWords
.clear();
56
57
for
(std::vector<uint32_t>::const_iterator it = roiWords.begin(); it != roiWords.end(); ++it) {
58
CPTopoTOB tob((*it));
59
if (tob.crate() == m_crate && tob.cmx() == m_cmx) m_tobWords.push_back( tob.tobWord() );
60
}
61
checkCpmOverflow
();
62
}
63
64
66
CPCMXTopoData::CPCMXTopoData
(
int
crate
,
int
cmx
)
67
:
m_crate
(
crate
),
m_cmx
(
cmx
),
m_overflow
( false ),
68
m_cpm_overflow
(false)
69
{
70
m_tobWords
.clear();
71
}
72
73
75
CPCMXTopoData::CPCMXTopoData
()
76
:
m_crate
( 0 ),
m_cmx
( 0 ),
m_overflow
( false ),
77
m_cpm_overflow
(false)
78
79
{
80
m_tobWords
.clear();
81
}
82
83
85
CPCMXTopoData::~CPCMXTopoData
() {
86
}
87
89
void
CPCMXTopoData::addTOB
( uint32_t tobWord ) {
90
if
(
m_tobWords
.size() <
s_maxTOBsPerLink
)
m_tobWords
.push_back(tobWord);
91
else
m_overflow
=
true
;
92
}
93
94
96
void
CPCMXTopoData::addTOB
(
const
CPTopoTOB
tob ) {
97
if
(
m_tobWords
.size() <
s_maxTOBsPerLink
)
98
m_tobWords
.push_back( tob.
tobWord
() );
99
else
m_overflow
=
true
;
100
}
101
102
104
void
CPCMXTopoData::addRoI
( uint32_t roiWord ) {
105
106
CPTopoTOB
tob(roiWord);
107
108
if
(tob.
crate
() ==
m_crate
&& tob.
cmx
() ==
m_cmx
)
m_tobWords
.push_back( tob.
tobWord
() );
109
110
}
111
112
114
void
CPCMXTopoData::setOverflow
(
bool
overflow
) {
115
m_overflow
=
overflow
;
116
}
117
118
120
int
CPCMXTopoData::crate
()
const
{
121
return
m_crate
;
122
}
123
124
125
int
CPCMXTopoData::cmx
()
const
{
126
return
m_cmx
;
127
}
128
129
130
bool
CPCMXTopoData::overflow
()
const
{
131
if
(
m_overflow
||
132
(
m_tobWords
.size() >
s_maxTOBsPerLink
) ||
133
m_cpm_overflow
)
return
true
;
134
return
false
;
135
}
136
137
138
const
std::vector< uint32_t >&
CPCMXTopoData::tobWords
()
const
{
139
return
m_tobWords
;
140
}
141
142
143
void
CPCMXTopoData::tobs
(std::vector< CPTopoTOB >&
tobs
)
const
{
144
tobs
.clear();
145
146
std::vector< uint32_t >::const_iterator it =
m_tobWords
.begin();
147
for
( ; it !=
m_tobWords
.end(); ++it)
148
tobs
.push_back(
CPTopoTOB
(
m_crate
,
m_cmx
, (*it)) );
149
150
return
;
151
}
152
153
CPCMXTopoData
&
CPCMXTopoData::checkCpmOverflow
()
154
{
155
const
size_t
max_cpm_index = 14;
// as indicated in CPTopoTOB::cpm(), but we start from 0, not 1
156
std::vector<uint32_t> counters_tob_per_cpm(max_cpm_index, 0);
157
for
(
const
uint32_t word :
m_tobWords
) {
158
CPTopoTOB
tob(
m_crate
,
m_cmx
, word);
159
const
size_t
iCpm = tob.
cpm
()-1;
160
const
bool
icpmValid = iCpm < counters_tob_per_cpm.size();
161
if
(icpmValid) {
162
counters_tob_per_cpm[iCpm] += 1;
163
}
else
{
164
/*
165
// cout discouraged in athena, but this occurrence is
166
// rare and not deemed to deserve Athena::MsgStreamMember
167
cout<<"CPCMXTopoData::checkCpmOverflow :"
168
<<" invalid iCpm "<<iCpm<<","
169
<<" vector size is "<<counters_tob_per_cpm.size()
170
<<endl;
171
*/
172
}
173
}
174
m_cpm_overflow
= (
m_cpm_overflow
||
175
std::any_of(counters_tob_per_cpm.begin(),
176
counters_tob_per_cpm.end(),
177
[](
const
uint32_t &c) { return (c >= s_maxTOBsPerCpm); }));
178
return
*
this
;
179
}
180
181
182
}
// namespace bracket
CPCMXTopoData.h
LVL1::CPCMXTopoData::s_maxTOBsPerCpm
static const unsigned int s_maxTOBsPerCpm
as specified in BackplaneFormats_v3.xlsx
Definition
CPCMXTopoData.h:72
LVL1::CPCMXTopoData::tobWords
const std::vector< uint32_t > & tobWords() const
Return vector of TOB words.
Definition
CPCMXTopoData.cxx:138
LVL1::CPCMXTopoData::addTOB
void addTOB(const CPTopoTOB tob)
Add TOB to record.
Definition
CPCMXTopoData.cxx:96
LVL1::CPCMXTopoData::m_crate
int m_crate
Data members.
Definition
CPCMXTopoData.h:65
LVL1::CPCMXTopoData::CPCMXTopoData
CPCMXTopoData(int crate, int cmx, bool overflow, const std::vector< uint32_t > &tobWords)
Constructor with Crate, CMX numbers, overflow flag and vector of TOB words.
Definition
CPCMXTopoData.cxx:34
LVL1::CPCMXTopoData::crate
int crate() const
Return crate number (0-3).
Definition
CPCMXTopoData.cxx:120
LVL1::CPCMXTopoData::overflow
bool overflow() const
Return overflow flag.
Definition
CPCMXTopoData.cxx:130
LVL1::CPCMXTopoData::cmx
int cmx() const
Return CMX number (0 = EM, 1 = TAU).
Definition
CPCMXTopoData.cxx:125
LVL1::CPCMXTopoData::m_tobWords
std::vector< uint32_t > m_tobWords
Definition
CPCMXTopoData.h:69
LVL1::CPCMXTopoData::checkCpmOverflow
CPCMXTopoData & checkCpmOverflow()
count whether any transmission CPM -> CMX had too many TOBs
Definition
CPCMXTopoData.cxx:153
LVL1::CPCMXTopoData::CPCMXTopoData
CPCMXTopoData()
Default constructor.
Definition
CPCMXTopoData.cxx:75
LVL1::CPCMXTopoData::addRoI
void addRoI(uint32_t roiWord)
Add TOB from RoI word.
Definition
CPCMXTopoData.cxx:104
LVL1::CPCMXTopoData::m_cpm_overflow
bool m_cpm_overflow
overflow on CPM -> CMX transmission
Definition
CPCMXTopoData.h:68
LVL1::CPCMXTopoData::m_cmx
int m_cmx
Definition
CPCMXTopoData.h:66
LVL1::CPCMXTopoData::~CPCMXTopoData
~CPCMXTopoData()
Destructor.
Definition
CPCMXTopoData.cxx:85
LVL1::CPCMXTopoData::s_maxTOBsPerLink
static const unsigned int s_maxTOBsPerLink
Static constants.
Definition
CPCMXTopoData.h:71
LVL1::CPCMXTopoData::setOverflow
void setOverflow(bool overflow)
Set overflow flag.
Definition
CPCMXTopoData.cxx:114
LVL1::CPCMXTopoData::m_overflow
bool m_overflow
overflow on CMX -> L1Topo transmission
Definition
CPCMXTopoData.h:67
LVL1::CPCMXTopoData::tobs
void tobs(std::vector< CPTopoTOB > &tobs) const
Fill a vector of TOBs.
Definition
CPCMXTopoData.cxx:143
LVL1::CPTopoTOB
CP TOB data for L1Topo.
Definition
CPTopoTOB.h:19
LVL1::CPTopoTOB::tobWord
uint32_t tobWord() const
Return packed TOB word.
Definition
CPTopoTOB.h:133
LVL1::CPTopoTOB::crate
int crate() const
Return crate number (0-3).
Definition
CPTopoTOB.h:98
LVL1::CPTopoTOB::cpm
int cpm() const
Return CPM number (1-14).
Definition
CPTopoTOB.h:108
LVL1::CPTopoTOB::cmx
int cmx() const
Return CMX number (0-1).
Definition
CPTopoTOB.h:103
LVL1
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
Definition
IZdcDataAccess.h:13
Generated on
for ATLAS Offline Software by
1.17.0