From 6f04bfdcc1a4fa72751073befcc5dbe8d0210ff0 Mon Sep 17 00:00:00 2001
From: Florian Uhlig <f.uhlig@gsi.de>
Date: Tue, 21 Mar 2023 15:16:07 +0100
Subject: [PATCH] Fix warnings about deprecated code

With FairRoot v18.8 the functions GetOutputFile() and SetOutputFile() are
deprecated instead of using a file sink. Correct user code to create the
file sink correctly or to extract the file name from the file sink.
Comparisons of results before and after the change showed that the results
are absolutely identical.
---
 analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx | 38 +++++++-------
 core/field/CbmFieldCreator.cxx               |  2 +-
 sim/response/base/CbmDigitization.cxx        | 27 +++++-----
 sim/transport/steer/CbmTransport.cxx         | 53 +++++++++++---------
 4 files changed, 67 insertions(+), 53 deletions(-)

diff --git a/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx b/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx
index b8a467a297..16dc585bbf 100644
--- a/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx
+++ b/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx
@@ -37,23 +37,24 @@ using namespace std;
 #include "CbmTrdPoint.h"
 #include "CbmVertex.h"
 
-#include "FairMCEventHeader.h"
-#include "FairMCPoint.h"
-#include "FairRootManager.h"
-#include "FairRunAna.h"
+#include <FairMCEventHeader.h>
+#include <FairMCPoint.h>
+#include <FairRootFileSink.h>
+#include <FairRootManager.h>
+#include <FairRunAna.h>
 #include <Logger.h>
 
-#include "TClonesArray.h"
-#include "TFile.h"
-#include "TH1.h"
-#include "TH1F.h"
-#include "TH2F.h"
-#include "TH3.h"
-#include "TH3F.h"
-#include "TMath.h"
-#include "TROOT.h"
-#include "TRandom.h"
-#include "TString.h"
+#include <TClonesArray.h>
+#include <TFile.h>
+#include <TH1.h>
+#include <TH1F.h>
+#include <TH2F.h>
+#include <TH3.h>
+#include <TH3F.h>
+#include <TMath.h>
+#include <TROOT.h>
+#include <TRandom.h>
+#include <TString.h>
 
 CbmDigiManager* fDigiMan;   // TOF Input Digis
 TClonesArray* fEventsColl;  // CBMEvents (time based)
