From aa23332bc4b2b93311fbe8f85aceee2e2f36df3e Mon Sep 17 00:00:00 2001
From: "se.gorbunov" <se.gorbunov@gsi.de>
Date: Mon, 16 Sep 2024 19:51:36 +0200
Subject: [PATCH] Ca: remove ca::FieldRegion

---
 algo/ca/core/CMakeLists.txt                   |  2 --
 algo/ca/core/data/CaWindowData.h              | 10 +++---
 algo/ca/core/pars/CaField.cxx                 |  5 ---
 algo/ca/core/pars/CaField.h                   | 19 -----------
 algo/ca/core/pars/CaInitManager.cxx           |  6 ++--
 algo/ca/core/pars/CaInitManager.h             |  4 +--
 algo/ca/core/pars/CaParameters.h              | 16 ++++-----
 algo/ca/core/pars/CaStation.h                 |  4 +--
 algo/ca/core/pars/CaStationInitializer.cxx    |  2 +-
 algo/ca/core/tracking/CaCloneMerger.cxx       |  4 +--
 algo/ca/core/tracking/CaFramework.h           |  1 -
 algo/ca/core/tracking/CaTrackExtender.cxx     | 16 ++++-----
 algo/ca/core/tracking/CaTrackFit.cxx          | 14 ++++----
 algo/ca/core/tracking/CaTrackFit.h            | 33 ++++++++++---------
 algo/ca/core/tracking/CaTrackFitter.cxx       | 16 ++++-----
 .../ca/core/tracking/CaTripletConstructor.cxx | 22 ++++++-------
 algo/ca/core/tracking/CaTripletConstructor.h  | 10 +++---
 algo/kf/core/data/KfMeasurementTime.h         |  2 +-
 algo/kf/core/data/KfMeasurementU.h            |  2 +-
 algo/kf/core/data/KfMeasurementXy.h           |  2 +-
 reco/KF/CbmKfTrackFitter.cxx                  |  2 +-
 reco/KF/KFQA/CbmKFTrackQa.cxx                 |  1 -
 reco/KF/ParticleFitter/CbmL1PFFitter.cxx      | 28 ++++++++--------
 reco/KF/ParticleFitter/CbmL1PFFitter.h        | 10 +++---
 reco/L1/CbmL1.cxx                             |  2 +-
 reco/L1/CbmL1Performance.cxx                  |  8 ++---
 reco/L1/catools/CaToolsField.h                |  2 +-
 reco/L1/qa/CbmCaTrackFitQa.cxx                |  4 +--
 reco/L1/qa/CbmCaTrackFitQa.h                  |  2 +-
 reco/L1/qa/CbmCaTrackTypeQa.cxx               |  2 +-
 reco/L1/qa/CbmCaTrackTypeQa.h                 |  6 ++--
 31 files changed, 115 insertions(+), 142 deletions(-)
 delete mode 100644 algo/ca/core/pars/CaField.cxx
 delete mode 100644 algo/ca/core/pars/CaField.h

diff --git a/algo/ca/core/CMakeLists.txt b/algo/ca/core/CMakeLists.txt
index 33b3558c1b..5087591147 100644
--- a/algo/ca/core/CMakeLists.txt
+++ b/algo/ca/core/CMakeLists.txt
@@ -17,7 +17,6 @@ set(SRCS
   ${CMAKE_CURRENT_SOURCE_DIR}/data/CaWindowData.cxx
   ${CMAKE_CURRENT_SOURCE_DIR}/data/CaTimesliceHeader.cxx
   ${CMAKE_CURRENT_SOURCE_DIR}/pars/CaConfigReader.cxx
-  ${CMAKE_CURRENT_SOURCE_DIR}/pars/CaField.cxx
   ${CMAKE_CURRENT_SOURCE_DIR}/pars/CaInitManager.cxx
   ${CMAKE_CURRENT_SOURCE_DIR}/pars/CaIteration.cxx
   ${CMAKE_CURRENT_SOURCE_DIR}/pars/CaMaterialMap.cxx
@@ -90,7 +89,6 @@ install(
     data/CaWindowData.h
     data/CaTimesliceHeader.h
     pars/CaDefs.h
-    pars/CaField.h
     pars/CaInitManager.h
     pars/CaIteration.h
     pars/CaMaterialMap.h
diff --git a/algo/ca/core/data/CaWindowData.h b/algo/ca/core/data/CaWindowData.h
index da0e0753e9..150b5610fb 100644
--- a/algo/ca/core/data/CaWindowData.h
+++ b/algo/ca/core/data/CaWindowData.h
@@ -10,11 +10,11 @@
 #pragma once
 
 #include "CaDefs.h"
-#include "CaField.h"
 #include "CaGrid.h"
 #include "CaHit.h"
 #include "CaIteration.h"
 #include "CaTrack.h"
+#include "KfFieldRegion.h"
 #include "KfMeasurementXy.h"
 
 #include <array>
@@ -150,10 +150,10 @@ namespace cbm::algo::ca
     [[gnu::always_inline]] const Iteration* CurrentIteration() const { return fpCurrentIteration; }
 
     /// \brief Accesses magnetic field in starting point (target or first station)
-    [[gnu::always_inline]] ca::FieldValue<fvec>& TargB() { return fTargB; }
+    [[gnu::always_inline]] kf::FieldValue<fvec>& TargB() { return fTargB; }
 
     /// \brief Accesses magnetic field in starting point (target or first station)
-    [[gnu::always_inline]] const ca::FieldValue<fvec>& TargB() const { return fTargB; }
+    [[gnu::always_inline]] const kf::FieldValue<fvec>& TargB() const { return fTargB; }
 
     /// \brief Measurement of the target with the uncertainty
     [[gnu::always_inline]] kf::MeasurementXy<fvec>& TargetMeasurement() { return fTargetMeasurement; }
@@ -198,8 +198,8 @@ namespace cbm::algo::ca
     /// \brief Current track-finder iteration
     const Iteration* fpCurrentIteration = nullptr;
 
-    ca::FieldValue<fvec> fTargB _fvecalignment{};  ///< field in the target point (modifiable, do not touch!!)
-    kf::MeasurementXy<fvec> fTargetMeasurement _fvecalignment{};  ///< target constraint
+    kf::FieldValue<fvec> fTargB{};                 ///< field in the target point (modifiable, do not touch!!)
+    kf::MeasurementXy<fvec> fTargetMeasurement{};  ///< target constraint
 
   } _fvecalignment;
 }  // namespace cbm::algo::ca
