47 #include <boost/algorithm/string.hpp> 48 #include <unordered_map> 65 typedef std::vector<edm::ParameterSet>
vPSet;
78 std::unordered_map<std::string, edm::EDGetTokenT<JetTagCollection>>
87 produces<JetTagCollection>(current.
name);
90 if (jet_tags_.find(intag.encode()) == jet_tags_.end()) {
92 jet_tags_[intag.encode()] = consumes<JetTagCollection>(intag);
94 current.
numerator.push_back(intag.encode());
98 if (jet_tags_.find(intag.encode()) == jet_tags_.end()) {
100 jet_tags_[intag.encode()] = consumes<JetTagCollection>(intag);
104 discrims_.push_back(current);
107 if (jet_tags_.empty()) {
109 <<
"The module BTagProbabilityToDiscriminator is run without any input " 110 "probability to work on!" 117 std::unordered_map<std::string, edm::Handle<JetTagCollection>>
121 for (
const auto&
entry : jet_tags_) {
130 <<
"The length of one of the input jet tag collections does not " 132 <<
"with the others, this is probably due to the probabilities " 133 "belonging to different jet collections, which is forbidden!" 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))
152 for (
size_t idx = 0;
idx < output_tags[0]->size();
idx++) {
153 auto key = output_tags[0]->key(
idx);
155 for (
size_t disc_idx = 0; disc_idx < output_tags.size(); disc_idx++) {
157 for (
auto &
num : discrims_[disc_idx].numerator)
159 float denominator = !discrims_[disc_idx].denominator.empty() ? 0 : 1;
160 for (
auto &den : discrims_[disc_idx].denominator)
163 float new_value = (denominator != 0 && numerator >= 0) ? numerator / denominator : -10.;
164 (*output_tags[disc_idx])[
key] = new_value;
169 for (
size_t i = 0;
i < output_tags.size(); ++
i) {
181 vpsd1.
add<std::vector<edm::InputTag>>(
"denominator", {});
182 vpsd1.
add<std::vector<edm::InputTag>>(
189 std::vector<edm::ParameterSet> temp1;
193 temp2.
addParameter<std::vector<edm::InputTag>>(
"denominator", {});
201 temp1.push_back(temp2);
218 temp1.push_back(temp2);
234 temp1.push_back(temp2);
236 desc.
addVPSet(
"discriminators", vpsd1, temp1);
std::vector< edm::InputTag > vInputTag
T getParameter(std::string const &) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
void produce(edm::Event &, const edm::EventSetup &) override
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
void endStream() override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::unordered_map< std::string, edm::EDGetTokenT< JetTagCollection > > jet_tags_
std::vector< std::string > vstring
U second(std::pair< T, U > const &p)
void beginStream(edm::StreamID) override
BTagProbabilityToDiscriminator(const edm::ParameterSet &)
#define DEFINE_FWK_MODULE(type)
void addDefault(ParameterSetDescription const &psetDescription)
std::vector< edm::ParameterSet > vPSet
void addParameter(std::string const &name, T const &value)
~BTagProbabilityToDiscriminator() override
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< std::vector< double > > tmp
std::vector< Discriminator > discrims_