From c0a8b44344a6077342d6e6f1d8a78793af268448 Mon Sep 17 00:00:00 2001 From: Jakub Juracka Date: Mon, 23 Feb 2026 12:40:57 +0100 Subject: [PATCH 1/6] remove redundant Draw() calls in beautifier --- Modules/MFT/src/QcMFTClusterCheck.cxx | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Modules/MFT/src/QcMFTClusterCheck.cxx b/Modules/MFT/src/QcMFTClusterCheck.cxx index a6a86d99a..2bda4952c 100644 --- a/Modules/MFT/src/QcMFTClusterCheck.cxx +++ b/Modules/MFT/src/QcMFTClusterCheck.cxx @@ -278,7 +278,6 @@ void QcMFTClusterCheck::beautify(std::shared_ptr mo, Quality chec tl->SetTextFont(142); tl->SetTextSize(0.08); hMap->GetListOfFunctions()->Add(tl); - tl->Draw(); } } @@ -299,7 +298,6 @@ void QcMFTClusterCheck::beautify(std::shared_ptr mo, Quality chec b->SetFillStyle(4055); b->SetFillColor(15); h->GetListOfFunctions()->Add(b); - b->Draw(); } } } @@ -319,31 +317,25 @@ void QcMFTClusterCheck::beautify(std::shared_ptr mo, Quality chec msg1->Clear(); msg1->AddText("Quality Good"); msg1->SetFillColor(kGreen); - msg1->Draw(); msg2->Clear(); msg2->AddText("No action needed"); msg2->SetFillColor(kGreen); - msg2->Draw(); } else if (checkResult == Quality::Medium) { LOG(info) << "Quality::Medium"; msg1->Clear(); msg1->AddText("Quality medium"); msg1->SetFillColor(kOrange); - msg1->Draw(); msg2->Clear(); msg2->AddText("Write a logbook entry tagging MFT"); msg2->SetFillColor(kOrange); - msg2->Draw(); } else if (checkResult == Quality::Bad) { LOG(info) << "Quality::Bad"; msg1->Clear(); msg1->AddText("Quality bad"); msg1->SetFillColor(kRed); - msg1->Draw(); msg2->Clear(); msg2->AddText("Call the on-call!"); msg2->SetFillColor(kRed); - msg2->Draw(); } } } From c2efae1be5434fcf60eb691bc8b7c4fcf26ac987 Mon Sep 17 00:00:00 2001 From: Jakub Juracka Date: Mon, 23 Feb 2026 12:44:19 +0100 Subject: [PATCH 2/6] change axis title to properly reflect normalisation --- Modules/MFT/src/QcMFTClusterTask.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/MFT/src/QcMFTClusterTask.cxx b/Modules/MFT/src/QcMFTClusterTask.cxx index 0d516bc60..81b14ae7b 100644 --- a/Modules/MFT/src/QcMFTClusterTask.cxx +++ b/Modules/MFT/src/QcMFTClusterTask.cxx @@ -249,7 +249,7 @@ void QcMFTClusterTask::initialize(o2::framework::InitContext& /*ctx*/) auto clusterR = std::make_unique( Form("ClusterRinLayer/mClusterRinLayer%d", nMFTLayer), - Form("Cluster Radial Position in Layer %d; r (cm); # entries", nMFTLayer), 400, 0, 20, true); + Form("Cluster Radial Position in Layer %d; r (cm); # entries per orbit", nMFTLayer), 400, 0, 20, true); mClusterRinLayer.push_back(std::move(clusterR)); getObjectsManager()->startPublishing(mClusterRinLayer[nMFTLayer].get()); getObjectsManager()->setDisplayHint(mClusterRinLayer[nMFTLayer].get(), "hist"); From bb8002efb7351fa8374ac3b4588de8c9f0754b6e Mon Sep 17 00:00:00 2001 From: Jakub Juracka Date: Mon, 23 Feb 2026 14:17:45 +0100 Subject: [PATCH 3/6] define new MO --- Modules/MFT/include/MFT/QcMFTClusterTask.h | 6 ++++++ Modules/MFT/src/QcMFTClusterTask.cxx | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/Modules/MFT/include/MFT/QcMFTClusterTask.h b/Modules/MFT/include/MFT/QcMFTClusterTask.h index ef2c87d16..985d81a8e 100644 --- a/Modules/MFT/include/MFT/QcMFTClusterTask.h +++ b/Modules/MFT/include/MFT/QcMFTClusterTask.h @@ -16,6 +16,7 @@ /// \author Katarina Krizkova Gajdosova /// \author Diana Maria Krupova /// \author David Grund +/// \author Jakub Juracka /// #ifndef QC_MFT_CLUSTER_TASK_H @@ -23,6 +24,8 @@ #include #include +#include +#include #include #include "ReconstructionDataFormats/BaseCluster.h" #include "MFTBase/GeometryTGeo.h" @@ -79,6 +82,7 @@ class QcMFTClusterTask /*final*/ : public TaskInterface // todo add back the "fi std::unique_ptr mClusterZ = nullptr; std::vector> mClusterXYinLayer; std::vector> mClusterRinLayer; + std::unique_ptr mClusterRinAllLayers = nullptr; std::unique_ptr mClustersROFSize = nullptr; std::unique_ptr mClustersBC = nullptr; @@ -87,6 +91,8 @@ class QcMFTClusterTask /*final*/ : public TaskInterface // todo add back the "fi int mOnlineQC; + const TString mColors[10] = { "#1F77B4", "#FF7F0E", "#2CA02C", "#D62728", "#8C564B", "#E377C2", "#9467BD", "#BCBD22", "#7F7F7F", "#17BECF" }; + // needed to construct the name and path of some histograms int mHalf[936] = { 0 }; int mDisk[936] = { 0 }; diff --git a/Modules/MFT/src/QcMFTClusterTask.cxx b/Modules/MFT/src/QcMFTClusterTask.cxx index 81b14ae7b..08c2d3824 100644 --- a/Modules/MFT/src/QcMFTClusterTask.cxx +++ b/Modules/MFT/src/QcMFTClusterTask.cxx @@ -28,6 +28,8 @@ #include #include #include +#include +#include // O2 #include #include @@ -254,6 +256,9 @@ void QcMFTClusterTask::initialize(o2::framework::InitContext& /*ctx*/) getObjectsManager()->startPublishing(mClusterRinLayer[nMFTLayer].get()); getObjectsManager()->setDisplayHint(mClusterRinLayer[nMFTLayer].get(), "hist"); } + // canvas for for cluster R in all layers + mClusterRinAllLayers = std::make_unique("mClusterRinAllLayers", "Cluster Radial Position in All MFT Layers"); + getObjectsManager()->startPublishing(mClusterRinAllLayers.get()); } } From ea54e271e137b6ece27b183017b6462c2371d0f7 Mon Sep 17 00:00:00 2001 From: Jakub Juracka Date: Mon, 23 Feb 2026 14:26:32 +0100 Subject: [PATCH 4/6] canvas updating --- Modules/MFT/include/MFT/QcMFTClusterTask.h | 1 + Modules/MFT/src/QcMFTClusterTask.cxx | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/Modules/MFT/include/MFT/QcMFTClusterTask.h b/Modules/MFT/include/MFT/QcMFTClusterTask.h index 985d81a8e..052cb3a29 100644 --- a/Modules/MFT/include/MFT/QcMFTClusterTask.h +++ b/Modules/MFT/include/MFT/QcMFTClusterTask.h @@ -106,6 +106,7 @@ class QcMFTClusterTask /*final*/ : public TaskInterface // todo add back the "fi // internal functions void getChipMapData(); + void updateCanvas(); // cluster size in pixels int mClusterSize = { 0 }; diff --git a/Modules/MFT/src/QcMFTClusterTask.cxx b/Modules/MFT/src/QcMFTClusterTask.cxx index 08c2d3824..1d8833283 100644 --- a/Modules/MFT/src/QcMFTClusterTask.cxx +++ b/Modules/MFT/src/QcMFTClusterTask.cxx @@ -408,6 +408,7 @@ void QcMFTClusterTask::endOfCycle() mClusterXYinLayer[nMFTLayer]->update(); mClusterRinLayer[nMFTLayer]->update(); } + updateCanvas(); } } @@ -440,6 +441,7 @@ void QcMFTClusterTask::reset() mClusterXYinLayer[nMFTLayer]->Reset(); mClusterRinLayer[nMFTLayer]->Reset(); } + mClusterRinAllLayers->Clear(); } } @@ -462,4 +464,19 @@ void QcMFTClusterTask::getChipMapData() } } +void QcMFTClusterTask::updateCanvas() +{ + mClusterRinAllLayers->cd(); + mClusterRinAllLayers->Clear(); + THStack* stack = new THStack("stack", "Cluster Radial Position in All MFT Layers; r (cm); # entries"); + for (auto nMFTLayer = 0; nMFTLayer < 10; nMFTLayer++) { + mClusterRinLayer[nMFTLayer]->getNum()->SetTitle(Form("layer %d", nMFTLayer)); + mClusterRinLayer[nMFTLayer]->getNum()->SetLineColor(TColor::GetColor(mColors[nMFTLayer])); + stack->Add(mClusterRinLayer[nMFTLayer]->getNum()); + } + stack->Draw("nostack hist"); + mClusterRinAllLayers->Update(); + gPad->BuildLegend(0.8, 0.4, 0.9, 0.9, "", "l"); +} + } // namespace o2::quality_control_modules::mft From a0d304cabcb08846bc79a5fcfdf3884a1186bd14 Mon Sep 17 00:00:00 2001 From: Jakub Juracka Date: Mon, 23 Feb 2026 15:02:01 +0100 Subject: [PATCH 5/6] proper initialisation of THStack --- Modules/MFT/include/MFT/QcMFTClusterTask.h | 2 ++ Modules/MFT/src/QcMFTClusterTask.cxx | 14 +++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Modules/MFT/include/MFT/QcMFTClusterTask.h b/Modules/MFT/include/MFT/QcMFTClusterTask.h index 052cb3a29..ad8befeb3 100644 --- a/Modules/MFT/include/MFT/QcMFTClusterTask.h +++ b/Modules/MFT/include/MFT/QcMFTClusterTask.h @@ -26,6 +26,7 @@ #include #include #include +#include #include #include "ReconstructionDataFormats/BaseCluster.h" #include "MFTBase/GeometryTGeo.h" @@ -83,6 +84,7 @@ class QcMFTClusterTask /*final*/ : public TaskInterface // todo add back the "fi std::vector> mClusterXYinLayer; std::vector> mClusterRinLayer; std::unique_ptr mClusterRinAllLayers = nullptr; + std::unique_ptr mClusterRinAllLayersStack = nullptr; std::unique_ptr mClustersROFSize = nullptr; std::unique_ptr mClustersBC = nullptr; diff --git a/Modules/MFT/src/QcMFTClusterTask.cxx b/Modules/MFT/src/QcMFTClusterTask.cxx index 1d8833283..082d45821 100644 --- a/Modules/MFT/src/QcMFTClusterTask.cxx +++ b/Modules/MFT/src/QcMFTClusterTask.cxx @@ -259,6 +259,12 @@ void QcMFTClusterTask::initialize(o2::framework::InitContext& /*ctx*/) // canvas for for cluster R in all layers mClusterRinAllLayers = std::make_unique("mClusterRinAllLayers", "Cluster Radial Position in All MFT Layers"); getObjectsManager()->startPublishing(mClusterRinAllLayers.get()); + mClusterRinAllLayersStack = std::make_unique("mClusterRinAllLayersStack", "Cluster Radial Position in All MFT Layers; r (cm); # entries"); + for (auto nMFTLayer = 0; nMFTLayer < 10; nMFTLayer++) { + mClusterRinLayer[nMFTLayer]->getNum()->SetLineColor(TColor::GetColor(mColors[nMFTLayer])); + mClusterRinLayer[nMFTLayer]->getNum()->SetTitle(Form("layer %d", nMFTLayer)); + mClusterRinAllLayersStack->Add(mClusterRinLayer[nMFTLayer]->getNum()); + } } } @@ -468,13 +474,7 @@ void QcMFTClusterTask::updateCanvas() { mClusterRinAllLayers->cd(); mClusterRinAllLayers->Clear(); - THStack* stack = new THStack("stack", "Cluster Radial Position in All MFT Layers; r (cm); # entries"); - for (auto nMFTLayer = 0; nMFTLayer < 10; nMFTLayer++) { - mClusterRinLayer[nMFTLayer]->getNum()->SetTitle(Form("layer %d", nMFTLayer)); - mClusterRinLayer[nMFTLayer]->getNum()->SetLineColor(TColor::GetColor(mColors[nMFTLayer])); - stack->Add(mClusterRinLayer[nMFTLayer]->getNum()); - } - stack->Draw("nostack hist"); + mClusterRinAllLayersStack->Draw("nostack hist"); mClusterRinAllLayers->Update(); gPad->BuildLegend(0.8, 0.4, 0.9, 0.9, "", "l"); } From a915940745f0095be78f13b9a0faf44f1ba51464 Mon Sep 17 00:00:00 2001 From: Jakub Juracka Date: Mon, 23 Feb 2026 18:39:48 +0100 Subject: [PATCH 6/6] change legend entries --- Modules/MFT/src/QcMFTClusterTask.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/MFT/src/QcMFTClusterTask.cxx b/Modules/MFT/src/QcMFTClusterTask.cxx index 082d45821..bfbef10a4 100644 --- a/Modules/MFT/src/QcMFTClusterTask.cxx +++ b/Modules/MFT/src/QcMFTClusterTask.cxx @@ -262,7 +262,7 @@ void QcMFTClusterTask::initialize(o2::framework::InitContext& /*ctx*/) mClusterRinAllLayersStack = std::make_unique("mClusterRinAllLayersStack", "Cluster Radial Position in All MFT Layers; r (cm); # entries"); for (auto nMFTLayer = 0; nMFTLayer < 10; nMFTLayer++) { mClusterRinLayer[nMFTLayer]->getNum()->SetLineColor(TColor::GetColor(mColors[nMFTLayer])); - mClusterRinLayer[nMFTLayer]->getNum()->SetTitle(Form("layer %d", nMFTLayer)); + mClusterRinLayer[nMFTLayer]->getNum()->SetTitle(Form("D%dF%d", static_cast(std::floor(nMFTLayer / 2.)), nMFTLayer % 2 == 0 ? 0 : 1)); mClusterRinAllLayersStack->Add(mClusterRinLayer[nMFTLayer]->getNum()); } } @@ -476,7 +476,7 @@ void QcMFTClusterTask::updateCanvas() mClusterRinAllLayers->Clear(); mClusterRinAllLayersStack->Draw("nostack hist"); mClusterRinAllLayers->Update(); - gPad->BuildLegend(0.8, 0.4, 0.9, 0.9, "", "l"); + gPad->BuildLegend(0.83, 0.50, 0.90, 0.90, "", "l"); } } // namespace o2::quality_control_modules::mft