From d5f3d4f7d2b7778022e34d1daaea43a7fe15c93f Mon Sep 17 00:00:00 2001 From: Ya Zhao <ya.zhao@cern.ch> Date: Fri, 17 Jan 2025 15:11:11 +0100 Subject: [PATCH 1/2] change way to propagate --- Tr/TrackTools/src/TrackInterpolator.cpp | 55 ++++++++++++++++++------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/Tr/TrackTools/src/TrackInterpolator.cpp b/Tr/TrackTools/src/TrackInterpolator.cpp index 4a494370a1d..f101d901f8b 100644 --- a/Tr/TrackTools/src/TrackInterpolator.cpp +++ b/Tr/TrackTools/src/TrackInterpolator.cpp @@ -168,30 +168,57 @@ StatusCode TrackInterpolator::Interpolator( const TFitResult& fitResult, const T } } - // Get the filtered states - State stateDown, stateUp; - - // TrackMasterFit - stateDown = filteredStateForward( *prevnode ); - stateUp = filteredStateBackward( *nextnode ); - - // extrapolate the upstream and downstream states - auto sc = m_extrapolator->propagate( stateDown, z, geometry ); + // downstream propagation + const auto Down_refvector_at_origin = ( *prevnode ).refVector(); + auto Down_refvector_at_target = Down_refvector_at_origin ; + TrackMatrix F_Down; + auto sc = m_extrapolator->propagate( Down_refvector_at_target, z, geometry, &F_Down ); if ( sc.isFailure() ) { - if ( msgLevel( MSG::DEBUG ) ) - debug() << "Error propagating downstream state to z = " << z << std::endl << "state = " << stateDown << endmsg; + if ( msgLevel( MSG::DEBUG ) ) { + debug() << "Error propagating downstream state to z = " << z << " tracktype = " << track.type() << std::endl + << "state = " << state(*prevnode) << endmsg; + } ++m_propagate_downstream_failure; return sc; } + auto stateDown = filteredStateForward( *prevnode ); + // propagate the filtered state using the reference + stateDown.stateVector() = Down_refvector_at_target.parameters() + F_Down * ( stateDown.stateVector() - Down_refvector_at_origin.parameters() ); + stateDown.covariance() = ROOT::Math::Similarity( F_Down, stateDown.covariance()) ; + stateDown.setZ( z ) ; + + if ( msgLevel( MSG::DEBUG ) ) { + debug() << "propagating downstream state:" << std::endl + << state(*prevnode) << std::endl + << "to new state at z = " << z << ":" << std::endl + << stateDown << endmsg; + } - sc = m_extrapolator->propagate( stateUp, z, geometry ); + // upstream propagation + const auto Up_refvector_at_origin = ( *nextnode ).refVector(); + auto Up_refvector_at_target = Up_refvector_at_origin; + TrackMatrix F_Up; + sc = m_extrapolator->propagate( Up_refvector_at_target, z, geometry, &F_Up ); if ( sc.isFailure() ) { - if ( msgLevel( MSG::DEBUG ) ) + if ( msgLevel( MSG::DEBUG ) ) { debug() << "Error propagating upstream state to z = " << z << " tracktype = " << track.type() << std::endl - << "state = " << stateUp << endmsg; + << "state = " << state(*nextnode) << endmsg; + } ++m_propagate_upstream_failure; return sc; } + auto stateUp = filteredStateBackward( *nextnode ); + // propagate the filtered state using the reference + stateUp.stateVector() = Up_refvector_at_target.parameters() + F_Up * ( stateUp.stateVector() - Up_refvector_at_origin.parameters() ); + stateUp.covariance() = ROOT::Math::Similarity( F_Up, stateUp.covariance() ); + stateUp.setZ( z ); + + if ( msgLevel( MSG::DEBUG ) ) { + debug() << "propagating upstream state:" << std::endl + << state(*nextnode) << std::endl + << "to new state at z = " << z << ":" << std::endl + << stateUp << endmsg; + } // Get the predicted downstream state and invert the covariance matrix const TrackVector& stateDownX = stateDown.stateVector(); -- GitLab From f37bfcc381056bfbc7e9fd1f296806228a700c15 Mon Sep 17 00:00:00 2001 From: Gitlab CI <noreply@cern.ch> Date: Fri, 17 Jan 2025 14:22:41 +0000 Subject: [PATCH 2/2] pre-commit fixes patch generated by https://gitlab.cern.ch/lhcb/Rec/-/jobs/49479205 --- Tr/TrackTools/src/TrackInterpolator.cpp | 34 +++++++++++++------------ 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/Tr/TrackTools/src/TrackInterpolator.cpp b/Tr/TrackTools/src/TrackInterpolator.cpp index f101d901f8b..1fdfbaa24fe 100644 --- a/Tr/TrackTools/src/TrackInterpolator.cpp +++ b/Tr/TrackTools/src/TrackInterpolator.cpp @@ -169,54 +169,56 @@ StatusCode TrackInterpolator::Interpolator( const TFitResult& fitResult, const T } // downstream propagation - const auto Down_refvector_at_origin = ( *prevnode ).refVector(); - auto Down_refvector_at_target = Down_refvector_at_origin ; - TrackMatrix F_Down; - auto sc = m_extrapolator->propagate( Down_refvector_at_target, z, geometry, &F_Down ); + const auto Down_refvector_at_origin = ( *prevnode ).refVector(); + auto Down_refvector_at_target = Down_refvector_at_origin; + TrackMatrix F_Down; + auto sc = m_extrapolator->propagate( Down_refvector_at_target, z, geometry, &F_Down ); if ( sc.isFailure() ) { if ( msgLevel( MSG::DEBUG ) ) { debug() << "Error propagating downstream state to z = " << z << " tracktype = " << track.type() << std::endl - << "state = " << state(*prevnode) << endmsg; + << "state = " << state( *prevnode ) << endmsg; } ++m_propagate_downstream_failure; return sc; } auto stateDown = filteredStateForward( *prevnode ); // propagate the filtered state using the reference - stateDown.stateVector() = Down_refvector_at_target.parameters() + F_Down * ( stateDown.stateVector() - Down_refvector_at_origin.parameters() ); - stateDown.covariance() = ROOT::Math::Similarity( F_Down, stateDown.covariance()) ; - stateDown.setZ( z ) ; + stateDown.stateVector() = Down_refvector_at_target.parameters() + + F_Down * ( stateDown.stateVector() - Down_refvector_at_origin.parameters() ); + stateDown.covariance() = ROOT::Math::Similarity( F_Down, stateDown.covariance() ); + stateDown.setZ( z ); if ( msgLevel( MSG::DEBUG ) ) { debug() << "propagating downstream state:" << std::endl - << state(*prevnode) << std::endl - << "to new state at z = " << z << ":" << std::endl + << state( *prevnode ) << std::endl + << "to new state at z = " << z << ":" << std::endl << stateDown << endmsg; } // upstream propagation - const auto Up_refvector_at_origin = ( *nextnode ).refVector(); - auto Up_refvector_at_target = Up_refvector_at_origin; + const auto Up_refvector_at_origin = ( *nextnode ).refVector(); + auto Up_refvector_at_target = Up_refvector_at_origin; TrackMatrix F_Up; sc = m_extrapolator->propagate( Up_refvector_at_target, z, geometry, &F_Up ); if ( sc.isFailure() ) { if ( msgLevel( MSG::DEBUG ) ) { debug() << "Error propagating upstream state to z = " << z << " tracktype = " << track.type() << std::endl - << "state = " << state(*nextnode) << endmsg; + << "state = " << state( *nextnode ) << endmsg; } ++m_propagate_upstream_failure; return sc; } auto stateUp = filteredStateBackward( *nextnode ); // propagate the filtered state using the reference - stateUp.stateVector() = Up_refvector_at_target.parameters() + F_Up * ( stateUp.stateVector() - Up_refvector_at_origin.parameters() ); + stateUp.stateVector() = + Up_refvector_at_target.parameters() + F_Up * ( stateUp.stateVector() - Up_refvector_at_origin.parameters() ); stateUp.covariance() = ROOT::Math::Similarity( F_Up, stateUp.covariance() ); stateUp.setZ( z ); if ( msgLevel( MSG::DEBUG ) ) { debug() << "propagating upstream state:" << std::endl - << state(*nextnode) << std::endl - << "to new state at z = " << z << ":" << std::endl + << state( *nextnode ) << std::endl + << "to new state at z = " << z << ":" << std::endl << stateUp << endmsg; } -- GitLab