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