From 2e7dcbb37bf34dcb4bebea69c523b701058389f0 Mon Sep 17 00:00:00 2001
From: Volker Friese <v.friese@gsi.de>
Date: Tue, 15 Mar 2022 08:56:15 +0100
Subject: [PATCH] Moved new class CbmReco to reco/tasks to prevent building on
 systems without C++17.

---
 reco/steer/CMakeLists.txt         |  1 -
 reco/steer/CbmRecoSteerLinkDef.h  |  2 --
 reco/tasks/CMakeLists.txt         |  5 +++--
 reco/{steer => tasks}/CbmReco.cxx | 28 +++++++++++++---------------
 reco/{steer => tasks}/CbmReco.h   |  0
 reco/tasks/CbmRecoTasksLinkDef.h  |  5 ++++-
 6 files changed, 20 insertions(+), 21 deletions(-)
 rename reco/{steer => tasks}/CbmReco.cxx (86%)
 rename reco/{steer => tasks}/CbmReco.h (100%)

diff --git a/reco/steer/CMakeLists.txt b/reco/steer/CMakeLists.txt
index 70e7cca988..2c0809ac3c 100644
--- a/reco/steer/CMakeLists.txt
+++ b/reco/steer/CMakeLists.txt
@@ -9,7 +9,6 @@ Set(LIBRARY_NAME CbmRecoSteer)
 
 # -----  Compilation sources   ----------------------------
 set(SRCS
-CbmReco.cxx
 CbmRecoUnpack.cxx
 CbmSourceTsArchive.cxx
 )
diff --git a/reco/steer/CbmRecoSteerLinkDef.h b/reco/steer/CbmRecoSteerLinkDef.h
index a6ab98f27e..f584bd911e 100644
--- a/reco/steer/CbmRecoSteerLinkDef.h
+++ b/reco/steer/CbmRecoSteerLinkDef.h
@@ -9,8 +9,6 @@
 #pragma link off all functions;
 
 // --- Classes
-#pragma link C++ class CbmReco + ;
-#pragma link C++ class CbmRecoConfig + ;
 #pragma link C++ class CbmRecoUnpack + ;
 #pragma link C++ class CbmSourceTsArchive + ;
 
diff --git a/reco/tasks/CMakeLists.txt b/reco/tasks/CMakeLists.txt
index 4113b15c9d..dd87b3a51d 100644
--- a/reco/tasks/CMakeLists.txt
+++ b/reco/tasks/CMakeLists.txt
@@ -7,18 +7,19 @@
 Set(LIBRARY_NAME CbmRecoTasks)
 # ---------------------------------------------------------
 
+
 # -----  Compilation sources   ----------------------------
 set(SRCS
+CbmReco.cxx
+CbmSourceTs.cxx
 CbmTaskBuildEvents.cxx
 CbmTaskMakeRecoEvents.cxx
 CbmTaskTriggerDigi.cxx
 CbmTaskUnpack.cxx
-CbmSourceTs.cxx
 )
 # ---------------------------------------------------------
 
 
