diff --git a/Modules/MUON/MCH/include/MCH/DecodingPostProcessing.h b/Modules/MUON/MCH/include/MCH/DecodingPostProcessing.h index 70ecd8b791..684434b091 100644 --- a/Modules/MUON/MCH/include/MCH/DecodingPostProcessing.h +++ b/Modules/MUON/MCH/include/MCH/DecodingPostProcessing.h @@ -93,6 +93,8 @@ class DecodingPostProcessing : public PostProcessingInterface std::unique_ptr mHBPacketsPlotterOnCycle; std::unique_ptr mSyncStatusPlotter; std::unique_ptr mSyncStatusPlotterOnCycle; + + std::unique_ptr mHistogramQualityPerDE; ///< quality flags for each DE, to be filled by checker task }; template diff --git a/Modules/MUON/MCH/src/DecodingCheck.cxx b/Modules/MUON/MCH/src/DecodingCheck.cxx index e7a7f46918..cf8a354aa3 100644 --- a/Modules/MUON/MCH/src/DecodingCheck.cxx +++ b/Modules/MUON/MCH/src/DecodingCheck.cxx @@ -241,6 +241,29 @@ void DecodingCheck::beautify(std::shared_ptr mo, Quality checkRes drawThresholdsPerStation(h, mMinGoodSyncFracPerStation, mMinGoodSyncFrac); } } + + // update quality flags for each DE + if (mo->getName().find("QualityFlagPerDE") != std::string::npos) { + TH2F* h = dynamic_cast(mo->getObject()); + if (!h) { + return; + } + + for (int deId = 0; deId < mQualityChecker.mQuality.size(); deId++) { + float ybin = 0; + if (mQualityChecker.mQuality[deId] == Quality::Good) { + ybin = 3; + } + if (mQualityChecker.mQuality[deId] == Quality::Medium) { + ybin = 2; + } + if (mQualityChecker.mQuality[deId] == Quality::Bad) { + ybin = 1; + } + + h->SetBinContent(deId + 1, ybin, 1); + } + } } } // namespace o2::quality_control_modules::muonchambers diff --git a/Modules/MUON/MCH/src/DecodingPostProcessing.cxx b/Modules/MUON/MCH/src/DecodingPostProcessing.cxx index 114eef5a22..93f4cb6caf 100644 --- a/Modules/MUON/MCH/src/DecodingPostProcessing.cxx +++ b/Modules/MUON/MCH/src/DecodingPostProcessing.cxx @@ -150,6 +150,21 @@ void DecodingPostProcessing::initialize(Trigger t, framework::ServiceRegistryRef createDecodingErrorsHistos(t, &qcdb); createHeartBeatPacketsHistos(t, &qcdb); createSyncStatusHistos(t, &qcdb); + + //-------------------------------------------------- + // Detector quality histogram + //-------------------------------------------------- + + mHistogramQualityPerDE.reset(); + mHistogramQualityPerDE = std::make_unique("QualityFlagPerDE", "Quality Flag vs DE", getNumDE(), 0, getNumDE(), 3, 0, 3); + mHistogramQualityPerDE->GetYaxis()->SetBinLabel(1, "Bad"); + mHistogramQualityPerDE->GetYaxis()->SetBinLabel(2, "Medium"); + mHistogramQualityPerDE->GetYaxis()->SetBinLabel(3, "Good"); + mHistogramQualityPerDE->SetOption("colz"); + mHistogramQualityPerDE->SetStats(0); + getObjectsManager()->startPublishing(mHistogramQualityPerDE.get(), core::PublicationPolicy::ThroughStop); + getObjectsManager()->setDefaultDrawOptions(mHistogramQualityPerDE.get(), "colz"); + getObjectsManager()->setDisplayHint(mHistogramQualityPerDE.get(), "gridy"); } //_________________________________________________________________________________________