From e9947478fbda4e108d5e8f3f4da5501ced0b9776 Mon Sep 17 00:00:00 2001 From: Florian Uhlig <f.uhlig@gsi.de> Date: Thu, 11 Feb 2021 17:45:20 +0100 Subject: [PATCH] core/report: Add gFile + gDirectory protection --- core/base/report/CbmSimulationReport.cxx | 19 +++++++++++++++---- core/base/report/CbmStudyReport.cxx | 10 +++++++++- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/core/base/report/CbmSimulationReport.cxx b/core/base/report/CbmSimulationReport.cxx index 9b3c53ba1b..e926794541 100644 --- a/core/base/report/CbmSimulationReport.cxx +++ b/core/base/report/CbmSimulationReport.cxx @@ -9,14 +9,16 @@ #include "CbmHistManager.h" // for CbmHistManager #include <RtypesCore.h> // for UInt_t -#include <TFile.h> // for TFile +#include <TDirectory.h> // for TDirectory, gDirectory +#include <TFile.h> // for TFile, gFile #include <TH1.h> // for TH1 #include <TH2.h> // for TH2 +#include <fstream> // for string, ofstream +#include <string> // for operator+ +#include <vector> // for vector, __vector_base<>::value_type + #include <assert.h> // for assert -#include <fstream> // for string, ofstream -#include <string> // for operator+ -#include <vector> // for vector, __vector_base<>::value_type using std::ofstream; using std::string; @@ -38,12 +40,21 @@ void CbmSimulationReport::Create(const string& fileName, const string& outputDir) { assert(fHM == nullptr); fHM = new CbmHistManager(); + + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + TFile* file = new TFile(fileName.c_str()); fHM->ReadFromFile(file); SetOutputDir(outputDir); CreateReports(); // delete fHM; // delete file; + + // shouldn't the file be closed ???? + // file->Close(); + gFile = oldFile; + gDirectory = oldDir; } void CbmSimulationReport::DrawH1ByPattern(const string& histNamePattern) { diff --git a/core/base/report/CbmStudyReport.cxx b/core/base/report/CbmStudyReport.cxx index c8ad0e56ef..6e9c85d2fe 100644 --- a/core/base/report/CbmStudyReport.cxx +++ b/core/base/report/CbmStudyReport.cxx @@ -7,7 +7,8 @@ #include "CbmHistManager.h" // for CbmHistManager -#include <TFile.h> // for TFile +#include <TDirectory.h> // for TDirectory, gDirectory +#include <TFile.h> // for TFile, gFile #include <cassert> // for assert #include <fstream> // for string, ofstream, stringstream @@ -40,6 +41,10 @@ void CbmStudyReport::Create(const vector<string>& fileNames, Int_t nofStudies = fileNames.size(); vector<TFile*> files(nofStudies); fHM.resize(nofStudies); + + TFile* oldFile = gFile; + TDirectory* oldDir = gDirectory; + for (Int_t i = 0; i < nofStudies; i++) { fHM[i] = new CbmHistManager(); files[i] = new TFile(fileNames[i].c_str()); @@ -59,6 +64,9 @@ void CbmStudyReport::Create(const vector<string>& fileNames, // } // fHM.clear(); // files.clear(); + + gFile = oldFile; + gDirectory = oldDir; } ClassImp(CbmStudyReport) -- GitLab