From b68fd0b77a394e0cb3a97d8daf9c98723d2b9d91 Mon Sep 17 00:00:00 2001 From: Dave Casper <dcasper@uci.edu> Date: Fri, 2 Mar 2018 14:42:50 -0800 Subject: [PATCH] Add d0 significance cut as configurable property. Former-commit-id: 502565ce18581a49a6d0d301d1de3572fed6137c --- .../TrkVertexSeedFinderUtils/GaussianTrackDensity.h | 8 ++++++++ .../TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/TrkVertexSeedFinderUtils/GaussianTrackDensity.h b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/TrkVertexSeedFinderUtils/GaussianTrackDensity.h index ca56a88be792..43b555f3f123 100644 --- a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/TrkVertexSeedFinderUtils/GaussianTrackDensity.h +++ b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/TrkVertexSeedFinderUtils/GaussianTrackDensity.h @@ -113,8 +113,16 @@ namespace Trk } }; + // Cache for track information std::unordered_map< Trk::Perigee, Trk::GaussianTrackDensity::TrackEntry, hash_perigee, pred_perigee> m_trackMap; + // Cuts set by configurable properties + + // Maximum allowed d0 significance to use (in sigma) + Gaudi::Property<double> m_d0MaxSignificance { this, + "MaxD0Significance", + 3.5, + "Maximum radial impact parameter significance to use track" }; }; } diff --git a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx index 06dc9822f0ef..8b626a27a0b4 100644 --- a/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx +++ b/Tracking/TrkVertexFitter/TrkVertexSeedFinderUtils/src/GaussianTrackDensity.cxx @@ -78,6 +78,7 @@ namespace Trk void GaussianTrackDensity::addTracks(const std::vector<const TrackParameters*>& perigeeList) { + double significanceCut = m_d0MaxSignificance * m_d0MaxSignificance; for (auto iparam : perigeeList) { const Perigee* itrk = dynamic_cast<const Perigee*>(iparam); @@ -88,10 +89,12 @@ namespace Trk double z0 = itrk->parameters()[Trk::z0]; const AmgSymMatrix(5) & perigeeCov = *(itrk->covariance()); double cov_dd = perigeeCov(Trk::d0, Trk::d0); + if ( cov_dd <= 0 ) continue; + if ( d0*d0/cov_dd > significanceCut ) continue; double cov_zz = perigeeCov(Trk::z0, Trk::z0); double cov_dz = perigeeCov(Trk::d0, Trk::z0); double covDeterminant = cov_dd*cov_zz - cov_dz*cov_dz; - if (covDeterminant <= 0) continue; + if ( covDeterminant <= 0 ) continue; double constantArg = (d0*d0*cov_zz + z0*z0*cov_dd + 2*d0*z0*cov_dz) / (2*covDeterminant); double constantFactor = exp(-constantArg) / (2*Gaudi::Units::pi*covDeterminant); double linearTerm = (d0*cov_dz + z0*cov_dd) / covDeterminant ; // minus signs and factors of 2 cancel... -- GitLab