CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
BTagProbabilityToDiscriminator Class Reference
Inheritance diagram for BTagProbabilityToDiscriminator:
edm::stream::EDProducer<>

Classes

struct  Discriminator
 

Public Member Functions

 BTagProbabilityToDiscriminator (const edm::ParameterSet &)
 
 ~BTagProbabilityToDiscriminator () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Types

typedef std::vector< edm::InputTagvInputTag
 
typedef std::vector< edm::ParameterSetvPSet
 
typedef std::vector< std::string > vstring
 

Private Member Functions

void beginStream (edm::StreamID) override
 
void endStream () override
 
void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

std::vector< Discriminatordiscrims_
 
std::unordered_map< std::string, edm::EDGetTokenT< JetTagCollection > > jet_tags_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Definition at line 55 of file BTagProbabilityToDiscriminator.cc.

Member Typedef Documentation

Definition at line 63 of file BTagProbabilityToDiscriminator.cc.

Definition at line 65 of file BTagProbabilityToDiscriminator.cc.

typedef std::vector<std::string> BTagProbabilityToDiscriminator::vstring
private

Definition at line 64 of file BTagProbabilityToDiscriminator.cc.

Constructor & Destructor Documentation

BTagProbabilityToDiscriminator::BTagProbabilityToDiscriminator ( const edm::ParameterSet iConfig)
explicit

Definition at line 82 of file BTagProbabilityToDiscriminator.cc.

References BTagProbabilityToDiscriminator::Discriminator::denominator, mvaPFMET_leptons_cfi::discriminator, Exception, edm::ParameterSet::getParameter(), BTagProbabilityToDiscriminator::Discriminator::name, BTagProbabilityToDiscriminator::Discriminator::numerator, and AlCaHLTBitMon_QueryRunRegistry::string.

83  {
84  for (auto discriminator : iConfig.getParameter<vPSet>("discriminators")) {
85  Discriminator current;
86  current.name = discriminator.getParameter<std::string>("name");
87  produces<JetTagCollection>(current.name);
88 
89  for (auto intag : discriminator.getParameter<vInputTag>("numerator")) {
90  if (jet_tags_.find(intag.encode()) == jet_tags_.end()) { // new
91  // probability
92  jet_tags_[intag.encode()] = consumes<JetTagCollection>(intag);
93  }
94  current.numerator.push_back(intag.encode());
95  }
96 
97  for (auto intag : discriminator.getParameter<vInputTag>("denominator")) {
98  if (jet_tags_.find(intag.encode()) == jet_tags_.end()) { // new
99  // probability
100  jet_tags_[intag.encode()] = consumes<JetTagCollection>(intag);
101  }
102  current.denominator.push_back(intag.encode());
103  }
104  discrims_.push_back(current);
105  }
106 
107  if (jet_tags_.empty()) {
108  throw cms::Exception("RuntimeError")
109  << "The module BTagProbabilityToDiscriminator is run without any input "
110  "probability to work on!"
111  << std::endl;
112  }
113 }
T getParameter(std::string const &) const
std::unordered_map< std::string, edm::EDGetTokenT< JetTagCollection > > jet_tags_
std::vector< edm::ParameterSet > vPSet
BTagProbabilityToDiscriminator::~BTagProbabilityToDiscriminator ( )
inlineoverride

Definition at line 58 of file BTagProbabilityToDiscriminator.cc.

References fillDescriptions().

58 {}

Member Function Documentation

void BTagProbabilityToDiscriminator::beginStream ( edm::StreamID  )
inlineoverrideprivate

Definition at line 72 of file BTagProbabilityToDiscriminator.cc.

72 {}
void BTagProbabilityToDiscriminator::endStream ( )
inlineoverrideprivate

Definition at line 74 of file BTagProbabilityToDiscriminator.cc.

74 {}
void BTagProbabilityToDiscriminator::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 176 of file BTagProbabilityToDiscriminator.cc.

References edm::ParameterSetDescription::add(), edm::ConfigurationDescriptions::addDefault(), edm::ParameterSet::addParameter(), edm::ParameterSetDescription::addVPSet(), DEFINE_FWK_MODULE, and AlCaHLTBitMon_QueryRunRegistry::string.