diff --git a/algo/ca/core/pars/CaField.cxx b/algo/ca/core/pars/CaField.cxx
deleted file mode 100644
index dcfcbdb625..0000000000
--- a/algo/ca/core/pars/CaField.cxx
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Copyright (C) 2022 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Sergey Gorbunov, Sergei Zharko [committer] */
-
-#include "CaField.h"
diff --git a/algo/ca/core/pars/CaField.h b/algo/ca/core/pars/CaField.h
deleted file mode 100644
index 18c73b1ad6..0000000000
--- a/algo/ca/core/pars/CaField.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright (C) 2007-2022 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Sergey Gorbunov [committer], Igor Kulakov, Maksym Zyzak, Sergei Zharko */
-
-#pragma once  // include this header only once per compilation unit
-
-
-#include "CaDefs.h"
-#include "CaSimd.h"
-#include "KfFieldRegion.h"
-#include "KfFieldValue.h"
-#include "KfTrackParam.h"
-
-namespace cbm::algo::ca
-{
-  using cbm::algo::kf::FieldRegion;
-  using cbm::algo::kf::FieldSlice;
-  using cbm::algo::kf::FieldValue;
-}  // namespace cbm::algo::ca
diff --git a/algo/ca/core/pars/CaInitManager.cxx b/algo/ca/core/pars/CaInitManager.cxx
index 443226f132..b19b370ed2 100644
--- a/algo/ca/core/pars/CaInitManager.cxx
+++ b/algo/ca/core/pars/CaInitManager.cxx
@@ -70,8 +70,8 @@ void InitManager::ClearSetupInfo()
   fInitController.SetFlag(EInitKey::kActiveDetectorIDs, false);
 
   // Clear field info
-  fParameters.fVertexFieldRegion = ca::FieldRegion<fvec>();
-  fParameters.fVertexFieldValue  = ca::FieldValue<fvec>();
+  fParameters.fVertexFieldRegion = kf::FieldRegion<fvec>();
+  fParameters.fVertexFieldValue  = kf::FieldValue<fvec>();
   fInitController.SetFlag(EInitKey::kPrimaryVertexField, false);
 
   // Clear target position
@@ -294,7 +294,7 @@ void InitManager::InitTargetField(double zStep)
   constexpr int nPointsNodal{3};
 
   std::array<double, nPointsNodal> inputNodalZ{fTargetZ, fTargetZ + zStep, fTargetZ + 2. * zStep};
-  std::array<ca::FieldValue<fvec>, nPointsNodal> B{};
+  std::array<kf::FieldValue<fvec>, nPointsNodal> B{};
   std::array<fvec, nPointsNodal> z{};
   // loop over nodal points
   for (int idx = 0; idx < nPointsNodal; ++idx) {
diff --git a/algo/ca/core/pars/CaInitManager.h b/algo/ca/core/pars/CaInitManager.h
index 0e555c3374..699c1117ae 100644
--- a/algo/ca/core/pars/CaInitManager.h
+++ b/algo/ca/core/pars/CaInitManager.h
@@ -10,12 +10,12 @@
 #pragma once  // include this header only once per compilation unit
 
 #include "CaDefs.h"
-#include "CaField.h"
 #include "CaIteration.h"
 #include "CaObjectInitController.h"
 #include "CaParameters.h"
 #include "CaSimd.h"
 #include "CaStationInitializer.h"
+#include "KfFieldRegion.h"
 
 #include <array>
 #include <bitset>
@@ -160,7 +160,7 @@ namespace cbm::algo::ca
     /// and is available for modifications.
     void InitStationLayout();
 
-    /// \brief Calculates ca::FieldValue and L1FieldReference values for a selected step in z-axis from the target position
+    /// \brief Calculates kf::FieldValue and L1FieldReference values for a selected step in z-axis from the target position
     /// \param zStep step between nodal points
     void InitTargetField(double zStep);
 
diff --git a/algo/ca/core/pars/CaParameters.h b/algo/ca/core/pars/CaParameters.h
index 3512f2a49d..1c4d138765 100644
--- a/algo/ca/core/pars/CaParameters.h
+++ b/algo/ca/core/pars/CaParameters.h
@@ -10,12 +10,12 @@
 #pragma once  // include this header only once per compilation unit
 
 #include "CaDefs.h"
-#include "CaField.h"
 #include "CaIteration.h"
 #include "CaMaterialMap.h"
 #include "CaSearchWindow.h"
 #include "CaStation.h"
 #include "CaVector.h"
+#include "KfFieldRegion.h"
 
 #include <boost/serialization/array.hpp>
 #include <boost/serialization/utility.hpp>
@@ -112,7 +112,7 @@ namespace cbm::algo::ca
     Parameters& operator=(const Parameters& other) = default;
 
     /// \brief Move constructor
-    Parameters(Parameters&& other) noexcept = default;
+    Parameters(Parameters&& other) = default;
 
     /// \brief Move assignment operator
     Parameters& operator=(Parameters&& other) = default;
@@ -264,11 +264,11 @@ namespace cbm::algo::ca
     /// \brief Gets Z component of target position
     DataT GetTargetPositionZ() const { return fTargetPos[2]; }
 
-    /// \brief Gets ca::FieldRegion object at primary vertex
-    const FieldRegion<DataT>& GetVertexFieldRegion() const { return fVertexFieldRegion; }
+    /// \brief Gets kf::FieldRegion object at primary vertex
+    const kf::FieldRegion<DataT>& GetVertexFieldRegion() const { return fVertexFieldRegion; }
 
-    /// \brief Gets ca::FieldValue object at primary vertex
-    const FieldValue<DataT>& GetVertexFieldValue() const { return fVertexFieldValue; }
+    /// \brief Gets kf::FieldValue object at primary vertex
+    const kf::FieldValue<DataT>& GetVertexFieldValue() const { return fVertexFieldValue; }
 
     /// \brief Gets random seed
     ///
@@ -357,10 +357,10 @@ namespace cbm::algo::ca
     alignas(constants::misc::Alignment) std::array<DataT, 3> fTargetPos{Undef<float>, Undef<float>, Undef<float>};
 
     /// Field value object at primary vertex (between target and the first station)
-    alignas(constants::misc::Alignment) ca::FieldValue<DataT> fVertexFieldValue{};
+    kf::FieldValue<DataT> fVertexFieldValue{};
 
     /// Field region object at primary vertex (between target and the first station)
-    alignas(constants::misc::Alignment) ca::FieldRegion<DataT> fVertexFieldRegion{};
+    kf::FieldRegion<DataT> fVertexFieldRegion{};
 
     /// Array of stations
     alignas(constants::misc::Alignment) StationsContainer_t<DataT> fStations{};
diff --git a/algo/ca/core/pars/CaStation.h b/algo/ca/core/pars/CaStation.h
index d9c5930957..0ecc40f15d 100644
--- a/algo/ca/core/pars/CaStation.h
+++ b/algo/ca/core/pars/CaStation.h
@@ -5,8 +5,8 @@
 #pragma once  // include this header only once per compilation unit
 
 #include "CaDefs.h"
-#include "CaField.h"
 #include "CaSimd.h"
+#include "KfFieldRegion.h"
 
 #include <string>
 
@@ -29,7 +29,7 @@ namespace cbm::algo::ca
     DataT Xmax = constants::Undef<DataT>;  ///< min radius of the station [cm]
     DataT Ymax = constants::Undef<DataT>;  ///< max radius of the station [cm]
 
-    FieldSlice<DataT> fieldSlice{};  ///< Magnetic field near the station
+    kf::FieldSlice<DataT> fieldSlice{};  ///< Magnetic field near the station
 
     Station() = default;
 
diff --git a/algo/ca/core/pars/CaStationInitializer.cxx b/algo/ca/core/pars/CaStationInitializer.cxx
index 3052dc9662..3bfcea6e3f 100644
--- a/algo/ca/core/pars/CaStationInitializer.cxx
+++ b/algo/ca/core/pars/CaStationInitializer.cxx
@@ -118,7 +118,7 @@ void StationInitializer::SetFieldFunction(
     return std::tuple<double, double, double>(B[0], B[1], B[2]);
   };
 
-  fStation.fieldSlice = FieldSlice<fvec>(glambda, fXmax, fYmax, fZref);
+  fStation.fieldSlice = kf::FieldSlice<fvec>(glambda, fXmax, fYmax, fZref);
 
   fInitController.SetFlag(EInitKey::kFieldSlice);
 }
