diff --git a/Modules/TOF/include/TOF/PostProcessHitMap.h b/Modules/TOF/include/TOF/PostProcessHitMap.h index 5671084716..64f5949fe4 100644 --- a/Modules/TOF/include/TOF/PostProcessHitMap.h +++ b/Modules/TOF/include/TOF/PostProcessHitMap.h @@ -29,6 +29,8 @@ class TH1F; class TH2F; +class TCanvas; +class TPaveText; namespace o2::quality_control_modules::tof { @@ -63,7 +65,7 @@ class PostProcessHitMap final : public quality_control::postprocessing::PostProc /// registry with singleton interfaces. /// \param trigger Trigger which caused the initialization, for example Trigger::EOR /// \param services Interface containing optional interfaces, for example DatabaseInterface - void finalize(quality_control::postprocessing::Trigger, framework::ServiceRegistryRef) override{}; + void finalize(quality_control::postprocessing::Trigger, framework::ServiceRegistryRef) override; private: o2::quality_control::repository::DatabaseInterface* mDatabase = nullptr; @@ -74,6 +76,8 @@ class PostProcessHitMap final : public quality_control::postprocessing::PostProc /// Reference hit map taken from the CCDB and translated into QC binning std::shared_ptr mHistoRefHitMap = nullptr; /// TOF reference hit map std::shared_ptr mHistoHitMap = nullptr; /// TOF hit map + std::shared_ptr mCanvasMo = nullptr; /// Canvas with hit map and ref. map + std::shared_ptr mPhosPad = nullptr; /// PHOS pad to draw bool mDrawRefOnTop; /// flag to enable the drawing of the refmap on top of the hit map. if false drawing on top the hitmap (initialized from the configure method) }; diff --git a/Modules/TOF/src/PostProcessHitMap.cxx b/Modules/TOF/src/PostProcessHitMap.cxx index 3d3e4da6b4..fd03731a90 100644 --- a/Modules/TOF/src/PostProcessHitMap.cxx +++ b/Modules/TOF/src/PostProcessHitMap.cxx @@ -20,12 +20,6 @@ #include "DataFormatsTOF/TOFFEElightInfo.h" #include "TOFBase/Geo.h" -// QualityControl includes -#include "QualityControl/MonitorObject.h" -#include "QualityControl/QcInfoLogger.h" -#include "TOF/PostProcessHitMap.h" -#include "QualityControl/DatabaseInterface.h" - // ROOT includes #include #include @@ -33,6 +27,12 @@ #include #include +// QualityControl includes +#include "QualityControl/MonitorObject.h" +#include "QualityControl/QcInfoLogger.h" +#include "TOF/PostProcessHitMap.h" +#include "QualityControl/DatabaseInterface.h" + using namespace std; using namespace o2::quality_control::postprocessing; using namespace o2::quality_control::core; @@ -60,6 +60,21 @@ void PostProcessHitMap::initialize(Trigger, framework::ServiceRegistryRef servic { // Setting up services mDatabase = &services.get(); + + mCanvasMo.reset(); + mCanvasMo = std::make_shared("defaultMap", "defaultMap"); + getObjectsManager()->startPublishing(mCanvasMo.get()); + + mPhosPad.reset(); + mPhosPad = std::make_shared(13.f, 38.f, 16.f, 53.f, "bl"); + mPhosPad->SetTextSize(0.05); + mPhosPad->SetBorderSize(1); + mPhosPad->SetTextColor(kBlack); + mPhosPad->SetFillColor(kGreen); + mPhosPad->SetFillStyle(3004); + mPhosPad->AddText("Red: No Match"); + mPhosPad->AddText("Blu: RefMap"); + mPhosPad->AddText("Green: HitMap"); } void PostProcessHitMap::update(Trigger t, framework::ServiceRegistryRef services) @@ -126,7 +141,12 @@ void PostProcessHitMap::update(Trigger t, framework::ServiceRegistryRef services ILOG(Warning, Support) << "mHistoHitMap undefined, can't finalize" << ENDM; return; } - TCanvas* canvas = new TCanvas(mHistoHitMap->GetName(), mHistoHitMap->GetName()); + + mCanvasMo->SetName(mHistoHitMap->GetName()); + mCanvasMo->SetTitle(mHistoHitMap->GetName()); + mCanvasMo->cd(); + mCanvasMo->Clear(); + mHistoRefHitMap->GetZaxis()->SetRangeUser(0, 1); mHistoHitMap->GetZaxis()->SetRangeUser(0, 1); @@ -142,27 +162,18 @@ void PostProcessHitMap::update(Trigger t, framework::ServiceRegistryRef services mHistoRefHitMap->GetListOfFunctions()->Clear(); mHistoRefHitMap->Draw("BOXsame"); } - TPaveText phosPad{ 13.f, 38.f, 16.f, 53.f, "bl" }; - phosPad.SetTextSize(0.05); - phosPad.SetBorderSize(1); - phosPad.SetTextColor(kBlack); - phosPad.SetFillColor(kGreen); - phosPad.SetFillStyle(3004); - phosPad.AddText("Red: No Match"); - phosPad.AddText("Blu: RefMap"); - phosPad.AddText("Green: HitMap"); - phosPad.Draw(); + mPhosPad->Draw(); // Draw the shifter message if (mHistoHitMap->GetListOfFunctions()->FindObject(Form("%s_msg", mHistoHitMap->GetName()))) { mHistoHitMap->GetListOfFunctions()->FindObject(Form("%s_msg", mHistoHitMap->GetName()))->Draw("same"); } +} - auto moToStore = std::make_shared(canvas, getID(), "o2::quality_control_modules::tof::PostProcessDiagnosticPerCreate", "TOF"); - moToStore->setIsOwner(false); - mDatabase->storeMO(moToStore); - // It should delete everything inside. Confirmed by trying to delete histo after and getting a segfault. - delete canvas; +void PostProcessHitMap::finalize(Trigger, framework::ServiceRegistryRef) +{ + // Only if you don't want it to be published after finalisation. + getObjectsManager()->stopPublishing(mCanvasMo.get()); } } // namespace o2::quality_control_modules::tof