CMS 3D CMS Logo

RecoTauQualityCuts.cc
Go to the documentation of this file.
8 
9 namespace reco::tau {
10 
11  namespace {
12  const reco::Track* getTrack(const Candidate& cand) {
13  const PFCandidate* pfCandPtr = dynamic_cast<const PFCandidate*>(&cand);
14  if (pfCandPtr) {
15  // Get the KF track if it exists. Otherwise, see if PFCandidate has a GSF track.
16  if (pfCandPtr->trackRef().isNonnull())
17  return pfCandPtr->trackRef().get();
18  else if (pfCandPtr->gsfTrackRef().isNonnull())
19  return pfCandPtr->gsfTrackRef().get();
20  else
21  return nullptr;
22  }
23 
24  const pat::PackedCandidate* packedCand = dynamic_cast<const pat::PackedCandidate*>(&cand);
25  if (packedCand && packedCand->hasTrackDetails())
26  return &packedCand->pseudoTrack();
27 
28  return nullptr;
29  }
30 
31  const reco::TrackRef getTrackRef(const Candidate& cand) {
32  const PFCandidate* pfCandPtr = dynamic_cast<const PFCandidate*>(&cand);
33  if (pfCandPtr)
34  return pfCandPtr->trackRef();
35 
36  return reco::TrackRef();
37  }
38 
39  const reco::TrackBaseRef getGsfTrackRef(const Candidate& cand) {
40  const PFCandidate* pfCandPtr = dynamic_cast<const PFCandidate*>(&cand);
41  if (pfCandPtr) {
42  return reco::TrackBaseRef(pfCandPtr->gsfTrackRef());
43  }
44  return reco::TrackBaseRef();
45  }
46 
47  // Translate GsfTrackRef to TrackBaseRef
48  template <typename T>
49  reco::TrackBaseRef convertRef(const T& ref) {
50  return reco::TrackBaseRef(ref);
51  }
52  } // namespace
53 
54  // Quality cut implementations
55  namespace qcuts {
56 
57  bool ptMin(const TrackBaseRef& track, double cut) {
58  LogDebug("TauQCuts") << "<ptMin>: Pt = " << track->pt() << ", cut = " << cut;
59  return (track->pt() > cut);
60  }
61 
62  bool ptMin_cand(const Candidate& cand, double cut) {
63  LogDebug("TauQCuts") << "<ptMin_cand>: Pt = " << cand.pt() << ", cut = " << cut;
64  return (cand.pt() > cut);
65  }
66 
67  bool etMin_cand(const Candidate& cand, double cut) {
68  LogDebug("TauQCuts") << "<etMin_cand>: Et = " << cand.et() << ", cut = " << cut;
69  return (cand.et() > cut);
70  }
71 
72  bool trkPixelHits(const Track* track, int cut) {
73  // For some reason, the number of hits is signed
74  LogDebug("TauQCuts") << "<trkPixelHits>: #Pxl hits = " << track->hitPattern().numberOfValidPixelHits()
75  << ", cut = " << cut;
76  return (track->hitPattern().numberOfValidPixelHits() >= cut);
77  }
78 
79  bool trkPixelHits_cand(const Candidate& cand, int cut) {
80  // For some reason, the number of hits is signed
81  auto track = getTrack(cand);
82  if (track) {
83  LogDebug("TauQCuts") << "<trkPixelHits_cand>: #Pxl hits = " << trkPixelHits(track, cut) << ", cut = " << cut;
84  return trkPixelHits(track, cut);
85  } else {
86  LogDebug("TauQCuts") << "<trkPixelHits_cand>: #Pxl hits = N/A, cut = " << cut;
87  return false;
88  }
89  }
90 
91  bool trkTrackerHits(const Track* track, int cut) {
92  LogDebug("TauQCuts") << "<trkTrackerHits>: #Trk hits = " << track->hitPattern().numberOfValidHits()
93  << ", cut = " << cut;
94  return (track->hitPattern().numberOfValidHits() >= cut);
95  }
96 
97  bool trkTrackerHits_cand(const Candidate& cand, int cut) {
98  auto track = getTrack(cand);
99  if (track) {
100  LogDebug("TauQCuts") << "<trkTrackerHits>: #Trk hits = " << track->hitPattern().numberOfValidHits()
101  << ", cut = " << cut;
102  return trkTrackerHits(track, cut);
103  } else {
104  LogDebug("TauQCuts") << "<trkTrackerHits>: #Trk hits = N/A, cut = " << cut;
105  return false;
106  }
107  }
108 
110  if (pv->isNull()) {
111  edm::LogError("QCutsNoPrimaryVertex") << "Primary vertex Ref in "
112  << "RecoTauQualityCuts is invalid. - trkTransverseImpactParameter";
113  return false;
114  }
115  LogDebug("TauQCuts") << " track: Pt = " << track->pt() << ", eta = " << track->eta()
116  << ", phi = " << track->phi();
117  LogDebug("TauQCuts") << " vertex: x = " << (*pv)->position().x() << ", y = " << (*pv)->position().y()
118  << ", z = " << (*pv)->position().z();
119  LogDebug("TauQCuts") << "--> dxy = " << std::fabs(track->dxy((*pv)->position())) << " (cut = " << cut << ")";
120  return (std::fabs(track->dxy((*pv)->position())) <= cut);
121  }
122 
124  auto track = getTrack(cand);
125  if (track) {
127  } else {
128  LogDebug("TauQCuts") << "<trkTransverseImpactParameter_cand>: dXY = N/A, cut = " << cut;
129  return false;
130  }
131  }
132 
134  if (pv->isNull()) {
135  edm::LogError("QCutsNoPrimaryVertex") << "Primary vertex Ref in "
136  << "RecoTauQualityCuts is invalid. - trkLongitudinalImpactParameter";
137  return false;
138  }
139  LogDebug("TauQCuts") << " track: Pt = " << track->pt() << ", eta = " << track->eta()
140  << ", phi = " << track->phi();
141  LogDebug("TauQCuts") << " vertex: x = " << (*pv)->position().x() << ", y = " << (*pv)->position().y()
142  << ", z = " << (*pv)->position().z();
143  LogDebug("TauQCuts") << "--> dz = " << std::fabs(track->dz((*pv)->position())) << " (cut = " << cut << ")";
144  return (std::fabs(track->dz((*pv)->position())) <= cut);
145  }
146 
148  auto track = getTrack(cand);
149  if (track) {
151  } else {
152  LogDebug("TauQCuts") << "<trkLongitudinalImpactParameter_cand>: dZ = N/A, cut = " << cut;
153  return false;
154  }
155  }
156 
159  const Track* leadTrack,
160  const reco::VertexRef* pv,
161  double cut) {
162  if (!leadTrack) {
163  edm::LogError("QCutsNoValidLeadTrack")
164  << "Lead track Ref in "
165  << "RecoTauQualityCuts is invalid. - trkLongitudinalImpactParameterWrtTrack";
166  return false;
167  }
168  return (std::fabs(track->dz((*pv)->position()) - leadTrack->dz((*pv)->position())) <= cut);
169  }
170 
172  const reco::Track* leadTrack,
173  const reco::VertexRef* pv,
174  double cut) {
175  auto track = getTrack(cand);
176  if (track)
178  else
179  return false;
180  }
181 
183  if (pv->isNull()) {
184  edm::LogError("QCutsNoPrimaryVertex") << "Primary vertex Ref in "
185  << "RecoTauQualityCuts is invalid. - minTrackVertexWeight";
186  return false;
187  }
188  LogDebug("TauQCuts") << " track: Pt = " << track->pt() << ", eta = " << track->eta()
189  << ", phi = " << track->phi();
190  LogDebug("TauQCuts") << " vertex: x = " << (*pv)->position().x() << ", y = " << (*pv)->position().y()
191  << ", z = " << (*pv)->position().z();
192  LogDebug("TauQCuts") << "--> trackWeight = " << (*pv)->trackWeight(track) << " (cut = " << cut << ")";
193  return ((*pv)->trackWeight(track) >= cut);
194  }
195 
196  bool minTrackVertexWeight(const TrackRef& track, const reco::VertexRef* pv, double cut) {
197  if (pv->isNull()) {
198  edm::LogError("QCutsNoPrimaryVertex") << "Primary vertex Ref in "
199  << "RecoTauQualityCuts is invalid. - minTrackVertexWeight";
200  return false;
201  }
202  LogDebug("TauQCuts") << " track: Pt = " << track->pt() << ", eta = " << track->eta()
203  << ", phi = " << track->phi();
204  LogDebug("TauQCuts") << " vertex: x = " << (*pv)->position().x() << ", y = " << (*pv)->position().y()
205  << ", z = " << (*pv)->position().z();
206  LogDebug("TauQCuts") << "--> trackWeight = " << (*pv)->trackWeight(track) << " (cut = " << cut << ")";
207  return ((*pv)->trackWeight(track) >= cut);
208  }
209 
211  if (pv->isNull()) {
212  edm::LogError("QCutsNoPrimaryVertex") << "Primary vertex Ref in "
213  << "RecoTauQualityCuts is invalid. - minPackedCandVertexWeight";
214  return false;
215  }
216  //there is some low granular information on track weight in the vertex available with packed cands
217  double weight = -9.9;
218  if (pCand.vertexRef().isNonnull() && pCand.vertexRef().key() == pv->key()) {
219  int quality = pCand.pvAssociationQuality();
221  weight = 0.6; //0.6 as proxy for weight above 0.5
223  weight = 0.1; //0.6 as proxy for weight below 0.5
224  }
225  LogDebug("TauQCuts") << " packedCand: Pt = " << pCand.pt() << ", eta = " << pCand.eta()
226  << ", phi = " << pCand.phi();
227  LogDebug("TauQCuts") << " vertex: x = " << (*pv)->position().x() << ", y = " << (*pv)->position().y()
228  << ", z = " << (*pv)->position().z();
229  LogDebug("TauQCuts") << "--> trackWeight from packedCand = " << weight << " (cut = " << cut << ")";
230  return (weight >= cut);
231  }
232 
234  auto track = getTrackRef(cand);
235  if (track.isNonnull()) {
236  return minTrackVertexWeight(track, pv, cut);
237  }
238  auto gsfTrack = getGsfTrackRef(cand);
239  if (gsfTrack.isNonnull()) {
240  return minTrackVertexWeight(gsfTrack, pv, cut);
241  }
242 
243  const pat::PackedCandidate* pCand = dynamic_cast<const pat::PackedCandidate*>(&cand);
244  if (pCand != nullptr && cand.charge() != 0) {
245  return minPackedCandVertexWeight(*pCand, pv, cut);
246  }
247  LogDebug("TauQCuts") << "<minTrackVertexWeight_cand>: weight = N/A, cut = " << cut;
248  return false;
249  }
250 
251  bool trkChi2(const Track* track, double cut) {
252  LogDebug("TauQCuts") << "<trkChi2>: chi^2 = " << track->normalizedChi2() << ", cut = " << cut;
253  return (track->normalizedChi2() <= cut);
254  }
255 
256  bool trkChi2_cand(const Candidate& cand, double cut) {
257  auto track = getTrack(cand);
258  if (track) {
259  LogDebug("TauQCuts") << "<trkChi2_cand>: chi^2 = " << track->normalizedChi2() << ", cut = " << cut;
260  return trkChi2(track, cut);
261  } else {
262  LogDebug("TauQCuts") << "<trkChi2_cand>: chi^2 = N/A, cut = " << cut;
263  return false;
264  }
265  }
266 
267  // And a set of qcuts
269  for (auto const& func : cuts) {
270  if (!func(track))
271  return false;
272  }
273  return true;
274  }
275 
277  for (auto const& func : cuts) {
278  if (!func(cand))
279  return false;
280  }
281  return true;
282  }
283 
284  // Get the set of Q cuts for a given type (i.e. gamma)
286  // Find the cuts that for this particle type
287  RecoTauQualityCuts::CandQCutFuncMap::const_iterator cuts = funcMap.find(std::abs(cand.pdgId()));
288  // Return false if we dont' know how to deal with this particle type
289  if (cuts == funcMap.end())
290  return false;
291  return AND_cand(cand, cuts->second); // Otherwise AND all the cuts
292  }
293 
294  } // namespace qcuts
295 
297  // Setup all of our predicates
298  CandQCutFuncCollection chargedHadronCuts;
299  CandQCutFuncCollection gammaCuts;
300  CandQCutFuncCollection neutralHadronCuts;
301 
302  // Make sure there are no extra passed options
303  std::set<std::string> passedOptionSet;
304  std::vector<std::string> passedOptions = qcuts.getParameterNames();
305 
306  for (auto const& option : passedOptions) {
307  passedOptionSet.insert(option);
308  }
309 
310  unsigned int nCuts = 0;
311  auto getDouble = [&qcuts, &passedOptionSet, &nCuts](const std::string& name) {
312  if (qcuts.exists(name)) {
313  ++nCuts;
314  passedOptionSet.erase(name);
315  return qcuts.getParameter<double>(name);
316  }
317  return -1.0;
318  };
319  auto getUint = [&qcuts, &passedOptionSet, &nCuts](const std::string& name) -> unsigned int {
320  if (qcuts.exists(name)) {
321  ++nCuts;
322  passedOptionSet.erase(name);
323  return qcuts.getParameter<unsigned int>(name);
324  }
325  return 0;
326  };
327 
328  // Build all the QCuts for tracks
329  minTrackPt_ = getDouble("minTrackPt");
330  maxTrackChi2_ = getDouble("maxTrackChi2");
331  minTrackPixelHits_ = getUint("minTrackPixelHits");
332  minTrackHits_ = getUint("minTrackHits");
333  maxTransverseImpactParameter_ = getDouble("maxTransverseImpactParameter");
334  maxDeltaZ_ = getDouble("maxDeltaZ");
335  maxDeltaZToLeadTrack_ = getDouble("maxDeltaZToLeadTrack");
336  // Require tracks to contribute a minimum weight to the associated vertex.
337  minTrackVertexWeight_ = getDouble("minTrackVertexWeight");
338 
339  // Use bit-wise & to avoid conditional code
342  (minTrackVertexWeight_ >= 0);
343 
344  // Build the QCuts for gammas
345  minGammaEt_ = getDouble("minGammaEt");
346 
347  // Build QCuts for netural hadrons
348  minNeutralHadronEt_ = getDouble("minNeutralHadronEt");
349 
350  // Check if there are any remaining unparsed QCuts
351  if (!passedOptionSet.empty()) {
352  std::string unParsedOptions;
353  bool thereIsABadParameter = false;
354  for (auto const& option : passedOptionSet) {
355  // Workaround for HLT - TODO FIXME
356  if (option == "useTracksInsteadOfPFHadrons") {
357  // Crash if true - no one should have this option enabled.
358  if (qcuts.getParameter<bool>("useTracksInsteadOfPFHadrons")) {
359  throw cms::Exception("DontUseTracksInQcuts") << "The obsolete exception useTracksInsteadOfPFHadrons "
360  << "is set to true in the quality cut config." << std::endl;
361  }
362  continue;
363  }
364 
365  // If we get to this point, there is a real unknown parameter
366  thereIsABadParameter = true;
367 
368  unParsedOptions += option;
369  unParsedOptions += "\n";
370  }
371  if (thereIsABadParameter) {
372  throw cms::Exception("BadQualityCutConfig") << " The PSet passed to the RecoTauQualityCuts class had"
373  << " the following unrecognized options: " << std::endl
374  << unParsedOptions;
375  }
376  }
377 
378  // Make sure there are at least some quality cuts
379  if (!nCuts) {
380  throw cms::Exception("BadQualityCutConfig") << " No options were passed to the quality cut class!" << std::endl;
381  }
382  }
383 
384  std::pair<edm::ParameterSet, edm::ParameterSet> factorizePUQCuts(const edm::ParameterSet& input) {
385  edm::ParameterSet puCuts;
386  edm::ParameterSet nonPUCuts;
387 
388  std::vector<std::string> inputNames = input.getParameterNames();
389  for (auto const& cut : inputNames) {
390  if (cut == "minTrackVertexWeight" || cut == "maxDeltaZ" || cut == "maxDeltaZToLeadTrack") {
391  puCuts.copyFrom(input, cut);
392  } else {
393  nonPUCuts.copyFrom(input, cut);
394  }
395  }
396  return std::make_pair(puCuts, nonPUCuts);
397  }
398 
400  if (!filterTrack_(track.get()))
401  return false;
402  if (minTrackVertexWeight_ >= 0. && !(pv_->trackWeight(convertRef(track)) >= minTrackVertexWeight_))
403  return false;
404  return true;
405  }
406 
408  if (!filterTrack_(track.get()))
409  return false;
410  if (minTrackVertexWeight_ >= 0. && !(pv_->trackWeight(convertRef(track)) >= minTrackVertexWeight_))
411  return false;
412  return true;
413  }
414 
416 
418  if (minTrackPt_ >= 0 && !(track->pt() > minTrackPt_))
419  return false;
420  if (maxTrackChi2_ >= 0 && !(track->normalizedChi2() <= maxTrackChi2_))
421  return false;
422  if (checkHitPattern_) {
423  const reco::HitPattern& hitPattern = track->hitPattern();
424  if (minTrackPixelHits_ > 0 && !(hitPattern.numberOfValidPixelHits() >= minTrackPixelHits_))
425  return false;
426  if (minTrackHits_ > 0 && !(hitPattern.numberOfValidHits() >= minTrackHits_))
427  return false;
428  }
429  if (checkPV_ && pv_.isNull()) {
430  edm::LogError("QCutsNoPrimaryVertex") << "Primary vertex Ref in "
431  << "RecoTauQualityCuts is invalid. - filterTrack";
432  return false;
433  }
434 
436  !(std::fabs(track->dxy(pv_->position())) <= maxTransverseImpactParameter_))
437  return false;
438  if (maxDeltaZ_ >= 0 && !(std::fabs(track->dz(pv_->position())) <= maxDeltaZ_))
439  return false;
440  if (maxDeltaZToLeadTrack_ >= 0) {
441  if (!leadTrack_) {
442  edm::LogError("QCutsNoValidLeadTrack") << "Lead track Ref in "
443  << "RecoTauQualityCuts is invalid. - filterTrack";
444  return false;
445  }
446 
447  if (!(std::fabs(track->dz(pv_->position()) - leadTrack_->dz(pv_->position())) <= maxDeltaZToLeadTrack_))
448  return false;
449  }
450 
451  return true;
452  }
453 
455  if (cand.charge() == 0)
456  return true;
457  const pat::PackedCandidate* pCand = dynamic_cast<const pat::PackedCandidate*>(&cand);
458  if (pCand == nullptr)
459  return true;
460 
461  //Get track, it should be present for cands with pT(charged)>0.5GeV
462  //and check track quality critera other than vertex weight
463  auto track = getTrack(cand);
464  if (track != nullptr) {
465  if (!filterTrack(*track))
466  return false;
467  } else { //Candidates without track (pT(charged)<0.5GeV): Can still check pT and calculate dxy and dz
468  if (minTrackPt_ >= 0 && !(pCand->pt() > minTrackPt_))
469  return false;
470  if (checkPV_ && pv_.isNull()) {
471  edm::LogError("QCutsNoPrimaryVertex") << "Primary vertex Ref in "
472  << "RecoTauQualityCuts is invalid. - filterChargedCand";
473  return false;
474  }
475 
477  !(std::fabs(pCand->dxy(pv_->position())) <= maxTransverseImpactParameter_))
478  return false;
479  if (maxDeltaZ_ >= 0 && !(std::fabs(pCand->dz(pv_->position())) <= maxDeltaZ_))
480  return false;
481  if (maxDeltaZToLeadTrack_ >= 0) {
482  if (leadTrack_ == nullptr) {
483  edm::LogError("QCutsNoValidLeadTrack") << "Lead track Ref in "
484  << "RecoTauQualityCuts is invalid. - filterChargedCand";
485  return false;
486  }
487 
488  if (!(std::fabs(pCand->dz(pv_->position()) - leadTrack_->dz(pv_->position())) <= maxDeltaZToLeadTrack_))
489  return false;
490  }
491  }
493  return false;
494 
495  return true;
496  }
497 
499  if (minGammaEt_ >= 0 && !(cand.et() > minGammaEt_))
500  return false;
501  return true;
502  }
503 
505  if (minNeutralHadronEt_ >= 0 && !(cand.et() > minNeutralHadronEt_))
506  return false;
507  return true;
508  }
509 
511  switch (std::abs(cand.pdgId())) {
512  case 22:
513  return filterGammaCand(cand);
514  case 130:
516  // We use the same qcuts for muons/electrons and charged hadrons.
517  case 211:
518  case 11:
519  case 13:
520  // no cuts ATM (track cuts applied in filterCand)
521  return true;
522  // Return false if we dont' know how to deal with this particle type
523  default:
524  return false;
525  };
526  return false;
527  }
528 
530  auto trackRef = getTrackRef(cand);
531  bool result = true;
532 
533  if (trackRef.isNonnull()) {
534  result = filterTrack(trackRef);
535  } else {
536  auto gsfTrackRef = getGsfTrackRef(cand);
537  if (gsfTrackRef.isNonnull())
538  result = filterTrack(gsfTrackRef);
539  else if (cand.charge() != 0) {
541  }
542  }
543 
544  if (result)
546 
547  return result;
548  }
549 
551 
553 
555  if (leadCand.isNonnull()) {
557  } else {
558  // Set null
559  leadTrack_ = nullptr;
560  }
561  }
562 
563 } // end namespace reco::tau
reco::tau::RecoTauQualityCuts::filterNeutralHadronCand
bool filterNeutralHadronCand(const reco::Candidate &cand) const
Definition: RecoTauQualityCuts.cc:504
edm::ParameterSet::copyFrom
void copyFrom(ParameterSet const &from, std::string const &name)
Definition: ParameterSet.cc:437
pat::PackedCandidate::hasTrackDetails
bool hasTrackDetails() const
Return true if a bestTrack can be extracted from this Candidate.
Definition: PackedCandidate.h:787
pat::PackedCandidate::vertexRef
const reco::VertexRef vertexRef() const
Definition: PackedCandidate.h:737
input
static const std::string input
Definition: EdmProvDump.cc:48
reco::tau::RecoTauQualityCuts::maxDeltaZToLeadTrack_
double maxDeltaZToLeadTrack_
Definition: RecoTauQualityCuts.h:111
MessageLogger.h
configurableAnalysis::Candidate
char Candidate[]
Definition: modules.cc:20
TkAlMuonSelectors_cfi.cut
cut
Definition: TkAlMuonSelectors_cfi.py:5
reco::tau::qcuts::minPackedCandVertexWeight
bool minPackedCandVertexWeight(const pat::PackedCandidate &pCand, const reco::VertexRef *pv, double cut)
Definition: RecoTauQualityCuts.cc:210
PFCandidate.h
reco::tau::RecoTauQualityCuts::filterTrack_
bool filterTrack_(const reco::Track *track) const
Definition: RecoTauQualityCuts.cc:417
reco::tau::qcuts::trkLongitudinalImpactParameter
bool trkLongitudinalImpactParameter(const TrackBase *track, const reco::VertexRef *pv, double cut)
Definition: RecoTauQualityCuts.cc:133
edm::Ref::isNull
bool isNull() const
Checks for null.
Definition: Ref.h:235
reco::tau::RecoTauQualityCuts::checkPV_
bool checkPV_
Definition: RecoTauQualityCuts.h:116
reco::tau::leadCand
InputIterator leadCand(InputIterator begin, InputIterator end)
Definition: RecoTauCommonUtilities.h:138
reco::tau::qcuts::minTrackVertexWeight
bool minTrackVertexWeight(const TrackBaseRef &track, const reco::VertexRef *pv, double cut)
Definition: RecoTauQualityCuts.cc:182
reco::TrackBaseRef
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
Definition: TrackFwd.h:35
reco::tau::qcuts::trkLongitudinalImpactParameterWrtTrack
bool trkLongitudinalImpactParameterWrtTrack(const Track *track, const Track *leadTrack, const reco::VertexRef *pv, double cut)
DZ cut, with respect to the current lead rack.
Definition: RecoTauQualityCuts.cc:158
pat::PackedCandidate::pvAssociationQuality
const PVAssociationQuality pvAssociationQuality() const
Definition: PackedCandidate.h:729
reco::tau::RecoTauQualityCuts::CandQCutFuncCollection
std::vector< CandQCutFunc > CandQCutFuncCollection
Definition: RecoTauQualityCuts.h:40
reco::tau::RecoTauQualityCuts::maxTrackChi2_
double maxTrackChi2_
Definition: RecoTauQualityCuts.h:106
fileinputsource_cfi.option
option
Definition: fileinputsource_cfi.py:87
reco::tau::RecoTauQualityCuts::maxDeltaZ_
double maxDeltaZ_
Definition: RecoTauQualityCuts.h:110
pat::PackedCandidate::UsedInFitLoose
Definition: PackedCandidate.h:726
edm::Ref< TrackCollection >
reco::tau::RecoTauQualityCuts::filterCand
bool filterCand(const reco::Candidate &cand) const
Filter a single Candidate.
Definition: RecoTauQualityCuts.cc:529
reco::tau::RecoTauQualityCuts::leadTrack_
const reco::Track * leadTrack_
Definition: RecoTauQualityCuts.h:103
reco::tau::RecoTauQualityCuts::TrackQCutFuncCollection
std::vector< TrackQCutFunc > TrackQCutFuncCollection
Definition: RecoTauQualityCuts.h:38
pfElectronTranslator_cfi.PFCandidate
PFCandidate
Definition: pfElectronTranslator_cfi.py:6
reco::tau::qcuts::trkLongitudinalImpactParameter_cand
bool trkLongitudinalImpactParameter_cand(const Candidate &cand, const reco::VertexRef *pv, double cut)
Definition: RecoTauQualityCuts.cc:147
reco::HitPattern
Definition: HitPattern.h:147
singlePfTauSkim_cff.leadTrack
leadTrack
Definition: singlePfTauSkim_cff.py:22
reco::tau::qcuts::etMin_cand
bool etMin_cand(const Candidate &cand, double cut)
Definition: RecoTauQualityCuts.cc:67
Track.h
reco::tau::qcuts::trkChi2_cand
bool trkChi2_cand(const Candidate &cand, double cut)
Definition: RecoTauQualityCuts.cc:256
reco::tau::qcuts::trkChi2
bool trkChi2(const Track *track, double cut)
Definition: RecoTauQualityCuts.cc:251
reco::tau::RecoTauQualityCuts::minTrackPixelHits_
int minTrackPixelHits_
Definition: RecoTauQualityCuts.h:107
pat::PackedCandidate::dz
virtual float dz(size_t ipv=0) const
dz with respect to the PV[ipv]
Definition: PackedCandidate.h:745
reco::tau::qcuts::ptMin
bool ptMin(const TrackBaseRef &track, double cut)
Definition: RecoTauQualityCuts.cc:57
reco::Track
Definition: Track.h:27
reco::TrackBase::dz
double dz() const
dz parameter (= dsz/cos(lambda)). This is the track z0 w.r.t (0,0,0) only if the refPoint is close to...
Definition: TrackBase.h:602
reco::tau::qcuts::mapAndCutByType
bool mapAndCutByType(const Candidate &cand, const RecoTauQualityCuts::CandQCutFuncMap &funcMap)
Definition: RecoTauQualityCuts.cc:285
reco::tau::RecoTauQualityCuts::minTrackHits_
int minTrackHits_
Definition: RecoTauQualityCuts.h:108
reco::tau::qcuts::trkPixelHits_cand
bool trkPixelHits_cand(const Candidate &cand, int cut)
Definition: RecoTauQualityCuts.cc:79
reco::TrackRef
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
reco::tau::RecoTauQualityCuts::filterChargedCand
bool filterChargedCand(const reco::Candidate &cand) const
or a single charged candidate
Definition: RecoTauQualityCuts.cc:454
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
Vertex.h
RecoTauQualityCuts.h
pat::PackedCandidate::pt
double pt() const override
transverse momentum
Definition: PackedCandidate.h:523
reco::tau::qcuts::trkTransverseImpactParameter
bool trkTransverseImpactParameter(const Track *track, const reco::VertexRef *pv, double cut)
Definition: RecoTauQualityCuts.cc:109
edm::ParameterSet::exists
bool exists(std::string const &parameterName) const
checks if a parameter exists
Definition: ParameterSet.cc:674
pat::PackedCandidate::pseudoTrack
virtual const reco::Track & pseudoTrack() const
Definition: PackedCandidate.h:772
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
reco::tau::RecoTauQualityCuts::checkHitPattern_
bool checkHitPattern_
Definition: RecoTauQualityCuts.h:115
pat::PackedCandidate
Definition: PackedCandidate.h:22
PackedCandidate.h
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
edm::ParameterSet::getParameterNames
std::vector< std::string > getParameterNames() const
Definition: ParameterSet.cc:656
cand
Definition: decayParser.h:34
reco::tau::qcuts::trkTrackerHits
bool trkTrackerHits(const Track *track, int cut)
Definition: RecoTauQualityCuts.cc:91
pat::PackedCandidate::phi
double phi() const override
momentum azimuthal angle
Definition: PackedCandidate.h:529
MetAnalyzer.pv
def pv(vc)
Definition: MetAnalyzer.py:7
reco::TrackBase
Definition: TrackBase.h:62
reco::tau::qcuts::trkTrackerHits_cand
bool trkTrackerHits_cand(const Candidate &cand, int cut)
Definition: RecoTauQualityCuts.cc:97
GsfTrack.h
reco::tau::qcuts::AND
bool AND(const TrackBaseRef &track, const RecoTauQualityCuts::TrackQCutFuncCollection &cuts)
Definition: RecoTauQualityCuts.cc:268
reco::tau::RecoTauQualityCuts::filterTrack
bool filterTrack(const reco::TrackBaseRef &track) const
Filter a single Track.
Definition: RecoTauQualityCuts.cc:399
reco::tau::qcuts::ptMin_cand
bool ptMin_cand(const Candidate &cand, double cut)
Definition: RecoTauQualityCuts.cc:62
TrackCollections2monitor_cff.func
func
Definition: TrackCollections2monitor_cff.py:359
reco::tau::factorizePUQCuts
std::pair< edm::ParameterSet, edm::ParameterSet > factorizePUQCuts(const edm::ParameterSet &inputSet)
Definition: RecoTauQualityCuts.cc:384
reco::tau::RecoTauQualityCuts::maxTransverseImpactParameter_
double maxTransverseImpactParameter_
Definition: RecoTauQualityCuts.h:109
reco::Candidate
Definition: Candidate.h:27
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
reco::tau::RecoTauQualityCuts::minGammaEt_
double minGammaEt_
Definition: RecoTauQualityCuts.h:113
getTrack
static const TrackGhostTrackState * getTrack(const BasicGhostTrackState *basic)
Definition: GhostTrackState.cc:49
reco::tau::qcuts::minTrackVertexWeight_cand
bool minTrackVertexWeight_cand(const Candidate &cand, const reco::VertexRef *pv, double cut)
Definition: RecoTauQualityCuts.cc:233
pat::PackedCandidate::dxy
virtual float dxy() const
dxy with respect to the PV ref
Definition: PackedCandidate.h:740
reco::tau::RecoTauQualityCuts::minTrackPt_
double minTrackPt_
Definition: RecoTauQualityCuts.h:105
reco::tau::RecoTauQualityCuts::RecoTauQualityCuts
RecoTauQualityCuts(const edm::ParameterSet &qcuts)
Definition: RecoTauQualityCuts.cc:296
qcdUeDQM_cfi.quality
quality
Definition: qcdUeDQM_cfi.py:31
T
long double T
Definition: Basic3DVectorLD.h:48
reco::tau::RecoTauQualityCuts::setLeadTrack
void setLeadTrack(const reco::Track &leadTrack)
Update the leading track.
Definition: RecoTauQualityCuts.cc:550
Exception
Definition: hltDiff.cc:246
reco::tau::RecoTauQualityCuts::filterGammaCand
bool filterGammaCand(const reco::Candidate &cand) const
Definition: RecoTauQualityCuts.cc:498
reco::tau::qcuts::trkTransverseImpactParameter_cand
bool trkTransverseImpactParameter_cand(const Candidate &cand, const reco::VertexRef *pv, double cut)
Definition: RecoTauQualityCuts.cc:123
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
edm::RefToBase< reco::Track >
reco::HitPattern::numberOfValidPixelHits
int numberOfValidPixelHits() const
Definition: HitPattern.h:800
reco::tau::RecoTauQualityCuts::pv_
reco::VertexRef pv_
Definition: RecoTauQualityCuts.h:101
edm::Ref::key
key_type key() const
Accessor for product key.
Definition: Ref.h:250
HLT_2018_cff.track
track
Definition: HLT_2018_cff.py:10352
mps_fire.result
result
Definition: mps_fire.py:303
L1TMuonDQMOffline_cfi.cuts
cuts
Definition: L1TMuonDQMOffline_cfi.py:41
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
reco::tau::RecoTauQualityCuts::filterCandByType
bool filterCandByType(const reco::Candidate &cand) const
Definition: RecoTauQualityCuts.cc:510
reco::HitPattern::numberOfValidHits
int numberOfValidHits() const
Definition: HitPattern.h:786
reco::tau
Definition: PFRecoTauChargedHadron.h:11
reco::tau::qcuts::AND_cand
bool AND_cand(const Candidate &cand, const RecoTauQualityCuts::CandQCutFuncCollection &cuts)
Definition: RecoTauQualityCuts.cc:276
pat::PackedCandidate::UsedInFitTight
Definition: PackedCandidate.h:727
reco::tau::RecoTauQualityCuts::CandQCutFuncMap
std::map< int, CandQCutFuncCollection > CandQCutFuncMap
Definition: RecoTauQualityCuts.h:41
reco::tau::RecoTauQualityCuts::minNeutralHadronEt_
double minNeutralHadronEt_
Definition: RecoTauQualityCuts.h:114
reco::tau::qcuts::trkPixelHits
bool trkPixelHits(const Track *track, int cut)
Definition: RecoTauQualityCuts.cc:72
weight
Definition: weight.py:1
reco::tau::RecoTauQualityCuts::minTrackVertexWeight_
double minTrackVertexWeight_
Definition: RecoTauQualityCuts.h:112
pat::PackedCandidate::eta
double eta() const override
momentum pseudorapidity
Definition: PackedCandidate.h:563
reco::tau::qcuts::trkLongitudinalImpactParameterWrtTrack_cand
bool trkLongitudinalImpactParameterWrtTrack_cand(const Candidate &cand, const reco::Track *leadTrack, const reco::VertexRef *pv, double cut)
Definition: RecoTauQualityCuts.cc:171