From 830cf40a3bd062fa639ea77685eacd44e0ce3706 Mon Sep 17 00:00:00 2001
From: "s.zharko@gsi.de" <s.zharko@gsi.de>
Date: Wed, 25 Sep 2024 14:53:06 +0200
Subject: [PATCH] CA: replaced the TrackingSetupBuilder class from KfCbm to L1;
 disable detectors, which are not used in a particular TrackingMode, directly
 in corresponding yaml-configs

---
 macro/L1/configs/ca_params_global.yaml        |  8 ++--
 macro/L1/configs/ca_params_mcbm.yaml          |  2 +-
 macro/L1/configs/ca_params_sts.yaml           |  2 +-
 reco/L1/CMakeLists.txt                        |  2 +
 .../CbmCaTrackingSetupBuilder.cxx}            | 39 ++++++++++---------
 .../CbmCaTrackingSetupBuilder.h}              | 22 ++---------
 reco/L1/CbmL1.cxx                             |  5 +--
 reco/L1/qa/CbmCaInputQaSetup.cxx              |  4 +-
 reco/L1/qa/CbmCaOutputQa.cxx                  |  4 +-
 reco/kfnew/CMakeLists.txt                     |  6 +--
 10 files changed, 39 insertions(+), 55 deletions(-)
 rename reco/{kfnew/CbmKfTrackingSetupBuilder.cxx => L1/CbmCaTrackingSetupBuilder.cxx} (76%)
 rename reco/{kfnew/CbmKfTrackingSetupBuilder.h => L1/CbmCaTrackingSetupBuilder.h} (85%)

diff --git a/macro/L1/configs/ca_params_global.yaml b/macro/L1/configs/ca_params_global.yaml
index 21ccb193a7..da809e59a7 100644
--- a/macro/L1/configs/ca_params_global.yaml
+++ b/macro/L1/configs/ca_params_global.yaml
@@ -20,12 +20,12 @@ ca:
       # interface classes). If there is no index provided, the whole detector subsystem is skept.
       # Examples:  
       # 1) Turn the first and the second STS in the geometry and the full TRD detector off
-      #     inactive_stations: [STS:0', 'STS:1', 'TRD']
+      #     inactive_stations: ['STS:0', 'STS:1', 'TRD']
       # 2) Turn first TOF station in the geometry off
-      #     inactive_stations: [TOF:0]
+      #     inactive_stations: ['TOF:0']
       # 3) Turn the full TOF off
-      #     inactive_stations: [TOF]
-      inactive_stations: []
+      #     inactive_stations: ['TOF']
+      inactive_stations: ['MVD', 'STS', 'MUCH', 'TOF']
 
       # Random seed
       random_seed: 1
diff --git a/macro/L1/configs/ca_params_mcbm.yaml b/macro/L1/configs/ca_params_mcbm.yaml
index d2ed450988..32e9d082c9 100644
--- a/macro/L1/configs/ca_params_mcbm.yaml
+++ b/macro/L1/configs/ca_params_mcbm.yaml
@@ -26,7 +26,7 @@ ca:
       # 3) Turn the full TOF off
       #     inactive_stations: [TOF]
       #inactive_stations: ['MUCH']
-      inactive_stations: ['MUCH']
+      inactive_stations: ['MVD', 'MUCH']
 
       # Misalignment tolerances x[cm], y[cm], t[ns]
       misalignment_tolerance: 
diff --git a/macro/L1/configs/ca_params_sts.yaml b/macro/L1/configs/ca_params_sts.yaml
index a07925ea18..401dcf2adb 100644
--- a/macro/L1/configs/ca_params_sts.yaml
+++ b/macro/L1/configs/ca_params_sts.yaml
@@ -25,7 +25,7 @@ ca:
       #     inactive_stations: [TOF:0]
       # 3) Turn the full TOF off
       #     inactive_stations: [TOF]
-      inactive_stations: []
+      inactive_stations: ['MUCH', 'TRD', 'TOF']
 
       # Random seed
       random_seed: 1
