diff --git a/reco/detectors/much/unpack/CbmMuchUnpackMonitor.cxx b/reco/detectors/much/unpack/CbmMuchUnpackMonitor.cxx index b091e9c1ac9547b338b78f38d6bb54db0f2a0d88..304ebfe836a04da5c623575630c1fc7957c7c538 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 6bdd8077970c902a2a2da1763d34024e4d8143d6..6e31dec262515e438cd4455d788acba91e4d4078 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 4f872ad8a81bab4ea7c016ed626d3b57acf17598..9ec3266b6d234c360d9fa53cc29ab0ac73ca58ad 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 7b7181542a62111d45e6ecd474fa3f9f2588bd51..d630569488f9fb8406a59b52223680d5e269dc35 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 c50b003b7a3af9d000a596713ea37db7813f990c..9acaff4212c920bf5e8d2720a581e9b1102e831c 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 8860363d1f800122e06bf616c6e1b6e365a3a1fb..e41945bf02e249ed31be86f61511ab0e49361f0f 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 f203df472fc7c7d9d5931bf900fba368b272e366..b294a1fb4dcea089fe52f3959daeecfd9103b2c9 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; }