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 
19 using namespace reco;
20 
21 
23  useTrackWeights(params.getParameter<bool>("useTrackWeights")),
24  minTrackWeight(params.getParameter<double>("minimumTrackWeight")),
25  massMax(params.getParameter<double>("massMax")),
26  fracPV(params.getParameter<double>("fracPV")),
27  multiplicityMin(params.getParameter<unsigned int>("multiplicityMin")),
28  distVal2dMin(params.getParameter<double>("distVal2dMin")),
29  distVal2dMax(params.getParameter<double>("distVal2dMax")),
30  distVal3dMin(params.getParameter<double>("distVal3dMin")),
31  distVal3dMax(params.getParameter<double>("distVal3dMax")),
32  distSig2dMin(params.getParameter<double>("distSig2dMin")),
33  distSig2dMax(params.getParameter<double>("distSig2dMax")),
34  distSig3dMin(params.getParameter<double>("distSig3dMin")),
35  distSig3dMax(params.getParameter<double>("distSig3dMax")),
36  maxDeltaRToJetAxis(params.getParameter<double>("maxDeltaRToJetAxis")),
37  v0Filter(params.getParameter<edm::ParameterSet>("v0Filter"))
38 {
39 }
40 
43  const GlobalVector &direction) const
44 {
45  std::vector<TrackRef> svTracks;
46  for(std::vector<TrackBaseRef>::const_iterator iter = sv.tracks_begin();
47  iter != sv.tracks_end(); iter++)
48  if (sv.trackWeight(*iter) >= minTrackWeight)
49  svTracks.push_back(iter->castTo<TrackRef>());
50 
51  // minimum number of tracks at vertex
52 
53  if (svTracks.size() < multiplicityMin)
54  return false;
55 
56  // invalid errors
57 
58  if (sv.dist2d().error() < 0 || sv.dist3d().error() < 0)
59  return false;
60 
61  // flight distance limits (value and significance, 2d and 3d)
62 
63  if (sv.dist2d().value() < distVal2dMin ||
64  sv.dist2d().value() > distVal2dMax ||
65  sv.dist3d().value() < distVal3dMin ||
66  sv.dist3d().value() > distVal3dMax ||
67  sv.dist2d().significance() < distSig2dMin ||
68  sv.dist2d().significance() > distSig2dMax ||
69  sv.dist3d().significance() < distSig3dMin ||
71  return false;
72 
73  // SV direction filter
74 
75  if (Geom::deltaR(sv.position() - pv.position(),
76  (maxDeltaRToJetAxis > 0) ? direction : -direction)
78  return false;
79 
80  // compute fourvector sum of tracks as vertex and cut on inv. mass
81 
82  TrackKinematics kin(sv);
83 
84  double mass = useTrackWeights ? kin.weightedVectorSum().M()
85  : kin.vectorSum().M();
86 
87  if (mass > massMax)
88  return false;
89 
90  // find shared tracks between PV and SV
91 
92  if (fracPV < 1.0) {
93  double fractionSharedTracks =
95  if (fractionSharedTracks > fracPV)
96  return false;
97  }
98 
99  // check for V0 vertex
100 
101  if (sv.hasRefittedTracks())
102  return v0Filter(sv.refittedTracks());
103  else
104  return v0Filter(svTracks);
105 }
108  const GlobalVector &direction) const {
109 
110  const std::vector<CandidatePtr> & svTracks = sv.daughterPtrVector();
111 
112  // minimum number of tracks at vertex
113 
114  if (svTracks.size() < multiplicityMin)
115  return false;
116 
117  // invalid errors
118 
119  if (sv.dist2d().error() < 0 || sv.dist3d().error() < 0)
120  return false;
121 
122  // flight distance limits (value and significance, 2d and 3d)
123 
124  if (sv.dist2d().value() < distVal2dMin ||
125  sv.dist2d().value() > distVal2dMax ||
126  sv.dist3d().value() < distVal3dMin ||
127  sv.dist3d().value() > distVal3dMax ||
128  sv.dist2d().significance() < distSig2dMin ||
129  sv.dist2d().significance() > distSig2dMax ||
130  sv.dist3d().significance() < distSig3dMin ||
132  return false;
133 
134  // SV direction filter
135 
136  if (Geom::deltaR(sv.vertex() - pv.position(),
137  (maxDeltaRToJetAxis > 0) ? direction : -direction)
139  return false;
140  // compute fourvector sum of tracks as vertex and cut on inv. mass
141 
142  TrackKinematics kin(sv);
143 
144  double mass = useTrackWeights ? kin.weightedVectorSum().M()
145  : kin.vectorSum().M();
146 
147  if (mass > massMax)
148  return false;
149 
150  // find shared tracks between PV and SV
151 
152  if (fracPV < 1.0) {
153  double fractionSharedTracks =
155  if (fractionSharedTracks > fracPV)
156  return false;
157  }
158 
159  // check for V0 vertex
160 
161  return v0Filter(svTracks);
162 }
163 
const math::XYZTLorentzVector & weightedVectorSum() const
double error() const
Definition: Measurement1D.h:30
const Point & position() const
position
Definition: Vertex.h:106
double computeSharedTracks(const reco::Vertex &pv, const std::vector< reco::TrackRef > &svTracks, double minTrackWeight=0.5, float unused=0)
Definition: SharedTracks.cc:4
unsigned int multiplicityMin
Definition: VertexFilter.h:40
bool operator()(const reco::Vertex &pv, const TemplatedSecondaryVertex< reco::Vertex > &sv, const GlobalVector &direction) const
Definition: VertexFilter.cc:41
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< float >, ROOT::Math::GlobalCoordinateSystemTag > GlobalVector
vector in glovbal coordinate system
Definition: Vector3D.h:27
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
double significance() const
Definition: Measurement1D.h:32
double value() const
Definition: Measurement1D.h:28
double maxDeltaRToJetAxis
Definition: VertexFilter.h:52
VertexFilter(const edm::ParameterSet &params)
Definition: VertexFilter.cc:22
const math::XYZTLorentzVector & vectorSum() const
tuple useTrackWeights
Definition: alignBH_cfg.py:24