From c544d32c9b6418ff39af591cb5a975e0b0cb4c23 Mon Sep 17 00:00:00 2001
From: Dominik Smith <smith@th.physik.uni-frankfurt.de>
Date: Tue, 2 Feb 2021 16:05:24 +0100
Subject: [PATCH] CbmBuildRawEvents: Moved initialization of T0 digi vector
 from Algo to Task.

---
 reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx | 4 ----
 reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h   | 9 ++++++---
 reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx | 9 +++++++++
 reco/eventbuilder/digis/CbmTaskBuildRawEvents.h   | 1 +
 4 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
index 4dc89a56..52366d5c 100644
--- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
+++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
@@ -126,12 +126,8 @@ void CbmAlgoBuildRawEvents::Finish() {
 
 // ---------------------------------------------------------------------
 Bool_t CbmAlgoBuildRawEvents::CheckDataAvailable(RawEventBuilderDetector& det) {
-  // Get a handle from the IO manager
-  FairRootManager* ioman = FairRootManager::Instance();
 
   if (ECbmModuleId::kT0 == det.detId) {
-    // T0 is not included in DigiManager
-    fT0DigiVec = ioman->InitObjectAs<std::vector<CbmTofDigi> const*>("T0Digi");
     if (!fT0DigiVec) {
       LOG(info) << "No T0 digi input found.";
       return kFALSE;
diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
index 61a47bfa..5e686ab2 100644
--- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
+++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
@@ -194,6 +194,9 @@ public:
   }
 
   /// Set digi containers
+  void SetT0Digis(const std::vector<CbmTofDigi>* T0DigiVec) {
+    fT0DigiVec = T0DigiVec;
+  }
   void SetStsDigis(std::vector<CbmStsDigi>* StsDigis) { fStsDigis = StsDigis; }
   void SetMuchDigis(std::vector<CbmMuchDigi>* MuchDigis) {
     fMuchDigis = MuchDigis;
@@ -274,10 +277,10 @@ private:
   /// FIXME: usage of CbmDigiManager in FairMq context?!?
   ///        => Maybe by registering vector (or vector reference) to ioman in Device?
   //CbmDigiManager* fDigiMan                  = nullptr;  //!
-  const std::vector<CbmTofDigi>* fT0DigiVec = nullptr;  //!
-  TClonesArray* fTimeSliceMetaDataArray     = nullptr;  //!
-  const TimesliceMetaData* pTsMetaData      = nullptr;
+  TClonesArray* fTimeSliceMetaDataArray = nullptr;  //!
+  const TimesliceMetaData* pTsMetaData  = nullptr;
 
+  const std::vector<CbmTofDigi>* fT0DigiVec                  = nullptr;
   const std::vector<CbmMuchDigi>* fMuchDigis                 = nullptr;
   const std::vector<CbmMuchBeamTimeDigi>* fMuchBeamTimeDigis = nullptr;
   const std::vector<CbmStsDigi>* fStsDigis                   = nullptr;
diff --git a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx
index 5b73309a..8ca20dc4 100644
--- a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx
+++ b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx
@@ -41,6 +41,15 @@ InitStatus CbmTaskBuildRawEvents::Init() {
   /// Get a handle from the IO manager
   FairRootManager* ioman = FairRootManager::Instance();
 
+  //T0 not included in digi manager.
+  fT0Digis = ioman->InitObjectAs<std::vector<CbmTofDigi> const*>("T0Digi");
+  if (!fT0Digis) {
+    LOG(info) << "No T0 digi input.";
+  } else {
+    LOG(info) << "T0 digi input.";
+    fpAlgo->SetT0Digis(fT0Digis);
+  }
+
   // Get a pointer to the previous already existing data level
   fDigiMan = CbmDigiManager::Instance();
   if (fbUseMuchBeamtimeDigi) { fDigiMan->UseMuchBeamTimeDigi(); }
diff --git a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h
index 78f29d27..8eab5aab 100644
--- a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h
+++ b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h
@@ -93,6 +93,7 @@ private:
   void SaveHistos();
 
   CbmDigiManager* fDigiMan                             = nullptr;
+  const std::vector<CbmTofDigi>* fT0Digis              = nullptr;
   std::vector<CbmMuchDigi>* fMuchDigis                 = nullptr;
   std::vector<CbmMuchBeamTimeDigi>* fMuchBeamTimeDigis = nullptr;
   std::vector<CbmStsDigi>* fStsDigis                   = nullptr;
-- 
GitLab