diff --git a/reco/L1/CMakeLists.txt b/reco/L1/CMakeLists.txt
index 8d8b26c1ae..4a28187d77 100644
--- a/reco/L1/CMakeLists.txt
+++ b/reco/L1/CMakeLists.txt
@@ -26,6 +26,7 @@ set(SRCS
 ###########################################################################
   CbmCaMCModule.cxx
   CbmCaTimeSliceReader.cxx
+  CbmCaTrackingSetupBuilder.cxx
 
   CbmL1.cxx
   OffLineInterface/CbmL1StsTrackFinder.cxx
@@ -77,6 +78,7 @@ set(HEADERS
   CbmL1Track.h
   CbmL1Vtx.h
   CbmCaTimeSliceReader.h
+  CbmCaTrackingSetupBuilder.h
   L1Algo/utils/CaUvConverter.h
   catools/CaToolsWindowFinder.h
   catools/CaToolsLinkKey.h
diff --git a/reco/kfnew/CbmKfTrackingSetupBuilder.cxx b/reco/L1/CbmCaTrackingSetupBuilder.cxx
similarity index 76%
rename from reco/kfnew/CbmKfTrackingSetupBuilder.cxx
rename to reco/L1/CbmCaTrackingSetupBuilder.cxx
index 25a491084b..c0c29668b7 100644
--- a/reco/kfnew/CbmKfTrackingSetupBuilder.cxx
+++ b/reco/L1/CbmCaTrackingSetupBuilder.cxx
@@ -7,10 +7,11 @@
 /// \since  28.08.2024
 /// \author Sergei Zharko <s.zharko@gsi.de>
 
-#include "CbmKfTrackingSetupBuilder.h"
+#include "CbmCaTrackingSetupBuilder.h"
 
 #include "CbmKfOriginalField.h"
 #include "CbmKfTarget.h"
+#include "CbmL1DetectorID.h"
 #include "CbmMuchTrackingInterface.h"
 #include "CbmMvdTrackingInterface.h"
 #include "CbmSetup.h"
@@ -25,7 +26,7 @@
 
 #include <functional>
 
-using cbm::kf::TrackingSetupBuilder;
+using cbm::ca::TrackingSetupBuilder;
 using kf::tools::MaterialMapFactory;
 
 // ---------------------------------------------------------------------------------------------------------------------
@@ -54,40 +55,40 @@ try {
       && fabs(pField->GetBx(0., 0., 0.)) < MinField<
            double> && fabs(pField->GetBy(0., 0., 0.)) < MinField<double> && fabs(pField->GetBz(0., 0., 0.)) < MinField<double>) {
       LOG(info) << "!!!!!!!!!!!!!!!!!!! A";
-      fBuilder.SetFieldFunction(ZeroField(), EFieldType::Null);
+      fBuilder.SetFieldFunction(cbm::kf::ZeroField(), EFieldType::Null);
     }
     else {
       LOG(info) << "!!!!!!!!!!!!!!!!!!! B";
-      fBuilder.SetFieldFunction(OriginalField(), EFieldType::Normal);
+      fBuilder.SetFieldFunction(cbm::kf::OriginalField(), EFieldType::Normal);
     }
   }
   else {
     LOG(info) << "!!!!!!!!!!!!!!!!!!! C";
-    fBuilder.SetFieldFunction(ZeroField(), EFieldType::Null);
+    fBuilder.SetFieldFunction(cbm::kf::ZeroField(), EFieldType::Null);
   }
 
   // Tracking station property initialization
-  auto CollectStations = [&](const auto* pIfs, ETrackingDetID detID) -> void {
+  auto CollectStations = [&](const auto* pIfs, ca::EDetectorID detID) -> void {
     if (!pIfs) {
       return;
     }
     for (int iSt = 0; iSt < pIfs->GetNtrackingStations(); ++iSt) {
       fBuilder.AddLayer(
-        GeoLayer<ETrackingDetID>{detID,  // ca::Tracking detector id scheme
-                                 iSt,    // ca::Tracking station indexing
-                                 pIfs->GetZref(iSt), pIfs->GetZmin(iSt), pIfs->GetZmax(iSt),
-                                 std::max(std::fabs(pIfs->GetXmin(iSt)), std::fabs(pIfs->GetXmax(iSt))),
-                                 std::max(std::fabs(pIfs->GetYmin(iSt)), std::fabs(pIfs->GetYmax(iSt)))});
+        GeoLayer<ca::EDetectorID>{detID,  // ca::Tracking detector id scheme
+                                  iSt,    // ca::Tracking station indexing
+                                  pIfs->GetZref(iSt), pIfs->GetZmin(iSt), pIfs->GetZmax(iSt),
+                                  std::max(std::fabs(pIfs->GetXmin(iSt)), std::fabs(pIfs->GetXmax(iSt))),
+                                  std::max(std::fabs(pIfs->GetYmin(iSt)), std::fabs(pIfs->GetYmax(iSt)))});
     }
   };
-  CollectStations(fbUseMvd ? CbmMvdTrackingInterface::Instance() : nullptr, ETrackingDetID::Mvd);
-  CollectStations(fbUseSts ? CbmStsTrackingInterface::Instance() : nullptr, ETrackingDetID::Sts);
-  CollectStations(fbUseMuch ? CbmMuchTrackingInterface::Instance() : nullptr, ETrackingDetID::Much);
-  CollectStations(fbUseTrd ? CbmTrdTrackingInterface::Instance() : nullptr, ETrackingDetID::Trd);
-  CollectStations(fbUseTof ? CbmTofTrackingInterface::Instance() : nullptr, ETrackingDetID::Tof);
+  CollectStations(fbUseMvd ? CbmMvdTrackingInterface::Instance() : nullptr, ca::EDetectorID::kMvd);
+  CollectStations(fbUseSts ? CbmStsTrackingInterface::Instance() : nullptr, ca::EDetectorID::kSts);
+  CollectStations(fbUseMuch ? CbmMuchTrackingInterface::Instance() : nullptr, ca::EDetectorID::kMuch);
+  CollectStations(fbUseTrd ? CbmTrdTrackingInterface::Instance() : nullptr, ca::EDetectorID::kTrd);
+  CollectStations(fbUseTof ? CbmTofTrackingInterface::Instance() : nullptr, ca::EDetectorID::kTof);
 
   // Retrieve target properties
-  const auto* pTarget = Target::Instance();
+  const auto* pTarget = cbm::kf::Target::Instance();
   fBuilder.SetTargetProperty(pTarget->GetX(), pTarget->GetY(), pTarget->GetZ(), pTarget->GetDz(), pTarget->GetRmax());
 
   // Init material map creator
@@ -100,11 +101,11 @@ try {
   // Set the initialization flags back
   fbInitialized = true;
 
-  LOG(info) << "kf::TrackingSetupBuilder: Tracking setup was initialized successfully";
+  LOG(info) << "ca::TrackingSetupBuilder: Tracking setup was initialized successfully";
   return true;
 }
 catch (const std::exception& err) {
-  LOG(error) << "kf::TrackingSetupBuilder: Tracking setup was not initialized. Reason: " << err.what();
+  LOG(error) << "ca::TrackingSetupBuilder: Tracking setup was not initialized. Reason: " << err.what();
   return false;
 }
 
diff --git a/reco/kfnew/CbmKfTrackingSetupBuilder.h b/reco/L1/CbmCaTrackingSetupBuilder.h
similarity index 85%
rename from reco/kfnew/CbmKfTrackingSetupBuilder.h
rename to reco/L1/CbmCaTrackingSetupBuilder.h
index b9ee379660..4cfd16113c 100644
--- a/reco/kfnew/CbmKfTrackingSetupBuilder.h
+++ b/reco/L1/CbmCaTrackingSetupBuilder.h
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Sergei Zharko [committer] */
 
-/// \file   CbmKfTrackingSetupBuilder.h
+/// \file   CbmCaTrackingSetupBuilder.h
 /// \brief  Tracking setup initializer in CBM (source)
 /// \since  28.08.2024
 /// \author Sergei Zharko <s.zharko@gsi.de>
@@ -14,24 +14,8 @@
 #include <mutex>
 #include <tuple>
 
-namespace cbm::kf
+namespace cbm::ca
 {
-  /// \enum  ETrackingDetID
-  /// \brief Enumeration for tracking detector subsystems
-  ///
-  // TODO: SZh 12.09.2024:  For me it's unclear, if we should move this entire file to CbmL1, or move the tracking
-  //                        detector IDs declaration here. For now this enum should fully follow the definition
-  //                        of cbm::algo::ca::EDetectorID.
-  enum class ETrackingDetID
-  {
-    Mvd = 0,
-    Sts,
-    Much,
-    Trd,
-    Tof,
-    END
-  };
-
   /// \class TrackingSetupBuilder
   /// \brief Encapsulation of the kf::Setup initialization routines for CBM
   class TrackingSetupBuilder {
@@ -103,4 +87,4 @@ namespace cbm::kf
   };
 
 
-}  // namespace cbm::kf
+}  // namespace cbm::ca
diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx
index 4bc801f481..4bc93774b0 100644
--- a/reco/L1/CbmL1.cxx
+++ b/reco/L1/CbmL1.cxx
@@ -37,8 +37,8 @@
 #include "CaHit.h"
 #include "CaToolsDebugger.h"
 #include "CaToolsField.h"
