CMS 3D CMS Logo

GsfEleMVACut.cc
Go to the documentation of this file.
4 
6 public:
8 
9  result_type operator()(const reco::GsfElectronPtr&) const final;
10 
12  void getEventContent(const edm::EventBase&) final;
13 
15 
16 private:
17  double value(const reco::CandidatePtr& cand) const final;
18 
19  // Cut formulas
20  const std::vector<std::string> mvaCutStrings_;
21  std::vector<StringObjectFunction<reco::GsfElectron>> cutFormula_;
22 
23  const int nCuts_;
24 
25  // Pre-computed MVA value map
28 };
29 
31 
34  mvaCutStrings_(c.getParameter<std::vector<std::string>>("mvaCuts")),
35  nCuts_(mvaCutStrings_.size()) {
36  edm::InputTag mvaValTag = c.getParameter<edm::InputTag>("mvaValueMapName");
37  contentTags_.emplace("mvaVal", mvaValTag);
38 
39  edm::InputTag mvaCatTag = c.getParameter<edm::InputTag>("mvaCategoriesMapName");
40  contentTags_.emplace("mvaCat", mvaCatTag);
41 
42  for (auto& cutString : mvaCutStrings_) {
44  }
45 }
46 
48  auto mvaVal = cc.consumes<edm::ValueMap<float>>(contentTags_["mvaVal"]);
49  contentTokens_.emplace("mvaVal", mvaVal);
50 
51  auto mvaCat = cc.consumes<edm::ValueMap<int>>(contentTags_["mvaCat"]);
52  contentTokens_.emplace("mvaCat", mvaCat);
53 }
54 
56  ev.getByLabel(contentTags_["mvaVal"], mvaValueMap_);
57  ev.getByLabel(contentTags_["mvaCat"], mvaCategoriesMap_);
58 }
59 
61  // in case we are by-value
62  const std::string& val_name = contentTags_.find("mvaVal")->second.instance();
63  const std::string& cat_name = contentTags_.find("mvaCat")->second.instance();
65  float val = -1.0;
66  int cat = -1;
68  mvaValueMap_->contains(cand.id())) {
69  cat = (*mvaCategoriesMap_)[cand];
70  val = (*mvaValueMap_)[cand];
72  mvaValueMap_->idSize() == 1 && cand.id() == edm::ProductID()) {
73  // in case we have spoofed a ptr
74  //note this must be a 1:1 valuemap (only one product input)
75  cat = mvaCategoriesMap_->begin()[cand.key()];
76  val = mvaValueMap_->begin()[cand.key()];
77  } else if (mvaCategoriesMap_.isValid() && mvaValueMap_.isValid()) { // throw an exception
78  cat = (*mvaCategoriesMap_)[cand];
79  val = (*mvaValueMap_)[cand];
80  }
81 
82  // Find the cut formula
83  const int iCategory = mvaCategoriesMap_.isValid() ? cat : pat->userInt(cat_name);
84  if (iCategory >= nCuts_)
85  throw cms::Exception(" Error in MVA categories: ")
86  << " found a particle with a category larger than max configured " << std::endl;
87 
88  // Look up the MVA value for this particle
89  const float mvaValue = mvaValueMap_.isValid() ? val : pat->userFloat(val_name);
90 
91  // Apply the cut and return the result
92  return mvaValue > cutFormula_[iCategory](*cand);
93 }
94 
96  // in case we are by-value
97  const std::string& val_name = contentTags_.find("mvaVal")->second.instance();
99  float val = 0.0;
101  mvaValueMap_->contains(cand.id())) {
102  val = (*mvaValueMap_)[cand];
103  } else if (mvaCategoriesMap_.isValid() && mvaValueMap_.isValid() && mvaCategoriesMap_->idSize() == 1 &&
104  mvaValueMap_->idSize() == 1 && cand.id() == edm::ProductID()) {
105  // in case we have spoofed a ptr
106  //note this must be a 1:1 valuemap (only one product input)
107  val = mvaValueMap_->begin()[cand.key()];
108  } else if (mvaCategoriesMap_.isValid() && mvaValueMap_.isValid()) { // throw an exception
109  val = (*mvaValueMap_)[cand];
110  }
111 
112  const float mvaValue = mvaValueMap_.isValid() ? val : pat->userFloat(val_name);
113  return mvaValue;
114 }
size
Write out results.
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::Handle< edm::ValueMap< int > > mvaCategoriesMap_
Definition: GsfEleMVACut.cc:27
double value(const reco::CandidatePtr &cand) const final
Definition: GsfEleMVACut.cc:95
std::unordered_map< std::string, edm::InputTag > contentTags_
size_t idSize() const
Definition: ValueMap.h:157
GsfEleMVACut(const edm::ParameterSet &c)
Definition: GsfEleMVACut.cc:32
void setConsumes(edm::ConsumesCollector &) final
Definition: GsfEleMVACut.cc:47
const int nCuts_
Definition: GsfEleMVACut.cc:23
std::vector< StringObjectFunction< reco::GsfElectron > > cutFormula_
Definition: GsfEleMVACut.cc:21
Definition: HeavyIon.h:7
def cat(path)
Definition: eostools.py:401
result_type operator()(const reco::GsfElectronPtr &) const final
Definition: GsfEleMVACut.cc:60
void getEventContent(const edm::EventBase &) final
Definition: GsfEleMVACut.cc:55
CandidateType candidateType() const final
Definition: GsfEleMVACut.cc:14
const_iterator begin() const
Definition: ValueMap.h:229
std::unordered_map< std::string, edm::EDGetToken > contentTokens_
bool isValid() const
Definition: HandleBase.h:70
#define DEFINE_EDM_PLUGIN(factory, type, name)
edm::Handle< edm::ValueMap< float > > mvaValueMap_
Definition: GsfEleMVACut.cc:26
const std::vector< std::string > mvaCutStrings_
Definition: GsfEleMVACut.cc:20
bool contains(ProductID id) const
Definition: ValueMap.h:155