From 6f50ba8141c0aab640ef2b052e915941d875cf49 Mon Sep 17 00:00:00 2001
From: "s.zharko@gsi.de" <s.zharko@gsi.de>
Date: Sun, 18 Feb 2024 23:16:20 +0100
Subject: [PATCH] online: A configuration file is added for the tracking chain

This commit introduces the configuration header TrackingChainConfig, which contains
a minimalistic set of parameters to control the TrackingChain execution scenarios.
---
 algo/CMakeLists.txt                 |  1 +
 algo/ca/TrackingChain.cxx           | 12 ++++++++----
 algo/ca/TrackingChain.h             |  1 -
 algo/ca/TrackingChainConfig.h       | 29 +++++++++++++++++++++++++++++
 algo/ca/core/tracking/CaFramework.h |  2 +-
 5 files changed, 39 insertions(+), 6 deletions(-)
 create mode 100644 algo/ca/TrackingChainConfig.h

diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt
index 9de6731fcd..3790983c8a 100644
--- a/algo/CMakeLists.txt
+++ b/algo/CMakeLists.txt
@@ -238,6 +238,7 @@ install(
     global/RecoResultsOutputArchive.h
     global/StorableRecoResults.h
     ca/TrackingChain.h
+    ca/TrackingChainConfig.h
     # NOTE: SZh 20.11.2023:
     #       The ca/qa directory depends on the online qa classes, so for now it has to be a part of the Algo library.
     ca/qa/CaQaBuilder.h
diff --git a/algo/ca/TrackingChain.cxx b/algo/ca/TrackingChain.cxx
index a16a285ef2..58d90696c7 100644
--- a/algo/ca/TrackingChain.cxx
+++ b/algo/ca/TrackingChain.cxx
@@ -1,4 +1,4 @@
-/* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
+/* Copyright (C) 2023-2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Sergei Zharko [committer] */
 
@@ -13,6 +13,8 @@
 #include "CaHit.h"
 #include "CaInitManager.h"
 #include "CaParameters.h"
+#include "TrackingChainConfig.h"
+#include "config/Yaml.h"
 #include "tof/Config.h"
 
 #include <fstream>
@@ -40,10 +42,11 @@ TrackingChain::TrackingChain(std::shared_ptr<HistogramSender> histoSender) : fQa
 //
 void TrackingChain::Init()
 {
+  // ------ Read tracking chain parameters from the config
+  auto config = config::ReadFromFile<TrackingChainConfig>(Opts().ParamsDir() / "CaConfig.yaml");
+
   // ------ Read parameters from binary
-  std::string paramFileBase = "mcbm_beam_2022_05_23_nickel.ca.par";  // TODO: Get the setup name from Opts()
-  auto paramFile            = Opts().ParamsDir();
-  paramFile /= paramFileBase;
+  auto paramFile = Opts().ParamsDir() / config.fsParName;
   L_(info) << "Tracking Chain: reading CA parameters file " << GNb << paramFile.string() << CL << '\n';
   auto manager = InitManager{};
   manager.ReadParametersObject(paramFile.string());
@@ -52,6 +55,7 @@ void TrackingChain::Init()
 
   // ------ Initialize CA framework
   fCaMonitor.Reset();
+  fCaFramework.SetNofThreads(config.fNofThreads);
   fCaFramework.Init(ca::Framework::TrackingMode::kMcbm);
   fCaFramework.ReceiveParameters(std::move(parameters));
 
diff --git a/algo/ca/TrackingChain.h b/algo/ca/TrackingChain.h
index 782a6c67a8..694ed96be2 100644
--- a/algo/ca/TrackingChain.h
+++ b/algo/ca/TrackingChain.h
@@ -23,7 +23,6 @@
 #include "TrackingDefs.h"
 #include "sts/Hit.h"
 #include "tof/Hit.h"
-
 #include <memory>
 #include <vector>
 
diff --git a/algo/ca/TrackingChainConfig.h b/algo/ca/TrackingChainConfig.h
new file mode 100644
index 0000000000..bf765e927a
--- /dev/null
+++ b/algo/ca/TrackingChainConfig.h
@@ -0,0 +1,29 @@
+/* Copyright (C) 2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Sergei Zharko [committer] */
+
+/// \file   TrackingChainConfig.h
+/// \date   18.02.2024
+/// \brief  A configuration reader for the TrackingChain class
+/// \author Sergei Zharko <s.zharko@gsi.de>
+
+#pragma once
+
+#include "config/Property.h"
+
+#include <string>
+#include <tuple>
+
+namespace cbm::algo
+{
+  /// \struct TrackingChainConfig
+  /// \brief Configuration reader for the TrackingChain class
+  struct TrackingChainConfig {
+    int fNofThreads;        ///< Number of threads for tracking
+    std::string fsParName;  ///< Tracking parameter file name
+
+    static constexpr auto Properties =
+      std::make_tuple(config::Property(&TrackingChainConfig::fNofThreads, "NofThreads", "Number of threads"),
+                      config::Property(&TrackingChainConfig::fsParName, "ParName", "CA parameters input"));
+  };
+}  // namespace cbm::algo
diff --git a/algo/ca/core/tracking/CaFramework.h b/algo/ca/core/tracking/CaFramework.h
index 40943de475..2aa292e237 100644
--- a/algo/ca/core/tracking/CaFramework.h
+++ b/algo/ca/core/tracking/CaFramework.h
@@ -197,7 +197,7 @@ namespace cbm::algo::ca
     // const CbmL1MCTrack* GetMcTrackForWindowHit(int iHit) const;
 
     /// \brief Sets number of threads
-    void SetNofThtreads(int nThreads)
+    void SetNofThreads(int nThreads)
     {
       fNofThreads = nThreads;
       assert(nThreads > 0);
-- 
GitLab