diff --git a/Phys/ParticleMatching/src/MatchVeloTrackToVertex.cpp b/Phys/ParticleMatching/src/MatchVeloTrackToVertex.cpp index cdbf74988b5479fe0db7e30c39b6ac4ac5d084ad..ba5906806bf5b60e1161c24c3e48946c8ab41e06 100644 --- a/Phys/ParticleMatching/src/MatchVeloTrackToVertex.cpp +++ b/Phys/ParticleMatching/src/MatchVeloTrackToVertex.cpp @@ -141,9 +141,21 @@ filter_output_t MatchVeloTrackToVertex::operator()( const LHCb::Particle::Range& seed_vertex_pos, Gaudi::Math::Line{closest_velo_state.position(), closest_velo_state.slopes()} ); if ( ip > m_match_ip_cut || abs( closest_velo_state.slopes().eta() - seed->momentum().eta() ) > m_eta_tolerance ) continue; + + // use Xi properties for particle transport by default + auto track_pid = LHCb::Tr::PID( 3312 ); + try { + track_pid = LHCb::Tr::PID( seed->particleID().abspid() ); + } catch ( const std::runtime_error& e ) { + warning() + << "PID " << seed->particleID().abspid() + << " is not known in TrackDefaultParticles. Using Xi properties instead. This can lead to wrong results!" + << endmsg; + } + // transport seed to velo state position to get a proper momentum estimate - if ( m_extrapolator->propagate( seed_as_state, closest_velo_state.position().z(), *lhcb.geometry(), - LHCb::Tr::PID( seed->particleID().abspid() ) ) == StatusCode::FAILURE ) { + if ( m_extrapolator->propagate( seed_as_state, closest_velo_state.position().z(), *lhcb.geometry(), track_pid ) == + StatusCode::FAILURE ) { seed_as_state = compositeParticleToState( *seed ); continue; } @@ -153,8 +165,7 @@ filter_output_t MatchVeloTrackToVertex::operator()( const LHCb::Particle::Range& state->setErrQOverP2( seed_as_state.errQOverP2() ); } if ( msgLevel( MSG::DEBUG ) ) velo_track->fillStream( std::cout ); - if ( m_velo_track_refitter->operator()( *velo_track, *lhcb.geometry(), - LHCb::Tr::PID( seed->particleID().abspid() ) ) == StatusCode::FAILURE ) { + if ( m_velo_track_refitter->operator()( *velo_track, *lhcb.geometry(), track_pid ) == StatusCode::FAILURE ) { seed_as_state = compositeParticleToState( *seed ); continue; } @@ -165,8 +176,8 @@ filter_output_t MatchVeloTrackToVertex::operator()( const LHCb::Particle::Range& const auto velo_lastm_fitted = velo_track->stateAt( LHCb::State::Location::LastMeasurement ); debug() << "Velo state after fitting (LastMeasurement)" << endmsg; if ( msgLevel( MSG::DEBUG ) ) velo_lastm_fitted->fillStream( std::cout ); - if ( m_extrapolator->propagate( seed_as_state, velo_lastm_fitted->z(), *lhcb.geometry(), - LHCb::Tr::PID( seed->particleID().abspid() ) ) == StatusCode::FAILURE ) { + if ( m_extrapolator->propagate( seed_as_state, velo_lastm_fitted->z(), *lhcb.geometry(), track_pid ) == + StatusCode::FAILURE ) { seed_as_state = compositeParticleToState( *seed ); continue; }