From 3df9b9c37e3c37299f5c29b3f596469f7acfe555 Mon Sep 17 00:00:00 2001
From: "s.zharko@gsi.de" <s.zharko@gsi.de>
Date: Mon, 23 Sep 2024 00:17:49 +0200
Subject: [PATCH] CA: replacement of old material maps with the new ones

---
 algo/ca/core/tracking/CaFramework.h            |  1 -
 algo/ca/core/tracking/CaTrackExtender.cxx      |  9 ++++++---
 algo/ca/core/tracking/CaTrackExtender.h        |  1 +
 algo/ca/core/tracking/CaTrackFitter.cxx        | 11 +++++++----
 algo/ca/core/tracking/CaTrackFitter.h          |  1 +
 algo/ca/core/tracking/CaTripletConstructor.cxx |  7 ++++---
 algo/ca/core/tracking/CaTripletConstructor.h   |  4 +++-
 reco/KF/ParticleFitter/CbmL1PFFitter.cxx       |  4 ++++
 reco/L1/CbmL1Performance.cxx                   |  6 ++++--
 reco/L1/qa/CbmCaTrackTypeQa.cxx                |  7 ++++---
 10 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/algo/ca/core/tracking/CaFramework.h b/algo/ca/core/tracking/CaFramework.h
index 5c783ca162..e1c5af03ac 100644
--- a/algo/ca/core/tracking/CaFramework.h
+++ b/algo/ca/core/tracking/CaFramework.h
@@ -47,7 +47,6 @@ namespace cbm::algo::ca
   // *******************************
 
   using CaStationsArray_t = std::array<ca::Station<fvec>, constants::size::MaxNstations>;
-  using CaMaterialArray_t = std::array<ca::MaterialMap, constants::size::MaxNstations>;
   using Tindex            = int;  // TODO: Replace with ca::HitIndex_t, if suitable
 
   /// Main class of CA track finder algorithm
diff --git a/algo/ca/core/tracking/CaTrackExtender.cxx b/algo/ca/core/tracking/CaTrackExtender.cxx
index 7ce4d5565a..30e19df12b 100644
--- a/algo/ca/core/tracking/CaTrackExtender.cxx
+++ b/algo/ca/core/tracking/CaTrackExtender.cxx
@@ -25,7 +25,10 @@ using namespace cbm::algo::ca;
 
 // ---------------------------------------------------------------------------------------------------------------------
 //
-TrackExtender::TrackExtender(const ca::Parameters<fvec>& pars, const fscal mass) : fParameters(pars), fDefaultMass(mass)
+TrackExtender::TrackExtender(const ca::Parameters<fvec>& pars, const fscal mass)
+  : fParameters(pars)
+  , fSetup(fParameters.GetActiveSetup())
+  , fDefaultMass(mass)
 {
 }
 
@@ -120,7 +123,7 @@ void TrackExtender::FitBranchFast(const ca::Branch& t, TrackParamV& Tout, const
 
     fit.Extrapolate(hit.Z(), fld);
     ca::utils::FilterHit(fit, hit, fmask(sta.timeInfo));
-    auto radThick = fParameters.GetMaterialThickness(ista, T.X(), T.Y());
+    auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(T.X(), T.Y());
     fit.MultipleScattering(radThick);
     fit.EnergyLossCorrection(radThick, direction);
 
@@ -272,7 +275,7 @@ void TrackExtender::FindMoreHits(ca::Branch& t, TrackParamV& Tout, const kf::Fit
 
     fit.Extrapolate(hit.Z(), fld);
     ca::utils::FilterHit(fit, hit, fmask(sta.timeInfo));
-    auto radThick = fParameters.GetMaterialThickness(ista, tr.X(), tr.Y());
+    auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(tr.X(), tr.Y());
     fit.MultipleScattering(radThick);
     fit.EnergyLossCorrection(radThick, direction);
 
diff --git a/algo/ca/core/tracking/CaTrackExtender.h b/algo/ca/core/tracking/CaTrackExtender.h
index 0fa6f0562f..9554ba51c8 100644
--- a/algo/ca/core/tracking/CaTrackExtender.h
+++ b/algo/ca/core/tracking/CaTrackExtender.h
@@ -88,6 +88,7 @@ namespace cbm::algo::ca
     /// Data members
 
     const Parameters<fvec>& fParameters;  ///< Object of Framework parameters class
+    const cbm::algo::kf::Setup<fvec>& fSetup;
     WindowData* frWData;
     fscal fDefaultMass{constants::phys::MuonMass};  ///< mass of the propagated particle [GeV/c2]
   };
diff --git a/algo/ca/core/tracking/CaTrackFitter.cxx b/algo/ca/core/tracking/CaTrackFitter.cxx
index 1a2005d683..4f6d2e089c 100644
--- a/algo/ca/core/tracking/CaTrackFitter.cxx
+++ b/algo/ca/core/tracking/CaTrackFitter.cxx
@@ -22,6 +22,7 @@ using namespace cbm::algo;
 //
 TrackFitter::TrackFitter(const ca::Parameters<fvec>& pars, const fscal mass, const ca::TrackingMode& mode)
   : fParameters(pars)
+  , fSetup(fParameters.GetActiveSetup())
   , fDefaultMass(mass)
   , fTrackingMode(mode)
 {
@@ -262,8 +263,9 @@ void TrackFitter::FitCaTracks(const ca::InputData& input, WindowData& wData)
 
         fit.SetMask(initialised);
         fit.Extrapolate(z[ista], fld1);
-        fit.MultipleScattering(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()));
-        fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()), kf::FitDirection::kUpstream);
+        auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(tr.X(), tr.Y());
+        fit.MultipleScattering(radThick);
+        fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream);
 
         fit.SetMask(initialised && w[ista]);
         fit.FilterXY(mxy[ista]);
