From 165f817be17de9866f536765c32d888231a41abf Mon Sep 17 00:00:00 2001 From: Susumu Oda <susumu.oda@cern.ch> Date: Thu, 8 Aug 2019 06:07:42 +0200 Subject: [PATCH 1/3] Remove non-AthenaMT-compatible getDistance method. --- .../IImpactPoint3dEstimator.h | 7 +------ .../src/ImpactPoint3dEstimator.cxx | 11 +++++------ .../src/ImpactPoint3dEstimator.h | 15 +-------------- .../test/ImpactPoint3dEstimator_test.cxx | 2 -- 4 files changed, 7 insertions(+), 28 deletions(-) diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h index 4d1d6b197d44..ccf6df9ad9bc 100755 --- a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h +++ b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef TRKVERTEXFITTERINTERFACES_IIMPACTPOINT3DESTIMATOR_H @@ -51,11 +51,6 @@ namespace Trk */ virtual Amg::Vector3D* get3dIP() const = 0; - /** - * Access to the IP 3D distance - */ - virtual double getDistance() const = 0; - /** * Actual estimate method, changing the state of Trk::VxTrackAtVertex */ diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx index 3ac955e8684e..5cd93373750a 100755 --- a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx +++ b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx @@ -31,8 +31,7 @@ namespace Trk m_maxiterations(20), m_precision(1e-10),//DeltaPhi // m_planeSurface(0), - m_vertex(0), - m_distance(0.) + m_vertex(0) { declareProperty("Extrapolator",m_extrapolator); declareProperty("MagFieldSvc", m_magFieldSvc); @@ -79,7 +78,7 @@ namespace Trk Amg::Vector3D POCA = thePerigee->position() + pathLength * momentumUnit;// Position of closest approach Amg::Vector3D DeltaR = *theVertex - POCA; - m_distance=DeltaR.mag(); + double distance=DeltaR.mag(); DeltaR=DeltaR.unit(); @@ -98,7 +97,7 @@ namespace Trk //store the impact 3d point m_vertex=new Amg::Vector3D( POCA ); - ATH_MSG_VERBOSE( "final minimal distance is: " << m_distance); + ATH_MSG_VERBOSE( "final minimal distance is: " << distance); ATH_MSG_DEBUG( "POCA in 3D is: " << *m_vertex ); @@ -256,8 +255,8 @@ namespace Trk //first vector at 3d impact point Amg::Vector3D MomentumDir(std::cos(phiactual)*std::sin(theta),std::sin(phiactual)*std::sin(theta),std::cos(theta)); Amg::Vector3D DeltaR(x0-xc+Rt*cosphiactual,y0-yc+Rt*sinphiactual,z0-zc-Rt*cottheta*phiactual); - m_distance=DeltaR.mag(); - if (m_distance==0.){ + double distance=DeltaR.mag(); + if (distance==0.){ ATH_MSG_WARNING("DeltaR is zero in ImpactPoint3dEstimator::Estimate3dIP, returning nullptr"); return nullptr; } diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h index a49e12109e92..e4dac5c14385 100755 --- a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h +++ b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ #ifndef TRKVERTEXFITTERUTILS_IMPACTPOINT3DESTIMATOR_H @@ -77,11 +77,6 @@ namespace Trk */ Amg::Vector3D* get3dIP() const; - /** - * Access to the IP 3D distance - */ - double getDistance() const; - /** * Actual estimate method, changing the state of Trk::VxTrackAtVertex */ @@ -110,16 +105,8 @@ namespace Trk mutable Amg::Vector3D* m_vertex; - mutable double m_distance; - - }; - - inline double ImpactPoint3dEstimator::getDistance() const - { - return m_distance; - } } #endif diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/test/ImpactPoint3dEstimator_test.cxx b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/test/ImpactPoint3dEstimator_test.cxx index 6acc39752fde..88a4b610f431 100644 --- a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/test/ImpactPoint3dEstimator_test.cxx +++ b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/test/ImpactPoint3dEstimator_test.cxx @@ -91,12 +91,10 @@ void test1 (Trk::IImpactPoint3dEstimator& tool) Trk::Perigee p1 (pos1, mom1, 1, pos1, cov5().release()); std::unique_ptr<Trk::PlaneSurface> s1 (tool.Estimate3dIP (&p1, &vert)); checkPlaneSurface (*s1, vert, {0.53466, 0.801692, 0.267261}); - assert( Athena_test::isEqual (tool.getDistance(), 3.10391, 1e-5) ); Trk::NeutralPerigee p2 (pos1, mom1, 1, pos1, cov5().release()); std::unique_ptr<Trk::PlaneSurface> s2 (tool.Estimate3dIP (&p2, &vert)); checkPlaneSurface (*s2, vert, {0.534522, 0.801784, 0.267261}); - assert( Athena_test::isEqual (tool.getDistance(), 3.10391, 1e-5) ); // Other methods require full Extrapolator / TrackingGeometry machinery; // not tested here. -- GitLab From 7f32b7203895dc08b98a3ed586b0eeacd0a4cf4b Mon Sep 17 00:00:00 2001 From: Susumu Oda <susumu.oda@cern.ch> Date: Thu, 8 Aug 2019 06:16:50 +0200 Subject: [PATCH 2/3] Remove unused get3dIP method and non-thread-safe mutable member --- .../IImpactPoint3dEstimator.h | 5 --- .../src/ImpactPoint3dEstimator.cxx | 37 +------------------ .../src/ImpactPoint3dEstimator.h | 18 --------- 3 files changed, 1 insertion(+), 59 deletions(-) diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h index ccf6df9ad9bc..9b5ebfd270ae 100755 --- a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h +++ b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h @@ -46,11 +46,6 @@ namespace Trk virtual PlaneSurface* Estimate3dIP(const Trk::TrackParameters* trackPerigee, const Amg::Vector3D* theVertex) const = 0; virtual PlaneSurface* Estimate3dIP(const Trk::NeutralParameters* neutralPerigee, const Amg::Vector3D* theVertex) const = 0; - /** - * Access to the 3D impact point - */ - virtual Amg::Vector3D* get3dIP() const = 0; - /** * Actual estimate method, changing the state of Trk::VxTrackAtVertex */ diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx index 5cd93373750a..a7d8aa92b644 100755 --- a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx +++ b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx @@ -29,9 +29,7 @@ namespace Trk m_extrapolator("Trk::Extrapolator"), m_magFieldSvc("AtlasFieldSvc", n), m_maxiterations(20), - m_precision(1e-10),//DeltaPhi -// m_planeSurface(0), - m_vertex(0) + m_precision(1e-10)//DeltaPhi { declareProperty("Extrapolator",m_extrapolator); declareProperty("MagFieldSvc", m_magFieldSvc); @@ -41,8 +39,6 @@ namespace Trk } ImpactPoint3dEstimator::~ImpactPoint3dEstimator() { -// if (m_planeSurface!=0) delete m_planeSurface; - if (m_vertex!=0) delete m_vertex; } StatusCode ImpactPoint3dEstimator::initialize() @@ -94,13 +90,8 @@ namespace Trk Amg::Vector3D YDir=momentumUnit.cross(DeltaRcorrected); - //store the impact 3d point - m_vertex=new Amg::Vector3D( POCA ); - ATH_MSG_VERBOSE( "final minimal distance is: " << distance); - ATH_MSG_DEBUG( "POCA in 3D is: " << *m_vertex ); - //store the plane... ATH_MSG_VERBOSE( "plane to which to extrapolate X " << DeltaRcorrected << " Y " << YDir << " Z " << momentumUnit); @@ -115,24 +106,12 @@ namespace Trk } PlaneSurface* ImpactPoint3dEstimator::Estimate3dIP(const NeutralParameters* neutralPerigee,const Amg::Vector3D* theVertex) const { - // clean up before any sanity checks so a return 0 corresponds to internal members reset too - if (m_vertex!=0) { - delete m_vertex; - m_vertex=0; - } - ATH_MSG_DEBUG("Neutral particle -- propagate like a straight line"); return _Estimate3dIPNoCurvature(neutralPerigee, theVertex); } PlaneSurface* ImpactPoint3dEstimator::Estimate3dIP(const TrackParameters* trackPerigee,const Amg::Vector3D* theVertex) const{ - // clean up before any sanity checks so a return 0 corresponds to internal members reset too - if (m_vertex!=0) { - delete m_vertex; - m_vertex=0; - } - double magnFieldVect[3]; m_magFieldSvc->getField(trackPerigee->associatedSurface().center().data(),magnFieldVect); if(magnFieldVect[2] == 0 ){ @@ -275,9 +254,6 @@ namespace Trk Amg::Vector3D YDir=MomentumDir.cross(DeltaRcorrected); - //store the impact 3d point - m_vertex=new Amg::Vector3D(x0+Rt*cosphiactual,y0+Rt*sinphiactual,z0-Rt*cottheta*phiactual); - if(msgLvl(MSG::VERBOSE)) { @@ -286,12 +262,6 @@ namespace Trk std::pow(z0-zc-Rt*cottheta*phiactual,2)) << endmsg; } - if(msgLvl(MSG::DEBUG)) - { - msg(MSG::DEBUG) << "POCA in 3D is: " << *m_vertex << endmsg; - } - - //store the plane... if (msgLvl(MSG::VERBOSE)) msg(MSG::VERBOSE)<< "plane to which to extrapolate X " << DeltaRcorrected << " Y " << YDir << " Z " << MomentumDir << endmsg; @@ -306,11 +276,6 @@ namespace Trk }//end of estimate 3dIP method - Amg::Vector3D* ImpactPoint3dEstimator::get3dIP() const - { - return m_vertex; - } - bool ImpactPoint3dEstimator::addIP3dAtaPlane(VxTrackAtVertex & vtxTrack,const Amg::Vector3D & vertex) const { if (vtxTrack.initialPerigee()) { diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h index e4dac5c14385..7741d78d739f 100755 --- a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h +++ b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h @@ -52,17 +52,6 @@ namespace Trk */ ~ImpactPoint3dEstimator(); - /** - * Actual estimate method - */ -// void Estimate3dIP(const ParametersBase* trackPerigee,const Vertex* theVertex); - - /** - * Access to the plane through 3D impact point - */ - // PlaneSurface* getPlaneThrough3dIP() const; - - /** * New method implementing the features of two above methods at once */ @@ -72,11 +61,6 @@ namespace Trk PlaneSurface* Estimate3dIP(const Trk::NeutralParameters* neutralPerigee, const Amg::Vector3D* theVertex) const; - /** - * Access to the 3D impact point - */ - Amg::Vector3D* get3dIP() const; - /** * Actual estimate method, changing the state of Trk::VxTrackAtVertex */ @@ -103,8 +87,6 @@ namespace Trk int m_maxiterations; double m_precision; - mutable Amg::Vector3D* m_vertex; - }; } -- GitLab From 81914c276e58cad82a83c22b6b5ac913f71c1982 Mon Sep 17 00:00:00 2001 From: Susumu Oda <susumu.oda@cern.ch> Date: Thu, 8 Aug 2019 06:57:42 +0200 Subject: [PATCH 3/3] Add distance argument to Estimate3dIP --- .../src/InDetIterativeSecVtxFinderTool.cxx | 10 ++++----- .../src/InDetIterativePriVxFinderTool.cxx | 6 +++--- .../src/InDetMultiPriVxFinderTool.cxx | 6 +++--- .../IImpactPoint3dEstimator.h | 4 ++-- .../src/ImpactPoint3dEstimator.cxx | 21 +++++++++++-------- .../src/ImpactPoint3dEstimator.h | 6 +++--- .../test/ImpactPoint3dEstimator_test.cxx | 7 +++++-- .../src/ImagingSeedTuningAlg.cxx | 6 +++--- 8 files changed, 36 insertions(+), 30 deletions(-) diff --git a/InnerDetector/InDetRecTools/InDetIncSecVxFinderTool/src/InDetIterativeSecVtxFinderTool.cxx b/InnerDetector/InDetRecTools/InDetIncSecVxFinderTool/src/InDetIterativeSecVtxFinderTool.cxx index 26f62835e079..413f9870baf2 100644 --- a/InnerDetector/InDetRecTools/InDetIncSecVxFinderTool/src/InDetIterativeSecVtxFinderTool.cxx +++ b/InnerDetector/InDetRecTools/InDetIncSecVxFinderTool/src/InDetIterativeSecVtxFinderTool.cxx @@ -479,7 +479,7 @@ std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> InDetIterativeSecVt double distance=0.; try { - Trk::PlaneSurface* mySurface=m_ImpactPoint3dEstimator->Estimate3dIP(*perigeeListIter,&seedVertex); + Trk::PlaneSurface* mySurface=m_ImpactPoint3dEstimator->Estimate3dIP(*perigeeListIter,&seedVertex, distance); delete mySurface; isOK=true; ATH_MSG_VERBOSE( " ImpactPoint3dEstimator done " ); @@ -489,9 +489,9 @@ std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> InDetIterativeSecVt ATH_MSG_WARNING( " ImpactPoint3dEstimator failed to find minimum distance between track and vertex seed: " << err.p ); } - if (isOK) + if (not isOK) { - distance=m_ImpactPoint3dEstimator->getDistance(); + distance=0.; } if (distance<0) @@ -1268,7 +1268,7 @@ std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> InDetIterativeSecVt try { Trk::PlaneSurface* mySurface= - m_ImpactPoint3dEstimator->Estimate3dIP( (*tracksIter).initialPerigee(), &((*vxIter)->position()) ); + m_ImpactPoint3dEstimator->Estimate3dIP( (*tracksIter).initialPerigee(), &((*vxIter)->position()), distance); delete mySurface; isOK=true; } @@ -1277,7 +1277,7 @@ std::pair<xAOD::VertexContainer*, xAOD::VertexAuxContainer*> InDetIterativeSecVt ATH_MSG_WARNING( " ImpactPoint3dEstimator failed " << err.p ); } - if (isOK) distance=m_ImpactPoint3dEstimator->getDistance(); + if (not isOK) distance=0.; double error= 1. ; diff --git a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetIterativePriVxFinderTool.cxx b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetIterativePriVxFinderTool.cxx index 3e38b32849dc..80b72185a5fc 100755 --- a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetIterativePriVxFinderTool.cxx +++ b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetIterativePriVxFinderTool.cxx @@ -430,7 +430,7 @@ InDetIterativePriVxFinderTool::findVertex(const Trk::TrackParticleBaseCollection double distance = 0.; try { - Trk::PlaneSurface* mySurface = m_ImpactPoint3dEstimator->Estimate3dIP(*perigeeListIter, &actualVertex); + Trk::PlaneSurface* mySurface = m_ImpactPoint3dEstimator->Estimate3dIP(*perigeeListIter, &actualVertex, distance); delete mySurface; isOK = true; } @@ -442,8 +442,8 @@ InDetIterativePriVxFinderTool::findVertex(const Trk::TrackParticleBaseCollection } - if (isOK) { - distance = m_ImpactPoint3dEstimator->getDistance(); + if (not isOK) { + distance = 0.; } if (distance < 0) { diff --git a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetMultiPriVxFinderTool.cxx b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetMultiPriVxFinderTool.cxx index 9b21e38ba10d..053bb69a453c 100755 --- a/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetMultiPriVxFinderTool.cxx +++ b/InnerDetector/InDetRecTools/InDetPriVxFinderTool/src/InDetMultiPriVxFinderTool.cxx @@ -619,7 +619,7 @@ namespace InDet bool isOK = false; double distance = 0.; try { - Trk::PlaneSurface* mySurface = m_ImpactPoint3dEstimator->Estimate3dIP(params, vertex); + Trk::PlaneSurface* mySurface = m_ImpactPoint3dEstimator->Estimate3dIP(params, vertex, distance); delete mySurface; isOK = true; } @@ -628,8 +628,8 @@ namespace InDet err.p << endmsg; } - if (isOK) { - distance = m_ImpactPoint3dEstimator->getDistance(); + if (not isOK) { + distance = 0.; } if (distance < 0) { msg(MSG::WARNING) << " Distance between track and seed vtx is negative: " << distance << endmsg; diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h index 9b5ebfd270ae..1efb236f69db 100755 --- a/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h +++ b/Tracking/TrkVertexFitter/TrkVertexFitterInterfaces/TrkVertexFitterInterfaces/IImpactPoint3dEstimator.h @@ -43,8 +43,8 @@ namespace Trk /** * method calculating the surface (returned), distance and point of closest approach */ - virtual PlaneSurface* Estimate3dIP(const Trk::TrackParameters* trackPerigee, const Amg::Vector3D* theVertex) const = 0; - virtual PlaneSurface* Estimate3dIP(const Trk::NeutralParameters* neutralPerigee, const Amg::Vector3D* theVertex) const = 0; + virtual PlaneSurface* Estimate3dIP(const Trk::TrackParameters* trackPerigee, const Amg::Vector3D* theVertex, double& distance) const = 0; + virtual PlaneSurface* Estimate3dIP(const Trk::NeutralParameters* neutralPerigee, const Amg::Vector3D* theVertex, double& distance) const = 0; /** * Actual estimate method, changing the state of Trk::VxTrackAtVertex diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx index a7d8aa92b644..c1f57273ad6a 100755 --- a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx +++ b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.cxx @@ -64,7 +64,7 @@ namespace Trk } - template<typename T> PlaneSurface* ImpactPoint3dEstimator::_Estimate3dIPNoCurvature(const T* thePerigee,const Amg::Vector3D* theVertex) const { + template<typename T> PlaneSurface* ImpactPoint3dEstimator::_Estimate3dIPNoCurvature(const T* thePerigee,const Amg::Vector3D* theVertex, double& distance) const { const Amg::Vector3D momentumUnit = thePerigee->momentum().unit(); double pathLength = ( *theVertex - thePerigee->position() ).dot( momentumUnit ) @@ -74,7 +74,7 @@ namespace Trk Amg::Vector3D POCA = thePerigee->position() + pathLength * momentumUnit;// Position of closest approach Amg::Vector3D DeltaR = *theVertex - POCA; - double distance=DeltaR.mag(); + distance=DeltaR.mag(); DeltaR=DeltaR.unit(); @@ -105,18 +105,18 @@ namespace Trk } - PlaneSurface* ImpactPoint3dEstimator::Estimate3dIP(const NeutralParameters* neutralPerigee,const Amg::Vector3D* theVertex) const { + PlaneSurface* ImpactPoint3dEstimator::Estimate3dIP(const NeutralParameters* neutralPerigee,const Amg::Vector3D* theVertex, double& distance) const { ATH_MSG_DEBUG("Neutral particle -- propagate like a straight line"); - return _Estimate3dIPNoCurvature(neutralPerigee, theVertex); + return _Estimate3dIPNoCurvature(neutralPerigee, theVertex, distance); } PlaneSurface* - ImpactPoint3dEstimator::Estimate3dIP(const TrackParameters* trackPerigee,const Amg::Vector3D* theVertex) const{ + ImpactPoint3dEstimator::Estimate3dIP(const TrackParameters* trackPerigee,const Amg::Vector3D* theVertex, double& distance) const{ double magnFieldVect[3]; m_magFieldSvc->getField(trackPerigee->associatedSurface().center().data(),magnFieldVect); if(magnFieldVect[2] == 0 ){ ATH_MSG_DEBUG("Magnetic field in the Z direction is 0 -- propagate like a straight line"); - return _Estimate3dIPNoCurvature(trackPerigee, theVertex); + return _Estimate3dIPNoCurvature(trackPerigee, theVertex, distance); } @@ -234,7 +234,7 @@ namespace Trk //first vector at 3d impact point Amg::Vector3D MomentumDir(std::cos(phiactual)*std::sin(theta),std::sin(phiactual)*std::sin(theta),std::cos(theta)); Amg::Vector3D DeltaR(x0-xc+Rt*cosphiactual,y0-yc+Rt*sinphiactual,z0-zc-Rt*cottheta*phiactual); - double distance=DeltaR.mag(); + distance=DeltaR.mag(); if (distance==0.){ ATH_MSG_WARNING("DeltaR is zero in ImpactPoint3dEstimator::Estimate3dIP, returning nullptr"); return nullptr; @@ -304,9 +304,11 @@ namespace Trk const PlaneSurface* theSurfaceAtIP(0); + double distance = 0.; + try { - theSurfaceAtIP = Estimate3dIP(vtxTrack.initialPerigee(),&vertex); + theSurfaceAtIP = Estimate3dIP(vtxTrack.initialPerigee(),&vertex, distance); } catch (error::ImpactPoint3dEstimatorProblem err) { @@ -331,10 +333,11 @@ namespace Trk Trk::NeutralAtaPlane * ImpactPoint3dEstimator::IP3dNeutralAtaPlane(const NeutralParameters * initNeutPerigee,const Amg::Vector3D & vertex) const { const PlaneSurface* theSurfaceAtIP(0); + double distance = 0.; try { - theSurfaceAtIP = Estimate3dIP(initNeutPerigee,&vertex); + theSurfaceAtIP = Estimate3dIP(initNeutPerigee,&vertex, distance); } catch (error::ImpactPoint3dEstimatorProblem err) { diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h index 7741d78d739f..c7fed47432a2 100755 --- a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h +++ b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/src/ImpactPoint3dEstimator.h @@ -55,11 +55,11 @@ namespace Trk /** * New method implementing the features of two above methods at once */ - template<typename T> PlaneSurface* _Estimate3dIPNoCurvature(const T*, const Amg::Vector3D* theVertex) const; + template<typename T> PlaneSurface* _Estimate3dIPNoCurvature(const T*, const Amg::Vector3D* theVertex, double& distance) const; - PlaneSurface* Estimate3dIP(const Trk::TrackParameters* trackPerigee, const Amg::Vector3D* theVertex) const; + PlaneSurface* Estimate3dIP(const Trk::TrackParameters* trackPerigee, const Amg::Vector3D* theVertex, double& distance) const; - PlaneSurface* Estimate3dIP(const Trk::NeutralParameters* neutralPerigee, const Amg::Vector3D* theVertex) const; + PlaneSurface* Estimate3dIP(const Trk::NeutralParameters* neutralPerigee, const Amg::Vector3D* theVertex, double& distance) const; /** * Actual estimate method, changing the state of Trk::VxTrackAtVertex diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/test/ImpactPoint3dEstimator_test.cxx b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/test/ImpactPoint3dEstimator_test.cxx index 88a4b610f431..fb4831e590c8 100644 --- a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/test/ImpactPoint3dEstimator_test.cxx +++ b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/test/ImpactPoint3dEstimator_test.cxx @@ -89,12 +89,15 @@ void test1 (Trk::IImpactPoint3dEstimator& tool) Amg::Vector3D vert { 1.2*mm, 0.8*mm, -7*mm }; Trk::Perigee p1 (pos1, mom1, 1, pos1, cov5().release()); - std::unique_ptr<Trk::PlaneSurface> s1 (tool.Estimate3dIP (&p1, &vert)); + double distance = 0.; + std::unique_ptr<Trk::PlaneSurface> s1 (tool.Estimate3dIP (&p1, &vert, distance)); checkPlaneSurface (*s1, vert, {0.53466, 0.801692, 0.267261}); + assert( Athena_test::isEqual (distance, 3.10391, 1e-5) ); Trk::NeutralPerigee p2 (pos1, mom1, 1, pos1, cov5().release()); - std::unique_ptr<Trk::PlaneSurface> s2 (tool.Estimate3dIP (&p2, &vert)); + std::unique_ptr<Trk::PlaneSurface> s2 (tool.Estimate3dIP (&p2, &vert, distance)); checkPlaneSurface (*s2, vert, {0.534522, 0.801784, 0.267261}); + assert( Athena_test::isEqual (distance, 3.10391, 1e-5) ); // Other methods require full Extrapolator / TrackingGeometry machinery; // not tested here. diff --git a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/ImagingSeedTuningAlg.cxx b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/ImagingSeedTuningAlg.cxx index 0ca01b875292..92fe54308164 100644 --- a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/ImagingSeedTuningAlg.cxx +++ b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/ImagingSeedTuningAlg.cxx @@ -586,7 +586,7 @@ double ImagingSeedTuningAlg::distanceAndError(const Trk::TrackParameters* params bool isOK=false; double distance=0.; try { - Trk::PlaneSurface* mySurface=m_impactPoint3dEstimator->Estimate3dIP(params,vertex); + Trk::PlaneSurface* mySurface=m_impactPoint3dEstimator->Estimate3dIP(params,vertex, distance); delete mySurface; isOK=true; } @@ -594,8 +594,8 @@ double ImagingSeedTuningAlg::distanceAndError(const Trk::TrackParameters* params msg(MSG::WARNING) << " ImpactPoin3dEstimator failed to find minimum distance between track and vertex seed: " << err.p << endmsg; } - if (isOK) { - distance=m_impactPoint3dEstimator->getDistance(); + if (not isOK) { + distance=0.; } if (distance<0) { msg(MSG::WARNING) << " Distance between track and seed vtx is negative: " << distance << endmsg; -- GitLab