From 93a389f1204835b116b00b8d92c6f3d5b3d2eff0 Mon Sep 17 00:00:00 2001
From: "s.zharko@gsi.de" <s.zharko@gsi.de>
Date: Mon, 25 Mar 2024 13:52:24 +0100
Subject: [PATCH] ca Bugfix: account for inactive tracking stations in material
 budget map calculation read from ca config

---
 algo/ca/core/pars/CaInitManager.cxx | 28 +++++++++++++++++-----------
 algo/ca/core/pars/CaInitManager.h   |  2 ++
 reco/L1/CbmL1.cxx                   |  8 +++++++-
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/algo/ca/core/pars/CaInitManager.cxx b/algo/ca/core/pars/CaInitManager.cxx
index 0a56fdc9ca..b2318db200 100644
--- a/algo/ca/core/pars/CaInitManager.cxx
+++ b/algo/ca/core/pars/CaInitManager.cxx
@@ -115,13 +115,8 @@ void InitManager::ClearCAIterations()
 bool InitManager::FormParametersContainer()
 {
   // Read configuration files
-  LOG(info) << "ca::InitManager: reading parameter configuration ...";
-  try {
-    this->ReadInputConfigs();
-    LOG(info) << "ca::InitManager: reading parameter configuration ... \033[1;32mdone\033[0m";
-  }
-  catch (const std::runtime_error& err) {
-    LOG(error) << "ca::InitManager: reading parameter configuration ... \033[1;31mfail\033[0m. Reason: " << err.what();
+  this->ReadInputConfigs();
+  if (!fbConfigIsRead) {  // Check config reading status
     return false;
   }
 
@@ -332,10 +327,21 @@ void InitManager::PushBackCAIteration(const Iteration& iteration)
 //
 void InitManager::ReadInputConfigs()
 {
-  auto configReader = ConfigReader(this, 4);
-  configReader.SetMainConfigPath(fsConfigInputMain);
-  configReader.SetUserConfigPath(fsConfigInputUser);
-  configReader.Read();
+  if (!fbConfigIsRead) {
+    LOG(info) << "ca::InitManager: reading parameter configuration ...";
+    try {
+      auto configReader = ConfigReader(this, 4);
+      configReader.SetMainConfigPath(fsConfigInputMain);
+      configReader.SetUserConfigPath(fsConfigInputUser);
+      configReader.Read();
+      fbConfigIsRead = true;
+      LOG(info) << "ca::InitManager: reading parameter configuration ... \033[1;32mdone\033[0m";
+    }
+    catch (const std::runtime_error& err) {
+      LOG(error) << "ca::InitManager: reading parameter configuration ... \033[1;31mfail\033[0m. Reason: "
+                 << err.what();
+    }
+  }
 }
 
 // ---------------------------------------------------------------------------------------------------------------------
diff --git a/algo/ca/core/pars/CaInitManager.h b/algo/ca/core/pars/CaInitManager.h
index f71c854754..1667d07b61 100644
--- a/algo/ca/core/pars/CaInitManager.h
+++ b/algo/ca/core/pars/CaInitManager.h
@@ -314,5 +314,7 @@ namespace cbm::algo::ca
     std::string fsConfigInputMain = "";  ///< name for the input configuration file
     std::string fsConfigInputUser = "";  ///< name for the input configuration file
     std::string fConfigOutputName = "";  ///< name for the output configuration file
+
+    bool fbConfigIsRead = false;  ///< Flag, if configuration file was read
   };
 }  // namespace cbm::algo::ca
diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx
index a469919fc3..0e38eeb956 100644
--- a/reco/L1/CbmL1.cxx
+++ b/reco/L1/CbmL1.cxx
@@ -489,6 +489,7 @@ try {
 
     // Init station layout: sort stations in z-position and init maps of station local, geo and active indices
     fInitManager.InitStationLayout();
+    fInitManager.ReadInputConfigs();
 
     // ****************************************
     // ** Material maps initialization       **
@@ -803,12 +804,17 @@ void CbmL1::GenerateMaterialMaps()
 
   std::vector<ca::StationInitializer*> vpActiveStations;
   vpActiveStations.reserve(fInitManager.GetNstationsActive());
-  for (auto& station : fInitManager.GetStationInfo()) {  // loop over active + inactive stations
+  for (auto& station : fInitManager.GetStationInfo()) {  // loop over active + inactive station
     if (station.GetTrackingStatus()) {
       vpActiveStations.push_back(&station);
     }
   }
 
+  LOG(info) << "Generating material maps for stations: ";
+  for (const auto* pSta : vpActiveStations) {
+    LOG(info) << "\t- z = " << pSta->GetZref() << " cm";
+  }
+
   for (unsigned int ist = 0; ist < vpActiveStations.size(); ++ist) {
     auto* pStation = vpActiveStations[ist];
     double z1      = pStation->GetZmax();
-- 
GitLab