diff --git a/algo/ca/core/tracking/CaCloneMerger.cxx b/algo/ca/core/tracking/CaCloneMerger.cxx
index 955636d674..40884abbc4 100644
--- a/algo/ca/core/tracking/CaCloneMerger.cxx
+++ b/algo/ca/core/tracking/CaCloneMerger.cxx
@@ -92,8 +92,8 @@ void CloneMerger::Exec(const ca::InputData& input, WindowData& wData)
 
   TrackParamV& Tb = fitB.Tr();
   TrackParamV& Tf = fitF.Tr();
-  ca::FieldValue<fvec> fBm, fBb, fBf _fvecalignment;
-  ca::FieldRegion<fvec> fld _fvecalignment;
+  kf::FieldValue<fvec> fBm, fBb, fBf _fvecalignment;
+  kf::FieldRegion<fvec> fld _fvecalignment;
 
   // Max length for merging
   unsigned char maxLengthForMerge = static_cast<unsigned char>(fParameters.GetNstationsActive() - 3);
diff --git a/algo/ca/core/tracking/CaFramework.h b/algo/ca/core/tracking/CaFramework.h
index cf3e8d62fc..5c783ca162 100644
--- a/algo/ca/core/tracking/CaFramework.h
+++ b/algo/ca/core/tracking/CaFramework.h
@@ -7,7 +7,6 @@
 #include "CaBranch.h"
 #include "CaCloneMerger.h"
 #include "CaDefs.h"
-#include "CaField.h"
 #include "CaGrid.h"
 #include "CaGridEntry.h"
 #include "CaHit.h"
