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