@@ -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