@@ -491,8 +492,11 @@ void CbmHadronAnalysis::CreateHistogramms()
 {
   // Create histogramms
   // gROOT->cd();
-  FairRunAna* fRun = FairRunAna::Instance();
-  fHist            = fRun->GetOutputFile();
+  auto sink = FairRunAna::Instance()->GetSink();
+  assert(sink->GetSinkType() == kFILESINK);
+  auto rootFileSink = static_cast<FairRootFileSink*>(sink);
+  fHist             = rootFileSink->GetRootFile();
+
   TString hname    = fHist->GetName();
   hname.Insert(hname.Length() - 5, ".HadAna");
   fHist = new TFile(hname, "recreate");
diff --git a/core/field/CbmFieldCreator.cxx b/core/field/CbmFieldCreator.cxx
index 97c4f3f159..9543e2c088 100644
--- a/core/field/CbmFieldCreator.cxx
+++ b/core/field/CbmFieldCreator.cxx
@@ -28,7 +28,7 @@ using std::endl;
 
 static CbmFieldCreator gCbmFieldCreator;
 
-CbmFieldCreator::CbmFieldCreator() : FairFieldFactory(), fFieldPar(nullptr) { fCreator = this; }
+CbmFieldCreator::CbmFieldCreator() : FairFieldFactory(), fFieldPar(nullptr) {}
 
 CbmFieldCreator::~CbmFieldCreator() {}
 
diff --git a/sim/response/base/CbmDigitization.cxx b/sim/response/base/CbmDigitization.cxx
index 5c64e630a9..3acf0c1c6e 100644
--- a/sim/response/base/CbmDigitization.cxx
+++ b/sim/response/base/CbmDigitization.cxx
@@ -21,18 +21,19 @@
 #include "CbmTofDigitize.h"
 #include "CbmTrdDigitizer.h"
 
-#include "FairFileSource.h"
-#include "FairMCEventHeader.h"
-#include "FairMonitor.h"
-#include "FairParAsciiFileIo.h"
-#include "FairParRootFileIo.h"
-#include "FairRuntimeDb.h"
+#include <FairFileSource.h>
+#include <FairMCEventHeader.h>
+#include <FairMonitor.h>
+#include <FairParAsciiFileIo.h>
+#include <FairParRootFileIo.h>
+#include <FairRootFileSink.h>
+#include <FairRuntimeDb.h>
 #include <Logger.h>
 
-#include "TClonesArray.h"
-#include "TGeoManager.h"
-#include "TObjString.h"
-#include "TROOT.h"
+#include <TClonesArray.h>
+#include <TGeoManager.h>
+#include <TObjString.h>
+#include <TROOT.h>
 
 #include <cassert>
 
@@ -371,8 +372,10 @@ void CbmDigitization::Run(Int_t event1, Int_t event2)
   run->SetSource(fSource);
 
 
-  // --- Set output file
-  run->SetOutputFile(fOutFile);
+  // --- Create file sink using output file name
+  // TODO: remove release after switching to FairRoot v18.8
+  //run->SetSink(std::make_unique<FairRootFileSink>(fOutFile));
+  run->SetSink(std::make_unique<FairRootFileSink>(fOutFile).release());
   LOG(info) << fName << ": Output file is " << fOutFile;
 
 
diff --git a/sim/transport/steer/CbmTransport.cxx b/sim/transport/steer/CbmTransport.cxx
index 72edb8858d..babc2725b7 100644
--- a/sim/transport/steer/CbmTransport.cxx
+++ b/sim/transport/steer/CbmTransport.cxx
@@ -22,28 +22,29 @@
 #include "CbmTarget.h"
 #include "CbmUnigenGenerator.h"
 
-#include "FairMonitor.h"
-#include "FairParRootFileIo.h"
-#include "FairRunSim.h"
-#include "FairRuntimeDb.h"
-#include "FairSystemInfo.h"
-#include "FairUrqmdGenerator.h"
+#include <FairMonitor.h>
+#include <FairParRootFileIo.h>
+#include <FairRootFileSink.h>
+#include <FairRunSim.h>
+#include <FairRuntimeDb.h>
+#include <FairSystemInfo.h>
+#include <FairUrqmdGenerator.h>
 #include <Logger.h>
 
-#include "TDatabasePDG.h"
-#include "TG4RunConfiguration.h"
-#include "TGeant3.h"
-#include "TGeant3TGeo.h"
-#include "TGeant4.h"
-#include "TGeoManager.h"
-#include "TPythia6Decayer.h"
-#include "TROOT.h"
-#include "TRandom.h"
-#include "TStopwatch.h"
-#include "TString.h"
-#include "TSystem.h"
-#include "TVector3.h"
-#include "TVirtualMC.h"
+#include <TDatabasePDG.h>
+#include <TG4RunConfiguration.h>
+#include <TGeant3.h>
+#include <TGeant3TGeo.h>
+#include <TGeant4.h>
+#include <TGeoManager.h>
+#include <TPythia6Decayer.h>
+#include <TROOT.h>
+#include <TRandom.h>
+#include <TStopwatch.h>
+#include <TString.h>
+#include <TSystem.h>
+#include <TVector3.h>
+#include <TVirtualMC.h>
 
 #include <boost/filesystem.hpp>
 
@@ -530,8 +531,10 @@ void CbmTransport::Run(Int_t nEvents)
   fRun->SetName(engineName);
 
 
-  // --- Set output file name
-  fRun->SetOutputFile(fOutFileName);
+  // --- Create file sink using output file name
+  // TODO: remove release after switching to FairRoot v18.8
+  //  fRun->SetSink(std::make_unique<FairRootFileSink>(fOutFileName));
+  fRun->SetSink(std::make_unique<FairRootFileSink>(fOutFileName).release());
 
   // --- Create and register the setup modules, field and media with FairRoot
   RegisterSetup();
@@ -607,7 +610,11 @@ void CbmTransport::Run(Int_t nEvents)
   TDirectory* oldDir = gDirectory;
 
   // Write Transport Settings to the output file
-  TFile* outfile = fRun->GetOutputFile();
+  auto sink = fRun->GetSink();
+  assert(sink->GetSinkType() == kFILESINK);
+  auto rootFileSink = static_cast<FairRootFileSink*>(sink);
+  TFile* outfile    = rootFileSink->GetRootFile();
+  ;
   outfile->cd();
 
   LOG(info) << "Here I am";
-- 
GitLab