ATLAS Offline Software
Loading...
Searching...
No Matches
TileBchStatus.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
6#include <algorithm>
7
8//=== static memebers
10TileBchStatus::LockedPrbSet TileBchStatus::s_refNoisy ATLAS_THREAD_SAFE;
11TileBchStatus::LockedPrbSet TileBchStatus::s_refNoGainL1 ATLAS_THREAD_SAFE;
12TileBchStatus::LockedPrbSet TileBchStatus::s_refBadTiming ATLAS_THREAD_SAFE;
13TileBchStatus::LockedPrbSet TileBchStatus::s_refWrongBCID ATLAS_THREAD_SAFE;
14TileBchStatus::LockedPrbSet TileBchStatus::s_refTimingDmuBcOffset ATLAS_THREAD_SAFE;
15
16//
17//_________________________________________________________
19{
20 if(!s_refBad.size()) initClassifierDefinitions();
21}
22
23//
24//_________________________________________________________
26 m_prbSet(prbSet)
27{
28 if(!s_refBad.size()) initClassifierDefinitions();
29}
30
31//
32//_________________________________________________________
35{
36 // PrbSet overlapp;
37 std::insert_iterator<PrbSet> insItr(m_prbSet, m_prbSet.begin());
38 std::set_union(m_prbSet.begin(),m_prbSet.end(), rhs.getPrbs().begin(), rhs.getPrbs().end(), insItr);
39 return *this;
40}
41
42//
43//_________________________________________________________
46{
47 m_prbSet.insert(prb);
48 return *this;
49}
50
51//
52//_________________________________________________________
55{
56 PrbSet::const_iterator iPrb = rhs.getPrbs().begin();
57 for(; iPrb!=rhs.getPrbs().end(); ++iPrb){
58 m_prbSet.erase(*iPrb);
59 }
60 return *this;
61}
62
63//
64//_________________________________________________________
67{
68 m_prbSet.erase(prb);
69 return *this;
70}
71
72//
73//_________________________________________________________
74bool
76{
77 return (m_prbSet == other.m_prbSet);
78}
79
80//
81//_________________________________________________________
82bool
84{
85 return !(m_prbSet == other.m_prbSet);
86}
87
88//
89//_________________________________________________________
90void
92{
93 //=== define which problems trigger a bad state
94 PrbSet refBad;
95 //=== adc
96 refBad.insert(TileBchPrbs::GeneralMaskAdc);
97 refBad.insert(TileBchPrbs::AdcDead);
98 refBad.insert(TileBchPrbs::SevereStuckBit);
100 refBad.insert(TileBchPrbs::VeryLargeHfNoise);
101 refBad.insert(TileBchPrbs::NoData);
102 refBad.insert(TileBchPrbs::WrongDspConfig);
103 //=== channel
104 refBad.insert(TileBchPrbs::GeneralMaskChannel);
105 refBad.insert(TileBchPrbs::NoPmt);
106 refBad.insert(TileBchPrbs::NoHV);
107 refBad.insert(TileBchPrbs::WrongHV);
108 //=== online (adc)
110 s_refBad.set (std::move (refBad));
111
112 PrbSet refNoisy;
113 //=== define which problems trigger a noisy state
114 refNoisy.insert(TileBchPrbs::LargeHfNoise);
115 refNoisy.insert(TileBchPrbs::CorrelatedNoise);
116 refNoisy.insert(TileBchPrbs::LargeLfNoise);
117 s_refNoisy.set (std::move (refNoisy));
118
119 PrbSet refNoGainL1;
120 //=== define which problems trigger a NoGainL1 state
121 refNoGainL1.insert(TileBchPrbs::AdcDead);
122 refNoGainL1.insert(TileBchPrbs::NoPmt);
123 refNoGainL1.insert(TileBchPrbs::NoHV);
124 refNoGainL1.insert(TileBchPrbs::TrigGeneralMask);
125 refNoGainL1.insert(TileBchPrbs::TrigNoGain);
126 refNoGainL1.insert(TileBchPrbs::TrigNoisy);
127 refNoGainL1.insert(TileBchPrbs::DisableForL1);
128 s_refNoGainL1.set (std::move (refNoGainL1));
129
130 PrbSet refBadTiming;
131 //=== define which problems trigger a bad timing
132 refBadTiming.insert(TileBchPrbs::BadTiming);
133 //=== online
134 refBadTiming.insert(TileBchPrbs::OnlineBadTiming);
135 s_refBadTiming.set (std::move (refBadTiming));
136
137 PrbSet refTimingDmuBcOffset;
138 //=== define which problems trigger an affected timing
139 refTimingDmuBcOffset.insert(TileBchPrbs::TimingDmuBcOffsetPos);
140 refTimingDmuBcOffset.insert(TileBchPrbs::TimingDmuBcOffsetNeg);
141 //=== online
142 refTimingDmuBcOffset.insert(TileBchPrbs::OnlineTimingDmuBcOffsetPos);
143 refTimingDmuBcOffset.insert(TileBchPrbs::OnlineTimingDmuBcOffsetNeg);
144 s_refTimingDmuBcOffset.set (std::move (refTimingDmuBcOffset));
145
146 PrbSet refWrongBCID;
147 //=== define which problems trigger a wrong BCID
148 refWrongBCID.insert(TileBchPrbs::WrongBCID);
149 //=== online
150 refWrongBCID.insert(TileBchPrbs::OnlineWrongBCID);
151 s_refWrongBCID.set (std::move (refWrongBCID));
152}
153
154//
155//_________________________________________________________
156void
158{
159 s_refBad.set (status.getPrbs());
160}
161
162//
163//_________________________________________________________
164void
166{
167 s_refNoisy.set (status.getPrbs());
168}
169
170//
171//_________________________________________________________
172void
174{
175 s_refNoGainL1.set (status.getPrbs());
176}
177
178//
179//_________________________________________________________
180void
182{
183 s_refBadTiming.set (status.getPrbs());
184}
185
186//
187//_________________________________________________________
188void
190{
191 s_refTimingDmuBcOffset.set (status.getPrbs());
192}
193
194//
195//_________________________________________________________
196void
198{
199 s_refWrongBCID.set (status.getPrbs());
200}
201
202//
203//_________________________________________________________
206{
207 return s_refBad;
208}
209
210//
211//_________________________________________________________
214{
215 return s_refNoisy;
216}
217
218//
219//_________________________________________________________
222{
223 return s_refNoGainL1;
224}
225
226//
227//_________________________________________________________
230{
231 return s_refBadTiming;
232}
233
234//
235//_________________________________________________________
238{
239 return s_refTimingDmuBcOffset;
240}
241
242//
243//_________________________________________________________
246{
247 return s_refWrongBCID;
248}
249
250//
251//_________________________________________________________
253TileBchStatus::testFor(const PrbSet& prbSet) const
254{
255 PrbSet overlapp;
256 std::insert_iterator<PrbSet> insItr(overlapp, overlapp.begin());
257 std::set_intersection(m_prbSet.begin(),m_prbSet.end(), prbSet.begin(), prbSet.end(), insItr);
258 return overlapp;
259}
260
261//
262//_________________________________________________________
263std::string
265{
266 std::string prbStr("");
267 for(PrbSet::const_iterator iPrb = m_prbSet.begin(); iPrb != m_prbSet.end(); ++iPrb){
268 prbStr += TileBchPrbs::getDescription(*iPrb) + "; ";
269 }
270 return prbStr;
271}
272
273//
274//_________________________________________________________
276{
277 std::lock_guard lock (m_mutex);
278 PrbSet overlapp;
279 std::insert_iterator<PrbSet> insItr(overlapp, overlapp.begin());
280 std::set_intersection(m_set.begin(),m_set.end(), s.begin(), s.end(), insItr);
281 return !overlapp.empty();
282}
#define ATLAS_THREAD_SAFE
@ OnlineTimingDmuBcOffsetNeg
Definition TileBchPrbs.h:93
@ SevereDataCorruption
Definition TileBchPrbs.h:38
@ TimingDmuBcOffsetPos
Definition TileBchPrbs.h:72
@ OnlineGeneralMaskAdc
Definition TileBchPrbs.h:98
@ TimingDmuBcOffsetNeg
Definition TileBchPrbs.h:73
@ OnlineTimingDmuBcOffsetPos
Definition TileBchPrbs.h:92
static std::string getDescription(const Prb &prb)
Get description of problem.
Class holding bad channel problems.
bool operator==(const TileBchStatus &other) const
TileBchStatus & operator+=(const TileBchStatus &rhs)
static void initClassifierDefinitions()
PrbSet testFor(const PrbSet &prbSet) const
static TileBchStatus getDefinitionNoisy()
static void defineTimingDmuBcOffset(const TileBchStatus &status)
bool operator!=(const TileBchStatus &other) const
static void defineNoGainL1(const TileBchStatus &status)
static TileBchStatus getDefinitionWrongBCID()
std::set< Prb > PrbSet
static void defineBadTiming(const TileBchStatus &status)
static TileBchStatus getDefinitionNoGainL1()
std::string getString() const
static TileBchStatus getDefinitionBadTiming()
TileBchStatus & operator-=(const TileBchStatus &rhs)
static TileBchStatus getDefinitionBad()
static TileBchStatus getDefinitionTimingDmuBcOffset()
static void defineNoisy(const TileBchStatus &status)
static void defineBad(const TileBchStatus &status)
const PrbSet & getPrbs() const
static void defineWrongBCID(const TileBchStatus &status)
bool test(const PrbSet &s) const