From 4e058891e9608b74d6cce1dd0e3970070b7627b3 Mon Sep 17 00:00:00 2001
From: Dominik Smith <d.smith@gsi.de>
Date: Thu, 3 Mar 2022 15:48:29 +0100
Subject: [PATCH] CbmSeedFinderSlidingWindow: Fixed issue whereby seed finder
 still required digi input to be present in ideal mode.

---
 .../digis/CbmSeedFinderSlidingWindow.cxx        | 10 ++++++++++
 .../digis/CbmSeedFinderSlidingWindow.h          |  4 ++++
 .../digis/CbmTaskBuildRawEvents.cxx             | 17 +++++++++++------
 3 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx
index bca3bcc80b..b93da47128 100644
--- a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx
+++ b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx
@@ -136,6 +136,16 @@ template void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<CbmTof
 template void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<CbmTrdDigi>*, const std::vector<CbmMatch>*);
 template void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<double>*, const std::vector<CbmMatch>*);
 
+void CbmSeedFinderSlidingWindow::FillSeedTimes()
+{
+  if (!fbIdealMode) {
+    std::cout << "CbmSeedFinderSlidingWindow: Error, called algo without digi input, but ideal mode is not set."
+              << std::endl;
+    exit(1);
+  }
+  FillSeedTimes<double>(nullptr);
+}
+
 template<class inType>
 double CbmSeedFinderSlidingWindow::GetTime(const std::vector<inType>* vIn, int32_t i)
 {
diff --git a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.h b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.h
index 5c2b49b5bf..7c891fcf88 100644
--- a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.h
+++ b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.h
@@ -63,6 +63,10 @@ public:
   template<class inType>
   void FillSeedTimes(const std::vector<inType>* vIn, const std::vector<CbmMatch>* vDigiMatch = nullptr);
 
+  /** @brief Function which builds event seeds without digi input. Can only be used in ideal mode.
+  **/
+  void FillSeedTimes();
+
   /** @brief Sets a global constant offset which is applied to each trigger time
    * @params Value of offset 
    **/
diff --git a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx
index 658e741aee..fbbced420d 100644
--- a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx
+++ b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx
@@ -59,11 +59,11 @@ void CbmTaskBuildRawEvents::SetSlidingWindowSeedFinder(int32_t minDigis, double
     delete fSeedFinderSlidingWindow;
     fSeedFinderSlidingWindow = nullptr;
   }
-  fSeedFinderSlidingWindow = new CbmSeedFinderSlidingWindow(fSeedTimes, minDigis, dWindDur, dDeadT);
-  fSeedFinderSlidingWindow->SetOffset(dOffset);
-
   if (fSeedTimes == nullptr) { fSeedTimes = new std::vector<Double_t>; }
   fpAlgo->SetSeedTimes(fSeedTimes);
+
+  fSeedFinderSlidingWindow = new CbmSeedFinderSlidingWindow(fSeedTimes, minDigis, dWindDur, dDeadT);
+  fSeedFinderSlidingWindow->SetOffset(dOffset);
 }
 
 void CbmTaskBuildRawEvents::SetSeedFinderQa(Bool_t bFlagIn)
@@ -186,7 +186,6 @@ InitStatus CbmTaskBuildRawEvents::Init()
     return kFATAL;
 }
 
-
 InitStatus CbmTaskBuildRawEvents::ReInit() { return kSUCCESS; }
 
 void CbmTaskBuildRawEvents::Exec(Option_t* /*option*/)
@@ -371,8 +370,14 @@ void CbmTaskBuildRawEvents::FillSeedTimesFromDetList(std::vector<Double_t>* vdSe
 void CbmTaskBuildRawEvents::FillSeedTimesFromSlidingWindow()
 {
   if (fSeedTimeDetList.size() == 0) {
-    std::cout << "FillSeedTimesFromSlidingWindow(): Error, seed detector list empty." << std::endl;
-    exit(1);
+    if (fSeedFinderSlidingWindow->IsIdealMode()) {
+      fSeedFinderSlidingWindow->FillSeedTimes();
+      return;
+    }
+    else {
+      std::cout << "FillSeedTimesFromSlidingWindow(): Error, seed detector list empty." << std::endl;
+      exit(1);
+    }
   }
   if (fSeedTimeDetList.size() == 1) {
     const RawEventBuilderDetector seedDet = fSeedTimeDetList.at(0);
-- 
GitLab