diff --git a/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx b/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx index a928cff654bd9c3d12e781fccdb23b1a374d39d1..f6d3392d56b023bc47bf55eb9761cf51e2fdf2fb 100644 --- a/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx +++ b/Tracking/TrkTools/TrkParticleCreator/src/TrackParticleCreatorTool.cxx @@ -391,30 +391,30 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t, const s // search first valid TSOS first for ( const TrackStateOnSurface* tsos : *trackStates ) { - if ( tsos->type(TrackStateOnSurface::Measurement) && - tsos->trackParameters()!=nullptr && - tsos->measurementOnTrack()!=nullptr && - !dynamic_cast<const Trk::PseudoMeasurementOnTrack*>(tsos->measurementOnTrack())) - { - first = tsos->trackParameters(); - parameters.push_back(tsos->trackParameters()->clone()); - break; - } + if (tsos->type(TrackStateOnSurface::Measurement) && + tsos->trackParameters() != nullptr && + tsos->measurementOnTrack() != nullptr && + !(tsos->measurementOnTrack()->type( + Trk::MeasurementBaseType::PseudoMeasurementOnTrack))) { + first = tsos->trackParameters(); + parameters.push_back(tsos->trackParameters()->clone()); + break; + } } // search last valid TSOS first for (DataVector<const TrackStateOnSurface>::const_reverse_iterator rItTSoS = trackStates->rbegin(); rItTSoS != trackStates->rend(); ++rItTSoS) { - if ( (*rItTSoS)->type(TrackStateOnSurface::Measurement) && - (*rItTSoS)->trackParameters()!=nullptr && - (*rItTSoS)->measurementOnTrack()!=nullptr && - !dynamic_cast<const Trk::PseudoMeasurementOnTrack*>((*rItTSoS)->measurementOnTrack())) - { + if ((*rItTSoS)->type(TrackStateOnSurface::Measurement) && + (*rItTSoS)->trackParameters() != nullptr && + (*rItTSoS)->measurementOnTrack() != nullptr && + !((*rItTSoS)->measurementOnTrack()->type( + Trk::MeasurementBaseType::PseudoMeasurementOnTrack))) { if (!(first == (*rItTSoS)->trackParameters())) parameters.push_back((*rItTSoS)->trackParameters()->clone()); break; - } + } } // security check: if (parameters.size() > 2) @@ -429,38 +429,43 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t, const s bool haveFirstMeasurementParameters = false; for (const TrackStateOnSurface* tsos : *(track->trackStateOnSurfaces())) { - if (! tsos->trackParameters()) continue; + if (!tsos->trackParameters()) { + continue; + } - if (! haveFirstMeasurementParameters - && tsos->type(TrackStateOnSurface::Measurement) - && ! tsos->type(TrackStateOnSurface::Outlier) - && tsos->measurementOnTrack() - && ! dynamic_cast<const Trk::PseudoMeasurementOnTrack*>(tsos->measurementOnTrack())) - { - haveFirstMeasurementParameters = true; - parameters.push_back(tsos->trackParameters()->clone()); - ATH_MSG_VERBOSE( " including first measurement parameters at R " - << tsos->trackParameters()->position().perp() - << ", Z " << tsos->trackParameters()->position().z() ); - continue; - } - if (! tsos->type(TrackStateOnSurface::Perigee) - || ! dynamic_cast<const Perigee*>(tsos->trackParameters())) continue; - if (! aPer) - { - aPer = dynamic_cast<const Perigee*>(tsos->trackParameters()->clone()); - } - else - { - parameters.push_back(tsos->trackParameters()->clone()); - } + if (!haveFirstMeasurementParameters && + tsos->type(TrackStateOnSurface::Measurement) && + !tsos->type(TrackStateOnSurface::Outlier) && + tsos->measurementOnTrack() && + !(tsos->measurementOnTrack()->type( + Trk::MeasurementBaseType::PseudoMeasurementOnTrack))) { + haveFirstMeasurementParameters = true; + parameters.push_back(tsos->trackParameters()->clone()); + ATH_MSG_VERBOSE(" including first measurement parameters at R " + << tsos->trackParameters()->position().perp() + << ", Z " + << tsos->trackParameters()->position().z()); + continue; + } + if (!tsos->type(TrackStateOnSurface::Perigee) || + !dynamic_cast<const Perigee*>(tsos->trackParameters())) { + continue; + } + if (!aPer) { + aPer = + dynamic_cast<const Perigee*>(tsos->trackParameters()->clone()); + } else { + parameters.push_back(tsos->trackParameters()->clone()); + } - ATH_MSG_VERBOSE( " including perigee at R " - << tsos->trackParameters()->position().perp() - << ", Z " << tsos->trackParameters()->position().z() ); + ATH_MSG_VERBOSE(" including perigee at R " + << tsos->trackParameters()->position().perp() + << ", Z " << tsos->trackParameters()->position().z()); - // we are not interested in keeping measurement parameters after any second perigee - if (!parameters.empty()) haveFirstMeasurementParameters = true; + // we are not interested in keeping measurement parameters after any + // second perigee + if (!parameters.empty()) + haveFirstMeasurementParameters = true; } } @@ -577,8 +582,8 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t, const s if (tsos->type(TrackStateOnSurface::Measurement) && tsos->trackParameters() != nullptr && tsos->measurementOnTrack() != nullptr && - !dynamic_cast<const Trk::PseudoMeasurementOnTrack*>( - tsos->measurementOnTrack())) { + !(tsos->measurementOnTrack()->type( + Trk::MeasurementBaseType::PseudoMeasurementOnTrack))) { tp = tsos->trackParameters(); const InDet::SiClusterOnTrack* clus = @@ -698,10 +703,11 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t, const s if (m_keepParameters || m_keepFirstParameters) { // search first valid TSOS first for (const TrackStateOnSurface* tsos : *trackStates) { - if ( tsos->type(TrackStateOnSurface::Measurement) && - tsos->trackParameters()!=nullptr && - tsos->measurementOnTrack()!=nullptr && - !dynamic_cast<const Trk::PseudoMeasurementOnTrack*>(tsos->measurementOnTrack())) { + if (tsos->type(TrackStateOnSurface::Measurement) && + tsos->trackParameters() != nullptr && + tsos->measurementOnTrack() != nullptr && + !(tsos->measurementOnTrack()->type( + Trk::MeasurementBaseType::PseudoMeasurementOnTrack))) { first = tsos->trackParameters(); parameters.push_back(tsos->trackParameters()); parameterPositions.push_back(xAOD::FirstMeasurement); @@ -713,10 +719,11 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t, const s // search last valid TSOS first for (DataVector<const TrackStateOnSurface>::const_reverse_iterator rItTSoS = trackStates->rbegin(); rItTSoS != trackStates->rend(); ++rItTSoS) { - if ( (*rItTSoS)->type(TrackStateOnSurface::Measurement) && - (*rItTSoS)->trackParameters()!=nullptr && - (*rItTSoS)->measurementOnTrack()!=nullptr && - !dynamic_cast<const Trk::PseudoMeasurementOnTrack*>((*rItTSoS)->measurementOnTrack())) { + if ((*rItTSoS)->type(TrackStateOnSurface::Measurement) && + (*rItTSoS)->trackParameters() != nullptr && + (*rItTSoS)->measurementOnTrack() != nullptr && + !((*rItTSoS)->measurementOnTrack() -> + type(Trk::MeasurementBaseType::PseudoMeasurementOnTrack))) { if (!(first == (*rItTSoS)->trackParameters())) { parameters.push_back((*rItTSoS)->trackParameters()); parameterPositions.push_back(xAOD::LastMeasurement); @@ -740,11 +747,12 @@ TrackParticleCreatorTool::TrackParticleCreatorTool(const std::string& t, const s for (const TrackStateOnSurface* tsos : *(track.trackStateOnSurfaces())) { if (! tsos->trackParameters()) continue; - if (! haveFirstMeasurementParameters - && tsos->type(TrackStateOnSurface::Measurement) - && ! tsos->type(TrackStateOnSurface::Outlier) - && tsos->measurementOnTrack() - && ! dynamic_cast<const Trk::PseudoMeasurementOnTrack*>(tsos->measurementOnTrack())) { + if (!haveFirstMeasurementParameters && + tsos->type(TrackStateOnSurface::Measurement) && + !tsos->type(TrackStateOnSurface::Outlier) && + tsos->measurementOnTrack() && + !(tsos->measurementOnTrack()->type( + Trk::MeasurementBaseType::PseudoMeasurementOnTrack))) { haveFirstMeasurementParameters = true; parameters.push_back(tsos->trackParameters()); ATH_MSG_VERBOSE( " including first measurement parameters at R "