38 inline static const std::unordered_map<int, int32_t>
charge_embedding_{{-1, 0}, {0, 1}, {1, 2}};
40 {-211, 0}, {-13, 1}, {-11, 2}, {0, 3}, {1, 4}, {2, 5}, {11, 6}, {13, 7}, {22, 8}, {130, 9}, {211, 10}};
44 float scale_and_rm_outlier(
float val,
float scale) {
46 if (ret_val > 1e6 || ret_val < -1e6)
53 : pf_token_(consumes<
std::vector<
pat::PackedCandidate> >(
cfg.getParameter<
edm::
InputTag>(
"pf_src"))),
54 norm_(
cfg.getParameter<double>(
"norm_factor")),
55 ignore_leptons_(
cfg.getParameter<
bool>(
"ignore_leptons")),
56 max_n_pf_(
cfg.getParameter<unsigned
int>(
"max_n_pf")),
58 produces<pat::METCollection>();
60 const tensorflow::TensorShape shape({1,
max_n_pf_, 8});
61 const tensorflow::TensorShape cat_shape({1,
max_n_pf_, 1});
63 input_ = tensorflow::Tensor(tensorflow::DT_FLOAT, shape);
64 input_cat0_ = tensorflow::Tensor(tensorflow::DT_FLOAT, cat_shape);
65 input_cat1_ = tensorflow::Tensor(tensorflow::DT_FLOAT, cat_shape);
66 input_cat2_ = tensorflow::Tensor(tensorflow::DT_FLOAT, cat_shape);
76 input_.flat<
float>().setZero();
82 float px_leptons = 0.;
83 float py_leptons = 0.;
85 for (
const auto&
pf : pfs) {
89 px_leptons +=
pf.px();
90 py_leptons +=
pf.py();
97 float* ptr = &
input_.tensor<
float, 3>()(0, i_pf, 0);
101 *(++ptr) =
pf.mass();
102 *(++ptr) = scale_and_rm_outlier(
pf.pt(),
scale);
103 *(++ptr) =
pf.puppiWeight();
104 *(++ptr) = scale_and_rm_outlier(
pf.px(),
scale);
105 *(++ptr) = scale_and_rm_outlier(
pf.py(),
scale);
116 std::vector<tensorflow::Tensor>
outputs;
117 const std::vector<std::string> output_names = {
"output/BiasAdd"};
129 auto pf_mets = std::make_unique<pat::METCollection>();
137 std::unique_ptr<DeepMETCache>
cache = std::make_unique<DeepMETCache>();
141 if (!graphPath.empty()) {
154 desc.
add<
bool>(
"ignore_leptons",
false);
155 desc.
add<
double>(
"norm_factor", 50.);
156 desc.
add<
unsigned int>(
"max_n_pf", 4500);
157 desc.
add<
std::string>(
"graph_path",
"RecoMET/METPUSubtraction/data/deepmet/deepmet_v1_2018.pb");
158 descriptions.
add(
"deepMETProducer", desc);