CMS 3D CMS Logo

PFTauSelectorDefinition.h
Go to the documentation of this file.
1 #ifndef RecoTauTag_RecoTau_PFTauSelectorDefinition
2 #define RecoTauTag_RecoTau_PFTauSelectorDefinition
3 
7 
10 
12 
13 #include <memory>
14 #include <iostream>
15 
19  typedef std::vector<const reco::PFTau*> container;
20  typedef container::const_iterator const_iterator;
21 
22  struct DiscCutPair {
25  double cut;
26  };
27  typedef std::vector<DiscCutPair> DiscCutPairVec;
28 
30  std::vector<edm::ParameterSet> discriminators = cfg.getParameter<std::vector<edm::ParameterSet> >("discriminators");
31  // Build each of our cuts
32  for (auto const& pset : discriminators) {
33  DiscCutPair newCut;
34  newCut.inputToken = iC.consumes<reco::PFTauDiscriminator>(pset.getParameter<edm::InputTag>("discriminator"));
35  newCut.cut = pset.getParameter<double>("selectionCut");
36  discriminators_.push_back(newCut);
37  }
38 
39  // Build a string cut if desired
40  if (cfg.exists("cut")) {
42  }
43  }
44 
45  const_iterator begin() const { return selected_.begin(); }
46  const_iterator end() const { return selected_.end(); }
47 
48  void select(const HandleToCollection& hc, const edm::Event& e, const edm::EventSetup& s) {
49  selected_.clear();
50 
51  if (!hc.isValid()) {
52  throw cms::Exception("PFTauSelectorBadHandle")
53  << "an invalid PFTau handle with ProductID" << hc.id() << " passed to PFTauSelector.";
54  }
55 
56  // Load each discriminator
57  for (auto& disc : discriminators_) {
58  e.getByToken(disc.inputToken, disc.handle);
59  }
60 
61  const size_t nTaus = hc->size();
62  for (size_t iTau = 0; iTau < nTaus; ++iTau) {
63  bool passed = true;
64  reco::PFTauRef tau(hc, iTau);
65  // Check if it passed all the discrimiantors
66  for (auto const& disc : discriminators_) {
67  // Check this discriminator passes
68  if (!((*disc.handle)[tau] > disc.cut)) {
69  passed = false;
70  break;
71  }
72  }
73 
74  if (passed && cut_.get()) {
75  passed = (*cut_)(*tau);
76  }
77 
78  if (passed)
79  selected_.push_back(tau.get());
80  }
81  } // end select()
82 
83  size_t size() const { return selected_.size(); }
84 
85 private:
86  container selected_;
87  DiscCutPairVec discriminators_;
88  std::unique_ptr<StringCutObjectSelector<reco::PFTau> > cut_;
89 };
90 
91 #endif
PFTauSelectorDefinition(const edm::ParameterSet &cfg, edm::ConsumesCollector &&iC)
T getParameter(std::string const &) const
reco::PFTauCollection collection
const_iterator begin() const
std::vector< PFTau > PFTauCollection
collection of PFTau objects
Definition: PFTauFwd.h:9
ProductID id() const
Definition: HandleBase.cc:13
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
bool exists(std::string const &parameterName) const
checks if a parameter exists
void select(const HandleToCollection &hc, const edm::Event &e, const edm::EventSetup &s)
container::const_iterator const_iterator
std::unique_ptr< StringCutObjectSelector< reco::PFTau > > cut_
const_iterator end() const
edm::Handle< reco::PFTauDiscriminator > handle
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:232
bool isValid() const
Definition: HandleBase.h:70
edm::EDGetTokenT< reco::PFTauDiscriminator > inputToken
susybsm::HSCParticleCollection hc
Definition: classes.h:25
std::vector< DiscCutPair > DiscCutPairVec
edm::Handle< collection > HandleToCollection
std::vector< const reco::PFTau * > container