24 #include <nlohmann/json.hpp> 36 static std::unique_ptr<ONNXRuntime> initializeGlobalCache(
const edm::ParameterSet &);
45 std::vector<float> center_norm_pad(
const std::vector<float> &
input,
70 flav_names_(iConfig.getParameter<
std::vector<
std::
string>>(
"flav_names")),
71 debug_(iConfig.getUntrackedParameter<
bool>(
"debugMode",
false)) {
74 if (!json_path.empty()) {
80 const auto &group_pset = js.at(group_name);
82 group_pset.at(
"var_names").get_to(prep_params.var_names);
83 if (group_pset.contains(
"var_length")) {
84 prep_params.min_length = group_pset.at(
"var_length");
85 prep_params.max_length = prep_params.min_length;
87 prep_params.min_length = group_pset.at(
"min_length");
88 prep_params.max_length = group_pset.at(
"max_length");
89 input_shapes_.push_back({1, (int64_t)prep_params.var_names.size(), -1});
91 const auto &var_info_pset = group_pset.at(
"var_infos");
92 for (
const auto &var_name : prep_params.var_names) {
93 const auto &var_pset = var_info_pset.at(var_name);
94 double median = var_pset.at(
"median");
99 double pad = var_pset.contains(
"pad") ? double(var_pset.at(
"pad")) : 0;
100 prep_params.var_info_map[var_name] =
105 const auto &len =
input_sizes_.emplace_back(prep_params.max_length * prep_params.var_names.size());
106 data_.emplace_back(len, 0);
111 input_names_ = prep_pset.getParameter<std::vector<std::string>>(
"input_names");
113 const auto &group_pset = prep_pset.getParameterSet(group_name);
115 prep_params.var_names = group_pset.getParameter<std::vector<std::string>>(
"var_names");
116 prep_params.min_length = group_pset.getParameter<
unsigned>(
"var_length");
117 prep_params.max_length = prep_params.min_length;
118 const auto &var_info_pset = group_pset.getParameterSet(
"var_infos");
119 for (
const auto &var_name : prep_params.var_names) {
120 const auto &var_pset = var_info_pset.getParameterSet(var_name);
121 double median = var_pset.getParameter<
double>(
"median");
122 double norm_factor = var_pset.getParameter<
double>(
"norm_factor");
124 double lower_bound = var_pset.getParameter<
double>(
"lower_bound");
125 double upper_bound = var_pset.getParameter<
double>(
"upper_bound");
126 prep_params.var_info_map[var_name] =
131 const auto &len =
input_sizes_.emplace_back(prep_params.max_length * prep_params.var_names.size());
132 data_.emplace_back(len, 0);
160 produces<JetTagCollection>(flav_name);
173 preprocessParams.setAllowAnything();
174 preprocessParams.setComment(
"`preprocessParams` is deprecated, please use `preprocess_json` instead.");
177 edm::FileInPath(
"RecoBTag/Combined/data/DeepBoostedJet/V02/full/resnet.onnx"));
178 desc.
add<std::vector<std::string>>(
"flav_names",
179 std::vector<std::string>{
214 std::vector<std::unique_ptr<JetTagCollection>> output_tags;
215 if (!tag_infos->empty()) {
216 auto jet_ref = tag_infos->begin()->jet();
219 output_tags.emplace_back(std::make_unique<JetTagCollection>(ref2prod));
223 output_tags.emplace_back(std::make_unique<JetTagCollection>());
227 for (
unsigned jet_n = 0; jet_n < tag_infos->size(); ++jet_n) {
228 const auto &
taginfo = (*tag_infos)[jet_n];
231 if (!
taginfo.features().empty()) {
239 const auto &jet_ref = tag_infos->at(jet_n).jet();
240 for (std::size_t flav_n = 0; flav_n <
flav_names_.size(); flav_n++) {
241 (*(output_tags[flav_n]))[jet_ref] =
outputs[flav_n];
247 <<
" ===" << std::endl;
248 for (
unsigned jet_n = 0; jet_n < tag_infos->size(); ++jet_n) {
249 const auto &jet_ref = tag_infos->at(jet_n).jet();
250 std::cout <<
" - Jet #" << jet_n <<
", pt=" << jet_ref->pt() <<
", eta=" << jet_ref->eta()
251 <<
", phi=" << jet_ref->phi() << std::endl;
252 for (std::size_t flav_n = 0; flav_n <
flav_names_.size(); ++flav_n) {
253 std::cout <<
" " <<
flav_names_.at(flav_n) <<
" = " << (*(output_tags.at(flav_n)))[jet_ref] << std::endl;
259 for (std::size_t flav_n = 0; flav_n <
flav_names_.size(); ++flav_n) {
275 assert(min <= pad_value && pad_value <= max);
276 assert(min_length <= max_length);
278 unsigned target_length = std::clamp((
unsigned)input.size(), min_length, max_length);
279 std::vector<float>
out(target_length, pad_value);
280 for (
unsigned i = 0;
i < input.size() &&
i < target_length; ++
i) {
281 out[
i] = std::clamp((
catch_infs(input[
i], replace_inf_value) - center) * norm_factor, min, max);
287 for (
unsigned igroup = 0; igroup <
input_names_.size(); ++igroup) {
290 auto &group_values =
data_[igroup];
293 std::fill(group_values.begin(), group_values.end(), 0);
294 unsigned curr_pos = 0;
296 for (
unsigned i = 0;
i < prep_params.var_names.size(); ++
i) {
297 const auto &varname = prep_params.var_names[
i];
298 const auto &raw_value = taginfo.
features().get(varname);
299 const auto &
info = prep_params.info(varname);
303 prep_params.min_length,
304 prep_params.max_length,
306 info.replace_inf_value,
310 curr_pos +=
val.size();
316 std::cout <<
" -- var=" << varname <<
", center=" <<
info.center <<
", scale=" <<
info.norm_factor
317 <<
", replace=" <<
info.replace_inf_value <<
", pad=" <<
info.pad << std::endl;
318 for (
const auto &
v :
val) {
324 group_values.resize(curr_pos);
const Features & features() const
T getParameter(std::string const &) const
EventNumber_t event() const
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
ParameterDescriptionBase * addOptional(U const &iLabel, T const &value)
const float catch_infs(const float in, const float replace_value=0.)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< std::vector< float > > FloatArrays
LuminosityBlockNumber_t luminosityBlock() const
static std::string const input
#define DEFINE_FWK_MODULE(type)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
ParameterSet const & getParameterSet(std::string const &) const
RefToBaseProd< T > makeRefToBaseProdFrom(RefToBase< T > const &iRef, Event const &iEvent)
ParameterDescriptionBase * addOptionalUntracked(U const &iLabel, T const &value)