33 ATH_CHECK(evtStore()->retrieve(evt,
"EventInfo"));
37 if (!isMC) {
return StatusCode::SUCCESS; }
39 auto mu_actual =
static_cast<std::size_t
>(std::ceil(evt->actualInteractionsPerCrossing()));
43 std::vector<std::size_t> categories(
m_binning.size() - 1, 0);
46 double pt_j0_AK4HS {5.0};
47 std::size_t idx_HS {0};
50 if (hs_jets->
size()) {
51 auto iter_jet = std::max_element(hs_jets->
begin(), hs_jets->
end(),
53 pt_j0_AK4HS = (*iter_jet)->pt() /
GeV;
60 std::vector<double> pt_j0_AK4PU;
63 std::unordered_map<int, double> leading_pts;
64 if (pu_jets->
size()) {
65 for (
const xAOD::Jet* pu_jet : *pu_jets) {
67 const uint32_t pu_enum =
static_cast<uint32_t
>(pu_enum_acc.
withDefault(*pu_jet, 0));
68 double pu_jet_pt = pu_jet->pt() /
GeV;
69 if (!leading_pts.contains(pu_enum) || leading_pts.at(pu_enum) < pu_jet_pt) {
70 leading_pts[pu_enum] = pu_jet_pt;
74 auto n_pileup_records = leading_pts.size();
76 for (
const auto&
pair : leading_pts) {
77 double pt =
pair.second;
78 pt_j0_AK4PU.push_back(pt);
84 categories[0] += mu_actual - n_pileup_records - 1;
87 std::stringstream key_ss;
88 std::string delim {
"_"};
89 for (std::size_t i = 0; i < categories.size(); ++i) {
90 if (i != 0) key_ss << delim;
91 key_ss << categories.at(i);
93 key_ss <<
"," << idx_HS;
95 const std::string& key = key_ss.str();
100 return StatusCode::SUCCESS;
105 auto wt =
m_weightsMap.at(key).at(weightName).get<
double>();
107 }
catch (
const std::exception&) {
108 ATH_MSG_ERROR(
"Failed to get weight [" << weightName <<
"] in [" << key <<
"]!");
109 return StatusCode::FAILURE;
113 return StatusCode::SUCCESS;
const_reference_type withDefault(const ELT &e, const T &deflt) const
Fetch the variable for one element, as a const reference, with a default.