CMS 3D CMS Logo

IPCutPFCandidateSelectorDefinition.h
Go to the documentation of this file.
1 #ifndef CommonTools_ParticleFlow_IPCutPFCandidateSelectorDefinition
2 #define CommonTools_ParticleFlow_IPCutPFCandidateSelectorDefinition
3 
21 
22 namespace pf2pat {
23 
26  : verticesToken_(iC.consumes<reco::VertexCollection>(cfg.getParameter<edm::InputTag>("vertices"))),
27  d0Cut_(cfg.getParameter<double>("d0Cut")),
28  dzCut_(cfg.getParameter<double>("dzCut")),
29  d0SigCut_(cfg.getParameter<double>("d0SigCut")),
30  dzSigCut_(cfg.getParameter<double>("dzSigCut")) {}
31 
32  void select(const HandleToCollection &hc, const edm::Event &e, const edm::EventSetup &s) {
33  selected_.clear();
34 
36  e.getByToken(verticesToken_, vertices);
37  if (vertices->empty())
38  return;
39  const reco::Vertex &vtx = (*vertices)[0];
40 
41  unsigned key = 0;
42  for (collection::const_iterator pfc = hc->begin(); pfc != hc->end(); ++pfc, ++key) {
43  bool passing = true;
44  const reco::Track *tk = nullptr;
45  if (pfc->gsfTrackRef().isNonnull())
46  tk = pfc->gsfTrackRef().get();
47  else if (pfc->trackRef().isNonnull())
48  tk = pfc->trackRef().get();
49 
50  if (tk != nullptr) {
51  double d0 = fabs(tk->dxy(vtx.position()));
52  double dz = fabs(tk->dz(vtx.position()));
53  double d0e = hypot(tk->dxyError(), hypot(vtx.xError(), vtx.yError()));
54  double dze = hypot(tk->dzError(), vtx.zError());
55  if (d0Cut_ > 0 && d0 > d0Cut_)
56  passing = false;
57  if (dzCut_ > 0 && dz > dzCut_)
58  passing = false;
59  if (d0SigCut_ > 0 && d0e > 0 && d0 / d0e > d0SigCut_)
60  passing = false;
61  if (dzSigCut_ > 0 && dze > 0 && dz / dze > dzSigCut_)
62  passing = false;
63  }
64 
65  if (passing) {
66  selected_.push_back(reco::PFCandidate(*pfc));
67  reco::PFCandidatePtr ptrToMother(hc, key);
68 
69  if (pfc->numberOfSourceCandidatePtrs() > 0) {
70  selected_.back().setSourceCandidatePtr(edm::Ptr<reco::PFCandidate>(pfc->sourceCandidatePtr(0)));
71  } else {
72  selected_.back().setSourceCandidatePtr(ptrToMother);
73  }
74  }
75  }
76  }
77 
78  private:
80  double d0Cut_;
81  double dzCut_;
82  double d0SigCut_;
83  double dzSigCut_;
84  };
85 } // namespace pf2pat
86 
87 #endif
Selects PFCandidates basing on their compatibility with vertex.
void select(const HandleToCollection &hc, const edm::Event &e, const edm::EventSetup &s)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
double zError() const
error on z
Definition: Vertex.h:127
double dxyError() const
error on dxy
Definition: TrackBase.h:716
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
const Point & position() const
position
Definition: Vertex.h:113
IPCutPFCandidateSelectorDefinition(const edm::ParameterSet &cfg, edm::ConsumesCollector &&iC)
edm::EDGetTokenT< reco::VertexCollection > verticesToken_
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:596
double dzError() const
error on dz
Definition: TrackBase.h:725
double xError() const
error on x
Definition: Vertex.h:123
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:40
fixed size matrix
HLT enums.
susybsm::HSCParticleCollection hc
Definition: classes.h:25
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Definition: TrackBase.h:587
double yError() const
error on y
Definition: Vertex.h:125