From 63ffa065d82bf922ad8a1d4260002e7b457efdc0 Mon Sep 17 00:00:00 2001
From: Dominik Smith <d.smith@gsi.de>
Date: Wed, 9 Nov 2022 12:58:40 +0100
Subject: [PATCH] Added event time computation from Bmon digis to
 CbmAlgoBuildRawEvents.

---
 MQ/mcbm/CMakeLists.txt                        |  4 ++--
 .../digis/CbmAlgoBuildRawEvents.cxx           | 22 ++++++++++++++++++-
 .../digis/CbmAlgoBuildRawEvents.h             |  2 ++
 .../digis/CbmSeedFinderSlidingWindow.cxx      |  2 ++
 4 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/MQ/mcbm/CMakeLists.txt b/MQ/mcbm/CMakeLists.txt
index 70840b7b95..e85b810635 100644
--- a/MQ/mcbm/CMakeLists.txt
+++ b/MQ/mcbm/CMakeLists.txt
@@ -70,7 +70,7 @@ set(INTERFACE_DEPENDENCIES ${INTERFACE_DEPS})
 
 generate_cbm_executable()
 
-# diabled until T0 is implemented in unpackers
+# disabled until T0 is implemented in unpackers
 #
 #set(EXE_NAME BuildRawEvents)
 #set(SRCS CbmDeviceBuildRawEvents.cxx runBuildRawEvents.cxx)
@@ -110,7 +110,7 @@ set(INTERFACE_DEPENDENCIES ${INTERFACE_DEPS})
 
 generate_cbm_executable()
 
-# diabled until T0 is implemented in unpackers
+# disabled until T0 is implemented in unpackers
 #
 #set(EXE_NAME BuildDigiEvents)
 #set(SRCS CbmDeviceBuildDigiEvents.cxx runBuildDigiEvents.cxx)
diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
index 5d3145d184..09c56abeab 100644
--- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
+++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
@@ -131,6 +131,7 @@ void CbmAlgoBuildRawEvents::ProcessTs()
     /// TODO: store start time of current event ?
     //        fCurrentEvent->SetStartTime( fPrevTime ); // Replace Seed time with time of first digi in event?
     fCurrentEvent->SetEndTime(fdPrevEvtEndTime);
+    SetBmonEventTime(fCurrentEvent);
     fEventVector.push_back(fCurrentEvent);
     fuCurEv++;
 
@@ -347,10 +348,12 @@ void CbmAlgoBuildRawEvents::CheckSeed(Double_t dSeedTime, UInt_t uSeedDigiIdx)
       /// TODO: store start time of current event ?
       //        fCurrentEvent->SetStartTime( fPrevTime ); // Replace Seed time with time of first digi in event?
       fCurrentEvent->SetEndTime(fdPrevEvtEndTime);
+      SetBmonEventTime(fCurrentEvent);
       fEventVector.push_back(fCurrentEvent);
+
       fuCurEv++;
     }
-    fCurrentEvent = new CbmEvent(fuCurEv, dSeedTime, 0.);
+    fCurrentEvent = new CbmEvent(fuCurEv, -1, 0.);
   }  // else of if( prev Event exists and mode forbiden overlap present )
 
   if (fRefDet.detId != ECbmModuleId::kNotExist) {
@@ -608,6 +611,23 @@ Bool_t CbmAlgoBuildRawEvents::HasTrigger(CbmEvent* event)
   return kTRUE;
 }
 
+void CbmAlgoBuildRawEvents::SetBmonEventTime(CbmEvent* event)
+{
+  int32_t iNbDigis = event->GetNofData(ECbmDataType::kT0Digi);
+
+  if (0 < iNbDigis) {
+    double eventTime = 0;
+    for (int idigi = 0; idigi < iNbDigis; ++idigi) {
+      uint idx                 = event->GetIndex(ECbmDataType::kT0Digi, idigi);
+      const CbmBmonDigi* pDigi = GetDigi<CbmBmonDigi>(idx);
+      if (nullptr == pDigi) continue;
+      eventTime += pDigi->GetTime();
+    }
+    eventTime /= iNbDigis;
+    event->SetStartTime(eventTime);
+  }
+}
+
 Bool_t CbmAlgoBuildRawEvents::CheckTriggerConditions(CbmEvent* event, const RawEventBuilderDetector& det)
 {
   /// Check if both Trigger conditions disabled for this detector
diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
index e50d1dc6c2..41570b4d72 100644
--- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
+++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
@@ -250,6 +250,8 @@ private:
   void UpdateTimeWinBoundariesExtrema();
   void UpdateWidestTimeWinRange();
 
+  void SetBmonEventTime(CbmEvent* event);
+
   TFolder* outFolder;  // oputput folder to store histograms
 
   /// Constants
diff --git a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx
index b93da47128..065039eacc 100644
--- a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx
+++ b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx
@@ -4,6 +4,7 @@
 
 #include "CbmSeedFinderSlidingWindow.h"
 
+#include "CbmBmonDigi.h"
 #include "CbmMCEventList.h"
 #include "CbmMatch.h"
 #include "CbmMuchBeamTimeDigi.h"
@@ -126,6 +127,7 @@ void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<inType>* vIn, c
   //            << std::endl;
   //}
 }
+template void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<CbmBmonDigi>*, const std::vector<CbmMatch>*);
 template void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<CbmMuchBeamTimeDigi>*,
                                                         const std::vector<CbmMatch>*);
 template void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<CbmMuchDigi>*, const std::vector<CbmMatch>*);
-- 
GitLab