From 661105d35419bdc354b36fa6a889ba529a0b8924 Mon Sep 17 00:00:00 2001
From: P-A Loizeau <p.-a.loizeau@gsi.de>
Date: Tue, 3 Aug 2021 18:46:05 +0200
Subject: [PATCH] In CheckTiming algo, use TS index from TsEventheader if 2021
 data

---
 .../mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx | 21 ++++++++++++++++---
 fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h  |  6 ++++++
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx
index 2011b13fc1..5893090d1f 100644
--- a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx
+++ b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.cxx
@@ -62,6 +62,15 @@ Bool_t CbmMcbmCheckTimingAlgo::Init()
     CheckDataPresence(*det);
   }  // for( std::vector< CheckTimingDetector >::iterator det = fvDets.begin(); det != fvDets.end(); ++det )
 
+  /// Try to get the 2021 Event header which is containing the Timeslice info
+  /// If not present, we have "old" data and will simply catch it with the nullptr value
+  auto eh = FairRun::Instance()->GetEventHeader();
+  LOG(info) << "CbmMcbmCheckTimingAlgo => EventHeader ptr: " << eh << " " << eh->IsA();
+  fCbmTsEventHeader = dynamic_cast<CbmTsEventHeader*>(eh);
+  if (nullptr != fCbmTsEventHeader) {
+    LOG(info) << "CbmMcbmCheckTimingAlgo => Using the index from the TS Event header for Evo plots";
+  }
+
   CreateHistos();
 
   return kTRUE;
@@ -85,7 +94,7 @@ void CbmMcbmCheckTimingAlgo::CheckDataPresence(CheckTimingDetector detToCheck)
     }  // if ( ! fpT0DigiVec )
   }    // if( ECbmModuleId::kT0 == detToCheck.detId )
   /// Handle special case for TRD-2D as not yet supported in DigiManager
-  if (ECbmModuleId::kTrd2d == detToCheck.detId) {
+  else if (ECbmModuleId::kTrd2d == detToCheck.detId) {
     // Get a pointer to the previous already existing data level
     fpTrd2dDigiVec = ioman->InitObjectAs<std::vector<CbmTrdDigi> const*>("TrdFaspDigi");
     if (!fpTrd2dDigiVec) {
@@ -436,8 +445,14 @@ void CbmMcbmCheckTimingAlgo::FillTimeOffsetHistos(const Double_t dRefTime, const
     fvhDetToRefDiff[uDetIdx]->Fill(dDiffTime);
     fvhDetToRefDiffRefCharge[uDetIdx]->Fill(dDiffTime, dRefCharge);
     fvhDetToRefDiffDetCharge[uDetIdx]->Fill(dDiffTime, dCharge);
-    fvhDetToRefDiffEvo[uDetIdx]->Fill(fuNbTs, dDiffTime);
-    fvhDetToRefDiffEvoLong[uDetIdx]->Fill(fuNbTs, dDiffTime);
+    if (nullptr == fCbmTsEventHeader) {
+      fvhDetToRefDiffEvo[uDetIdx]->Fill(fuNbTs, dDiffTime);
+      fvhDetToRefDiffEvoLong[uDetIdx]->Fill(fuNbTs, dDiffTime);
+    }
+    else {
+      fvhDetToRefDiffEvo[uDetIdx]->Fill(fCbmTsEventHeader->GetTsIndex(), dDiffTime);
+      fvhDetToRefDiffEvoLong[uDetIdx]->Fill(fCbmTsEventHeader->GetTsIndex(), dDiffTime);
+    }
   }  // for( UInt_t uDigiIdx = fvDets[ uDetIdx ].iPrevRefFirstDigi; uDigiIdx < uNbDigis; ++uDigiIdx )
 
   /// Store earliest possible starting index for next reference digi (time sorted!)
diff --git a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h
index 76d13b9c91..de4feed550 100644
--- a/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h
+++ b/fles/mcbm2018/tasks/CbmMcbmCheckTimingAlgo.h
@@ -11,6 +11,7 @@
 #include "CbmModuleList.h"
 #include "CbmTofDigi.h"
 #include "CbmTrdDigi.h"
+#include "CbmTsEventHeader.h"
 
 #include "TString.h"
 
@@ -113,6 +114,11 @@ private:
   /** TRD-2D is not included in CbmDigiManager, so add it explicitly here **/
   const std::vector<CbmTrdDigi>* fpTrd2dDigiVec = nullptr;  //!
 
+  /** @brief Pointer to the Timeslice start time used to write it to the output tree
+      @remark since we hand this to the FairRootManager it also wants to delete it and we do not have to take care of deletion
+   **/
+  CbmTsEventHeader* fCbmTsEventHeader = nullptr;
+
   //
   UInt_t fuNbTs = 0;
 
-- 
GitLab