CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
VertexFilter.cc
Go to the documentation of this file.
1 #include <functional>
2 #include <algorithm>
3 #include <iterator>
4 #include <cmath>
5 #include <set>
6 
8 
13 
18 
19 using namespace reco;
20 
22  useTrackWeights(params.getParameter<bool>("useTrackWeights")),
23  minTrackWeight(params.getParameter<double>("minimumTrackWeight")),
24  massMax(params.getParameter<double>("massMax")),
25  fracPV(params.getParameter<double>("fracPV")),
26  multiplicityMin(params.getParameter<unsigned int>("multiplicityMin")),
27  distVal2dMin(params.getParameter<double>("distVal2dMin")),
28  distVal2dMax(params.getParameter<double>("distVal2dMax")),
29  distVal3dMin(params.getParameter<double>("distVal3dMin")),
30  distVal3dMax(params.getParameter<double>("distVal3dMax")),
31  distSig2dMin(params.getParameter<double>("distSig2dMin")),
32  distSig2dMax(params.getParameter<double>("distSig2dMax")),
33  distSig3dMin(params.getParameter<double>("distSig3dMin")),
34  distSig3dMax(params.getParameter<double>("distSig3dMax")),
35  maxDeltaRToJetAxis(params.getParameter<double>("maxDeltaRToJetAxis")),
36  v0Filter(params.getParameter<edm::ParameterSet>("v0Filter"))
37 {
38 }
39 
40 static unsigned int
41 computeSharedTracks(const Vertex &pv, const std::vector<TrackRef> &svTracks,
42  double minTrackWeight)
43 {
44  std::set<TrackRef> pvTracks;
45  for(std::vector<TrackBaseRef>::const_iterator iter = pv.tracks_begin();
46  iter != pv.tracks_end(); iter++)
47  if (pv.trackWeight(*iter) >= minTrackWeight)
48  pvTracks.insert(iter->castTo<TrackRef>());
49 
50  unsigned int count = 0;
51  for(std::vector<TrackRef>::const_iterator iter = svTracks.begin();
52  iter != svTracks.end(); iter++)
53  count += pvTracks.count(*iter);
54 
55  return count;
56 }
57 
59  const SecondaryVertex &sv,
60  const GlobalVector &direction) const
61 {
62  std::vector<TrackRef> svTracks;
63  for(std::vector<TrackBaseRef>::const_iterator iter = sv.tracks_begin();
64  iter != sv.tracks_end(); iter++)
65  if (sv.trackWeight(*iter) >= minTrackWeight)
66  svTracks.push_back(iter->castTo<TrackRef>());
67 
68  // minimum number of tracks at vertex
69 
70  if (svTracks.size() < multiplicityMin)
71  return false;
72 
73  // invalid errors
74 
75  if (sv.dist2d().error() < 0 || sv.dist3d().error() < 0)
76  return false;
77 
78  // flight distance limits (value and significance, 2d and 3d)
79 
80  if (sv.dist2d().value() < distVal2dMin ||
81  sv.dist2d().value() > distVal2dMax ||
82  sv.dist3d().value() < distVal3dMin ||
83  sv.dist3d().value() > distVal3dMax ||
84  sv.dist2d().significance() < distSig2dMin ||
85  sv.dist2d().significance() > distSig2dMax ||
86  sv.dist3d().significance() < distSig3dMin ||
88  return false;
89 
90  // SV direction filter
91 
92  if (Geom::deltaR(sv.position() - pv.position(),
93  (maxDeltaRToJetAxis > 0) ? direction : -direction)
95  return false;
96 
97  // compute fourvector sum of tracks as vertex and cut on inv. mass
98 
99  TrackKinematics kin(sv);
100 
101  double mass = useTrackWeights ? kin.weightedVectorSum().M()
102  : kin.vectorSum().M();
103 
104  if (mass > massMax)
105  return false;
106 
107  // find shared tracks between PV and SV
108 
109  if (fracPV < 1.0) {
110  unsigned int sharedTracks =
111  computeSharedTracks(pv, svTracks, minTrackWeight);
112  if ((double)sharedTracks / svTracks.size() > fracPV)
113  return false;
114  }
115 
116  // check for V0 vertex
117 
118  if (sv.hasRefittedTracks())
119  return v0Filter(sv.refittedTracks());
120  else
121  return v0Filter(svTracks);
122 }
const math::XYZTLorentzVector & weightedVectorSum() const
trackRef_iterator tracks_end() const
last iterator over tracks
Definition: Vertex.cc:45
Measurement1D dist3d() const
bool hasRefittedTracks() const
Checks whether refitted tracks are stored.
Definition: Vertex.h:121
double error() const
Definition: Measurement1D.h:30
#define abs(x)
Definition: mlp_lapack.h:159
const std::vector< Track > & refittedTracks() const
Returns the container of refitted tracks.
Definition: Vertex.h:136
bool operator()(const reco::Vertex &pv, const SecondaryVertex &sv, const GlobalVector &direction) const
Definition: VertexFilter.cc:58
const Point & position() const
position
Definition: Vertex.h:93
unsigned int multiplicityMin
Definition: VertexFilter.h:25
float trackWeight(const TrackBaseRef &r) const
returns the weight with which a Track has contributed to the vertex-fit.
Measurement1D dist2d() const
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< float >, ROOT::Math::GlobalCoordinateSystemTag > GlobalVector
vector in glovbal coordinate system
Definition: Vector3D.h:28
static unsigned int computeSharedTracks(const Vertex &pv, const std::vector< TrackRef > &svTracks, double minTrackWeight)
Definition: VertexFilter.cc:41
double significance() const
Definition: Measurement1D.h:32
double value() const
Definition: Measurement1D.h:28
double maxDeltaRToJetAxis
Definition: VertexFilter.h:37
double deltaR(const Vector1 &v1, const Vector2 &v2)
Definition: VectorUtil.h:84
VertexFilter(const edm::ParameterSet &params)
Definition: VertexFilter.cc:21
const math::XYZTLorentzVector & vectorSum() const
tuple mass
Definition: scaleCards.py:27
trackRef_iterator tracks_begin() const
first iterator over tracks
Definition: Vertex.cc:40
tuple useTrackWeights
Definition: alignBH_cfg.py:24