diff --git a/algo/CMakeLists.txt b/algo/CMakeLists.txt index 9de6731fcd03d154c9fe2b33b246accd127cb65e..3790983c8a3d1fee99bd2a0c885ca2b8f89aa3a3 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 a16a285ef205c7e51df9dd23289d0b6c58ba087c..58d90696c7c5db4d26f3c7fec028f5ca33c87dde 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 782a6c67a88617c255858be345f92baf6a24acf9..694ed96be230008a4c12c7c6435a32b227ad66f4 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 0000000000000000000000000000000000000000..bf765e927aa5a307e047e61ad94d1d9954941a3f --- /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 40943de475ca7acab36411dd0e4684b0ca12f1b6..2aa292e237a636179a2d61f508bf062b5e58b254 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);