Skip to content

Commit ca66d6e

Browse files
authored
[MID] fixed Digits check result in case of noisy boards (#2586)
In the presence of noisy boards, the result of the check on the empty boards was incorrectly ignored, leading in some cases to a Medium quality even with a large number of empty boards being present. The fix aggregates the qualities from the bad boards and empty boards checks, and also displays messages from both chekers in case they both detect problems.
1 parent 891a040 commit ca66d6e

File tree

1 file changed

+35
-11
lines changed

1 file changed

+35
-11
lines changed

Modules/MUON/MID/src/DigitsQcCheck.cxx

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ Quality DigitsQcCheck::check(std::map<std::string, std::shared_ptr<MonitorObject
9797
qual = Quality::Null;
9898
} else if (mean > mMeanMultThreshold || mean < mMinMultThreshold) {
9999
qual = Quality::Bad;
100-
result = qual;
101100
++nBad;
102101
} else if (mean > mMeanMultThreshold / 2.) {
103102
qual = Quality::Medium;
@@ -153,22 +152,44 @@ Quality DigitsQcCheck::check(std::map<std::string, std::shared_ptr<MonitorObject
153152
}
154153
}
155154
}
156-
auto qual = Quality::Good;
155+
156+
auto qualBadLB = Quality::Good;
157+
auto qualEmptyLB = Quality::Good;
157158
if (nBadLB > 0) {
158-
qual = Quality::Medium;
159+
qualBadLB = Quality::Medium;
159160
if (nBadLB > mNbBadLocalBoard) {
160-
qual = Quality::Bad;
161+
qualBadLB = Quality::Bad;
161162
}
162163
auto flag = o2::quality_control::FlagType();
163-
qual.addFlag(flag, fmt::format("{} boards > {} kHz", nBadLB, mLocalBoardThreshold));
164-
} else if (nEmptyLB > 0) {
165-
qual = Quality::Medium;
164+
qualBadLB.addFlag(flag, fmt::format("{} boards > {} kHz", nBadLB, mLocalBoardThreshold));
165+
}
166+
if (nEmptyLB > 0) {
167+
qualEmptyLB = Quality::Medium;
166168
if (nEmptyLB > mNbEmptyLocalBoard) {
167-
qual = Quality::Bad;
169+
qualEmptyLB = Quality::Bad;
168170
}
169171
auto flag = o2::quality_control::FlagType();
170-
qual.addFlag(flag, fmt::format("{} boards empty", nEmptyLB));
172+
qualEmptyLB.addFlag(flag, fmt::format("{} boards empty", nEmptyLB));
173+
}
174+
175+
auto qual = Quality::Good;
176+
if (qualBadLB.isWorseThan(qual)) {
177+
qual.set(qualBadLB);
178+
}
179+
if (qualEmptyLB.isWorseThan(qual)) {
180+
qual.set(qualEmptyLB);
171181
}
182+
// copy flags to aggregated quality
183+
for (const auto& flag : qualBadLB.getFlags()) {
184+
qual.addFlag(flag.first, flag.second);
185+
}
186+
for (const auto& flag : qualEmptyLB.getFlags()) {
187+
qual.addFlag(flag.first, flag.second);
188+
}
189+
// copy metadata to aggregated quality
190+
qual.addMetadata(qualBadLB.getMetadataMap());
191+
qual.addMetadata(qualEmptyLB.getMetadataMap());
192+
172193
mQualityMap[item.second->getName()] = qual;
173194
result = qual;
174195
} // if mNTFInSeconds > 0.
@@ -251,8 +272,11 @@ void DigitsQcCheck::beautify(std::shared_ptr<MonitorObject> mo, Quality checkRes
251272
if (histo) {
252273
if (mo->getName() == lbHistoName) {
253274
// This is LocalBoardsMap and it was already scaled in the checker
254-
if (!checkResult.getFlags().empty()) {
255-
mHistoHelper.addLatex(histo, 0.12, 0.72, color, checkResult.getFlags().front().second.c_str());
275+
float xFlagText = 0.12;
276+
float yFlagText = 0.72;
277+
for (const auto& flag : checkResult.getFlags()) {
278+
mHistoHelper.addLatex(histo, xFlagText, yFlagText, color, flag.second.c_str());
279+
yFlagText -= 0.1;
256280
}
257281
mHistoHelper.addLatex(histo, 0.3, 0.32, color, fmt::format("Quality::{}", checkResult.getName()));
258282
histo->SetMaximum(zcontoursLoc4.back());

0 commit comments

Comments
 (0)