From c03360507e33295be2fbf722ce4c9f0bdb1fd9fc Mon Sep 17 00:00:00 2001
From: "s.zharko@gsi.de" <s.zharko@gsi.de>
Date: Sat, 21 Oct 2023 18:52:15 +0200
Subject: [PATCH] online CA: added monitor to TrackingChain

---
 algo/ca/TrackingChain.cxx | 14 +++++++++++---
 algo/ca/TrackingChain.h   | 14 +++++++++-----
 algo/global/Reco.cxx      | 20 ++++++++++++++++++++
 algo/global/Reco.h        |  1 +
 4 files changed, 41 insertions(+), 8 deletions(-)

diff --git a/algo/ca/TrackingChain.cxx b/algo/ca/TrackingChain.cxx
index f1b1bf1e73..a1d1dfc917 100644
--- a/algo/ca/TrackingChain.cxx
+++ b/algo/ca/TrackingChain.cxx
@@ -22,6 +22,7 @@ using cbm::algo::ca::Track;
 using cbm::algo::ca::constants::clrs::CL;   // clear text
 using cbm::algo::ca::constants::clrs::GNb;  // grin bald text
 
+
 // ---------------------------------------------------------------------------------------------------------------------
 //
 void TrackingChain::Init()
@@ -40,10 +41,17 @@ void TrackingChain::Init()
 
 // ---------------------------------------------------------------------------------------------------------------------
 //
-std::vector<Track> TrackingChain::Run(/*vectors of hits*/)
+TrackingChain::Return_t TrackingChain::Run(/*vectors of hits*/)
 {
-  std::vector<Track> vRecoTracks;
-  return vRecoTracks;
+  ca::Vector<ca::Track> vRecoTracks;
+  ca::TrackingMonitorData monitorData;
+
+  // ----- Init input data ---------------------------------------------------------------------------------------------
+
+  // ----- Run reconstruction ------------------------------------------------------------------------------------------
+
+  // ----- Init output data --------------------------------------------------------------------------------------------
+  return std::make_pair(vRecoTracks, monitorData);
 }
 
 // ---------------------------------------------------------------------------------------------------------------------
diff --git a/algo/ca/TrackingChain.h b/algo/ca/TrackingChain.h
index 4983487652..f1cd00e99a 100644
--- a/algo/ca/TrackingChain.h
+++ b/algo/ca/TrackingChain.h
@@ -13,6 +13,8 @@
 #include <vector>
 
 #include "CaTrack.h"
+#include "CaVector.h"
+#include "CaTrackingMonitor.h"
 #include "SubChain.h"
 
 namespace cbm::algo::ca
@@ -40,14 +42,16 @@ namespace cbm::algo
   /// The class executes a tracking algorithm in the online data reconstruction chain.
   class TrackingChain : public SubChain {
   public:
-    /// @brief  Provides action in the initialization of the run
+    using Return_t = std::pair<ca::Vector<ca::Track>, ca::TrackingMonitorData>;
+
+    /// \brief  Provides action in the initialization of the run
     void Init();
 
-    /// @brief  Provides action for a given time-slice
-    /// @return A vector of cbm::algo::ca::Track
-    std::vector<ca::Track> Run(/*vecotrs of hits*/);
+    /// \brief  Provides action for a given time-slice
+    /// \return A vector of cbm::algo::ca::Track
+    Return_t Run(/*vecotrs of hits*/);
 
-    /// @brief  Provides action in the end of the run
+    /// \brief  Provides action in the end of the run
     void Finalize();
   };
 }  // namespace cbm::algo
diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx
index 75ae721b05..ff293c2a85 100644
--- a/algo/global/Reco.cxx
+++ b/algo/global/Reco.cxx
@@ -149,6 +149,9 @@ RecoResults Reco::Run(const fles::Timeslice& ts)
   if (Opts().HasOutput(RecoData::DigiEvent)) results.events = std::move(events);
   if (Opts().HasOutput(RecoData::Hit)) results.stsHits = std::move(stsHits);
 
+  // --- Tracking
+  TrackingChain::Return_t trackingOutput = fTracking.Run();
+
   return results;
 }
 
@@ -288,3 +291,20 @@ void Reco::QueueEvbuildMetrics(const evbuild::EventbuildChainMonitorData& mon)
                             {"numEvents", mon.evbuild.nEvents},
                             {"totalEvSelectionRatio", totalSelectionRatio}});
 }
+
+void Reco::QueueTrackingRecoMetrics(const ca::TrackingMonitorData& monitor)
+{
+  if (!HasMonitor()) { return; } 
+
+  GetMonitor().QueueMetric("cbmreco", {{"hostname", fles::system::current_hostname()}, {"child", Opts().ChildId()}},
+                           {
+                             {"caRecoTimeTotal", monitor.GetTimer(ca::ETimer::Tracking).GetTotal()},
+                             {"caTrackFinderTime", monitor.GetTimer(ca::ETimer::TrackFinder).GetTotal()},
+                             {"caTrackFitterTime", monitor.GetTimer(ca::ETimer::TrackFitter).GetTotal()},
+                             {"caNofRecoTracks", monitor.GetCounterValue(ca::ECounter::RecoTrack)},
+                             {"caNofRecoHitsTotal", monitor.GetCounterValue(ca::ECounter::RecoHit)},
+                             {"caNofRecoHitsUsed", monitor.GetCounterValue(ca::ECounter::RecoHitUsed)},
+                             {"caNofWindowa", monitor.GetCounterValue(ca::ECounter::SubTS)}
+                           });
+}
+
diff --git a/algo/global/Reco.h b/algo/global/Reco.h
index 7ce0bb2a73..05989804b7 100644
--- a/algo/global/Reco.h
+++ b/algo/global/Reco.h
@@ -62,6 +62,7 @@ namespace cbm::algo
     void QueueUnpackerMetrics(const fles::Timeslice&, const UnpackMonitorData&, const DigiData&);
     void QueueStsRecoMetrics(const sts::HitfinderMonitor&);
     void QueueEvbuildMetrics(const evbuild::EventbuildChainMonitorData&);
+    void QueueTrackingRecoMetrics(const ca::TrackingMonitorData&);
   };
 }  // namespace cbm::algo
 
-- 
GitLab