From b862c1c49c18f82839759e78108864b7daca6d5e Mon Sep 17 00:00:00 2001
From: "s.zharko@gsi.de" <s.zharko@gsi.de>
Date: Sat, 15 Feb 2025 15:24:59 +0100
Subject: [PATCH] beamtime: update of CbmOnlineParWrite with CA tracking

---
 algo/global/ParFiles.cxx                 |  4 ++--
 reco/L1/CbmL1.cxx                        |  2 ++
 reco/kfnew/CbmKfTrackingSetupBuilder.cxx | 12 ++++++++---
 reco/kfnew/CbmKfTrackingSetupBuilder.h   | 11 +++++++++-
 reco/steer/CbmOnlineParWrite.cxx         | 26 +++++++++++++++++++++++-
 reco/steer/CbmOnlineParWrite.h           |  2 ++
 6 files changed, 50 insertions(+), 7 deletions(-)

diff --git a/algo/global/ParFiles.cxx b/algo/global/ParFiles.cxx
index bc67f0843f..ac2c3b410a 100644
--- a/algo/global/ParFiles.cxx
+++ b/algo/global/ParFiles.cxx
@@ -95,8 +95,8 @@ ParFiles::ParFiles(uint32_t runId)
 
     case Setup::mCBM2025_02:
       bmon.readout = "mcbm2025_02/BmonReadout_mcbm2025.yaml";
-      bmon.calibrate = "mcbm2025_05/BmonCalibratePar.yaml";
-      bmon.hitfinder = "mcbm2025_05/BmonHitfinderPar.yaml";
+      bmon.calibrate = "mcbm2025_02/BmonCalibratePar.yaml";
+      bmon.hitfinder = "mcbm2025_02/BmonHitfinderPar.yaml";
 
       sts.readout   = "mcbm2025_02/StsReadout_mcbm2025.yaml";
       sts.chanMask  = "mcbm2025_02/StsChannelMaskSet_mcbm2025.yaml";
diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx
index 37d8c61be3..8337f7ac78 100644
--- a/reco/L1/CbmL1.cxx
+++ b/reco/L1/CbmL1.cxx
@@ -187,6 +187,8 @@ try {
   bool bUseTRD  = pSetupBuilder->HasHits(ca::EDetectorID::kTrd);
   bool bUseTOF  = pSetupBuilder->HasHits(ca::EDetectorID::kTof);
 
+  LOG(info) << "!!!!!!! " << bUseSTS;
+
   // *****************************
   // **                         **
   // ** GEOMETRY INITIALIZATION **
diff --git a/reco/kfnew/CbmKfTrackingSetupBuilder.cxx b/reco/kfnew/CbmKfTrackingSetupBuilder.cxx
index 338a86b63d..022026db05 100644
--- a/reco/kfnew/CbmKfTrackingSetupBuilder.cxx
+++ b/reco/kfnew/CbmKfTrackingSetupBuilder.cxx
@@ -41,9 +41,15 @@ void TrackingSetupBuilder::CheckDetectorPresence()
   auto Check = [&](EDetectorID detID) {
     auto modId = cbm::algo::ca::ToCbmModuleId(detID);
     fvbDetInGeometry[detID] = CbmSetup::Instance()->IsActive(modId);
-    fvbDetHasHits[detID]    = fvbDetInGeometry[detID] && FairRootManager::Instance()->GetObject(kDetHitBrName[detID]);
-    LOG(info) << fmt::format("\t{:6} in geometry: {:5}, has hits: {:5}", ToString(modId), fvbDetInGeometry[detID],
-                             fvbDetHasHits[detID]);
+    if (!fbIgnoreHitPresence) {
+      fvbDetHasHits[detID] = fvbDetInGeometry[detID] && FairRootManager::Instance()->GetObject(kDetHitBrName[detID]);
+      LOG(info) << fmt::format("\t{:6} in geometry: {:5}, has hits: {:5}", ToString(modId), fvbDetInGeometry[detID],
+                               fvbDetHasHits[detID]);
+    }
+    else {
+      fvbDetHasHits[detID] = fvbDetInGeometry[detID];
+      LOG(info) << fmt::format("\t{:6} in geometry: {:5}", ToString(modId), fvbDetInGeometry[detID]);
+    }
   };
 
   Check(EDetectorID::kMvd);
diff --git a/reco/kfnew/CbmKfTrackingSetupBuilder.h b/reco/kfnew/CbmKfTrackingSetupBuilder.h
index 0965882cce..cae4c1ba4d 100644
--- a/reco/kfnew/CbmKfTrackingSetupBuilder.h
+++ b/reco/kfnew/CbmKfTrackingSetupBuilder.h
@@ -48,6 +48,14 @@ namespace cbm::kf
     /// \brief  Checks, if a tracking detector has hits
     bool HasHits(cbm::algo::ca::EDetectorID detID) const { return fvbDetHasHits[detID]; }
 
+    /// \brief  Sets hits ignoring (DEBUG FLAG)
+    void SetIgnoreHitPresence(bool ok = true)
+    {
+      fbIgnoreHitPresence = ok;
+      fbInitialized       = false;
+      CheckDetectorPresence();
+    }
+
     // Disable copy and move
     TrackingSetupBuilder(const TrackingSetupBuilder&) = delete;
     TrackingSetupBuilder(TrackingSetupBuilder&&)      = delete;
@@ -111,7 +119,8 @@ namespace cbm::kf
     /// \brief Checks, if the setup was already initialized
     /// \note  Each call of the setup initializer resets the setup builder, so the initialization is called
     ///        in the next MakeSetup call
-    bool fbInitialized{false};  ///< Check, if the setup builder initialized
+    bool fbInitialized{false};        ///< Check, if the setup builder initialized
+    bool fbIgnoreHitPresence{false};  ///< Ignores hit presence, when active subsystems are determined
   };
 
 
