From 63b9fff6d7ee246820a9ac8c2a58c452808086cd Mon Sep 17 00:00:00 2001
From: Florian Uhlig <f.uhlig@gsi.de>
Date: Thu, 11 Feb 2021 17:50:38 +0100
Subject: [PATCH] dielectron: Add gFile + gDirectory protection

---
 .../dielectron/lmvm/CbmAnaDielectronTaskDraw.cxx |  8 ++++++++
 .../lmvm/CbmAnaDielectronTaskDrawAll.cxx         | 10 +++++++++-
 .../dielectron/lmvm/CbmAnaLmvmDrawStudy.cxx      | 16 ++++++++++++++++
 .../papaframework/PairAnalysisSpectrum.cxx       |  9 +++++++++
 .../dielectron/pi0eta/CbmKresGammaCorrection.cxx |  9 +++++++++
 5 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.cxx b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.cxx
index 0b341d3d50..d762124037 100644
--- a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.cxx
+++ b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.cxx
@@ -59,6 +59,10 @@ void CbmAnaDielectronTaskDraw::DrawHistFromFile(const string& fileName,
 
   fCuts.SetDefaultCuts();
 
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   fHM         = new CbmHistManager();
   TFile* file = new TFile(fileName.c_str());
   fHM->ReadFromFile(file);
@@ -94,6 +98,10 @@ void CbmAnaDielectronTaskDraw::DrawHistFromFile(const string& fileName,
   DrawPmtXY();
   DrawMomLikeHist();
   SaveCanvasToImage();
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 void CbmAnaDielectronTaskDraw::DrawMomLikeHist() {
diff --git a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDrawAll.cxx b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDrawAll.cxx
index aad49e2288..0f9174e958 100644
--- a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDrawAll.cxx
+++ b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDrawAll.cxx
@@ -52,6 +52,10 @@ void CbmAnaDielectronTaskDrawAll::DrawHistosFromFile(
                               fileNamePhi,
                               fileNameOmegaDalitz};
 
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   fHM.resize(fNofSignals);
   for (int i = 0; i < fNofSignals; i++) {
     fHM[i] = new CbmHistManager();
@@ -84,6 +88,10 @@ void CbmAnaDielectronTaskDrawAll::DrawHistosFromFile(
   DrawSBgVsMinv();
   SaveHist();
   SaveCanvasToImage();
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 
@@ -225,7 +233,7 @@ void CbmAnaDielectronTaskDrawAll::DrawMinv(CbmLmvmAnalysisSteps step) {
   if (fDrawQgp) sQgp->GetXaxis()->SetRangeUser(0, 2.);
   sPhi->GetXaxis()->SetRangeUser(0, 2.);
 
-  /*    
+  /*
     if (step == kMc) {
         DrawH1({coctail, sPi0, sEta, sOmegaDalitz, sOmega, sInmed, sQgp, sPhi},
                 {"", "", "", "", "", "", "", ""}, kLinear, kLog, false, 0.8, 0.8, 0.99, 0.99);
diff --git a/analysis/PWGDIL/dielectron/lmvm/CbmAnaLmvmDrawStudy.cxx b/analysis/PWGDIL/dielectron/lmvm/CbmAnaLmvmDrawStudy.cxx
index e7d5d4a0d2..ddb8c901ab 100644
--- a/analysis/PWGDIL/dielectron/lmvm/CbmAnaLmvmDrawStudy.cxx
+++ b/analysis/PWGDIL/dielectron/lmvm/CbmAnaLmvmDrawStudy.cxx
@@ -40,6 +40,10 @@ void CbmAnaLmvmDrawStudy::DrawFromFile(const vector<string>& fileNames,
                                        const vector<string>& fileNamesMean,
                                        const vector<string>& studyNames,
                                        const string& outputDir) {
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   fOutputDir = outputDir;
 
   SetDefaultDrawStyle();
@@ -74,6 +78,10 @@ void CbmAnaLmvmDrawStudy::DrawFromFile(const vector<string>& fileNames,
   DrawDistributions("lmvm_study_source_pt_", "fh_source_pt_", kTtCut, kGamma);
 
   SaveCanvasToImage();
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 TCanvas* CbmAnaLmvmDrawStudy::CreateCanvas(const string& name,
@@ -121,6 +129,10 @@ void CbmAnaLmvmDrawStudy::SetAnalysisStepLabels(TH1* h) {
 }
 
 void CbmAnaLmvmDrawStudy::DrawMinv() {
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   vector<TH1*> hPtCut, hTtCut;
   hPtCut.resize(fMeanFiles.size());
   hTtCut.resize(fMeanFiles.size());
@@ -160,6 +172,10 @@ void CbmAnaLmvmDrawStudy::DrawMinv() {
    for (int i = 0; i < fNofStudies; i++){
       hbg[i]->SetLineWidth(3.);
    */
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 void CbmAnaLmvmDrawStudy::DrawNofBgTracks() {
diff --git a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.cxx b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.cxx
index 44d2d83b46..c71335e94e 100644
--- a/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.cxx
+++ b/analysis/PWGDIL/dielectron/papaframework/PairAnalysisSpectrum.cxx
@@ -769,11 +769,20 @@ void PairAnalysisSpectrum::Write()
   ///
   /// write to output file
   ///
+
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* fout = new TFile("test.root", "RECREATE");
   fout->cd();
   //  fTree->Print();
   fTree->Write();
   fout->Close();
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 //______________________________________________
diff --git a/analysis/PWGDIL/dielectron/pi0eta/CbmKresGammaCorrection.cxx b/analysis/PWGDIL/dielectron/pi0eta/CbmKresGammaCorrection.cxx
index e1ca4a2999..616a9466c6 100644
--- a/analysis/PWGDIL/dielectron/pi0eta/CbmKresGammaCorrection.cxx
+++ b/analysis/PWGDIL/dielectron/pi0eta/CbmKresGammaCorrection.cxx
@@ -46,6 +46,11 @@ void CbmKresGammaCorrection::Init(std::vector<std::vector<double>>& vect_all,
            (int) OA,
            (int) IM);  /// most recent files for conversion
   cout << "file is " << Correction_path << endl;
+
+  /// Save old global file and folder pointer to avoid messing with FairRoot
+  TFile* oldFile     = gFile;
+  TDirectory* oldDir = gDirectory;
+
   TFile* fcorrection = new TFile(
     Correction_path
       .c_str());  // file with almost ?? Mio photons, homogeneously distributed over interested region
@@ -109,6 +114,10 @@ void CbmKresGammaCorrection::Init(std::vector<std::vector<double>>& vect_all,
     }
     vect_onetwo.push_back(rapidity_column);
   }
+
+  /// Restore old global file and folder pointer to avoid messing with FairRoot
+  gFile      = oldFile;
+  gDirectory = oldDir;
 }
 
 void CbmKresGammaCorrection::Finish() {
-- 
GitLab