From f4b749fb886285239cd4fc0ce61d520bf1e2c040 Mon Sep 17 00:00:00 2001
From: "P.-A. Loizeau" <p.-a.loizeau@gsi.de>
Date: Thu, 21 Mar 2024 12:06:29 +0100
Subject: [PATCH] [online] add all detectors in digi dump to output file

---
 algo/global/Reco.cxx              | 12 ++++++--
 algo/global/RecoResults.h         | 14 +++++++--
 algo/global/StorableRecoResults.h | 48 +++++++++++++++++++++++++++----
 reco/app/cbmreco/main.cxx         | 16 ++++++++---
 4 files changed, 77 insertions(+), 13 deletions(-)

diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx
index e793f22184..e308d7dc3f 100644
--- a/algo/global/Reco.cxx
+++ b/algo/global/Reco.cxx
@@ -1,6 +1,6 @@
 /* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
-   Authors: Felix Weiglhofer [committer] */
+   Authors: Felix Weiglhofer [committer], P.-A. Loizeau */
 #include "Reco.h"
 
 #include "BuildInfo.h"
@@ -279,7 +279,15 @@ RecoResults Reco::Run(const fles::Timeslice& ts)
       QueueTrackingMetrics(trackingOutput.monitorData);
     }
 
-    if (Opts().HasOutput(RecoData::RawDigi)) results.stsDigis = std::move(digis.fSts);
+    if (Opts().HasOutput(RecoData::RawDigi)) {
+      results.bmonDigis  = std::move(digis.fBmon);
+      results.stsDigis   = std::move(digis.fSts);
+      results.muchDigis  = std::move(digis.fMuch);
+      results.trd2dDigis = std::move(digis.fTrd2d);
+      results.trdDigis   = std::move(digis.fTrd);
+      results.tofDigis   = std::move(digis.fTof);
+      results.richDigis  = std::move(digis.fRich);
+    }
     if (Opts().HasOutput(RecoData::DigiEvent)) results.events = std::move(events);
     if (Opts().HasOutput(RecoData::Cluster)) results.stsClusters = std::move(stsClusters);
     if (Opts().HasOutput(RecoData::Hit)) {
diff --git a/algo/global/RecoResults.h b/algo/global/RecoResults.h
index 4fa01c8f16..f40212ae11 100644
--- a/algo/global/RecoResults.h
+++ b/algo/global/RecoResults.h
@@ -1,6 +1,6 @@
 /* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
    SPDX-License-Identifier: GPL-3.0-only
-   Authors: Sergei Zharko [committer], Felix Weiglhofer */
+   Authors: Sergei Zharko [committer], Felix Weiglhofer, P.-A. Loizeau */
 
 /// \file   RecoResults.h
 /// \date   22.10.2023
@@ -25,11 +25,21 @@ namespace cbm::algo
   /// @name RecoResults
   /// @brief  Structure to keep reconstructed results: digi-events, hits and tracks
   struct RecoResults {
-    std::vector<DigiEvent> events;
+    PODVector<CbmBmonDigi> bmonDigis;
     PODVector<CbmStsDigi> stsDigis;
+    PODVector<CbmMuchDigi> muchDigis;
+    PODVector<CbmTrdDigi> trd2dDigis;
+    PODVector<CbmTrdDigi> trdDigis;
+    PODVector<CbmTofDigi> tofDigis;
+    PODVector<CbmRichDigi> richDigis;
+
+    std::vector<DigiEvent> events;
+
     PartitionedVector<sts::Cluster> stsClusters;
+
     PartitionedSpan<sts::Hit> stsHits;
     PartitionedVector<tof::Hit> tofHits;
+
     ca::Vector<ca::Track> tracks;
     ca::Vector<std::vector<std::pair<uint32_t, uint32_t>>> trackStsHitIndices;
     ca::Vector<std::vector<std::pair<uint32_t, uint32_t>>> trackTofHitIndices;
diff --git a/algo/global/StorableRecoResults.h b/algo/global/StorableRecoResults.h
index 818a981caa..dc44a3acff 100644
--- a/algo/global/StorableRecoResults.h
+++ b/algo/global/StorableRecoResults.h
@@ -1,6 +1,6 @@
 /* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
    SPDX-License-Identifier: GPL-3.0-only
-   Authors: Felix Weiglhofer [committer] */
+   Authors: Felix Weiglhofer [committer], P.-A. Loizeau */
 #ifndef CBM_ALGO_GLOBAL_STORABLE_RECO_RESULTS_H
 #define CBM_ALGO_GLOBAL_STORABLE_RECO_RESULTS_H
 
@@ -43,12 +43,30 @@ namespace cbm::algo
      */
     uint64_t TsStartTime() const { return fTsStartTime; }
 
-    std::vector<CbmDigiEvent>& DigiEvents() { return fDigiEvents; }
-    const std::vector<CbmDigiEvent>& DigiEvents() const { return fDigiEvents; }
+    std::vector<CbmBmonDigi>& BmonDigis() { return fBmonDigis; }
+    const std::vector<CbmBmonDigi>& BmonDigis() const { return fBmonDigis; }
 
     std::vector<CbmStsDigi>& StsDigis() { return fStsDigis; }
     const std::vector<CbmStsDigi>& StsDigis() const { return fStsDigis; }
 
+    std::vector<CbmMuchDigi>& MuchDigis() { return fMuchDigis; }
+    const std::vector<CbmMuchDigi>& MuchDigis() const { return fMuchDigis; }
+
+    std::vector<CbmTrdDigi>& Trd2dDigis() { return fTrd2dDigis; }
+    const std::vector<CbmTrdDigi>& Trd2dDigis() const { return fTrd2dDigis; }
+
+    std::vector<CbmTrdDigi>& TrdDigis() { return fTrdDigis; }
+    const std::vector<CbmTrdDigi>& TrdDigis() const { return fTrdDigis; }
+
+    std::vector<CbmTofDigi>& TofDigis() { return fTofDigis; }
+    const std::vector<CbmTofDigi>& TofDigis() const { return fTofDigis; }
+
+    std::vector<CbmRichDigi>& RichDigis() { return fRichDigis; }
+    const std::vector<CbmRichDigi>& RichDigis() const { return fRichDigis; }
+
+    std::vector<CbmDigiEvent>& DigiEvents() { return fDigiEvents; }
+    const std::vector<CbmDigiEvent>& DigiEvents() const { return fDigiEvents; }
+
     PartitionedVector<sts::Cluster>& StsClusters() { return fStsClusters; }
     const PartitionedVector<sts::Cluster>& StsClusters() const { return fStsClusters; }
 
@@ -71,8 +89,19 @@ namespace cbm::algo
     uint64_t fTsIndex     = UINT64_MAX;
     uint64_t fTsStartTime = UINT64_MAX;
 
-    std::vector<CbmDigiEvent> fDigiEvents;
+    // Unpackers output
+    std::vector<CbmBmonDigi> fBmonDigis;
     std::vector<CbmStsDigi> fStsDigis;
+    std::vector<CbmMuchDigi> fMuchDigis;
+    std::vector<CbmTrdDigi> fTrd2dDigis;
+    std::vector<CbmTrdDigi> fTrdDigis;
+    std::vector<CbmTofDigi> fTofDigis;
+    std::vector<CbmRichDigi> fRichDigis;
+
+    // Event builder/filter output
+    std::vector<CbmDigiEvent> fDigiEvents;
+
+    // Local Reconstruction output
     PartitionedVector<sts::Cluster> fStsClusters;
     PartitionedVector<sts::Hit> fStsHits;
     PartitionedVector<tof::Hit> fTofHits;
@@ -96,11 +125,20 @@ namespace cbm::algo
       ar& fTsIndex;
       ar& fTsStartTime;
 
-      ar& fDigiEvents;
+      ar& fBmonDigis;
       ar& fStsDigis;
+      ar& fMuchDigis;
+      ar& fTrd2dDigis;
+      ar& fTrdDigis;
+      ar& fTofDigis;
+      ar& fRichDigis;
+
+      ar& fDigiEvents;
+
       ar& fStsClusters;
       ar& fStsHits;
       ar& fTofHits;
+
       ar& fTracks;
       ar& fTrackStsHitIndices;
       ar& fTrackTofHitIndices;
diff --git a/reco/app/cbmreco/main.cxx b/reco/app/cbmreco/main.cxx
index 475ceef3fe..8b2153b5ac 100644
--- a/reco/app/cbmreco/main.cxx
+++ b/reco/app/cbmreco/main.cxx
@@ -30,10 +30,18 @@ std::shared_ptr<StorableRecoResults> makeStorableRecoResults(const fles::Timesli
   }
 
   // TODO: some of these copies can be avoided / made into moves
-  storable->StsDigis()           = ToStdVector(results.stsDigis);
-  storable->StsClusters()        = results.stsClusters;
-  storable->StsHits()            = results.stsHits;
-  storable->TofHits()            = results.tofHits;
+  storable->BmonDigis()  = ToStdVector(results.bmonDigis);
+  storable->StsDigis()   = ToStdVector(results.stsDigis);
+  storable->MuchDigis()  = ToStdVector(results.muchDigis);
+  storable->Trd2dDigis() = ToStdVector(results.trd2dDigis);
+  storable->TrdDigis()   = ToStdVector(results.trdDigis);
+  storable->TofDigis()   = ToStdVector(results.tofDigis);
+  storable->RichDigis()  = ToStdVector(results.richDigis);
+
+  storable->StsClusters() = results.stsClusters;
+  storable->StsHits()     = results.stsHits;
+  storable->TofHits()     = results.tofHits;
+
   storable->Tracks()             = results.tracks;
   storable->TrackStsHitIndices() = results.trackStsHitIndices;
   storable->TrackTofHitIndices() = results.trackTofHitIndices;
-- 
GitLab