ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigT1
L1Topo
L1TopoRDO
src
L1Topo/L1TopoRDO/src/L1TopoResult.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
L1TopoRDO/L1TopoResult.h
"
6
#include "
L1TopoRDO/Helpers.h
"
7
8
9
namespace
L1Topo
{
10
11
L1TopoResult::L1TopoResult
():
12
m_status
(true)
13
{}
14
15
L1TopoResult::L1TopoResult
(
const
DataVector<xAOD::L1TopoRawData>
&container):
16
m_status
(true)
17
{
18
this->
decode
(container);
19
}
20
21
L1TopoResult::~L1TopoResult
()
22
{}
23
24
void
L1TopoResult::decode
(
const
DataVector<xAOD::L1TopoRawData>
&container)
25
{
26
m_overflows
.reset();
27
m_decisions
.reset();
28
m_l1topoROD
.clear();
29
m_l1topoFPGA
.clear();
30
for
(
const
xAOD::L1TopoRawData
* l1topo_raw : container) {
31
const
std::vector<uint32_t>& dataWords = l1topo_raw->dataWords();
32
size_t
nWords = dataWords.size();
33
if
(nWords!=50) {
34
m_status
=
false
;
35
return
;
36
}
else
{
37
m_status
=
true
;
38
}
39
uint32_t rodTrailer2 = dataWords[--nWords];
40
uint32_t rodTrailer1 = dataWords[--nWords];
41
42
m_l1topoROD
.emplace_back(
new
L1Topo::L1TopoROD
(rodTrailer1, rodTrailer2));
43
44
45
for
(
size_t
i = nWords; i --> 0;) {
46
if
((i+1)%8==0) {
47
uint32_t fpgaTrailer2 = dataWords[i];
48
uint32_t fpgaTrailer1 = dataWords[--i];
49
50
m_l1topoFPGA
.emplace_back(
new
L1Topo::L1TopoFPGA
(fpgaTrailer1, fpgaTrailer2));
51
52
}
53
else
{
54
if
(
m_l1topoFPGA
.back()->topoNumber() != 1) {
55
i-=3;
56
uint32_t overflowWord = dataWords[--i];
57
uint32_t triggerWord = dataWords[--i];
58
for
(
size_t
iBit=0;iBit<32;iBit++) {
59
uint32_t topo =
m_l1topoFPGA
.back()->topoNumber();
60
uint32_t fpga =
m_l1topoFPGA
.back()->fpgaNumber();
61
unsigned
int
index
=
L1Topo::triggerBitIndexPhase1
(topo, fpga, iBit);
62
m_overflows
[
index
] = (overflowWord>>iBit)&1;
63
m_decisions
[
index
] = (triggerWord>>iBit)&1;
64
}
65
}
// Decision & overflow
66
else
{
67
if
(
m_l1topoFPGA
.back()->fpgaNumber() == 1) {
68
m_topo1opt3
.reset();
m_topo1opt2
.reset();
69
for
(
size_t
k=0;k<3;k++) {
70
uint32_t word = dataWords[i];
71
for
(
size_t
iBit=0;iBit<32;iBit++) {
72
size_t
index
= iBit+32*(2-k);
73
m_topo1opt3
[
index
] = (word>>iBit)&1;
74
}
75
i--;
76
}
77
for
(
size_t
k=0;k<3;k++) {
78
uint32_t word = dataWords[i];
79
for
(
size_t
iBit=0;iBit<32;iBit++) {
80
size_t
index
= iBit+32*(2-k);
81
m_topo1opt2
[
index
] = (word>>iBit)&1;
82
}
83
i--;
84
}
85
i++;
86
}
// multiplicity 2-3
87
else
{
88
m_topo1opt1
.reset();
m_topo1opt0
.reset();
89
for
(
size_t
k=0;k<3;k++) {
90
uint32_t word = dataWords[i];
91
for
(
size_t
iBit=0;iBit<32;iBit++) {
92
size_t
index
= iBit+32*(2-k);
93
m_topo1opt1
[
index
] = (word>>iBit)&1;
94
}
95
i--;
96
}
97
for
(
size_t
k=0;k<3;k++) {
98
uint32_t word = dataWords[i];
99
for
(
size_t
iBit=0;iBit<32;iBit++) {
100
size_t
index
= iBit+32*(2-k);
101
m_topo1opt0
[
index
] = (word>>iBit)&1;
102
}
103
i--;
104
}
105
i++;
106
107
}
// multiplicity 0-1
108
109
}
// end of multiplicity
110
}
// end of decoding
111
}
// end of nwords
112
}
// end of container
113
114
}
115
116
}
// namespace L1Topo
L1TopoResult.h
Helpers.h
DataVector
Derived DataVector<T>.
Definition
DataVector.h:795
L1Topo::L1TopoFPGA
Definition
L1TopoFPGA.h:14
L1Topo::L1TopoROD
Definition
L1TopoROD.h:14
L1Topo::L1TopoResult::m_topo1opt3
std::bitset< s_nTopoOutputs > m_topo1opt3
Definition
L1Topo/L1TopoRDO/L1TopoRDO/L1TopoResult.h:67
L1Topo::L1TopoResult::m_decisions
std::bitset< s_nTopoOutputs > m_decisions
Definition
L1Topo/L1TopoRDO/L1TopoRDO/L1TopoResult.h:62
L1Topo::L1TopoResult::m_topo1opt0
std::bitset< s_nTopoOutputs > m_topo1opt0
Definition
L1Topo/L1TopoRDO/L1TopoRDO/L1TopoResult.h:64
L1Topo::L1TopoResult::m_l1topoFPGA
std::vector< std::shared_ptr< L1Topo::L1TopoFPGA > > m_l1topoFPGA
Definition
L1Topo/L1TopoRDO/L1TopoRDO/L1TopoResult.h:61
L1Topo::L1TopoResult::m_topo1opt2
std::bitset< s_nTopoOutputs > m_topo1opt2
Definition
L1Topo/L1TopoRDO/L1TopoRDO/L1TopoResult.h:66
L1Topo::L1TopoResult::~L1TopoResult
~L1TopoResult()
Definition
L1Topo/L1TopoRDO/src/L1TopoResult.cxx:21
L1Topo::L1TopoResult::m_l1topoROD
std::vector< std::shared_ptr< L1Topo::L1TopoROD > > m_l1topoROD
Definition
L1Topo/L1TopoRDO/L1TopoRDO/L1TopoResult.h:60
L1Topo::L1TopoResult::decode
void decode(const DataVector< xAOD::L1TopoRawData > &container)
method used by constructor to decode xAOD
Definition
L1Topo/L1TopoRDO/src/L1TopoResult.cxx:24
L1Topo::L1TopoResult::m_overflows
std::bitset< s_nTopoOutputs > m_overflows
Definition
L1Topo/L1TopoRDO/L1TopoRDO/L1TopoResult.h:63
L1Topo::L1TopoResult::L1TopoResult
L1TopoResult()
Definition
L1Topo/L1TopoRDO/src/L1TopoResult.cxx:11
L1Topo::L1TopoResult::m_topo1opt1
std::bitset< s_nTopoOutputs > m_topo1opt1
Definition
L1Topo/L1TopoRDO/L1TopoRDO/L1TopoResult.h:65
L1Topo::L1TopoResult::m_status
bool m_status
Definition
L1Topo/L1TopoRDO/L1TopoRDO/L1TopoResult.h:69
L1Topo
Definition
BlockTypes.h:11
L1Topo::triggerBitIndexPhase1
unsigned int triggerBitIndexPhase1(uint32_t topo, uint32_t fpga, size_t bitIdx)
Definition
Trigger/TrigT1/L1Topo/L1TopoRDO/src/Helpers.cxx:149
index
Definition
index.py:1
xAOD::L1TopoRawData
L1TopoRawData_v1 L1TopoRawData
Define the latest version of the L1TopoRawData class.
Definition
L1TopoRawData.h:14
Generated on
for ATLAS Offline Software by
1.17.0