From 6076e7d8a4e3d601a9ccbbeac7b0c19b5d02f768 Mon Sep 17 00:00:00 2001
From: Dominik Smith <d.smith@gsi.de>
Date: Thu, 10 Feb 2022 15:52:37 +0100
Subject: [PATCH] BuildRawEvents (task and algo) now filters T0 digis from the
 Tof stream using their address (also for QA and seed finder).

---
 .../digis/CbmAlgoBuildRawEvents.cxx           | 13 ++++++--
 .../digis/CbmAlgoBuildRawEvents.h             |  2 ++
 reco/eventbuilder/digis/CbmBuildEventsQa.cxx  |  1 -
 .../digis/CbmTaskBuildRawEvents.cxx           | 32 ++++++++++++++++++-
 4 files changed, 44 insertions(+), 4 deletions(-)

diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
index 2472bcc450..d4edd07e30 100644
--- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
+++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
@@ -284,8 +284,13 @@ void CbmAlgoBuildRawEvents::LoopOnSeeds()
     /// Loop on size of vector
     for (UInt_t uDigi = 0; uDigi < uNbRefDigis; ++uDigi) {
       LOG(debug) << Form("Checking seed %6u / %6u", uDigi, uNbRefDigis);
+
       const DigiSeed* pDigi = GetDigi<DigiSeed>(uDigi);
-      const Double_t dTime  = pDigi->GetTime();
+
+      // filter T0 digis from Tof (remove this line if T0 properly implemented)
+      if (fRefDet.detId == ECbmModuleId::kTof && pDigi->GetAddress() == fuT0Address) { continue; }
+
+      const Double_t dTime = pDigi->GetTime();
 
       /// Check if seed in acceptance window
       if (dTime < fdSeedWindowBeg) { continue; }
@@ -449,7 +454,11 @@ void CbmAlgoBuildRawEvents::SearchMatches(Double_t dSeedTime, RawEventBuilderDet
     const UInt_t uNbSelDigis = GetNofDigis(detMatch.detId);
     /// Loop on size of vector
     for (UInt_t uDigi = detMatch.fuStartIndex; uDigi < uNbSelDigis; ++uDigi) {
-      const DigiCheck* pDigi   = GetDigi<DigiCheck>(uDigi);
+      const DigiCheck* pDigi = GetDigi<DigiCheck>(uDigi);
+
+      // filter T0 digis from Tof (remove this line if T0 properly implemented)
+      if (detMatch.detId == ECbmModuleId::kTof && pDigi->GetAddress() == fuT0Address) { continue; }
+
       const Double_t dTime     = pDigi->GetTime();
       const Double_t dTimeDiff = dTime - dSeedTime;
       LOG(debug4) << detMatch.sName << Form(" => Checking match %6u / %6u, dt %f", uDigi, uNbSelDigis, dTimeDiff);
diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
index 2a605c46fa..fda3e2835c 100644
--- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
+++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
@@ -107,6 +107,8 @@ static const RawEventBuilderDetector kRawEventBuilderDetUndef = RawEventBuilderD
 
 class CbmAlgoBuildRawEvents {
 public:
+  const static uint32_t fuT0Address = 10246;
+
   /** Default constructor **/
   CbmAlgoBuildRawEvents() = default;
 
diff --git a/reco/eventbuilder/digis/CbmBuildEventsQa.cxx b/reco/eventbuilder/digis/CbmBuildEventsQa.cxx
index 13e10df2ee..6208af5764 100644
--- a/reco/eventbuilder/digis/CbmBuildEventsQa.cxx
+++ b/reco/eventbuilder/digis/CbmBuildEventsQa.cxx
@@ -15,7 +15,6 @@
 #include "CbmMatch.h"
 #include "CbmModuleList.h"
 #include "CbmQaCanvas.h"
-#include "CbmStsDigi.h"
 
 #include "FairRootManager.h"
 #include <Logger.h>
diff --git a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx
index 5944b7a03d..ff3447e72b 100644
--- a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx
+++ b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.cxx
@@ -332,6 +332,14 @@ void CbmTaskBuildRawEvents::FillSeedTimesFromDetList(std::vector<Double_t>* vdSe
 
     for (RawEventBuilderDetector& system : fSeedTimeDetList) {
       if (DigiCounters[system.detId] < DigiNumbers[system.detId]) {
+
+        // filter T0 digis from Tof (remove this statement if T0 properly implemented)
+        if (system.detId == ECbmModuleId::kTof
+            && (fTofDigis->at(DigiCounters[system.detId])).GetAddress() == CbmAlgoBuildRawEvents::fuT0Address) {
+          DigiCounters[system.detId]++;
+          continue;
+        }  // end of T0 filter
+
         Double_t thisTime = GetDigiTime(system.detId, DigiCounters[system.detId]);
         if (thisTime < earliestTime || earliestTime == -1) {
           nextAddedSystem = system.detId;
@@ -340,6 +348,7 @@ void CbmTaskBuildRawEvents::FillSeedTimesFromDetList(std::vector<Double_t>* vdSe
       }
     }
     if (earliestTime != -1) {
+
       if (vDigiMatch != nullptr) {
         const CbmMatch* digiMatch = fDigiMan->GetMatch(nextAddedSystem, DigiCounters[nextAddedSystem]);
         vDigiMatch->push_back(*digiMatch);
@@ -380,6 +389,13 @@ void CbmTaskBuildRawEvents::FillSeedTimesFromSlidingWindow(const RawEventBuilder
     }
     fvDigiMatchQa->clear();
     for (Int_t i = 0; i < fDigiMan->GetNofDigis(seedDet->detId); i++) {
+
+      // filter T0 digis from Tof (remove this statement if T0 properly implemented)
+      if (seedDet->detId == ECbmModuleId::kTof
+          && (fTofDigis->at(i)).GetAddress() == CbmAlgoBuildRawEvents::fuT0Address) {
+        continue;
+      }  // end of T0 filter
+
       const CbmMatch* digiMatch = fDigiMan->GetMatch(seedDet->detId, i);
       fvDigiMatchQa->push_back(*digiMatch);
     }
@@ -397,7 +413,21 @@ void CbmTaskBuildRawEvents::FillSeedTimesFromSlidingWindow(const RawEventBuilder
       }
     case ECbmModuleId::kSts: fSeedFinderSlidingWindow->FillSeedTimes(fStsDigis, fvDigiMatchQa); break;
     case ECbmModuleId::kTrd: fSeedFinderSlidingWindow->FillSeedTimes(fTrdDigis, fvDigiMatchQa); break;
-    case ECbmModuleId::kTof: fSeedFinderSlidingWindow->FillSeedTimes(fTofDigis, fvDigiMatchQa); break;
+    case ECbmModuleId::kTof: {
+
+      // filter T0 digis from Tof (remove this statement if T0 properly implemented)
+      std::vector<CbmTofDigi> vFilteredTofDigis;
+      for (const auto& tofDigi : *fTofDigis) {
+        if (tofDigi.GetAddress() == CbmAlgoBuildRawEvents::fuT0Address) { continue; }
+        vFilteredTofDigis.push_back(tofDigi);
+      }
+      fSeedFinderSlidingWindow->FillSeedTimes(&vFilteredTofDigis, fvDigiMatchQa);
+      break;
+      // end of T0 filter
+
+      //original version (no T0 filter)
+      //fSeedFinderSlidingWindow->FillSeedTimes(fTofDigis, fvDigiMatchQa); break;
+    }
     case ECbmModuleId::kRich: fSeedFinderSlidingWindow->FillSeedTimes(fRichDigis, fvDigiMatchQa); break;
     case ECbmModuleId::kPsd: fSeedFinderSlidingWindow->FillSeedTimes(fPsdDigis, fvDigiMatchQa); break;
     case ECbmModuleId::kT0: fSeedFinderSlidingWindow->FillSeedTimes(fT0Digis, fvDigiMatchQa); break;
-- 
GitLab