From fa38828279935fcdf033f1cb9b99a48ab8a37c35 Mon Sep 17 00:00:00 2001
From: "s.zharko@gsi.de" <s.zharko@gsi.de>
Date: Sun, 18 Feb 2024 16:17:46 +0100
Subject: [PATCH] Added KF instance in the mcbm_hadron_anlysis.C macro

Previously, the PrimaryVertex branch was not defined, so the CbmHadronAnalysis task didn't collect the related distributions.
After one of the previouse commits the PrimaryVertex branch was introduced, and the task was executing the CbmStsKFTrackFitter,
which failed. The failure was caused by the undefined CbmKF task instance.
This commit introduces the CbmKF task and all other related settings to the macro.
---
 macro/mcbm/mcbm_hadron_analysis.C         | 18 +++++++++++++++++-
 reco/KF/CbmKFTrackInterface.cxx           |  1 -
 reco/KF/Interface/CbmStsKFTrackFitter.cxx |  7 +++++++
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/macro/mcbm/mcbm_hadron_analysis.C b/macro/mcbm/mcbm_hadron_analysis.C
index ad2ef67272..f9642e6110 100644
--- a/macro/mcbm/mcbm_hadron_analysis.C
+++ b/macro/mcbm/mcbm_hadron_analysis.C
@@ -2,7 +2,7 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Florian Uhlig [committer] */
 
-void mcbm_hadron_analysis(Int_t nEvents = 10, TString setup = "mcbm_beam_2020_03", const char* output = "data/test")
+void mcbm_hadron_analysis(Int_t nEvents = 10, TString setupName = "mcbm_beam_2020_03", const char* output = "data/test")
 {
   TString dataset(output);
   TString InputFile = dataset + ".tra.root";
@@ -10,6 +10,7 @@ void mcbm_hadron_analysis(Int_t nEvents = 10, TString setup = "mcbm_beam_2020_03
   TString RecoFile  = dataset + ".rec.root";
   TString ParFile   = dataset + ".par.root";
   TString OutFile   = dataset + ".ana.root";
+  TString srcDir    = gSystem->Getenv("VMCWORKDIR");
 
   FairLogger::GetLogger()->SetLogScreenLevel("INFO");
   FairLogger::GetLogger()->SetLogVerbosityLevel("VERYHIGH");
@@ -36,6 +37,17 @@ void mcbm_hadron_analysis(Int_t nEvents = 10, TString setup = "mcbm_beam_2020_03
   parInput1->open(ParFile.Data());
   rtdb->setFirstInput(parInput1);
 
+  // ------  Geometry setup  ------------------------------------------------
+  std::cout << '\n';
+  TString setupFile  = srcDir + "/geometry/setup/setup_" + setupName + ".C";
+  TString setupFunct = "setup_";
+  setupFunct         = setupFunct + setupName + "()";
+  std::cout << "-I- Loading macro " << setupFile << '\n';
+  gROOT->LoadMacro(setupFile);
+  gROOT->ProcessLine(setupFunct);
+  CbmSetup* setup = CbmSetup::Instance();
+  //  setup->RemoveModule(ECbmModuleId::kTrd);
+  // ------------------------------------------------------------------------
 
   /*
   CbmMCDataManager* mcManager = new CbmMCDataManager("MCDataManager", 1);
@@ -46,6 +58,10 @@ void mcbm_hadron_analysis(Int_t nEvents = 10, TString setup = "mcbm_beam_2020_03
   fRun->AddTask(match);
 */
 
+  // Kalman filter
+  fRun->AddTask(new CbmTrackingDetectorInterfaceInit());
+  fRun->AddTask(new CbmKF());
+
   CbmHadronAnalysis* HadronAna = new CbmHadronAnalysis();  // in hadron
   HadronAna->SetBeamMomentum(1.65);                        // beam momentum
   HadronAna->SetDY(0.5);                                   // flow analysis exclusion window
diff --git a/reco/KF/CbmKFTrackInterface.cxx b/reco/KF/CbmKFTrackInterface.cxx
index 81eebadd0a..d4103d073d 100644
--- a/reco/KF/CbmKFTrackInterface.cxx
+++ b/reco/KF/CbmKFTrackInterface.cxx
@@ -41,7 +41,6 @@ Int_t& CbmKFTrackInterface::GetRefNDF() { return gTempI[0]; }
 
 Int_t CbmKFTrackInterface::Extrapolate(Double_t z_out, Double_t* QP0)
 {
-
   Bool_t err          = 0;
   CbmKF* KF           = CbmKF::Instance();
   const Double_t z_in = GetTrack()[5];
diff --git a/reco/KF/Interface/CbmStsKFTrackFitter.cxx b/reco/KF/Interface/CbmStsKFTrackFitter.cxx
index 8d545e5ce7..354f351ad0 100644
--- a/reco/KF/Interface/CbmStsKFTrackFitter.cxx
+++ b/reco/KF/Interface/CbmStsKFTrackFitter.cxx
@@ -4,6 +4,7 @@
 
 #include "CbmStsKFTrackFitter.h"
 
+#include "CbmKF.h"
 #include "CbmKFMath.h"
 #include "CbmKFStsHit.h"
 #include "CbmKFTrack.h"
@@ -50,6 +51,12 @@ void CbmStsKFTrackFitter::Init()
          << "no MVD hits array" << endl;
     //return;
   }
+  auto* kf = CbmKF::Instance();
+  if (!kf) {
+    LOG(error) << "-E- CbmStsKFTrackFitter::Init(): CbmKF instance not found";
+    return;
+  }
+
   fIsInitialised = 1;
 };
 
-- 
GitLab