From e3c2d23f27456f6e2c5017464cfd799e4b163f97 Mon Sep 17 00:00:00 2001
From: Xiaocong Ai <xiaocong.ai@cern.ch>
Date: Tue, 22 Oct 2024 14:44:48 +0200
Subject: [PATCH] store fitted parameters representing surface

---
 .../Acts/FaserActsKalmanFilter/src/CKF2.cxx     |  2 +-
 .../src/RootTrajectorySummaryWriterTool.cxx     | 17 +++++++++++++++++
 .../src/RootTrajectorySummaryWriterTool.h       |  4 ++++
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx
index f0489f2d5..20e645d12 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx
@@ -248,11 +248,11 @@ StatusCode CKF2::execute() {
       fittedParams = Acts::BoundTrackParameters(track.referenceSurface().getSharedPtr(), track.parameters(), track.covariance(), Acts::ParticleHypothesis::muon()); 
     } else {
       ATH_MSG_WARNING("No fitted parameters at target position" << targetZposition);
-      //throw std::runtime_error("No fitted parameters at target position");
     }
 
     std::unique_ptr<Trk::Track> trk = m_createTrkTrackTool->createTrack(gctx, track, fittedParams, m_backwardPropagation);
     m_numberOfSelectedTracks++;
+    //@todo: make the KF refit configurable 
     std::unique_ptr<Trk::Track> trk2 = m_kalmanFitterTool1->fit(
       ctx, gctx, trk.get(), Acts::BoundVector::Zero(), m_isMC);
     if (trk2) {
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.cxx
index 56b2a4c2f..4ef9c4dda 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.cxx
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.cxx
@@ -95,6 +95,9 @@ StatusCode RootTrajectorySummaryWriterTool::initialize() {
 
 
     m_outputTree->Branch("hasFittedParams", &m_hasFittedParams);
+    m_outputTree->Branch("surface_x", &m_surface_x);
+    m_outputTree->Branch("surface_y", &m_surface_y);
+    m_outputTree->Branch("surface_z", &m_surface_z);
     m_outputTree->Branch("eLOC0_fit", &m_eLOC0_fit);
     m_outputTree->Branch("eLOC1_fit", &m_eLOC1_fit);
     m_outputTree->Branch("ePHI_fit", &m_ePHI_fit);
@@ -338,6 +341,9 @@ StatusCode RootTrajectorySummaryWriterTool::write(
     std::array<float, Acts::eBoundSize> res = {NaNfloat, NaNfloat, NaNfloat, NaNfloat, NaNfloat, NaNfloat};
     std::array<float, Acts::eBoundSize> error = {NaNfloat, NaNfloat, NaNfloat, NaNfloat, NaNfloat, NaNfloat};
     std::array<float, Acts::eBoundSize> pull = {NaNfloat, NaNfloat, NaNfloat, NaNfloat, NaNfloat, NaNfloat};
+    float surfaceX = NaNfloat; 
+    float surfaceY = NaNfloat; 
+    float surfaceZ = NaNfloat; 
     bool hasFittedParams = track.hasReferenceSurface();
     if (hasFittedParams) {
       const auto& parameter = track.parameters(); 
@@ -357,10 +363,18 @@ StatusCode RootTrajectorySummaryWriterTool::write(
         error[i] = std::sqrt(covariance(i, i));
         pull[i] = res[i] / error[i];
       }
+      auto surface = &(track.referenceSurface()); 
+      auto center = surface->center(geoContext);
+      surfaceX = center.x(); 
+      surfaceY = center.y(); 
+      surfaceZ = center.z(); 
     }
 
     // Push the fitted track parameters.
     // Always push back even if no fitted track parameters
+    m_surface_x.push_back(surfaceX); 
+    m_surface_y.push_back(surfaceY); 
+    m_surface_z.push_back(surfaceZ); 
     m_eLOC0_fit.push_back(param[Acts::eBoundLoc0]);
     m_eLOC1_fit.push_back(param[Acts::eBoundLoc1]);
     m_ePHI_fit.push_back(param[Acts::eBoundPhi]);
@@ -430,6 +444,9 @@ StatusCode RootTrajectorySummaryWriterTool::write(
   m_t_z0.clear();
 
   m_hasFittedParams.clear();
+  m_surface_x.clear(); 
+  m_surface_y.clear(); 
+  m_surface_z.clear(); 
   m_eLOC0_fit.clear();
   m_eLOC1_fit.clear();
   m_ePHI_fit.clear();
diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.h b/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.h
index 8b0a3ca38..383431d78 100644
--- a/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.h
+++ b/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectorySummaryWriterTool.h
@@ -86,6 +86,10 @@ private:
   mutable std::vector<float> m_t_z0;  ///< The extrapolated truth longitudinal impact parameter
 
   mutable std::vector<bool> m_hasFittedParams;  ///< If the track has fitted parameter
+  //The fitted parameters representing surface center 
+  mutable std::vector<float> m_surface_x;   ///< Fitted parameters representing surface x of track
+  mutable std::vector<float> m_surface_y;   ///< Fitted parameters representing surface y of track
+  mutable std::vector<float> m_surface_z;   ///< Fitted parameters representing surface z of track
   // The fitted parameters
   mutable std::vector<float> m_eLOC0_fit;   ///< Fitted parameters eBoundLoc0 of track
   mutable std::vector<float> m_eLOC1_fit;   ///< Fitted parameters eBoundLoc1 of track
-- 
GitLab