diff --git a/algo/ca/core/tracking/CaTrackExtender.cxx b/algo/ca/core/tracking/CaTrackExtender.cxx
index 6e3ccf6656..09123e0208 100644
--- a/algo/ca/core/tracking/CaTrackExtender.cxx
+++ b/algo/ca/core/tracking/CaTrackExtender.cxx
@@ -100,15 +100,15 @@ void TrackExtender::FitBranchFast(const ca::Branch& t, TrackParamV& Tout, const
   T.C10() = hit0.dXY();
   T.C11() = hit0.dY2();
 
-  ca::FieldRegion<fvec> fld _fvecalignment;
+  kf::FieldRegion<fvec> fld _fvecalignment;
   fvec fldZ0 = sta1.fZ;  // suppose field is smoth
   fvec fldZ1 = sta2.fZ;
   fvec fldZ2 = sta0.fZ;
 
 
-  ca::FieldValue fldB0 = sta1.fieldSlice.GetFieldValue(x1, y1);
-  ca::FieldValue fldB1 = sta2.fieldSlice.GetFieldValue(x2, y2);
-  ca::FieldValue fldB2 = sta0.fieldSlice.GetFieldValue(x0, y0);
+  kf::FieldValue fldB0 = sta1.fieldSlice.GetFieldValue(x1, y1);
+  kf::FieldValue fldB1 = sta2.fieldSlice.GetFieldValue(x2, y2);
+  kf::FieldValue fldB2 = sta0.fieldSlice.GetFieldValue(x0, y0);
 
   fld.Set(fldB2, fldZ2, fldB1, fldZ1, fldB0, fldZ0);
 
@@ -183,14 +183,14 @@ void TrackExtender::FindMoreHits(ca::Branch& t, TrackParamV& Tout, const FitDire
   fvec x2 = hit2.X();
   fvec y2 = hit2.Y();
 
-  ca::FieldRegion<fvec> fld _fvecalignment;
+  kf::FieldRegion<fvec> fld _fvecalignment;
   fvec fldZ0 = sta1.fZ;
   fvec fldZ1 = sta2.fZ;
   fvec fldZ2 = sta0.fZ;
 
-  ca::FieldValue fldB0 = sta1.fieldSlice.GetFieldValue(x1, y1);
-  ca::FieldValue fldB1 = sta2.fieldSlice.GetFieldValue(x2, y2);
-  ca::FieldValue fldB2 = sta0.fieldSlice.GetFieldValue(x0, y0);
+  kf::FieldValue fldB0 = sta1.fieldSlice.GetFieldValue(x1, y1);
+  kf::FieldValue fldB1 = sta2.fieldSlice.GetFieldValue(x2, y2);
+  kf::FieldValue fldB2 = sta0.fieldSlice.GetFieldValue(x0, y0);
 
   fld.Set(fldB2, fldZ2, fldB1, fldZ1, fldB0, fldZ0);
 
diff --git a/algo/ca/core/tracking/CaTrackFit.cxx b/algo/ca/core/tracking/CaTrackFit.cxx
index 1ab9c98093..ed1f12f124 100644
--- a/algo/ca/core/tracking/CaTrackFit.cxx
+++ b/algo/ca/core/tracking/CaTrackFit.cxx
@@ -615,7 +615,7 @@ namespace cbm::algo::ca
   void
     TrackFit<DataT>::Extrapolate  // extrapolates track parameters and returns jacobian for extrapolation of CovMatrix
     (DataT z_out,                 // extrapolate to this z position
-     const ca::FieldRegion<DataT>& F)
+     const kf::FieldRegion<DataT>& F)
   {
     // use Q/p linearisation at fQp0
 
@@ -637,7 +637,7 @@ namespace cbm::algo::ca
   void TrackFit<
     DataT>::ExtrapolateStep  // extrapolates track parameters and returns jacobian for extrapolation of CovMatrix
     (DataT zOut,             // extrapolate to this z position
-     const ca::FieldRegion<DataT>& Field)
+     const kf::FieldRegion<DataT>& Field)
   {
     // use Q/p linearisation at fQp0
     // implementation of the Runge-Kutta method without optimization
@@ -704,7 +704,7 @@ namespace cbm::algo::ca
       }
       DataT z = fTr.GetZ() + stepDz[step];
 
-      ca::FieldValue B = Field.Get(rstep[0], rstep[1], z);
+      kf::FieldValue B = Field.Get(rstep[0], rstep[1], z);
       DataT Bx         = B.GetBx();
       DataT By         = B.GetBy();
       DataT Bz         = B.GetBz();
@@ -847,7 +847,7 @@ namespace cbm::algo::ca
 
 
   template<typename DataT>
-  void TrackFit<DataT>::ExtrapolateLine(DataT z_out, const ca::FieldRegion<DataT>& F)
+  void TrackFit<DataT>::ExtrapolateLine(DataT z_out, const kf::FieldRegion<DataT>& F)
   {
     // extrapolate the track assuming fQp0 == 0
     // TODO: write special simplified procedure
@@ -868,7 +868,7 @@ namespace cbm::algo::ca
     //   t += dz * sqrt ( 1 + tx*tx + ty*ty )  * vi
 
     if (0) {  // debug: full Runge-Kutta extrapolation with zero field values
-      FieldRegion<DataT> F;
+      kf::FieldRegion<DataT> F;
       ExtrapolateStep(zOut, F);
       return;
     }
@@ -1162,7 +1162,7 @@ namespace cbm::algo::ca
 
 
   template<typename DataT>
-  void TrackFit<DataT>::GetExtrapolatedXYline(DataT z, const ca::FieldRegion<DataT>& F, DataT& extrX, DataT& extrY,
+  void TrackFit<DataT>::GetExtrapolatedXYline(DataT z, const kf::FieldRegion<DataT>& F, DataT& extrX, DataT& extrY,
                                               std::array<DataT, TrackParamBase<DataT>::kNtrackParam>& Jx,
                                               std::array<DataT, TrackParamBase<DataT>::kNtrackParam>& Jy) const
   {
@@ -1216,7 +1216,7 @@ namespace cbm::algo::ca
 
   template<typename DataT>
   void TrackFit<DataT>::FilterWithTargetAtLine(DataT targZ, const kf::MeasurementXy<DataT>& targXY,
-                                               const ca::FieldRegion<DataT>& F)
+                                               const kf::FieldRegion<DataT>& F)
   {
     // Add the target constraint to a straight line track
 
diff --git a/algo/ca/core/tracking/CaTrackFit.h b/algo/ca/core/tracking/CaTrackFit.h
index de708c646f..21a2dafe36 100644
--- a/algo/ca/core/tracking/CaTrackFit.h
+++ b/algo/ca/core/tracking/CaTrackFit.h
@@ -10,11 +10,12 @@
 
 #pragma once  // include this header only once per compilation unit
 
-#include "CaField.h"
 #include "CaSimd.h"
+#include "KfFieldRegion.h"
 #include "KfMeasurementTime.h"
 #include "KfMeasurementU.h"
 #include "KfMeasurementXy.h"
+#include "KfSimd.h"
 #include "KfTrackParam.h"
 #include "KfUtils.h"
 
@@ -46,12 +47,12 @@ namespace cbm::algo::ca
 
     TrackFit() = default;
 
-    TrackFit(const TrackParamBase<DataT>& t) { SetTrack(t); }
+    TrackFit(const kf::TrackParamBase<DataT>& t) { SetTrack(t); }
 
     TrackFit(const DataTmask& m, bool fitV) : fMask(m), fDoFitVelocity(fitV) {}
 
     template<typename T>
-    TrackFit(const TrackParamBase<T>& t)
+    TrackFit(const kf::TrackParamBase<T>& t)
     {
       SetTrack(t);
     }
@@ -59,7 +60,7 @@ namespace cbm::algo::ca
     void SetMask(const DataTmask& m) { fMask = m; }
 
     template<typename T>
-    void SetTrack(const TrackParamBase<T>& t)
+    void SetTrack(const kf::TrackParamBase<T>& t)
     {
       fTr.Set(t);
       fQp0 = fTr.GetQp();
@@ -67,7 +68,7 @@ namespace cbm::algo::ca
 
     void SetQp0(DataT qp0) { fQp0 = qp0; }
 
-    TrackParamBase<DataT>& Tr() { return fTr; }
+    kf::TrackParamBase<DataT>& Tr() { return fTr; }
 
     DataT& Qp0() { return fQp0; }
 
@@ -124,14 +125,14 @@ namespace cbm::algo::ca
     /// it can do several extrapolation steps if the Z is far away
     /// \param z - Z coordinate to extrapolate to
     /// \param F - field region
-    void Extrapolate(DataT z, const ca::FieldRegion<DataT>& F);
+    void Extrapolate(DataT z, const kf::FieldRegion<DataT>& F);
 
     /// extrapolate the track to the given Z using the field F
     /// it does extrapolation in one step
-    void ExtrapolateStep(DataT z_out, const ca::FieldRegion<DataT>& F);
+    void ExtrapolateStep(DataT z_out, const kf::FieldRegion<DataT>& F);
 
     /// extrapolate the track to the given Z using linearization at the straight line
-    void ExtrapolateLine(DataT z_out, const ca::FieldRegion<DataT>& F);
+    void ExtrapolateLine(DataT z_out, const kf::FieldRegion<DataT>& F);
 
     /// extrapolate the track to the given Z assuming no magnetic field
     void ExtrapolateLineNoField(DataT z_out);
@@ -166,9 +167,9 @@ namespace cbm::algo::ca
     /// special utilities needed by the combinatorial track finder
 
     /// extrapolate track as a line, return the extrapolated X, Y and the Jacobians
-    void GetExtrapolatedXYline(DataT z, const ca::FieldRegion<DataT>& F, DataT& extrX, DataT& extrY,
-                               std::array<DataT, TrackParamBase<DataT>::kNtrackParam>& Jx,
-                               std::array<DataT, TrackParamBase<DataT>::kNtrackParam>& Jy) const;
+    void GetExtrapolatedXYline(DataT z, const kf::FieldRegion<DataT>& F, DataT& extrX, DataT& extrY,
+                               std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jx,
+                               std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jy) const;
 
     /// filter the track with the XY measurement placed at different Z
     /// \param m - measurement
@@ -177,8 +178,8 @@ namespace cbm::algo::ca
     /// \param Jx - Jacobian of the extrapolated X
     /// \param Jy - Jacobian of the extrapolated Y
     void FilterExtrapolatedXY(const kf::MeasurementXy<DataT>& m, DataT extrX, DataT extrY,
-                              const std::array<DataT, TrackParamBase<DataT>::kNtrackParam>& Jx,
-                              const std::array<DataT, TrackParamBase<DataT>::kNtrackParam>& Jy);
+                              const std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jx,
+                              const std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jy);
 
     /// extrapolate the track to the given Z using linearization at the straight line,
     /// \param z_out - Z coordinate to extrapolate to
@@ -197,7 +198,7 @@ namespace cbm::algo::ca
 
     /// add target measuremet to the track using linearisation at a straight line
     void FilterWithTargetAtLine(DataT targZ, const kf::MeasurementXy<DataT>& targXYInfo,
-                                const ca::FieldRegion<DataT>& F);
+                                const kf::FieldRegion<DataT>& F);
 
     /// \brief Approximate mean energy loss with Bethe-Bloch formula
     /// \param bg2 (beta*gamma)^2
@@ -247,7 +248,7 @@ namespace cbm::algo::ca
 
     DataTmask fMask{true};  ///< mask of active elements in simd vectors
 
-    TrackParamBase<DataT> fTr{};  ///< track parameters
+    kf::TrackParamBase<DataT> fTr{};  ///< track parameters
     DataT fQp0{0.};
 
     DataT fMass{0.10565800};      ///< particle mass (muon mass by default)
@@ -286,7 +287,7 @@ namespace cbm::algo::ca
   inline std::pair<DataT, DataT> TrackFit<DataT>::ExtrapolateLineYdY2(DataT z_out) const
   {
     DataT dz = (z_out - fTr.GetZ());
-    return std::pair(fTr.GetY() + fTr.GetTy() * dz, fTr.C11() + dz * (2 * fTr.C31() + dz * fTr.C33()));
+    return std::pair(fTr.GetY() + fTr.GetTy() * dz, fTr.C11() + dz * (DataT(2.) * fTr.C31() + dz * fTr.C33()));
   }
 
   template<typename DataT>
diff --git a/algo/ca/core/tracking/CaTrackFitter.cxx b/algo/ca/core/tracking/CaTrackFitter.cxx
index 7f49cc9927..a52a209863 100644
--- a/algo/ca/core/tracking/CaTrackFitter.cxx
+++ b/algo/ca/core/tracking/CaTrackFitter.cxx
@@ -38,14 +38,14 @@ void TrackFitter::FitCaTracks(const ca::InputData& input, WindowData& wData)
   //  LOG(info) << " Start CA Track Fitter ";
   int start_hit = 0;  // for interation in wData.RecoHitIndices()
 
-  //  static ca::FieldValue fldB0, fldB1, fldB2 _fvecalignment;
-  //  static ca::FieldRegion fld _fvecalignment;
-  ca::FieldValue<fvec> fldB0, fldB1, fldB2 _fvecalignment;
-  ca::FieldRegion<fvec> fld _fvecalignment;
+  //  static kf::FieldValue fldB0, fldB1, fldB2 _fvecalignment;
+  //  static kf::FieldRegion fld _fvecalignment;
+  kf::FieldValue<fvec> fldB0, fldB1, fldB2 _fvecalignment;
+  kf::FieldRegion<fvec> fld _fvecalignment;
 
 
-  ca::FieldValue<fvec> fldB01, fldB11, fldB21 _fvecalignment;
-  ca::FieldRegion<fvec> fld1 _fvecalignment;
+  kf::FieldValue<fvec> fldB01, fldB11, fldB21 _fvecalignment;
+  kf::FieldRegion<fvec> fld1 _fvecalignment;
 
   const int nStations = fParameters.GetNstationsActive();
   int nTracks_SIMD    = fvec::size();
@@ -98,7 +98,7 @@ void TrackFitter::FitCaTracks(const ca::InputData& input, WindowData& wData)
   fvec z_start;
   fvec z_end;
 
-  ca::FieldValue<fvec> fB[constants::size::MaxNstations], fB_temp _fvecalignment;
+  kf::FieldValue<fvec> fB[constants::size::MaxNstations], fB_temp _fvecalignment;
 
 
   fvec ZSta[constants::size::MaxNstations];
@@ -288,7 +288,7 @@ void TrackFitter::FitCaTracks(const ca::InputData& input, WindowData& wData)
         vtxInfo.SetDy2(1.e-8);
 
         if (ca::TrackingMode::kGlobal == fTrackingMode) {
-          ca::FieldRegion<fvec> fldFull(kf::GlobalField::fgOriginalFieldType, kf::GlobalField::fgOriginalField);
+          kf::FieldRegion<fvec> fldFull(kf::GlobalField::fgOriginalFieldType, kf::GlobalField::fgOriginalField);
           fitpv.SetMaxExtrapolationStep(1.);
           for (int vtxIter = 0; vtxIter < 2; vtxIter++) {
             fitpv.SetQp0(fitpv.Tr().Qp());
diff --git a/algo/ca/core/tracking/CaTripletConstructor.cxx b/algo/ca/core/tracking/CaTripletConstructor.cxx
index 53e843a733..43bfdfee01 100644
--- a/algo/ca/core/tracking/CaTripletConstructor.cxx
+++ b/algo/ca/core/tracking/CaTripletConstructor.cxx
@@ -103,8 +103,8 @@ void TripletConstructor::CreateTripletsForHit(Vector<ca::Triplet>& tripletsOut,
   {
     /// Get the field approximation. Add the target to parameters estimation.
     /// Propagaete to the middle station of a triplet.
-    //ca::FieldValue<fvec> lB, mB, cB, rB _fvecalignment;           currently not used
-    //ca::FieldValue<fvec> l_B_global, centB_global _fvecalignment; currently not used
+    //kf::FieldValue<fvec> lB, mB, cB, rB _fvecalignment;           currently not used
+    //kf::FieldValue<fvec> l_B_global, centB_global _fvecalignment; currently not used
 
     // get the magnetic field along the track.
     // (suppose track is straight line with origin in the target)
@@ -140,18 +140,18 @@ void TripletConstructor::CreateTripletsForHit(Vector<ca::Triplet>& tripletsOut,
 
     // field made by  the left hit, the target and the station istac in-between.
     // is used for extrapolation to the target and to the middle hit
-    ca::FieldRegion<fvec> fld0;
+    kf::FieldRegion<fvec> fld0;
     {
-      ca::FieldValue<fvec> B0 = fFld0Sta[0]->fieldSlice.GetFieldValueForLine(T);
-      ca::FieldValue<fvec> B1 = fFld0Sta[1]->fieldSlice.GetFieldValueForLine(T);
+      kf::FieldValue<fvec> B0 = fFld0Sta[0]->fieldSlice.GetFieldValueForLine(T);
+      kf::FieldValue<fvec> B1 = fFld0Sta[1]->fieldSlice.GetFieldValueForLine(T);
       fld0.Set(frWData.TargB(), fParameters.GetTargetPositionZ(), B0, fFld0Sta[0]->fZ, B1, fFld0Sta[1]->fZ);
     }
 
     {  // field, made by the left hit, the middle station and the right station
       // Will be used for extrapolation to the right hit
-      ca::FieldValue<fvec> B0 = fFld1Sta[0]->fieldSlice.GetFieldValueForLine(T);
-      ca::FieldValue<fvec> B1 = fFld1Sta[1]->fieldSlice.GetFieldValueForLine(T);
-      ca::FieldValue<fvec> B2 = fFld1Sta[2]->fieldSlice.GetFieldValueForLine(T);
+      kf::FieldValue<fvec> B0 = fFld1Sta[0]->fieldSlice.GetFieldValueForLine(T);
+      kf::FieldValue<fvec> B1 = fFld1Sta[1]->fieldSlice.GetFieldValueForLine(T);
+      kf::FieldValue<fvec> B2 = fFld1Sta[2]->fieldSlice.GetFieldValueForLine(T);
       fFldL.Set(B0, fFld1Sta[0]->fZ, B1, fFld1Sta[1]->fZ, B2, fFld1Sta[2]->fZ);
     }
 
@@ -479,9 +479,9 @@ void TripletConstructor::FindTriplets()
 
     // find the field along the track
 
-    ca::FieldValue<fvec> B[3] _fvecalignment;
-    ca::FieldRegion<fvec> fld _fvecalignment;
-    ca::FieldRegion<fvec> fldTarget _fvecalignment;
+    kf::FieldValue<fvec> B[3] _fvecalignment;
+    kf::FieldRegion<fvec> fld _fvecalignment;
+    kf::FieldRegion<fvec> fldTarget _fvecalignment;
 
     fvec tx[3] = {(x[1] - x[0]) / (z[1] - z[0]), (x[2] - x[0]) / (z[2] - z[0]), (x[2] - x[1]) / (z[2] - z[1])};
     fvec ty[3] = {(y[1] - y[0]) / (z[1] - z[0]), (y[2] - y[0]) / (z[2] - z[0]), (y[2] - y[1]) / (z[2] - z[1])};
diff --git a/algo/ca/core/tracking/CaTripletConstructor.h b/algo/ca/core/tracking/CaTripletConstructor.h
index 6282b0da73..d01931491b 100644
--- a/algo/ca/core/tracking/CaTripletConstructor.h
+++ b/algo/ca/core/tracking/CaTripletConstructor.h
@@ -8,7 +8,6 @@
 
 #pragma once  // include this header only once per compilation unit
 
-#include "CaField.h"
 #include "CaFramework.h"
 #include "CaGridEntry.h"
 #include "CaStation.h"
@@ -16,6 +15,8 @@
 #include "CaTriplet.h"
 #include "CaVector.h"
 #include "CaWindowData.h"
+#include "KfFieldRegion.h"
+#include "KfSimd.h"
 #include "KfTrackParam.h"
 
 namespace cbm::algo::ca
@@ -23,7 +24,7 @@ namespace cbm::algo::ca
 
   /// Construction of triplets for the CA tracker
   ///
-  class TripletConstructor {
+  class alignas(kf::VcMemAlign) TripletConstructor {
 
    public:
     ///                             ------  Constructors and destructor ------
@@ -98,7 +99,7 @@ namespace cbm::algo::ca
       fFld1Sta[3];  // three stations for approximating the field between the left and the right hit
 
     ca::HitIndex_t fIhitL;  ///< index of the left hit in fAlgo->fWindowHits
-    ca::FieldRegion<fvec> fFldL;
+    kf::FieldRegion<fvec> fFldL;
 
     // Persistent storage for triplet tracks and hits
     Triplet_t fTripletData;
@@ -110,7 +111,6 @@ namespace cbm::algo::ca
     static constexpr bool fDebugDublets     = false;  // print debug info for dublets
     static constexpr bool fDebugTriplets    = false;  // print debug info for triplets
     static constexpr bool fDebugCollectHits = false;  // print debug info for CollectHits
-
-  } _fvecalignment;
+  };
 
 }  // namespace cbm::algo::ca
diff --git a/algo/kf/core/data/KfMeasurementTime.h b/algo/kf/core/data/KfMeasurementTime.h
index 10dd737115..4b3f0f000c 100644
--- a/algo/kf/core/data/KfMeasurementTime.h
+++ b/algo/kf/core/data/KfMeasurementTime.h
@@ -25,7 +25,7 @@ namespace cbm::algo::kf
   /// The measurement may be a SIMD vector of values, when DataT is fvec type
   ///
   template<typename DataT>
-  class MeasurementTime {
+  class alignas(VcMemAlign) MeasurementTime {
 
    public:
     friend class boost::serialization::access;
diff --git a/algo/kf/core/data/KfMeasurementU.h b/algo/kf/core/data/KfMeasurementU.h
index 01240db2f5..711f237ec2 100644
--- a/algo/kf/core/data/KfMeasurementU.h
+++ b/algo/kf/core/data/KfMeasurementU.h
@@ -32,7 +32,7 @@ namespace cbm::algo::kf
   /// The measurement may be a SIMD vector of values, when DataT is fvec type
   ///
   template<typename DataT>
-  class MeasurementU {
+  class alignas(VcMemAlign) MeasurementU {
 
    public:
     friend class boost::serialization::access;
diff --git a/algo/kf/core/data/KfMeasurementXy.h b/algo/kf/core/data/KfMeasurementXy.h
index e01d160bbe..2031d7f6f6 100644
--- a/algo/kf/core/data/KfMeasurementXy.h
+++ b/algo/kf/core/data/KfMeasurementXy.h
@@ -25,7 +25,7 @@ namespace cbm::algo::kf
   /// The measurement may be a SIMD vector of values, when DataT is fvec type
   ///
   template<typename DataT>
-  class MeasurementXy {
+  class alignas(VcMemAlign) MeasurementXy {
    public:
     friend class boost::serialization::access;
 
diff --git a/reco/KF/CbmKfTrackFitter.cxx b/reco/KF/CbmKfTrackFitter.cxx
index 7b3f9652b3..60b4435c15 100644
--- a/reco/KF/CbmKfTrackFitter.cxx
+++ b/reco/KF/CbmKfTrackFitter.cxx
@@ -526,7 +526,7 @@ bool CbmKfTrackFitter::FitTrack(CbmKfTrackFitter::Track& t)
 
   fFit.SetParticleMass(fMass);
 
-  ca::FieldRegion<double> field(kf::GlobalField::fgOriginalFieldType, kf::GlobalField::fgOriginalField);
+  kf::FieldRegion<double> field(kf::GlobalField::fgOriginalFieldType, kf::GlobalField::fgOriginalField);
 
   {  // fit downstream
 
diff --git a/reco/KF/KFQA/CbmKFTrackQa.cxx b/reco/KF/KFQA/CbmKFTrackQa.cxx
index 7120c05a2b..443aca563b 100644
--- a/reco/KF/KFQA/CbmKFTrackQa.cxx
+++ b/reco/KF/KFQA/CbmKFTrackQa.cxx
@@ -14,7 +14,6 @@
 #include "FairRunAna.h"
 
 //KF Particle headers
-#include "CaField.h"
 #include "CbmKFVertex.h"
 #include "CbmL1PFFitter.h"
 #include "KFMCTrack.h"
diff --git a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
index b0464a6c9c..ade81fed64 100644
--- a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
+++ b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
@@ -27,7 +27,6 @@
 #include "TClonesArray.h"
 
 //ca::Framework tools
-#include "CaField.h"
 #include "CaFramework.h"
 #include "CaSimd.h"
 #include "CaStation.h"
@@ -36,6 +35,7 @@
 #include "CbmKFVertex.h"
 #include "FairRootManager.h"
 #include "KFParticleDatabase.h"
+#include "KfFieldRegion.h"
 #include "KfTrackParam.h"
 #include "TDatabasePDG.h"
 
@@ -55,7 +55,7 @@ namespace NS_L1TrackFitter
 using namespace NS_L1TrackFitter;
 
 
-inline void CbmL1PFFitter::PFFieldRegion::setFromL1FieldRegion(const ca::FieldRegion<fvec>& fld, int ind)
+inline void CbmL1PFFitter::PFFieldRegion::setFromL1FieldRegion(const kf::FieldRegion<fvec>& fld, int ind)
 {
   assert(fld.GetFieldMode() == kf::EFieldMode::Intrpl);
   const auto& coeff = fld.GetIntrplField()->GetCoefficients();
@@ -70,7 +70,7 @@ inline void CbmL1PFFitter::PFFieldRegion::setFromL1FieldRegion(const ca::FieldRe
   fP[9] = fld.GetIntrplField()->GetZfirst()[ind];
 }
 
-inline void CbmL1PFFitter::PFFieldRegion::getL1FieldRegion(ca::FieldRegion<fvec>& fld, int ind)
+inline void CbmL1PFFitter::PFFieldRegion::getL1FieldRegion(kf::FieldRegion<fvec>& fld, int ind)
 {
   assert(fld.GetFieldMode() == kf::EFieldMode::Intrpl);
 
@@ -91,7 +91,7 @@ inline void CbmL1PFFitter::PFFieldRegion::getL1FieldRegion(ca::FieldRegion<fvec>
   fld = kf::FieldRegion<fvec>(kf::EFieldType::Normal, fldInterpolated);
 }
 
-inline CbmL1PFFitter::PFFieldRegion::PFFieldRegion(const ca::FieldRegion<fvec>& fld, int i)
+inline CbmL1PFFitter::PFFieldRegion::PFFieldRegion(const kf::FieldRegion<fvec>& fld, int i)
 {
   setFromL1FieldRegion(fld, i);
 }
@@ -171,8 +171,8 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM
 
   Initialize();
 
-  ca::FieldValue<fvec> b0, b1, b2 _fvecalignment;
-  ca::FieldRegion<fvec> fld;
+  kf::FieldValue<fvec> b0, b1, b2 _fvecalignment;
+  kf::FieldRegion<fvec> fld;
   // fld.SetUseOriginalField();
 
   static int nHits = CbmL1::Instance()->fpAlgo->GetParameters().GetNstationsActive();
@@ -202,8 +202,8 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM
   fvec dt2_first, dt2_last;
 
   fvec z0, z1, z2, dz, z_start, z_end;
-  ca::FieldValue<fvec> fB[nHits];
-  ca::FieldValue<fvec> fB_temp _fvecalignment;
+  kf::FieldValue<fvec> fB[nHits];
+  kf::FieldValue<fvec> fB_temp _fvecalignment;
 
   unsigned short N_vTracks = Tracks.size();
 
@@ -516,8 +516,8 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe
 
   field.reserve(Tracks.size());
 
-  ca::FieldRegion<fvec> fld _fvecalignment;
-  ca::FieldValue<fvec> fB[3], fB_temp _fvecalignment;
+  kf::FieldRegion<fvec> fld _fvecalignment;
+  kf::FieldValue<fvec> fB[3], fB_temp _fvecalignment;
   fvec zField[3];
 
   unsigned short N_vTracks = Tracks.size();
@@ -660,7 +660,7 @@ void CbmL1PFFitter::CalculateFieldRegion(vector<CbmStsTrack>& Tracks, vector<PFF
 
   field.reserve(Tracks.size());
 
-  ca::FieldRegion<fvec> fld _fvecalignment;
+  kf::FieldRegion<fvec> fld _fvecalignment;
 
   int nTracks_SIMD = fvec::size();
   TrackParamV T;  // fitting parametr coresponding to current track
@@ -669,7 +669,7 @@ void CbmL1PFFitter::CalculateFieldRegion(vector<CbmStsTrack>& Tracks, vector<PFF
 
   int ista;
   const ca::Station<fvec>* sta = CbmL1::Instance()->fpAlgo->GetParameters().GetStations().begin();
-  ca::FieldValue<fvec> fB[3], fB_temp _fvecalignment;
+  kf::FieldValue<fvec> fB[3], fB_temp _fvecalignment;
   fvec zField[3];
 
   unsigned short N_vTracks = Tracks.size();
@@ -740,7 +740,7 @@ void CbmL1PFFitter::CalculateFieldRegionAtLastPoint(vector<CbmStsTrack>& Tracks,
 
   field.reserve(Tracks.size());
 
-  ca::FieldRegion<fvec> fld _fvecalignment;
+  kf::FieldRegion<fvec> fld _fvecalignment;
 
   int nTracks_SIMD = fvec::size();
   TrackParamV T;  // fitting parametr coresponding to current track
@@ -749,7 +749,7 @@ void CbmL1PFFitter::CalculateFieldRegionAtLastPoint(vector<CbmStsTrack>& Tracks,
 
   int ista;
   const ca::Station<fvec>* sta = CbmL1::Instance()->fpAlgo->GetParameters().GetStations().begin();
-  ca::FieldValue<fvec> fB[3], fB_temp _fvecalignment;
+  kf::FieldValue<fvec> fB[3], fB_temp _fvecalignment;
   fvec zField[3];
 
   unsigned short N_vTracks = Tracks.size();
diff --git a/reco/KF/ParticleFitter/CbmL1PFFitter.h b/reco/KF/ParticleFitter/CbmL1PFFitter.h
index 759fde6768..420d2a2093 100644
--- a/reco/KF/ParticleFitter/CbmL1PFFitter.h
+++ b/reco/KF/ParticleFitter/CbmL1PFFitter.h
@@ -20,8 +20,8 @@
 #ifndef _CbmL1PFFitter_h_
 #define _CbmL1PFFitter_h_
 
-#include "CaField.h"
 #include "CaSimd.h"
+#include "KfFieldRegion.h"
 
 #include <vector>
 
@@ -36,12 +36,12 @@ class TClonesArray;
 
 class CbmL1PFFitter {
  public:
-  // A container for parameters of ca::FieldRegion
+  // A container for parameters of kf::FieldRegion
   struct PFFieldRegion {
     PFFieldRegion() {}
-    PFFieldRegion(const ca::FieldRegion<ca::fvec>&, int i);
-    void setFromL1FieldRegion(const ca::FieldRegion<ca::fvec>&, int i);
-    void getL1FieldRegion(ca::FieldRegion<ca::fvec>&, int i);
+    PFFieldRegion(const kf::FieldRegion<kf::fvec>&, int i);
+    void setFromL1FieldRegion(const kf::FieldRegion<ca::fvec>&, int i);
+    void getL1FieldRegion(kf::FieldRegion<kf::fvec>&, int i);
 
     float fP[10]{0.};
   };
diff --git a/reco/L1/CbmL1.cxx b/reco/L1/CbmL1.cxx
index 06bf368eba..a51a3f5bed 100644
--- a/reco/L1/CbmL1.cxx
+++ b/reco/L1/CbmL1.cxx
@@ -600,7 +600,7 @@ try {
         auto caFldVal_0 = fpParameters->GetStation(0).fieldSlice.GetFieldValue(x, y);
         auto caFldVal_1 = fpParameters->GetStation(1).fieldSlice.GetFieldValue(x, y);
         auto caFldVal_2 = fpParameters->GetStation(2).fieldSlice.GetFieldValue(x, y);
-        auto caFldReg   = cbm::algo::ca::FieldRegion<fvec>{};
+        auto caFldReg   = cbm::algo::kf::FieldRegion<fvec>{};
         caFldReg.Set(caFldVal_0, z0, caFldVal_1, z1, caFldVal_2, z2);
         LOG(info) << "CA ----> " << caFldReg.ToString();
         LOG(info) << "KF ----> " << kfFldReg.ToString();
diff --git a/reco/L1/CbmL1Performance.cxx b/reco/L1/CbmL1Performance.cxx
index 9cdf511f0b..8a3ea1070b 100644
--- a/reco/L1/CbmL1Performance.cxx
+++ b/reco/L1/CbmL1Performance.cxx
@@ -1311,7 +1311,7 @@ void CbmL1::TrackFitPerformance()
       if (!mc.IsPrimary()) {  // secondary
 
         {  // extrapolate to vertex
-          ca::FieldRegion<fvec> fld(kf::GlobalField::fgOriginalFieldType, kf::GlobalField::fgOriginalField);
+          kf::FieldRegion<fvec> fld(kf::GlobalField::fgOriginalFieldType, kf::GlobalField::fgOriginalField);
           fit.Extrapolate(mc.GetStartZ(), fld);
           // add material
           const int fSta = fvHitDebugInfo[it->Hits[0]].iStation;
@@ -1378,7 +1378,7 @@ void CbmL1::TrackFitPerformance()
       else {  // primary
 
         {  // extrapolate to vertex
-          ca::FieldRegion<fvec> fld(kf::GlobalField::fgOriginalFieldType, kf::GlobalField::fgOriginalField);
+          kf::FieldRegion<fvec> fld(kf::GlobalField::fgOriginalFieldType, kf::GlobalField::fgOriginalField);
 
           // add material
           const int fSta = fvHitDebugInfo[it->Hits[0]].iStation;
@@ -1526,7 +1526,7 @@ void CbmL1::FillFitHistos(TrackParamV& track, const cbm::ca::tools::MCPoint& mcP
   //fit.SetMaxExtrapolationStep(10.);
   fit.SetDoFitVelocity(true);
   fit.SetTrack(track);
-  ca::FieldRegion<fvec> fld(kf::EFieldType::Normal, kf::GlobalField::fgOriginalField);
+  kf::FieldRegion<fvec> fld(kf::EFieldType::Normal, kf::GlobalField::fgOriginalField);
   fit.Extrapolate(mcP.GetZOut(), fld);
   track = fit.Tr();
 
@@ -1644,7 +1644,7 @@ void CbmL1::FieldApproxCheck()
 
         double bbb = sqrt(B[0] * B[0] + B[1] * B[1] + B[2] * B[2]);
 
-        ca::FieldValue<fvec> B_L1 = st.fieldSlice.GetFieldValue(x, y);
+        kf::FieldValue<fvec> B_L1 = st.fieldSlice.GetFieldValue(x, y);
 
         hdB[0]->SetBinContent(i, j, (bbb - B_L1.GetAbs()[0]));
         hdB[1]->SetBinContent(i, j, (B[0] - B_L1.GetBx()[0]));
diff --git a/reco/L1/catools/CaToolsField.h b/reco/L1/catools/CaToolsField.h
index 9757b50345..0345cf0770 100644
--- a/reco/L1/catools/CaToolsField.h
+++ b/reco/L1/catools/CaToolsField.h
@@ -9,9 +9,9 @@
 
 #pragma once  // include this header only once per compilation unit
 
-#include "CaField.h"
 #include "FairField.h"
 #include "FairRunAna.h"
+#include "KfFieldRegion.h"
 
 #include <mutex>
 
diff --git a/reco/L1/qa/CbmCaTrackFitQa.cxx b/reco/L1/qa/CbmCaTrackFitQa.cxx
index 0de6cb97e8..722460a748 100644
--- a/reco/L1/qa/CbmCaTrackFitQa.cxx
+++ b/reco/L1/qa/CbmCaTrackFitQa.cxx
@@ -9,13 +9,13 @@
 
 #include "CbmCaTrackFitQa.h"
 
-#include "CaField.h"
 #include "CaToolsField.h"
 #include "CaToolsMCData.h"
 #include "CaTrackFit.h"
 #include "CbmL1Track.h"
 #include "CbmQaCanvas.h"
 #include "CbmQaUtil.h"
+#include "KfFieldRegion.h"
 #include "TF1.h"
 #include "TFormula.h"
 #include "TH1.h"
@@ -165,7 +165,7 @@ void TrackFitQa::Fill(const TrackParamV& trPar, const tools::MCPoint& mcPoint, b
   fitter.SetMask(fmask::One());
   fitter.SetDoFitVelocity(true);
   fitter.SetTrack(trPar);
-  cbm::algo::ca::FieldRegion<ca::fvec> fieldRegion(kf::GlobalField::fgOriginalFieldType,
+  cbm::algo::kf::FieldRegion<ca::fvec> fieldRegion(kf::GlobalField::fgOriginalFieldType,
                                                    kf::GlobalField::fgOriginalField);
   fitter.Extrapolate(mcPoint.GetZ(), fieldRegion);
 
diff --git a/reco/L1/qa/CbmCaTrackFitQa.h b/reco/L1/qa/CbmCaTrackFitQa.h
index 78467f1dae..5574a39cc9 100644
--- a/reco/L1/qa/CbmCaTrackFitQa.h
+++ b/reco/L1/qa/CbmCaTrackFitQa.h
@@ -12,9 +12,9 @@
 
 #include "CaDefs.h"
 #include "CaEnumArray.h"
-#include "CaField.h"
 #include "CbmL1DetectorID.h"
 #include "CbmQaIO.h"
+#include "KfFieldRegion.h"
 #include "KfTrackParam.h"
 
 #include <array>
diff --git a/reco/L1/qa/CbmCaTrackTypeQa.cxx b/reco/L1/qa/CbmCaTrackTypeQa.cxx
index bb07084d91..872424ab1d 100644
--- a/reco/L1/qa/CbmCaTrackTypeQa.cxx
+++ b/reco/L1/qa/CbmCaTrackTypeQa.cxx
@@ -13,8 +13,8 @@
 #include "CbmCaTrackFitQa.h"
 #include "CbmL1Track.h"
 
-using cbm::algo::ca::FieldRegion;
 using cbm::algo::ca::TrackFit;
+using cbm::algo::kf::FieldRegion;
 using cbm::ca::TrackTypeQa;
 using cbm::ca::tools::MCPoint;
 using cbm::ca::tools::MCTrack;
diff --git a/reco/L1/qa/CbmCaTrackTypeQa.h b/reco/L1/qa/CbmCaTrackTypeQa.h
index 0c6945e3e5..a59ee5e0f8 100644
--- a/reco/L1/qa/CbmCaTrackTypeQa.h
+++ b/reco/L1/qa/CbmCaTrackTypeQa.h
@@ -10,13 +10,13 @@
 
 #pragma once
 
-#include "CaField.h"
 #include "CaParameters.h"
 #include "CaTrackFit.h"
 #include "CbmCaTrackFitQa.h"
 #include "CbmL1DetectorID.h"
 #include "CbmL1Hit.h"
 #include "CbmQaIO.h"
+#include "KfFieldRegion.h"
 
 #include <map>
 #include <string>
@@ -293,8 +293,8 @@ namespace cbm::ca
     TProfile* fph_stations_point = nullptr;  ///< Average number of stations with MC point
     TProfile* fph_stations_hit   = nullptr;  ///< Average number of stations with hit
 
-    ca::TrackFit<ca::fvec> fTrackFit;        ///< Track fitter
-    ca::FieldRegion<ca::fvec> fFieldRegion;  ///< Magnetic field
+    ca::TrackFit<ca::fvec> fTrackFit;                   ///< Track fitter
+    cbm::algo::kf::FieldRegion<ca::fvec> fFieldRegion;  ///< Magnetic field
 
     int fCounterMC        = 0;   ///< Counter of MC tracks
     int fCounterClones    = 0;   ///< Counter of clone tracks
-- 
GitLab