+#include "CbmCaTrackingSetupBuilder.h"
 #include "CbmEvent.h"
-#include "CbmKfTrackingSetupBuilder.h"
 #include "CbmMCDataObject.h"
 #include "CbmStsFindTracks.h"
 #include "CbmStsHit.h"
@@ -74,7 +74,6 @@ using cbm::algo::ca::Parameters;
 using cbm::ca::MCModule;
 using cbm::ca::TimeSliceReader;
 using cbm::ca::tools::MaterialHelper;
-using cbm::kf::TrackingSetupBuilder;
 
 ClassImp(CbmL1);
 
@@ -497,7 +496,7 @@ try {
     // ** Initialize KF-setup **
     // *************************
     {
-      auto* pSetupBuilder = TrackingSetupBuilder::Instance();
+      auto* pSetupBuilder = cbm::ca::TrackingSetupBuilder::Instance();
       pSetupBuilder->Use(fUseMVD, fUseSTS, fUseMUCH, fUseTRD, fUseTOF);
       auto trackerSetup  = pSetupBuilder->MakeSetup<float>(cbm::algo::kf::EFieldMode::Intrpl);
       TString outputFile = fSTAPDataDir + "/" + fSTAPDataPrefix + "." + TString(kSTAPSetupSuffix.data());
diff --git a/reco/L1/qa/CbmCaInputQaSetup.cxx b/reco/L1/qa/CbmCaInputQaSetup.cxx
index f90eac7f93..ed1d3d2d69 100644
--- a/reco/L1/qa/CbmCaInputQaSetup.cxx
+++ b/reco/L1/qa/CbmCaInputQaSetup.cxx
@@ -10,7 +10,7 @@
 #include "CbmCaInputQaSetup.h"
 
 #include "CaInitManager.h"
-#include "CbmKfTrackingSetupBuilder.h"
+#include "CbmCaTrackingSetupBuilder.h"
 #include "CbmMCDataManager.h"
 #include "FairRootManager.h"
 #include "TAxis.h"
@@ -262,7 +262,7 @@ try {
     bool bMuch{manager.IsPresent(ca::EDetectorID::kMuch)};
     bool bTrd{manager.IsPresent(ca::EDetectorID::kTrd)};
     bool bTof{manager.IsPresent(ca::EDetectorID::kTof)};
-    auto* pSetupBuilder = cbm::kf::TrackingSetupBuilder::Instance();
+    auto* pSetupBuilder = cbm::ca::TrackingSetupBuilder::Instance();
     pSetupBuilder->Use(bMvd, bSts, bMuch, bTrd, bTof);
     manager.SetGeometrySetup(pSetupBuilder->MakeSetup<ca::fvec>(cbm::algo::kf::EFieldMode::Intrpl));
     fpParameters = std::make_unique<ca::Parameters<ca::fvec>>(manager.TakeParameters());
diff --git a/reco/L1/qa/CbmCaOutputQa.cxx b/reco/L1/qa/CbmCaOutputQa.cxx
index fa62462616..59ed3c4d64 100644
--- a/reco/L1/qa/CbmCaOutputQa.cxx
+++ b/reco/L1/qa/CbmCaOutputQa.cxx
@@ -11,7 +11,7 @@
 
 #include "CaInitManager.h"
 #include "CbmCaMCModule.h"
-#include "CbmKfTrackingSetupBuilder.h"
+#include "CbmCaTrackingSetupBuilder.h"
 #include "CbmQaCanvas.h"
 #include "FairRootManager.h"
 #include "Logger.h"
@@ -804,7 +804,7 @@ try {
     bool bMuch{manager.IsPresent(ca::EDetectorID::kMuch)};
     bool bTrd{manager.IsPresent(ca::EDetectorID::kTrd)};
     bool bTof{manager.IsPresent(ca::EDetectorID::kTof)};
-    auto* pSetupBuilder = cbm::kf::TrackingSetupBuilder::Instance();
+    auto* pSetupBuilder = cbm::ca::TrackingSetupBuilder::Instance();
     pSetupBuilder->Use(bMvd, bSts, bMuch, bTrd, bTof);
     manager.SetGeometrySetup(pSetupBuilder->MakeSetup<ca::fvec>(cbm::algo::kf::EFieldMode::Intrpl));
     fpParameters = std::make_shared<ca::Parameters<ca::fvec>>(manager.TakeParameters());
diff --git a/reco/kfnew/CMakeLists.txt b/reco/kfnew/CMakeLists.txt
index 98e15d274b..95833479bf 100644
--- a/reco/kfnew/CMakeLists.txt
+++ b/reco/kfnew/CMakeLists.txt
@@ -6,7 +6,6 @@ set(INCLUDE_DIRECTORIES
 
 set(SRCS 
   ${CMAKE_CURRENT_SOURCE_DIR}/CbmKfTarget.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/CbmKfTrackingSetupBuilder.cxx
 )
 
 SET_SOURCE_FILES_PROPERTIES(${SRCS} PROPERTIES COMPILE_FLAGS "-O3")
@@ -44,8 +43,8 @@ target_link_libraries(KfCbm
                       ROOT::Graf
                       ROOT::Physics
                       fmt::fmt
-              PRIVATE KfTools
-                      CbmRecoSts
+                      KfTools
+              PRIVATE CbmRecoSts
                       CbmSimSteer
                       CbmRecoBase
                       KFParticle
@@ -73,7 +72,6 @@ install(
   FILES
     CbmKfOriginalField.h
     CbmKfTarget.h
-    CbmKfTrackingSetupBuilder.h
   DESTINATION
     include/
 )
-- 
GitLab