177  {
179  {
181  vpsd1.add<std::vector<edm::InputTag>>("denominator", {});
182  vpsd1.add<std::vector<edm::InputTag>>(
183  "numerator",
184  {
185  edm::InputTag("pfDeepCSVJetTags", "probb"),
186  edm::InputTag("pfDeepCSVJetTags", "probbb"),
187  });
188  vpsd1.add<std::string>("name", "BvsAll");
189  std::vector<edm::ParameterSet> temp1;
190  temp1.reserve(3);
191  {
192  edm::ParameterSet temp2;
193  temp2.addParameter<std::vector<edm::InputTag>>("denominator", {});
194  temp2.addParameter<std::vector<edm::InputTag>>(
195  "numerator",
196  {
197  edm::InputTag("pfDeepCSVJetTags", "probb"),
198  edm::InputTag("pfDeepCSVJetTags", "probbb"),
199  });
200  temp2.addParameter<std::string>("name", "BvsAll");
201  temp1.push_back(temp2);
202  }
203  {
204  edm::ParameterSet temp2;
205  temp2.addParameter<std::vector<edm::InputTag>>(
206  "denominator",
207  {
208  edm::InputTag("pfDeepCSVJetTags", "probc"),
209  edm::InputTag("pfDeepCSVJetTags", "probb"),
210  edm::InputTag("pfDeepCSVJetTags", "probbb"),
211  });
212  temp2.addParameter<std::vector<edm::InputTag>>(
213  "numerator",
214  {
215  edm::InputTag("pfDeepCSVJetTags", "probc"),
216  });
217  temp2.addParameter<std::string>("name", "CvsB");
218  temp1.push_back(temp2);
219  }
220  {
221  edm::ParameterSet temp2;
222  temp2.addParameter<std::vector<edm::InputTag>>(
223  "denominator",
224  {
225  edm::InputTag("pfDeepCSVJetTags", "probudsg"),
226  edm::InputTag("pfDeepCSVJetTags", "probc"),
227  });
228  temp2.addParameter<std::vector<edm::InputTag>>(
229  "numerator",
230  {
231  edm::InputTag("pfDeepCSVJetTags", "probc"),
232  });
233  temp2.addParameter<std::string>("name", "CvsL");
234  temp1.push_back(temp2);
235  }
236  desc.addVPSet("discriminators", vpsd1, temp1);
237  }
238  descriptions.addDefault(desc);
239 }
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
void addDefault(ParameterSetDescription const &psetDescription)
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:125
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void BTagProbabilityToDiscriminator::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 115 of file BTagProbabilityToDiscriminator.cc.

References pfDeepCMVADiscriminatorsJetTags_cfi::denominator, mps_splice::entry, Exception, plotBeamSpotDB::first, edm::Event::getByToken(), mps_fire::i, training_settings::idx, crabWrapper::key, eostools::move(), dataset::name, pileupDistInMC::num, pfDeepCMVADiscriminatorsJetTags_cfi::numerator, edm::Event::put(), edm::second(), edm::AssociationVector< KeyRefProd, CVal, KeyRef, SizeType, KeyReferenceHelper >::size(), findQualityFiles::size, and tmp.

116  {
117  std::unordered_map<std::string, edm::Handle<JetTagCollection>>
118  tags; // caches jet tags to avoid repetitions
119  size_t size = 0;
120  bool first = true;
121  for (const auto& entry : jet_tags_) {
123  iEvent.getByToken(entry.second, tmp);
124  tags[entry.first] = tmp;
125  if (first)
126  size = tmp->size();
127  else {
128  if (tmp->size() != size) {
129  throw cms::Exception("RuntimeError")
130  << "The length of one of the input jet tag collections does not "
131  "match "
132  << "with the others, this is probably due to the probabilities "
133  "belonging to different jet collections, which is forbidden!"
134  << std::endl;
135  }
136  }
137  first = false;
138  }
139 
140  // create the output collection
141  // which is a "map" RefToBase<Jet> --> float
142  vector<std::unique_ptr<JetTagCollection>> output_tags;
143  output_tags.reserve(discrims_.size());
144  for (size_t i = 0; i < discrims_.size(); ++i) {
145  output_tags.push_back(std::make_unique<JetTagCollection>(
146  *(tags.begin()->second)) // clone from the first element, will change
147  // the content later on
148  );
149  }
150 
151  // loop over jets
152  for (size_t idx = 0; idx < output_tags[0]->size(); idx++) {
153  auto key = output_tags[0]->key(idx); // use key only for writing
154  // loop over new discriminators to produce
155  for (size_t disc_idx = 0; disc_idx < output_tags.size(); disc_idx++) {
156  float numerator = 0;
157  for (auto &num : discrims_[disc_idx].numerator)
158  numerator += (*tags[num])[idx].second;
159  float denominator = !discrims_[disc_idx].denominator.empty() ? 0 : 1;
160  for (auto &den : discrims_[disc_idx].denominator)
161  denominator += (*tags[den])[idx].second;
162  //protect against 0 denominator and undefined jet values (numerator probability < 0)
163  float new_value = (denominator != 0 && numerator >= 0) ? numerator / denominator : -10.;
164  (*output_tags[disc_idx])[key] = new_value;
165  }
166  }
167 
168  // put the output in the event
169  for (size_t i = 0; i < output_tags.size(); ++i) {
170  iEvent.put(std::move(output_tags[i]), discrims_[i].name);
171  }
172 }
size
Write out results.
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
std::unordered_map< std::string, edm::EDGetTokenT< JetTagCollection > > jet_tags_
U second(std::pair< T, U > const &p)
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
def move(src, dest)
Definition: eostools.py:511
size_type size() const

Member Data Documentation

std::vector<Discriminator> BTagProbabilityToDiscriminator::discrims_
private

Definition at line 77 of file BTagProbabilityToDiscriminator.cc.

std::unordered_map<std::string, edm::EDGetTokenT<JetTagCollection> > BTagProbabilityToDiscriminator::jet_tags_
private

Definition at line 79 of file BTagProbabilityToDiscriminator.cc.