@@ -365,8 +367,9 @@ void TrackFitter::FitCaTracks(const ca::InputData& input, WindowData& wData)
 
         fit.SetMask(initialised);
         fit.Extrapolate(z[ista], fld);
-        fit.MultipleScattering(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()));
-        fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()), kf::FitDirection::kDownstream);
+        auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(tr.X(), tr.Y());
+        fit.MultipleScattering(radThick);
+        fit.EnergyLossCorrection(radThick, kf::FitDirection::kDownstream);
         fit.SetMask(initialised && w[ista]);
         fit.FilterXY(mxy[ista]);
         fit.FilterTime(time[ista], dt2[ista], fmask(sta[ista].timeInfo));
diff --git a/algo/ca/core/tracking/CaTrackFitter.h b/algo/ca/core/tracking/CaTrackFitter.h
index 75d79c10ca..b67cc572c0 100644
--- a/algo/ca/core/tracking/CaTrackFitter.h
+++ b/algo/ca/core/tracking/CaTrackFitter.h
@@ -53,6 +53,7 @@ namespace cbm::algo::ca
     /// Data members
 
     const Parameters<fvec>& fParameters;            ///< Object of Framework parameters class
+    const cbm::algo::kf::Setup<fvec>& fSetup;       ///< Setup instance
     fscal fDefaultMass{constants::phys::MuonMass};  ///< mass of the propagated particle [GeV/c2]
     ca::TrackingMode fTrackingMode;
   };
diff --git a/algo/ca/core/tracking/CaTripletConstructor.cxx b/algo/ca/core/tracking/CaTripletConstructor.cxx
index cc1b935b86..a0c0aae26a 100644
--- a/algo/ca/core/tracking/CaTripletConstructor.cxx
+++ b/algo/ca/core/tracking/CaTripletConstructor.cxx
@@ -22,6 +22,7 @@ using namespace cbm::algo::ca;
 TripletConstructor::TripletConstructor(const ca::Parameters<fvec>& pars, WindowData& wData, const fscal mass,
                                        const ca::TrackingMode& mode)
   : fParameters(pars)
+  , fSetup(fParameters.GetActiveSetup())
   , frWData(wData)
   , fDefaultMass(mass)
   , fTrackingMode(mode)
@@ -157,7 +158,7 @@ void TripletConstructor::CreateTripletsForHit(Vector<ca::Triplet>& tripletsOut,
 
     // add the target constraint
     fit.FilterWithTargetAtLine(fParameters.GetTargetPositionZ(), frWData.TargetMeasurement(), fld0);
-    fit.MultipleScattering(fParameters.GetMaterialThickness(fIstaL, T.GetX(), T.GetY()));
+    fit.MultipleScattering(fSetup.GetMaterial(fIstaL).GetThicknessX0(T.GetX(), T.GetY()));
 
     // extrapolate to the middle hit
     fit.ExtrapolateLine(fStaM->fZ, fFldL);
@@ -227,7 +228,7 @@ void TripletConstructor::FindDoublets(kf::TrackKalmanFilter<fvec>& fit)
     fit.FilterXY(m_2);
     fit.FilterTime(t_2, dt2_2, fmask(fStaM->timeInfo));
     fit.SetQp0(isMomentumFitted ? fit.Tr().GetQp() : frWData.CurrentIteration()->GetMaxQp());
-    fit.MultipleScattering(fParameters.GetMaterialThickness(fIstaM, T2.GetX(), T2.Y()));
+    fit.MultipleScattering(fSetup.GetMaterial(fIstaM).GetThicknessX0(T2.GetX(), T2.Y()));
     fit.SetQp0(fit.Tr().Qp());
 
     // check if there are other hits close to the doublet on the same station
@@ -536,7 +537,7 @@ void TripletConstructor::FindTriplets()
 
         for (int ih = startIdx + step; ih != endIdx; ih += step) {
           fit.Extrapolate(z[ih], fld);
-          auto radThick = fParameters.GetMaterialThickness(ista[ih], T.X(), T.Y());
+          auto radThick = fSetup.GetMaterial(ista[ih]).GetThicknessX0(T.X(), T.Y());
           fit.MultipleScattering(radThick);
           fit.EnergyLossCorrection(radThick, direction);
           fit.FilterXY(mxy[ih]);
diff --git a/algo/ca/core/tracking/CaTripletConstructor.h b/algo/ca/core/tracking/CaTripletConstructor.h
index eddba821f1..5aae7fef03 100644
--- a/algo/ca/core/tracking/CaTripletConstructor.h
+++ b/algo/ca/core/tracking/CaTripletConstructor.h
@@ -15,6 +15,7 @@
 #include "CaVector.h"
 #include "CaWindowData.h"
 #include "KfFieldRegion.h"
+#include "KfSetup.h"
 #include "KfSimd.h"
 #include "KfTrackKalmanFilter.h"
 #include "KfTrackParam.h"
@@ -75,7 +76,8 @@ namespace cbm::algo::ca
                      const double chi2Cut, const int iMC, const int maxNhits);
 
    private:
-    const Parameters<fvec>& fParameters;  ///< Object of Framework parameters class
+    const Parameters<fvec>& fParameters;       ///< Object of Framework parameters class
+    const cbm::algo::kf::Setup<fvec>& fSetup;  ///< Reference to the setup
     WindowData& frWData;
     fscal fDefaultMass{constants::phys::MuonMass};  ///< mass of the propagated particle [GeV/c2]
     ca::TrackingMode fTrackingMode;
diff --git a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
index 7b5d192984..3d653e0d95 100644
--- a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
+++ b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
@@ -123,6 +123,10 @@ inline void CbmL1PFFitter::Initialize()
   }
 
   using cbm::algo::ca::EDetectorID;