diff --git a/reco/steer/CbmOnlineParWrite.cxx b/reco/steer/CbmOnlineParWrite.cxx
index 658ee50dd6..5ce40e2c34 100644
--- a/reco/steer/CbmOnlineParWrite.cxx
+++ b/reco/steer/CbmOnlineParWrite.cxx
@@ -4,6 +4,8 @@
 
 #include "CbmOnlineParWrite.h"
 
+#include "CbmKfTrackingSetupBuilder.h"
+#include "CbmL1.h"
 #include "CbmMcbmUtils.h"
 #include "CbmSetup.h"
 #include "CbmSinkDummy.h"
@@ -19,6 +21,7 @@
 #include "CbmTaskTofClusterizerParWrite.h"
 #include "CbmTaskTrdHitFinderParWrite.h"
 #include "CbmTaskTrdUnpackParWrite.h"
+#include "CbmTrackingDetectorInterfaceInit.h"
 #include "CbmTrdParSetAsic.h"
 #include "CbmTrdParSetDigi.h"
 
@@ -251,7 +254,8 @@ void CbmOnlineParWrite::AddSts()
     sensorParSet->SetParSensor(stsAddress10, sensor6cm);
     sensorParSet->SetParSensor(stsAddress11, sensor6cm);
   }
-  else if (fConfig.setupType == Setup::mCBM2024_03 || fConfig.setupType == Setup::mCBM2024_05 || fConfig.setupType == Setup::mCBM2025_02) {
+  else if (fConfig.setupType == Setup::mCBM2024_03 || fConfig.setupType == Setup::mCBM2024_05
+           || fConfig.setupType == Setup::mCBM2025_02) {
     uint32_t addr01 = 0x10008012;
     uint32_t addr02 = 0x10018012;
     uint32_t addr03 = 0x10008412;
@@ -314,6 +318,24 @@ void CbmOnlineParWrite::AddSts()
   fRun->AddTask(recoSts);
 }
 
+void CbmOnlineParWrite::AddCa()
+{
+
+  auto* pSetupBuilder{cbm::kf::TrackingSetupBuilder::Instance()};
+  pSetupBuilder->SetIgnoreHitPresence();
+
+  // Tracking detector interfaces initialization
+  fRun->AddTask(new CbmTrackingDetectorInterfaceInit{});
+
+  // Tracking initialization class
+  auto* pCa = new CbmL1();
+  pCa->SetMcbmMode();
+  pCa->SetInitMode(CbmL1::EInitMode::Param);
+  pCa->SetParameterFilename(Form("./%s.ca.par", fGeoSetupTag.Data()));
+  fRun->AddTask(pCa);
+}
+
+
 void CbmOnlineParWrite::Run(const Config& config)
 {
   // Copied and adjusted from macro/beamtime/mcbm2022/trd_hitfinder_run.C
@@ -351,6 +373,7 @@ void CbmOnlineParWrite::Run(const Config& config)
   }
 
   LOG(info) << "Using geometry setup: " << geoSetupTag;
+  fGeoSetupTag = geoSetupTag;
 
   TString geoFile = fSrcDir + "/macro/run/data/" + geoSetupTag + ".geo.root";
   fSetup          = CbmSetup::Instance();
@@ -406,6 +429,7 @@ void CbmOnlineParWrite::Run(const Config& config)
 
   // -----   Add detectors   ------------------------------------------------
   AddDetectors();
+  AddCa();
 
   // -----  Parameter database   --------------------------------------------
   FairRuntimeDb* rtdb        = fRun->GetRuntimeDb();
diff --git a/reco/steer/CbmOnlineParWrite.h b/reco/steer/CbmOnlineParWrite.h
index 194d5dd944..35ab63d074 100644
--- a/reco/steer/CbmOnlineParWrite.h
+++ b/reco/steer/CbmOnlineParWrite.h
@@ -35,6 +35,7 @@ class CbmOnlineParWrite {
  private:
   Config fConfig;
   TString fSrcDir  = "";       // CbmRoot Source directory
+  TString fGeoSetupTag = "";       // Geometry setup tag
   CbmSetup* fSetup = nullptr;  // Global Geometry setup
   FairRunAna* fRun = nullptr;  // FairRunAna object
   TList* fParList  = nullptr;  // List of parameter files, opened with FairRuntimeDb
@@ -44,4 +45,5 @@ class CbmOnlineParWrite {
   void AddTrd();
   void AddTof();
   void AddSts();
+  void AddCa();
 };
-- 
GitLab