From 02d868fab49f31fe0ce28eb49220711901306666 Mon Sep 17 00:00:00 2001 From: Piotr Konopka Date: Wed, 24 Jun 2026 16:26:24 +0200 Subject: [PATCH] Mergers: actually collect only mergeable objects belonging to TCanvas We were seeing warnings like below when merging certain TCanvases: ``` W 11 Object 'title' with type 'TPaveText' is not one of the mergeable types, skipping W 11 Object 'TPave' with type 'TLegend' is not one of the mergeable types, skipping W 11 Object 'TFrame' with type 'TFrame' is not one of the mergeable types, skipping ``` It is perfectly OK to have some TPaveText in a canvas and expect to have just the histogram merged, but the text should remain as it was, so there is no reason to produce warnings. The change ensures that collectUnderlyingObject actually collects just the mergeable objects from TCanvas, as promised in the documentation. Fixes QC-1344. --- Utilities/Mergers/src/MergerAlgorithm.cxx | 3 ++- Utilities/Mergers/test/test_Algorithm.cxx | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Utilities/Mergers/src/MergerAlgorithm.cxx b/Utilities/Mergers/src/MergerAlgorithm.cxx index 2cd09712e4a81..f7b452e6dd18d 100644 --- a/Utilities/Mergers/src/MergerAlgorithm.cxx +++ b/Utilities/Mergers/src/MergerAlgorithm.cxx @@ -18,6 +18,7 @@ #include "Mergers/MergeInterface.h" #include "Mergers/ObjectStore.h" +#include "Mergers/Mergeable.h" #include "Framework/Logger.h" #include @@ -63,7 +64,7 @@ auto collectUnderlyingObjects(TCanvas* canvas) -> std::vector auto* primitive = primitives->At(i); if (auto* primitivePad = dynamic_cast(primitive)) { collectFromTPad(primitivePad, objects, collectFromTPad); - } else { + } else if (isMergeable(primitive)) { objects.push_back(primitive); } } diff --git a/Utilities/Mergers/test/test_Algorithm.cxx b/Utilities/Mergers/test/test_Algorithm.cxx index 4e9e538719655..f46362a6893f1 100644 --- a/Utilities/Mergers/test/test_Algorithm.cxx +++ b/Utilities/Mergers/test/test_Algorithm.cxx @@ -26,6 +26,7 @@ #include "Mergers/MergerAlgorithm.h" #include "Mergers/CustomMergeableTObject.h" #include "Mergers/CustomMergeableObject.h" +#include "Mergers/Mergeable.h" #include "Mergers/ObjectStore.h" #include @@ -40,6 +41,7 @@ #include #include #include +#include // using namespace o2::framework; using namespace o2::mergers; @@ -329,6 +331,12 @@ TCanvas* createCanvas(std::string name, std::string title, std::vectorcd(i); hist->Draw(); + + // non-mergeable TPaveText + TPaveText* pt = new TPaveText(.05, .1, .95, .8); + pt->AddText("test"); + pt->Draw(); + ++i; } return canvas; @@ -345,7 +353,7 @@ auto collectUnderlyingObjects(TCanvas* canvas) -> std::vector auto* primitive = primitives->At(i); if (auto* primitivePad = dynamic_cast(primitive)) { collectFromTPad(primitivePad, objects, collectFromTPad); - } else { + } else if (isMergeable(primitive)) { objects.push_back(primitive); } }