+  // TODO: Remove CbmL1::Instance with itterations:
+  //  1) replace material with active setup
+  //  2) replace field with active setup
+  //  3) provide proper initialization of the setup
   fNmvdStationsActive = CbmL1::Instance()->fpAlgo->GetParameters().GetNstationsActive(EDetectorID::kMvd);
   fNstsStationsActive = CbmL1::Instance()->fpAlgo->GetParameters().GetNstationsActive(EDetectorID::kSts);
 
diff --git a/reco/L1/CbmL1Performance.cxx b/reco/L1/CbmL1Performance.cxx
index 8d012fc01d..85575678d0 100644
--- a/reco/L1/CbmL1Performance.cxx
+++ b/reco/L1/CbmL1Performance.cxx
@@ -1323,7 +1323,8 @@ void CbmL1::TrackFitPerformance()
                && (dir * (mc.GetStartZ() - fpAlgo->GetParameters().GetStation(iSta).fZ[0]) > 0);
                iSta += dir) {
             //           LOG(info) << iSta << " " << dir;
-            auto radThick = fpAlgo->GetParameters().GetMaterialThickness(iSta, fit.Tr().GetX(), fit.Tr().GetY());
+            auto radThick = fpAlgo->GetParameters().GetActiveSetup().GetMaterial(iSta).GetThicknessX0(fit.Tr().GetX(),
+                                                                                                      fit.Tr().GetY());
             fit.MultipleScattering(radThick);
             fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream);
           }
@@ -1392,7 +1393,8 @@ void CbmL1::TrackFitPerformance()
                iSta += dir) {
 
             fit.Extrapolate(fpAlgo->GetParameters().GetStation(iSta).fZ, fld);
-            auto radThick = fpAlgo->GetParameters().GetMaterialThickness(iSta, fit.Tr().GetX(), fit.Tr().GetY());
+            auto radThick = fpAlgo->GetParameters().GetActiveSetup().GetMaterial(iSta).GetThicknessX0(fit.Tr().GetX(),
+                                                                                                      fit.Tr().GetY());
             fit.MultipleScattering(radThick);
             fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream);
           }
diff --git a/reco/L1/qa/CbmCaTrackTypeQa.cxx b/reco/L1/qa/CbmCaTrackTypeQa.cxx
index 9b408bda74..f2febcd269 100644
--- a/reco/L1/qa/CbmCaTrackTypeQa.cxx
+++ b/reco/L1/qa/CbmCaTrackTypeQa.cxx
@@ -335,9 +335,10 @@ void TrackTypeQa::FillRecoTrack(int iTrkReco, double weight)
                                && (direction * (mcTrkVertex.GetZ() - fpParameters->GetStation(iSt).fZ[0]) > 0);
              iSt += direction) {
           fTrackFit.Extrapolate(fpParameters->GetStation(iSt).fZ, fFieldRegion);
-          auto radLength = fpParameters->GetMaterialThickness(iSt, fTrackFit.Tr().GetX(), fTrackFit.Tr().GetY());
-          fTrackFit.MultipleScattering(radLength);
-          fTrackFit.EnergyLossCorrection(radLength,
+          auto radThick = fpParameters->GetActiveSetup().GetMaterial(iSt).GetThicknessX0(fTrackFit.Tr().GetX(),
+                                                                                         fTrackFit.Tr().GetY());
+          fTrackFit.MultipleScattering(radThick);
+          fTrackFit.EnergyLossCorrection(radThick,
                                          (direction > 0) ? kf::FitDirection::kDownstream : kf::FitDirection::kUpstream);
         }
         fTrackFit.Extrapolate(mcTrkVertex.GetZ(), fFieldRegion);
-- 
GitLab