From 2823ca08a44619b4134b54b638d34703c35c6587 Mon Sep 17 00:00:00 2001 From: "P.-A. Loizeau" <p.-a.loizeau@gsi.de> Date: Thu, 21 Jul 2022 16:51:54 +0200 Subject: [PATCH] In unpack monitors, protect hist/canv creation from current root folder pb --- .../much/unpack/CbmMuchUnpackMonitor.cxx | 10 ++++++++++ .../rich/unpack/CbmRichUnpackMonitor.cxx | 11 ++++++++++ .../sts/unpack/CbmStsUnpackConfig.cxx | 7 ++++++- .../sts/unpack/CbmStsUnpackMonitor.cxx | 10 ++++++++++ .../tof/unpack/CbmTofUnpackMonitor.cxx | 20 +++++++++++++++++++ .../trd/unpack/CbmTrdUnpackFaspMonitor.cxx | 11 ++++++++++ .../trd/unpack/CbmTrdUnpackMonitor.cxx | 10 ++++++++++ 7 files changed, 78 insertions(+), 1 deletion(-) diff --git a/reco/detectors/much/unpack/CbmMuchUnpackMonitor.cxx b/reco/detectors/much/unpack/CbmMuchUnpackMonitor.cxx index b091e9c1ac..304ebfe836 100644 --- a/reco/detectors/much/unpack/CbmMuchUnpackMonitor.cxx +++ b/reco/detectors/much/unpack/CbmMuchUnpackMonitor.cxx @@ -17,6 +17,7 @@ #include <TH2.h> #include <THttpServer.h> #include <TProfile.h> +#include <TROOT.h> #include <cstdint> #include <iomanip> @@ -880,6 +881,11 @@ Bool_t CbmMuchUnpackMonitor::Init(CbmMuchUnpackPar* parset) // Get Infos from the parset fNrElinksPerDpb = parset->GetNbElinkPerDpb(); + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + gROOT->cd(); + /// Trigger histo creation on all associated monitors CreateHistograms(parset); if (fDebugMode) CreateDebugHistograms(parset); @@ -887,6 +893,10 @@ Bool_t CbmMuchUnpackMonitor::Init(CbmMuchUnpackPar* parset) /// Trigger Canvas creation on all associated monitors DrawCanvases(); + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; + /// Obtain vector of pointers on each histo from the algo (+ optionally desired folder) std::vector<std::pair<TNamed*, std::string>> vHistos = GetHistoVector(); diff --git a/reco/detectors/rich/unpack/CbmRichUnpackMonitor.cxx b/reco/detectors/rich/unpack/CbmRichUnpackMonitor.cxx index 6bdd807797..6e31dec262 100644 --- a/reco/detectors/rich/unpack/CbmRichUnpackMonitor.cxx +++ b/reco/detectors/rich/unpack/CbmRichUnpackMonitor.cxx @@ -16,6 +16,7 @@ #include <TH2.h> #include <THttpServer.h> #include <TProfile.h> +#include <TROOT.h> #include <cstdint> #include <iomanip> @@ -113,10 +114,20 @@ void CbmRichUnpackMonitor::PrintDebugInfo(const uint64_t MsStartTime, const size Bool_t CbmRichUnpackMonitor::Init(CbmMcbm2018RichPar* parset) { pUnpackParameters = parset; + + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + gROOT->cd(); + /// Trigger histo creation on all associated monitors CreateHistograms(parset); if (fDebugMode) CreateDebugHistograms(parset); + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; + /// Obtain vector of pointers on each histo from the algo (+ optionally desired folder) std::vector<std::pair<TNamed*, std::string>> vHistos = GetHistoVector(); diff --git a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx index 4f872ad8a8..9ec3266b6d 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackConfig.cxx @@ -20,7 +20,12 @@ CbmStsUnpackConfig::CbmStsUnpackConfig(std::string detGeoSetupTag, UInt_t runid) { } -CbmStsUnpackConfig::~CbmStsUnpackConfig() {} +CbmStsUnpackConfig::~CbmStsUnpackConfig() +{ + LOG(debug) << fName << "::~CbmStsUnpackConfig"; + fWalkMap.clear(); + LOG(debug) << fName << "::~CbmStsUnpackConfig done"; +} // ---- Init ---- void CbmStsUnpackConfig::InitAlgo() diff --git a/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx b/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx index 7b7181542a..d630569488 100644 --- a/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx +++ b/reco/detectors/sts/unpack/CbmStsUnpackMonitor.cxx @@ -17,6 +17,7 @@ #include <TH2.h> #include <THttpServer.h> #include <TProfile.h> +#include <TROOT.h> #include <cstdint> #include <iomanip> @@ -879,6 +880,11 @@ Bool_t CbmStsUnpackMonitor::Init(CbmMcbm2018StsPar* parset) // Get Infos from the parset fNrElinksPerDpb = parset->GetNbElinkPerDpb(); + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + gROOT->cd(); + /// Trigger histo creation on all associated monitors CreateHistograms(parset); if (fDebugMode) CreateDebugHistograms(parset); @@ -886,6 +892,10 @@ Bool_t CbmStsUnpackMonitor::Init(CbmMcbm2018StsPar* parset) /// Trigger Canvas creation on all associated monitors DrawCanvases(); + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; + /// Obtain vector of pointers on each histo from the algo (+ optionally desired folder) std::vector<std::pair<TNamed*, std::string>> vHistos = GetHistoVector(); diff --git a/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx b/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx index c50b003b7a..9acaff4212 100644 --- a/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx +++ b/reco/detectors/tof/unpack/CbmTofUnpackMonitor.cxx @@ -20,6 +20,7 @@ #include <THttpServer.h> #include <TPaveStats.h> #include <TProfile.h> +#include <TROOT.h> #include <cstdint> #include <iomanip> @@ -1312,6 +1313,11 @@ Bool_t CbmTofUnpackMonitor::Init(CbmMcbm2018TofPar* parset) fuNbOfChannelsPerComp = fuNbOfGet4PerComp * fuNbOfChannelsPerGet4; fuNbOfGet4InSyst = fuNbOfComps * fuNbOfGet4PerComp; + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + gROOT->cd(); + /// Trigger histo creation on all associated monitors CreateHistograms(); DrawCanvases(); @@ -1320,6 +1326,10 @@ Bool_t CbmTofUnpackMonitor::Init(CbmMcbm2018TofPar* parset) DrawBmonCanvases(); } + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; + /// Obtain vector of pointers on each histo from the algo (+ optionally desired folder) std::vector<std::pair<TNamed*, std::string>> vHistos = GetHistoVector(); @@ -1402,6 +1412,16 @@ void CbmTofUnpackMonitor::Finish() histoFile->Close(); delete histoFile; + + /// Cleanup memory + for (auto iter = fvpAllHistoPointers.begin(); iter != fvpAllHistoPointers.end();) { + if (iter->first != nullptr) { delete iter->first; } + iter = fvpAllHistoPointers.erase(iter); + } + for (auto iter = fvpAllCanvasPointers.begin(); iter != fvpAllCanvasPointers.end();) { + if (iter->first != nullptr) { delete iter->first; } + iter = fvpAllCanvasPointers.erase(iter); + } } diff --git a/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx b/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx index 8860363d1f..e41945bf02 100644 --- a/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx +++ b/reco/detectors/trd/unpack/CbmTrdUnpackFaspMonitor.cxx @@ -18,6 +18,7 @@ #include <TH1.h> #include <TH2.h> #include <TProfile.h> +#include <TROOT.h> #include <boost/math/special_functions/math_fwd.hpp> @@ -98,8 +99,18 @@ Bool_t CbmTrdUnpackFaspMonitor::Init() else it++; } + + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + gROOT->cd(); + createHistos(); + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; + return kTRUE; } diff --git a/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx b/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx index f203df472f..b294a1fb4d 100644 --- a/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx +++ b/reco/detectors/trd/unpack/CbmTrdUnpackMonitor.cxx @@ -19,6 +19,7 @@ #include <TH1.h> #include <TH2.h> #include <TProfile.h> +#include <TROOT.h> #include <boost/math/special_functions/math_fwd.hpp> @@ -176,8 +177,17 @@ Bool_t CbmTrdUnpackMonitor::Init(CbmTrdParSetDigi* digiParSet, CbmTrdParSetAsic* fHistoServer = run->GetHttpServer(); } + /// Save old global file and folder pointer to avoid messing with FairRoot + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + gROOT->cd(); + createHistos(); + /// Restore old global file and folder pointer to avoid messing with FairRoot + gFile = oldFile; + gDirectory = oldDir; + return kTRUE; } -- GitLab