ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigT1
TrigT1CaloByteStream
src
CpmRoiSubBlockV2.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
6
#include "
TrigT1CaloEvent/CPMTobRoI.h
"
7
8
#include "
CpmRoiSubBlockV2.h
"
9
10
namespace
LVL1BS
{
11
12
// Constant definitions
13
14
const
int
CpmRoiSubBlockV2::s_wordIdVal
;
15
16
const
int
CpmRoiSubBlockV2::s_glinkPins
;
17
const
int
CpmRoiSubBlockV2::s_energyLen
;
18
const
int
CpmRoiSubBlockV2::s_isolLen
;
19
const
int
CpmRoiSubBlockV2::s_locationLen
;
20
const
int
CpmRoiSubBlockV2::s_bunchCrossingBits
;
21
22
23
CpmRoiSubBlockV2::CpmRoiSubBlockV2
()
24
{
25
}
26
27
CpmRoiSubBlockV2::~CpmRoiSubBlockV2
()
28
{
29
}
30
31
// Clear all data
32
33
void
CpmRoiSubBlockV2::clear
()
34
{
35
L1CaloSubBlock::clear
();
36
m_roiData
.clear();
37
}
38
39
// Store header
40
41
void
CpmRoiSubBlockV2::setRoiHeader
(
const
int
version
,
const
int
crate
,
42
const
int
module
)
43
{
44
setHeader
(
s_wordIdVal
,
version
,
NEUTRAL
, 0,
crate
,
module
, 0, 1);
45
}
46
47
// Store RoI
48
49
void
CpmRoiSubBlockV2::fillRoi
(
const
LVL1::CPMTobRoI
roi
)
50
{
51
const
LVL1::CPMTobRoI
roiTemp(
crate
(),
module
(), 0, 0, 0, 0, 0);
52
if
(
roi
.crate() == roiTemp.
crate
() &&
roi
.cpm() == roiTemp.
cpm
()) {
53
m_roiData
.resize(2*
s_glinkPins
);
54
const
int
pin = (
roi
.chip() << 1) |
55
((
roi
.location() >>
s_locationLen
) & 0x1);
56
const
int
type
=
roi
.type();
// em or tau (0/1)
57
m_roiData
[2*pin+
type
] =
roi
;
58
}
59
}
60
61
// Return RoI for given chip and location (left/right) and type (em/tau)
62
63
LVL1::CPMTobRoI
CpmRoiSubBlockV2::roi
(
const
int
chip,
const
int
loc,
64
const
int
type
)
const
65
{
66
const
int
pin = (chip << 1) | (loc & 0x1);
67
if
(pin <
s_glinkPins
&& !
m_roiData
.empty())
return
m_roiData
[2*pin+
type
];
68
else
return
LVL1::CPMTobRoI
(0);
69
}
70
71
// Packing/Unpacking routines
72
73
bool
CpmRoiSubBlockV2::pack
()
74
{
75
bool
rc
=
false
;
76
switch
(
version
()) {
77
case
2:
// <<== CHECK
78
switch
(
format
()) {
79
case
NEUTRAL
:
80
rc
=
packNeutral
();
81
break
;
82
default
:
83
break
;
84
}
85
break
;
86
default
:
87
break
;
88
}
89
return
rc
;
90
}
91
92
bool
CpmRoiSubBlockV2::unpack
()
93
{
94
bool
rc
=
false
;
95
switch
(
version
()) {
96
case
2:
// <<== CHECK
97
switch
(
format
()) {
98
case
NEUTRAL
:
99
rc
=
unpackNeutral
();
100
break
;
101
default
:
102
setUnpackErrorCode
(
UNPACK_FORMAT
);
103
break
;
104
}
105
break
;
106
default
:
107
setUnpackErrorCode
(
UNPACK_VERSION
);
108
break
;
109
}
110
return
rc
;
111
}
112
113
// Pack neutral data
114
115
bool
CpmRoiSubBlockV2::packNeutral
()
116
{
117
m_roiData
.resize(2*
s_glinkPins
);
118
for
(
int
pin = 0; pin <
s_glinkPins
; ++pin) {
119
// RoI data
120
const
int
idx = 2*pin;
121
const
LVL1::CPMTobRoI
& roiEm(
m_roiData
[idx]);
122
const
LVL1::CPMTobRoI
& roiTau(
m_roiData
[idx+1]);
123
packerNeutral
(pin, roiEm.
energy
(),
s_energyLen
);
124
packerNeutral
(pin, roiEm.
isolation
(),
s_isolLen
);
125
packerNeutral
(pin, 0, 1);
//parity
126
packerNeutral
(pin, roiTau.
energy
(),
s_energyLen
);
127
packerNeutral
(pin, roiTau.
isolation
(),
s_isolLen
);
128
packerNeutral
(pin, 0, 1);
//parity
129
packerNeutral
(pin, 0, 1);
//error
130
packerNeutral
(pin, (roiEm.
location
()|roiTau.
location
()),
s_locationLen
);
131
// Bunch Crossing number
132
if
(pin <
s_bunchCrossingBits
) {
133
packerNeutral
(pin,
bunchCrossing
() >> pin, 1);
134
}
else
packerNeutral
(pin, 0, 1);
135
// G-Link parity
136
packerNeutralParity
(pin);
137
}
138
return
true
;
139
}
140
141
// Unpack neutral data
142
143
bool
CpmRoiSubBlockV2::unpackNeutral
()
144
{
145
m_roiData
.resize(2*
s_glinkPins
);
146
int
bunchCrossing
= 0;
147
for
(
int
pin = 0; pin <
s_glinkPins
; ++pin) {
148
// RoI data
149
const
int
energyEm =
unpackerNeutral
(pin,
s_energyLen
);
150
const
int
isolEm =
unpackerNeutral
(pin,
s_isolLen
);
151
unpackerNeutral
(pin, 1);
//parity
152
const
int
energyTau =
unpackerNeutral
(pin,
s_energyLen
);
153
const
int
isolTau =
unpackerNeutral
(pin,
s_isolLen
);
154
unpackerNeutral
(pin, 1);
//parity
155
unpackerNeutral
(pin, 1);
//error
156
const
int
loc =
unpackerNeutral
(pin,
s_locationLen
) |
157
((pin & 0x1) <<
s_locationLen
);
158
const
int
chip = pin >> 1;
159
const
int
idx = 2*pin;
160
m_roiData
[idx] =
LVL1::CPMTobRoI
(
crate
(),
module
(), chip, loc, 0,
161
energyEm, isolEm);
162
m_roiData
[idx+1] =
LVL1::CPMTobRoI
(
crate
(),
module
(), chip, loc, 1,
163
energyTau, isolTau);
164
// Bunch Crossing number
165
if
(pin <
s_bunchCrossingBits
) {
166
bunchCrossing
|=
unpackerNeutral
(pin, 1) << pin;
167
}
else
unpackerNeutral
(pin, 1);
168
// G-Link parity error
169
unpackerNeutralParityError
(pin);
170
}
171
setBunchCrossing
(
bunchCrossing
);
172
const
bool
rc
=
unpackerSuccess
();
173
if
(!
rc
)
setUnpackErrorCode
(
UNPACK_DATA_TRUNCATED
);
174
return
rc
;
175
}
176
177
}
// end namespace
CpmRoiSubBlockV2.h
rc
static Double_t rc
Definition
LArPhysWaveHECTool.cxx:37
CPMTobRoI.h
LVL1BS::CpmRoiSubBlockV2::CpmRoiSubBlockV2
CpmRoiSubBlockV2()
Definition
CpmRoiSubBlockV2.cxx:23
LVL1BS::CpmRoiSubBlockV2::s_isolLen
static const int s_isolLen
Definition
CpmRoiSubBlockV2.h:54
LVL1BS::CpmRoiSubBlockV2::s_energyLen
static const int s_energyLen
Definition
CpmRoiSubBlockV2.h:53
LVL1BS::CpmRoiSubBlockV2::unpackNeutral
bool unpackNeutral()
Unpack neutral data.
Definition
CpmRoiSubBlockV2.cxx:143
LVL1BS::CpmRoiSubBlockV2::s_locationLen
static const int s_locationLen
Definition
CpmRoiSubBlockV2.h:55
LVL1BS::CpmRoiSubBlockV2::pack
bool pack()
Pack data.
Definition
CpmRoiSubBlockV2.cxx:73
LVL1BS::CpmRoiSubBlockV2::packNeutral
bool packNeutral()
Pack neutral data.
Definition
CpmRoiSubBlockV2.cxx:115
LVL1BS::CpmRoiSubBlockV2::clear
void clear()
Clear all data.
Definition
CpmRoiSubBlockV2.cxx:33
LVL1BS::CpmRoiSubBlockV2::setRoiHeader
void setRoiHeader(int version, int crate, int module)
Store header.
Definition
CpmRoiSubBlockV2.cxx:41
LVL1BS::CpmRoiSubBlockV2::s_wordIdVal
static const int s_wordIdVal
Header word ID.
Definition
CpmRoiSubBlockV2.h:50
LVL1BS::CpmRoiSubBlockV2::s_bunchCrossingBits
static const int s_bunchCrossingBits
Definition
CpmRoiSubBlockV2.h:56
LVL1BS::CpmRoiSubBlockV2::s_glinkPins
static const int s_glinkPins
Definition
CpmRoiSubBlockV2.h:52
LVL1BS::CpmRoiSubBlockV2::m_roiData
std::vector< LVL1::CPMTobRoI > m_roiData
RoI words.
Definition
CpmRoiSubBlockV2.h:64
LVL1BS::CpmRoiSubBlockV2::~CpmRoiSubBlockV2
~CpmRoiSubBlockV2()
Definition
CpmRoiSubBlockV2.cxx:27
LVL1BS::CpmRoiSubBlockV2::fillRoi
void fillRoi(LVL1::CPMTobRoI roi)
Store RoI.
Definition
CpmRoiSubBlockV2.cxx:49
LVL1BS::CpmRoiSubBlockV2::unpack
bool unpack()
Unpack data.
Definition
CpmRoiSubBlockV2.cxx:92
LVL1BS::CpmRoiSubBlockV2::roi
LVL1::CPMTobRoI roi(int chip, int loc, int type) const
Return RoI for given chip and location (left/right) and type (em/tau).
Definition
CpmRoiSubBlockV2.cxx:63
LVL1BS::L1CaloSubBlock::crate
int crate() const
Definition
L1CaloSubBlock.h:263
LVL1BS::L1CaloSubBlock::UNPACK_VERSION
@ UNPACK_VERSION
Definition
L1CaloSubBlock.h:38
LVL1BS::L1CaloSubBlock::UNPACK_FORMAT
@ UNPACK_FORMAT
Definition
L1CaloSubBlock.h:39
LVL1BS::L1CaloSubBlock::UNPACK_DATA_TRUNCATED
@ UNPACK_DATA_TRUNCATED
Definition
L1CaloSubBlock.h:40
LVL1BS::L1CaloSubBlock::NEUTRAL
@ NEUTRAL
Definition
L1CaloSubBlock.h:28
LVL1BS::L1CaloSubBlock::setUnpackErrorCode
void setUnpackErrorCode(int code)
Set the unpacking error code.
Definition
L1CaloSubBlock.h:338
LVL1BS::L1CaloSubBlock::unpackerSuccess
bool unpackerSuccess() const
Return unpacker success flag.
Definition
L1CaloSubBlock.h:354
LVL1BS::L1CaloSubBlock::setHeader
void setHeader(int wordId, int version, int format, int seqno, int crate, int module, int slices2, int slices1)
Store header data.
Definition
L1CaloSubBlock.cxx:99
LVL1BS::L1CaloSubBlock::unpackerNeutralParityError
bool unpackerNeutralParityError(int pin)
Unpack and test G-Link parity bit for given pin.
Definition
L1CaloSubBlock.cxx:464
LVL1BS::L1CaloSubBlock::clear
void clear()
Clear all data.
Definition
L1CaloSubBlock.cxx:82
LVL1BS::L1CaloSubBlock::packerNeutralParity
void packerNeutralParity(int pin)
Pack current G-Link parity bit for given pin.
Definition
L1CaloSubBlock.cxx:434
LVL1BS::L1CaloSubBlock::unpackerNeutral
uint32_t unpackerNeutral(int pin, int nbits)
Unpack given number of bits of neutral data for given pin.
Definition
L1CaloSubBlock.cxx:445
LVL1BS::L1CaloSubBlock::module
int module() const
Definition
L1CaloSubBlock.h:268
LVL1BS::L1CaloSubBlock::bunchCrossing
int bunchCrossing() const
Return the Bunch Crossing number (neutral format only).
Definition
L1CaloSubBlock.h:333
LVL1BS::L1CaloSubBlock::version
int version() const
Definition
L1CaloSubBlock.h:243
LVL1BS::L1CaloSubBlock::packerNeutral
void packerNeutral(int pin, uint32_t datum, int nbits)
Pack given neutral data from given pin.
Definition
L1CaloSubBlock.cxx:413
LVL1BS::L1CaloSubBlock::format
int format() const
Definition
L1CaloSubBlock.h:248
LVL1BS::L1CaloSubBlock::setBunchCrossing
void setBunchCrossing(int bc)
Set the Bunch Crossing number (neutral format only).
Definition
L1CaloSubBlock.h:328
LVL1::CPMTobRoI
CPM RoI data.
Definition
Trigger/TrigT1/TrigT1CaloEvent/TrigT1CaloEvent/CPMTobRoI.h:19
LVL1::CPMTobRoI::energy
int energy() const
Return energy.
Definition
Trigger/TrigT1/TrigT1CaloEvent/TrigT1CaloEvent/CPMTobRoI.h:102
LVL1::CPMTobRoI::isolation
int isolation() const
Return isolation.
Definition
Trigger/TrigT1/TrigT1CaloEvent/TrigT1CaloEvent/CPMTobRoI.h:107
LVL1::CPMTobRoI::location
int location() const
Return location (RoI local coords) (0-7).
Definition
Trigger/TrigT1/TrigT1CaloEvent/TrigT1CaloEvent/CPMTobRoI.h:92
LVL1::CPMTobRoI::crate
int crate() const
Return crate number (0-1).
Definition
Trigger/TrigT1/TrigT1CaloEvent/TrigT1CaloEvent/CPMTobRoI.h:77
LVL1::CPMTobRoI::cpm
int cpm() const
Return CPM number (1-14).
Definition
Trigger/TrigT1/TrigT1CaloEvent/TrigT1CaloEvent/CPMTobRoI.h:82
LVL1BS
Definition
ZdcModifySlices.h:10
type
Generated on
for ATLAS Offline Software by
1.17.0