-
 # ----  Include directories -------------------------------
 set(INCLUDE_DIRECTORIES
 ${CMAKE_CURRENT_SOURCE_DIR}
diff --git a/reco/steer/CbmReco.cxx b/reco/tasks/CbmReco.cxx
similarity index 86%
rename from reco/steer/CbmReco.cxx
rename to reco/tasks/CbmReco.cxx
index f8af5f90a9..b9f34ace60 100644
--- a/reco/steer/CbmReco.cxx
+++ b/reco/tasks/CbmReco.cxx
@@ -20,6 +20,7 @@
 
 using std::cout;
 using std::endl;
+using std::make_unique;
 using std::string;
 
 
@@ -66,11 +67,8 @@ int32_t CbmReco::Run()
   TStopwatch timer;
   timer.Start();
 
-  // TODO: I cannot yet use unique pointers for the objects to be passed to FairRunline.
-  // Ownership, however, is passed to FairRunOnline, which takes care of deleting the objects.
-
   // --- Input source
-  auto source = new CbmSourceTs(fSourceNames);
+  auto source = make_unique<CbmSourceTs>(fSourceNames);
   if (source) LOG(info) << "Reco: Using sources " << ListSources();
   else {
     LOG(error) << "Reco: Could not open sources " << ListSources() << "; aborting.";
@@ -78,7 +76,7 @@ int32_t CbmReco::Run()
   }
 
   // --- Output file
-  auto sink = new FairRootFileSink(fOutputFileName.Data());
+  auto sink = make_unique<FairRootFileSink>(fOutputFileName.Data());
   if (sink) LOG(info) << "Reco: Using output file " << fOutputFileName.Data();
   else {
     LOG(error) << "Reco: Could not open output " << fOutputFileName.Data() << "; aborting.";
@@ -86,31 +84,31 @@ int32_t CbmReco::Run()
   }
 
   // --- Event header
-  auto header = new CbmTsEventHeader();
+  auto header = make_unique<CbmTsEventHeader>();
 
   // --- Unpacking
-  auto unpack = new CbmTaskUnpack();
+  auto unpack = make_unique<CbmTaskUnpack>();
   unpack->SetOutputBranchPersistent("DigiTimeslice.", fConfig.fStoreTimeslice);
 
   // --- Digi trigger
-  auto trigger = new CbmTaskTriggerDigi();
+  auto trigger = make_unique<CbmTaskTriggerDigi>();
   trigger->AddSystem(fConfig.fTriggerDet);
   trigger->SetAlgoParams(fConfig.fTriggerWin, fConfig.fTriggerThreshold, fConfig.fTriggerDeadTime);
   trigger->SetOutputBranchPersistent("Trigger", fConfig.fStoreTrigger);
 
   // --- Event building
-  auto evtBuild = new CbmTaskBuildEvents();
+  auto evtBuild = make_unique<CbmTaskBuildEvents>();
   for (auto& entry : fConfig.fEvtbuildWindows)
     evtBuild->SetEventWindow(entry.first, entry.second.first, entry.second.second);
   evtBuild->SetOutputBranchPersistent("DigiEvent", fConfig.fStoreEvents);
 
   // --- Run configuration
-  FairRunOnline run(source);
-  run.SetSink(sink);
-  run.SetEventHeader(header);
-  run.AddTask(unpack);
-  run.AddTask(trigger);
-  run.AddTask(evtBuild);
+  FairRunOnline run(source.release());
+  run.SetSink(sink.release());
+  run.SetEventHeader(header.release());
+  run.AddTask(unpack.release());
+  run.AddTask(trigger.release());
+  run.AddTask(evtBuild.release());
 
   // --- Initialise and start run
   timer.Stop();
diff --git a/reco/steer/CbmReco.h b/reco/tasks/CbmReco.h
similarity index 100%
rename from reco/steer/CbmReco.h
rename to reco/tasks/CbmReco.h
diff --git a/reco/tasks/CbmRecoTasksLinkDef.h b/reco/tasks/CbmRecoTasksLinkDef.h
index 5525af94d5..9d2dbacc5b 100644
--- a/reco/tasks/CbmRecoTasksLinkDef.h
+++ b/reco/tasks/CbmRecoTasksLinkDef.h
@@ -11,10 +11,13 @@
 #pragma link off all functions;
 
 // --- Classes
+#pragma link C++ class CbmReco + ;
+#pragma link C++ class CbmRecoConfig + ;
+#pragma link C++ class CbmSourceTs + ;
 #pragma link C++ class CbmTaskBuildEvents + ;
 #pragma link C++ class CbmTaskMakeRecoEvents + ;
 #pragma link C++ class CbmTaskTriggerDigi + ;
 #pragma link C++ class CbmTaskUnpack + ;
-#pragma link C++ class CbmSourceTs + ;
+
 
 #endif /* __CINT__ */
-- 
GitLab