CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
OverlapTest.cc
Go to the documentation of this file.
2 
3 #include <algorithm>
6 
7 using namespace pat::helper;
8 
9 void
11 {
12  iEvent.getByLabel(src_, candidates_);
13  isPreselected_.resize(candidates_->size());
14  size_t idx = 0;
15  for (reco::CandidateView::const_iterator it = candidates_->begin(); it != candidates_->end(); ++it, ++idx) {
16  isPreselected_[idx] = presel_(*it);
17  }
18  // Yes, I could use std::transform. But would people like it?
19  // http://www.sgi.com/tech/stl/transform.html
20 }
21 
22 bool
24 {
25  size_t idx = 0;
26  std::vector<std::pair<float,size_t> > matches;
27  for (reco::CandidateView::const_iterator it = candidates_->begin(); it != candidates_->end(); ++it, ++idx) {
28  if (!isPreselected_[idx]) continue;
29  double dr = reco::deltaR(item, *it);
30  if (dr < deltaR_) {
33  if (!overlaps(item, *it)) continue;
34  }
35  if (!pairCut_(pat::DiObjectProxy(item,*it))) continue;
36  matches.push_back(std::make_pair(dr, idx));
37  }
38  }
39  // see if we matched anything
40  if (matches.empty()) return false;
41 
42  // sort matches
43  std::sort(matches.begin(), matches.end());
44  // fill ptr vector
45  for (std::vector<std::pair<float,size_t> >::const_iterator it = matches.begin(); it != matches.end(); ++it) {
46  overlapsToFill.push_back(candidates_->ptrAt(it->second));
47  }
48  return true;
49 }
50 
51 bool
53 {
54  const reco::RecoCandidate * input = dynamic_cast<const reco::RecoCandidate *>(&item);
55  if (input == 0) throw cms::Exception("Type Error") << "Input to OverlapBySuperClusterSeed is not a RecoCandidate. "
56  << "It's a " << typeid(item).name() << "\n";
57  reco::SuperClusterRef mySC = input->superCluster();
58  if (mySC.isNull() || !mySC.isAvailable()) {
59  throw cms::Exception("Bad Reference") << "Input to OverlapBySuperClusterSeed has a null or dangling superCluster reference\n";
60  }
61  const reco::CaloClusterPtr & mySeed = mySC->seed();
62  if (mySeed.isNull()) {
63  throw cms::Exception("Bad Reference") << "Input to OverlapBySuperClusterSeed has a null superCluster seed reference\n";
64  }
65  bool hasOverlaps = false;
66  size_t idx = 0;
67  for (edm::View<reco::RecoCandidate>::const_iterator it = others_->begin(); it != others_->end(); ++it, ++idx) {
68  reco::SuperClusterRef otherSc = it->superCluster();
69  if (otherSc.isNull() || !otherSc.isAvailable()) {
70  throw cms::Exception("Bad Reference") << "One item in the OverlapBySuperClusterSeed input list has a null or dangling superCluster reference\n";
71  }
72  if (mySeed == otherSc->seed()) {
73  overlapsToFill.push_back(others_->ptrAt(idx));
74  hasOverlaps = true;
75  }
76  }
77  return hasOverlaps;
78 }
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:81
void push_back(Ptr< T > const &iPtr)
Definition: PtrVector.h:137
virtual bool fillOverlapsForItem(const reco::Candidate &item, reco::CandidatePtrVector &overlapsToFill) const
Check for overlaps.
Definition: OverlapTest.cc:23
bool isAvailable() const
Definition: Ref.h:276
virtual bool fillOverlapsForItem(const reco::Candidate &item, reco::CandidatePtrVector &overlapsToFill) const
Check for overlaps.
Definition: OverlapTest.cc:52
edm::Handle< edm::View< reco::RecoCandidate > > others_
Definition: OverlapTest.h:84
double deltaR(double eta1, double phi1, double eta2, double phi2)
Definition: deltaR.h:19
virtual void readInput(const edm::Event &iEvent, const edm::EventSetup &iSetup)
Read input, apply preselection cut.
Definition: OverlapTest.cc:10
int iEvent
Definition: GenABIO.cc:243
bool isNull() const
Checks for null.
Definition: Ref.h:247
PATStringCutObjectSelector presel_
A generic preselection cut that can work on any Candidate, but has access also to methods of PAT spec...
Definition: OverlapTest.h:59
edm::Handle< reco::CandidateView > candidates_
The collection to check overlaps against.
Definition: OverlapTest.h:68
std::vector< bool > isPreselected_
Flag saying if each element has passed the preselection or not.
Definition: OverlapTest.h:70
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
double deltaR_
Delta R for the match.
Definition: OverlapTest.h:61
const std::string & name() const
Definition: OverlapTest.h:35
bool checkRecoComponents_
Check the overlapping by RECO components.
Definition: OverlapTest.h:63
bool isNull() const
Checks for null.
Definition: Ptr.h:148
StringCutObjectSelector< pat::DiObjectProxy > pairCut_
Cut on the pair of objects together.
Definition: OverlapTest.h:65
virtual reco::SuperClusterRef superCluster() const
reference to a SuperCluster