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 }
GsfEleMVACut::GsfEleMVACut
GsfEleMVACut(const edm::ParameterSet &c)
Definition: GsfEleMVACut.cc:32
StringObjectFunction< reco::GsfElectron >
GsfEleMVACut::mvaCutStrings_
const std::vector< std::string > mvaCutStrings_
Definition: GsfEleMVACut.cc:20
eostools.cat
def cat(path)
Definition: eostools.py:401
GsfEleMVACut::mvaCategoriesMap_
edm::Handle< edm::ValueMap< int > > mvaCategoriesMap_
Definition: GsfEleMVACut.cc:27
watchdog.const
const
Definition: watchdog.py:83
edm::Handle
Definition: AssociativeIterator.h:50
CutApplicatorWithEventContentBase::contentTags_
std::unordered_map< std::string, edm::InputTag > contentTags_
Definition: CutApplicatorWithEventContentBase.h:35
candidate_functions::CandidateCut::result_type
bool result_type
Definition: CandidateCut.h:11
GsfEleMVACut::mvaValueMap_
edm::Handle< edm::ValueMap< float > > mvaValueMap_
Definition: GsfEleMVACut.cc:26
GsfEleMVACut
Definition: GsfEleMVACut.cc:5
GsfEleMVACut::getEventContent
void getEventContent(const edm::EventBase &) final
Definition: GsfEleMVACut.cc:55
GsfEleMVACut::candidateType
CandidateType candidateType() const final
Definition: GsfEleMVACut.cc:14
CutApplicatorWithEventContentBase.h
GsfElectron.h
DEFINE_EDM_PLUGIN
#define DEFINE_EDM_PLUGIN(factory, type, name)
Definition: PluginFactory.h:124
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
edm::ParameterSet
Definition: ParameterSet.h:47
CutApplicatorBase::CandidateType
CandidateType
Definition: CutApplicatorBase.h:47
edmplugin::PluginFactory
Definition: PluginFactory.h:34
edm::ValueMap::begin
const_iterator begin() const
Definition: ValueMap.h:229
cand
Definition: decayParser.h:32
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
pat
Definition: HeavyIon.h:7
cc
GsfEleMVACut::operator()
result_type operator()(const reco::GsfElectronPtr &) const final
Definition: GsfEleMVACut.cc:60
edm::Ptr< reco::GsfElectron >
GsfEleMVACut::setConsumes
void setConsumes(edm::ConsumesCollector &) final
Definition: GsfEleMVACut.cc:47
heppy_batch.val
val
Definition: heppy_batch.py:351
std
Definition: JetResolutionObject.h:76
GsfEleMVACut::nCuts_
const int nCuts_
Definition: GsfEleMVACut.cc:23
GsfEleMVACut::cutFormula_
std::vector< StringObjectFunction< reco::GsfElectron > > cutFormula_
Definition: GsfEleMVACut.cc:21
edm::ValueMap::idSize
size_t idSize() const
Definition: ValueMap.h:157
edm::ValueMap< float >
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
CutApplicatorWithEventContentBase::contentTokens_
std::unordered_map< std::string, edm::EDGetToken > contentTokens_
Definition: CutApplicatorWithEventContentBase.h:40
edm::EventBase
Definition: EventBase.h:46
Exception
Definition: hltDiff.cc:245
GsfEleMVACut::value
double value(const reco::CandidatePtr &cand) const final
Definition: GsfEleMVACut.cc:95
edm::ValueMap::contains
bool contains(ProductID id) const
Definition: ValueMap.h:155
c
auto & c
Definition: CAHitNtupletGeneratorKernelsImpl.h:46
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
StringObjectFunction.h
CutApplicatorBase::ELECTRON
Definition: CutApplicatorBase.h:47
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
edm::ProductID
Definition: ProductID.h:27
CutApplicatorWithEventContentBase
Definition: CutApplicatorWithEventContentBase.h:19
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443