ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
TileCalorimeter
TileCalib
TileCalibBlobObjs
src
TileBchDecoder.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
TileCalibBlobObjs/TileBchDecoder.h
"
6
#include "
TileCalibBlobObjs/Exception.h
"
7
8
//
9
//________________________________________________________________
10
TileBchDecoder::TileBchDecoder
(
BitPatVer
bitPatVer)
11
{
12
if
( bitPatVer==
TileBchDecoder::BitPat_ofl01
){
init_BitPat_ofl01
(); }
13
else
if
(bitPatVer==
TileBchDecoder::BitPat_onl01
){
init_BitPat_onl01
(); }
14
else
{
15
throw
TileCalib::InvalidBitPattern
(
"TileBchDecoder::Ctor"
, bitPatVer);
16
}
17
}
18
19
//
20
//________________________________________________________________
21
TileBchStatus
22
TileBchDecoder::decode
(uint32_t status_channel, uint32_t status_adc)
const
23
{
24
TileBchStatus
status;
25
for
(
unsigned
int
i = 0; i < 32; ++i){
26
//=== decode channel problems
27
if
(status_channel & 0x00000001){ status +=
m_bitToPrbChn
[i]; }
28
//=== decode adc problems
29
if
(status_adc & 0x00000001){ status +=
m_bitToPrbAdc
[i]; }
30
//=== shift the status words by one bit
31
status_channel >>= 1;
32
status_adc >>= 1;
33
}
34
return
status;
35
}
36
37
//
38
//________________________________________________________________
39
TileBchWords
40
TileBchDecoder::encode
(
const
TileBchStatus
& status)
const
41
{
42
TileBchWords
words;
43
const
std::set<TileBchPrbs::Prb>& prbs = status.getPrbs();
44
for
(std::set<TileBchPrbs::Prb>::const_iterator iPrb = prbs.begin();
45
iPrb!=prbs.end(); ++iPrb)
46
{
47
std::map<TileBchPrbs::Prb,std::pair<unsigned int,unsigned int> >
::const_iterator
48
iMap =
m_prbToBit
.find(*iPrb);
49
if
(iMap ==
m_prbToBit
.end()){
50
//=== throw an exception if we can not encode the problem
51
throw
TileCalib::InvalidBchProblem
(
"TileBchDecoder::encode"
, *iPrb);
52
}
53
words[iMap->second.first] |= (1 << iMap->second.second);
54
}
55
return
words;
56
}
57
58
//
59
//________________________________________________________________
60
void
61
TileBchDecoder::init_BitPat_ofl01
()
62
{
63
//=== assign decoder to channel problems
64
m_bitToPrbChn
.clear();
65
m_bitToPrbChn
.resize(32,
TileBchPrbs::Invalid
);
66
m_bitToPrbChn
[ 0] =
TileBchPrbs::GeneralMaskChannel
;
67
m_bitToPrbChn
[ 1] =
TileBchPrbs::NoPmt
;
68
m_bitToPrbChn
[ 2] =
TileBchPrbs::NoHV
;
69
m_bitToPrbChn
[ 3] =
TileBchPrbs::WrongHV
;
70
m_bitToPrbChn
[ 4] =
TileBchPrbs::NoLaser
;
71
m_bitToPrbChn
[ 5] =
TileBchPrbs::BadLaser
;
72
m_bitToPrbChn
[ 6] =
TileBchPrbs::NoCesium
;
73
m_bitToPrbChn
[ 7] =
TileBchPrbs::BadCesium
;
74
m_bitToPrbChn
[ 8] =
TileBchPrbs::NoTiming
;
75
m_bitToPrbChn
[ 9] =
TileBchPrbs::BadTiming
;
76
m_bitToPrbChn
[10] =
TileBchPrbs::TrigGeneralMask
;
77
m_bitToPrbChn
[11] =
TileBchPrbs::TrigNoGain
;
78
m_bitToPrbChn
[12] =
TileBchPrbs::TrigHalfGain
;
79
m_bitToPrbChn
[13] =
TileBchPrbs::TrigNoisy
;
80
m_bitToPrbChn
[14] =
TileBchPrbs::Emergency
;
81
m_bitToPrbChn
[15] =
TileBchPrbs::HVReadoutPb
;
82
m_bitToPrbChn
[16] =
TileBchPrbs::BrokenClearFibre
;
83
m_bitToPrbChn
[17] =
TileBchPrbs::IgnoreCs
;
84
m_bitToPrbChn
[18] =
TileBchPrbs::UnstableCs
;
85
m_bitToPrbChn
[19] =
TileBchPrbs::WrongBCID
;
86
m_bitToPrbChn
[20] =
TileBchPrbs::TimingDmuBcOffsetPos
;
87
m_bitToPrbChn
[21] =
TileBchPrbs::TimingDmuBcOffsetNeg
;
88
m_bitToPrbChn
[22] =
TileBchPrbs::BurntIntegrator
;
89
90
//=== assign decoder to adc problems
91
m_bitToPrbAdc
.clear();
92
m_bitToPrbAdc
.resize(32,
TileBchPrbs::Invalid
);
93
m_bitToPrbAdc
[ 0] =
TileBchPrbs::GeneralMaskAdc
;
94
m_bitToPrbAdc
[ 1] =
TileBchPrbs::AdcDead
;
95
m_bitToPrbAdc
[ 2] =
TileBchPrbs::StuckBit
;
96
m_bitToPrbAdc
[ 3] =
TileBchPrbs::DataCorruption
;
97
m_bitToPrbAdc
[ 4] =
TileBchPrbs::VeryLargeHfNoise
;
98
m_bitToPrbAdc
[ 5] =
TileBchPrbs::NoData
;
99
m_bitToPrbAdc
[ 6] =
TileBchPrbs::WrongDspConfig
;
100
m_bitToPrbAdc
[ 7] =
TileBchPrbs::LargeHfNoise
;
101
m_bitToPrbAdc
[ 8] =
TileBchPrbs::CorrelatedNoise
;
102
m_bitToPrbAdc
[ 9] =
TileBchPrbs::LargeLfNoise
;
103
m_bitToPrbAdc
[10] =
TileBchPrbs::NoCis
;
104
m_bitToPrbAdc
[11] =
TileBchPrbs::BadCis
;
105
m_bitToPrbAdc
[12] =
TileBchPrbs::SevereStuckBit
;
106
m_bitToPrbAdc
[13] =
TileBchPrbs::SevereDataCorruption
;
107
m_bitToPrbAdc
[14] =
TileBchPrbs::IgnoredByDQV
;
108
m_bitToPrbAdc
[15] =
TileBchPrbs::HalfGain
;
109
110
//=== initialize problem to word/bit map
111
initPrbToBit
();
112
}
113
114
//
115
//________________________________________________________________
116
void
117
TileBchDecoder::init_BitPat_onl01
()
118
{
119
//=== assign decoder to channel problems
120
m_bitToPrbChn
.clear();
121
m_bitToPrbChn
.resize(32,
TileBchPrbs::Invalid
);
122
m_bitToPrbChn
[ 0] =
TileBchPrbs::IgnoredInDsp
;
123
m_bitToPrbChn
[ 1] =
TileBchPrbs::IgnoredInHlt
;
124
m_bitToPrbChn
[ 2] =
TileBchPrbs::DisableForL1
;
125
m_bitToPrbChn
[ 3] =
TileBchPrbs::TrigGeneralMask
;
126
m_bitToPrbChn
[ 4] =
TileBchPrbs::TrigNoGain
;
127
m_bitToPrbChn
[ 5] =
TileBchPrbs::TrigHalfGain
;
128
m_bitToPrbChn
[ 6] =
TileBchPrbs::TrigNoisy
;
129
m_bitToPrbChn
[ 7] =
TileBchPrbs::OnlineBadTiming
;
130
m_bitToPrbChn
[ 8] =
TileBchPrbs::OnlineWrongBCID
;
131
m_bitToPrbChn
[ 9] =
TileBchPrbs::OnlineTimingDmuBcOffsetPos
;
132
m_bitToPrbChn
[10] =
TileBchPrbs::OnlineTimingDmuBcOffsetNeg
;
133
134
//=== assign decoder to adc problems
135
m_bitToPrbAdc
.clear();
136
m_bitToPrbAdc
.resize(32,
TileBchPrbs::Invalid
);
137
m_bitToPrbAdc
[ 0] =
TileBchPrbs::OnlineGeneralMaskAdc
;
138
139
//=== initialize problem to word/bit map
140
initPrbToBit
();
141
}
142
143
//
144
//________________________________________________________________
145
void
146
TileBchDecoder::initPrbToBit
()
147
{
148
m_prbToBit
.clear();
149
//=== init channel problems
150
for
(
unsigned
int
i = 0; i < 32; ++i){
151
TileBchPrbs::Prb
prb =
m_bitToPrbChn
[i];
152
if
(prb==
TileBchPrbs::Invalid
)
continue
;
153
//=== check for duplicates
154
if
(
m_prbToBit
.find(prb) !=
m_prbToBit
.end()){
155
throw
TileCalib::InvalidBitPattern
(
"TileBchDecoder::initPrbToBit(Chn)"
,i);
156
}
157
m_prbToBit
[prb] = std::make_pair(0,i);
158
}
159
160
//=== init adc problems
161
for
(
unsigned
int
i = 0; i < 32; ++i){
162
TileBchPrbs::Prb
prb =
m_bitToPrbAdc
[i];
163
if
(prb==
TileBchPrbs::Invalid
)
continue
;
164
//=== check for duplicates
165
if
(
m_prbToBit
.find(prb)!=
m_prbToBit
.end()){
166
throw
TileCalib::InvalidBitPattern
(
"TileBchDecoder::initPrbToBit(Adc)"
,i);
167
}
168
m_prbToBit
[prb] = std::make_pair(1, i);
169
}
170
}
171
172
//
173
//________________________________________________________________
174
void
175
TileBchDecoder::printBitAssignment
(std::ostream& stm)
const
176
{
177
stm <<
"Current bit to problem assignment"
<< std::endl;
178
stm <<
"---------------------------------"
<< std::endl;
179
stm <<
"Channel:"
<< std::endl;
180
for
(
unsigned
int
i = 0; i < 32; ++i){
181
TileBchPrbs::Prb
prb =
m_bitToPrbChn
[i];
182
std::string desc =
TileBchPrbs::getDescription
(prb);
183
stm <<
"bit "
<<i<<
"\t:\t"
<< desc << std::endl;
184
}
185
stm <<
"Adc:"
<< std::endl;
186
for
(
unsigned
int
i = 0; i < 32; ++i){
187
TileBchPrbs::Prb
prb =
m_bitToPrbAdc
[i];
188
std::string desc =
TileBchPrbs::getDescription
(prb);
189
stm <<
"bit "
<<i<<
"\t:\t"
<< desc << std::endl;
190
}
191
}
TileBchDecoder.h
Exception.h
const_iterator
TileBchDecoder::init_BitPat_ofl01
void init_BitPat_ofl01()
Initializes bit pattern version "ofl01".
Definition
TileBchDecoder.cxx:61
TileBchDecoder::decode
TileBchStatus decode(uint32_t status_channel, uint32_t status_adc=0) const
Decode the status word.
Definition
TileBchDecoder.cxx:22
TileBchDecoder::m_bitToPrbChn
std::vector< TileBchPrbs::Prb > m_bitToPrbChn
Bit to problem association for the channel word.
Definition
TileBchDecoder.h:82
TileBchDecoder::printBitAssignment
void printBitAssignment() const
Print status bits and their assigned problem.
Definition
TileBchDecoder.h:50
TileBchDecoder::TileBchDecoder
TileBchDecoder(BitPatVer bitPatVer)
Ctor.
Definition
TileBchDecoder.cxx:10
TileBchDecoder::encode
TileBchWords encode(const TileBchStatus &status) const
Encode an ADC status into channel and adc status word bits.
Definition
TileBchDecoder.cxx:40
TileBchDecoder::init_BitPat_onl01
void init_BitPat_onl01()
Initializes bit pattern version "ofl01".
Definition
TileBchDecoder.cxx:117
TileBchDecoder::m_bitToPrbAdc
std::vector< TileBchPrbs::Prb > m_bitToPrbAdc
Bit to problem association for the ADC word.
Definition
TileBchDecoder.h:84
TileBchDecoder::BitPatVer
BitPatVer
Definition
TileBchDecoder.h:40
TileBchDecoder::BitPat_onl01
@ BitPat_onl01
Definition
TileBchDecoder.h:42
TileBchDecoder::BitPat_ofl01
@ BitPat_ofl01
Definition
TileBchDecoder.h:41
TileBchDecoder::initPrbToBit
void initPrbToBit()
Initializes the problem to bit map.
Definition
TileBchDecoder.cxx:146
TileBchDecoder::m_prbToBit
std::map< TileBchPrbs::Prb, std::pair< unsigned int, unsigned int > > m_prbToBit
Problem to status word and bit association.
Definition
TileBchDecoder.h:88
TileBchPrbs::Prb
Prb
Definition
TileBchPrbs.h:24
TileBchPrbs::SevereStuckBit
@ SevereStuckBit
Definition
TileBchPrbs.h:37
TileBchPrbs::WrongBCID
@ WrongBCID
Definition
TileBchPrbs.h:71
TileBchPrbs::BrokenClearFibre
@ BrokenClearFibre
Definition
TileBchPrbs.h:68
TileBchPrbs::OnlineTimingDmuBcOffsetNeg
@ OnlineTimingDmuBcOffsetNeg
Definition
TileBchPrbs.h:93
TileBchPrbs::OnlineBadTiming
@ OnlineBadTiming
Definition
TileBchPrbs.h:90
TileBchPrbs::TrigNoGain
@ TrigNoGain
Definition
TileBchPrbs.h:80
TileBchPrbs::Emergency
@ Emergency
Definition
TileBchPrbs.h:66
TileBchPrbs::BadLaser
@ BadLaser
Definition
TileBchPrbs.h:61
TileBchPrbs::SevereDataCorruption
@ SevereDataCorruption
Definition
TileBchPrbs.h:38
TileBchPrbs::LargeHfNoise
@ LargeHfNoise
Definition
TileBchPrbs.h:42
TileBchPrbs::BadTiming
@ BadTiming
Definition
TileBchPrbs.h:65
TileBchPrbs::NoHV
@ NoHV
Definition
TileBchPrbs.h:56
TileBchPrbs::NoPmt
@ NoPmt
Definition
TileBchPrbs.h:55
TileBchPrbs::StuckBit
@ StuckBit
Definition
TileBchPrbs.h:40
TileBchPrbs::TrigGeneralMask
@ TrigGeneralMask
Definition
TileBchPrbs.h:79
TileBchPrbs::HVReadoutPb
@ HVReadoutPb
Definition
TileBchPrbs.h:67
TileBchPrbs::IgnoredByDQV
@ IgnoredByDQV
Definition
TileBchPrbs.h:47
TileBchPrbs::TimingDmuBcOffsetPos
@ TimingDmuBcOffsetPos
Definition
TileBchPrbs.h:72
TileBchPrbs::BurntIntegrator
@ BurntIntegrator
Definition
TileBchPrbs.h:74
TileBchPrbs::BadCesium
@ BadCesium
Definition
TileBchPrbs.h:63
TileBchPrbs::VeryLargeHfNoise
@ VeryLargeHfNoise
Definition
TileBchPrbs.h:34
TileBchPrbs::IgnoreCs
@ IgnoreCs
Definition
TileBchPrbs.h:69
TileBchPrbs::WrongHV
@ WrongHV
Definition
TileBchPrbs.h:57
TileBchPrbs::NoCis
@ NoCis
Definition
TileBchPrbs.h:45
TileBchPrbs::GeneralMaskAdc
@ GeneralMaskAdc
Definition
TileBchPrbs.h:32
TileBchPrbs::AdcDead
@ AdcDead
Definition
TileBchPrbs.h:33
TileBchPrbs::GeneralMaskChannel
@ GeneralMaskChannel
Definition
TileBchPrbs.h:54
TileBchPrbs::NoCesium
@ NoCesium
Definition
TileBchPrbs.h:62
TileBchPrbs::BadCis
@ BadCis
Definition
TileBchPrbs.h:46
TileBchPrbs::DataCorruption
@ DataCorruption
Definition
TileBchPrbs.h:41
TileBchPrbs::LargeLfNoise
@ LargeLfNoise
Definition
TileBchPrbs.h:44
TileBchPrbs::IgnoredInHlt
@ IgnoredInHlt
Definition
TileBchPrbs.h:88
TileBchPrbs::OnlineGeneralMaskAdc
@ OnlineGeneralMaskAdc
Definition
TileBchPrbs.h:98
TileBchPrbs::TimingDmuBcOffsetNeg
@ TimingDmuBcOffsetNeg
Definition
TileBchPrbs.h:73
TileBchPrbs::NoTiming
@ NoTiming
Definition
TileBchPrbs.h:64
TileBchPrbs::TrigNoisy
@ TrigNoisy
Definition
TileBchPrbs.h:82
TileBchPrbs::TrigHalfGain
@ TrigHalfGain
Definition
TileBchPrbs.h:81
TileBchPrbs::HalfGain
@ HalfGain
Definition
TileBchPrbs.h:48
TileBchPrbs::IgnoredInDsp
@ IgnoredInDsp
Definition
TileBchPrbs.h:87
TileBchPrbs::NoLaser
@ NoLaser
Definition
TileBchPrbs.h:60
TileBchPrbs::NoData
@ NoData
Definition
TileBchPrbs.h:35
TileBchPrbs::CorrelatedNoise
@ CorrelatedNoise
Definition
TileBchPrbs.h:43
TileBchPrbs::WrongDspConfig
@ WrongDspConfig
Definition
TileBchPrbs.h:36
TileBchPrbs::UnstableCs
@ UnstableCs
Definition
TileBchPrbs.h:70
TileBchPrbs::OnlineWrongBCID
@ OnlineWrongBCID
Definition
TileBchPrbs.h:91
TileBchPrbs::DisableForL1
@ DisableForL1
Definition
TileBchPrbs.h:89
TileBchPrbs::Invalid
@ Invalid
Definition
TileBchPrbs.h:26
TileBchPrbs::OnlineTimingDmuBcOffsetPos
@ OnlineTimingDmuBcOffsetPos
Definition
TileBchPrbs.h:92
TileBchPrbs::getDescription
static std::string getDescription(const Prb &prb)
Get description of problem.
Definition
TileBchPrbs.cxx:11
TileBchStatus
Class holding bad channel problems.
Definition
TileBchStatus.h:20
TileBchWords
Definition
TileBchWords.h:12
TileCalib::InvalidBchProblem
Thrown by TileBchBits if unkown problem is detected.
Definition
TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/Exception.h:204
TileCalib::InvalidBitPattern
Thrown by TileBchBits if invalid bit pattern is detected.
Definition
TileCalorimeter/TileCalib/TileCalibBlobObjs/TileCalibBlobObjs/Exception.h:185
Generated on
for ATLAS Offline Software by
1.17.0