16 static const std::map<std::string, int> l1_trigger_flatline_vals = {
17 {
"L1_gLJ80p0ETA25", 175*
GeV}, {
"L1_gLJ100p0ETA25", 200*
GeV},
18 {
"L1_gLJ140p0ETA25", 270*
GeV}, {
"L1_gLJ160p0ETA25", 270*
GeV},
19 {
"L1_SC175-SCjJ10", 270*
GeV}, {
"L1_gJ20p0ETA25", 40*
GeV},
20 {
"L1_gJ50p0ETA25", 80*
GeV}, {
"L1_gJ100p0ETA25", 200*
GeV},
21 {
"L1_gJ400p0ETA25", 800*
GeV}, {
"L1_jJ30", 50*
GeV},
22 {
"L1_jJ40", 60*
GeV}, {
"L1_jJ50", 70*
GeV},
23 {
"L1_jJ60", 80*
GeV}, {
"L1_jJ80", 100*
GeV},
24 {
"L1_jJ90", 110*
GeV}, {
"L1_jJ125", 135*
GeV},
25 {
"L1_jJ140", 160*
GeV}, {
"L1_jJ160", 180*
GeV},
33 static const std::map<std::string, int> gFEX_trigger_thresholds = {};
39 if (
key.find(
"gLJ") != std::string::npos) {
74 ATH_MSG_DEBUG(
"JetEfficiencyMonitorAlgorithm::fillHistograms");
75 std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>>
variables;
90 std::map<std::string, SG::ReadHandle<xAOD::gFexJetRoIContainer>> gFEX_Container;
95 if (!gFexSRJetContainer.isValid()) {
98 gFEX_Container.emplace(
"leadingGfex_SmallRadiusTOB", gFexSRJetContainer);
105 if (!gFexLRJetContainer.isValid()) {
108 gFEX_Container.emplace(
"leadingGfex_LargeRadiusTOB", gFexLRJetContainer);
120 std::vector<std::string> gFex_types {
"leadingGfex_SmallRadiusTOB",
"leadingGfex_LargeRadiusTOB"};
124 std::vector<std::string> reference_trigger_options {
"Bootstrap",
"RandomHLT",
"No",
"Muon"};
126 bool bootstrap_ref_decision =
false;
127 bool random_ref_decision =
false;
128 bool muon_ref_decision =
false;
133 for (
auto &
u : muon_triggers) {
138 for (
auto &
u : HLTrandom_triggers) {
143 std::map<std::string, bool> reference_trigger_decision {
144 {
"Bootstrap", bootstrap_ref_decision },
145 {
"RandomHLT", random_ref_decision},
147 {
"Muon", muon_ref_decision}
153 constexpr
int minPt = 10*
GeV;
154 constexpr
float maxEta = 2.5;
157 float offline_SR_pt = 0, offline_LR_pt = 0, gfex_SR_pt = 0, gfex_LR_pt=0;
158 std::map<std::string, float> jet_pt {
159 {
"leadingOffline_SmallRadiusJet", offline_SR_pt},
160 {
"leadingOffline_LargeRadiusJet", offline_LR_pt},
161 {
"leadingGfex_SmallRadiusTOB", gfex_SR_pt},
162 {
"leadingGfex_LargeRadiusTOB", gfex_LR_pt}
165 float offline_SR_eta = 0, offline_LR_eta = 0, gfex_SR_eta = 0, gfex_LR_eta=0;
166 std::map<std::string, float> jet_eta {
167 {
"leadingOffline_SmallRadiusJet", offline_SR_eta},
168 {
"leadingOffline_LargeRadiusJet", offline_LR_eta},
169 {
"leadingGfex_SmallRadiusTOB", gfex_SR_eta},
170 {
"leadingGfex_LargeRadiusTOB", gfex_LR_eta}
173 float offline_SR_phi = 0, offline_LR_phi = 0, gfex_SR_phi = 0, gfex_LR_phi=0;
174 std::map<std::string, float>
jet_phi {
175 {
"leadingOffline_SmallRadiusJet", offline_SR_phi},
176 {
"leadingOffline_LargeRadiusJet", offline_LR_phi},
177 {
"leadingGfex_SmallRadiusTOB", gfex_SR_phi},
178 {
"leadingGfex_LargeRadiusTOB", gfex_LR_phi}
187 if (!
jets->empty()) {
189 jet_pt[
"leadingOffline_SmallRadiusJet"] = (*leading_offline_SR_jet)->pt();
190 jet_eta[
"leadingOffline_SmallRadiusJet"] = (*leading_offline_SR_jet)->eta();
191 jet_phi[
"leadingOffline_SmallRadiusJet"] = (*leading_offline_SR_jet)->phi();
196 if (!LRjets->
empty()) {
198 jet_pt[
"leadingOffline_LargeRadiusJet"] = (*leading_offline_LR_jet)->pt();
199 jet_eta[
"leadingOffline_LargeRadiusJet"] = (*leading_offline_LR_jet)->eta();
200 jet_phi[
"leadingOffline_LargeRadiusJet"] = (*leading_offline_LR_jet)->phi();
206 float max_gfex_pt = -1.0;
209 for (
auto &
g : gFex_types) {
210 if(
auto itr = gFEX_Container.find(
g); itr != gFEX_Container.end() ) {
211 for (
const auto* gfex_jet : *(itr->second)) {
212 float gfex_pt = gfex_jet->
et();
213 if (gfex_pt > max_gfex_pt && std::abs(gfex_jet->eta()) <
maxEta) {
214 max_gfex_pt = gfex_pt;
215 most_energetic_gfex_jet = gfex_jet;
218 if(most_energetic_gfex_jet) {
219 jet_eta[
g] = most_energetic_gfex_jet->
eta();
221 jet_pt[
g] = most_energetic_gfex_jet->
et();
233 bool offlineSRJet_maxEta_minPt_requirement =
false;
234 if(std::abs(jet_eta[
"leadingOffline_SmallRadiusJet"])<=
maxEta && (jet_pt[
"leadingOffline_SmallRadiusJet"] >= minPt)) {
235 offlineSRJet_maxEta_minPt_requirement =
true;
239 bool offlineLRJet_maxEta_minPt_requirement =
false;
240 if(std::abs(jet_eta[
"leadingOffline_LargeRadiusJet"])<=
maxEta && (jet_pt[
"leadingOffline_LargeRadiusJet"] >= minPt)) {
241 offlineLRJet_maxEta_minPt_requirement =
true;
247 if (offlineSRJet_maxEta_minPt_requirement ) {
257 for (
auto &
r : reference_trigger_options){
258 if (offlineSRJet_maxEta_minPt_requirement && reference_trigger_decision[
r]) {
263 bool trig_of_interest_decision =
false;
264 if (use_passed_before_prescale) {
268 trig_of_interest_decision = bits & TrigDefs::L1_isPassedBeforePrescale;
279 auto l1_trigger_flat_val = l1_trigger_flatline_vals.find(trigger_name);
280 if (l1_trigger_flat_val != l1_trigger_flatline_vals.end()) {
281 if(jet_pt[
"leadingOffline_SmallRadiusJet"]>l1_trigger_flat_val->second) {
294 bool trig_of_interest_decision =
false;
295 int gFEX_threshold = -1;
297 auto gFEX_threshold_it = gFEX_trigger_thresholds.find(trigger_name);
298 if (gFEX_threshold_it != gFEX_trigger_thresholds.end()) {
299 gFEX_threshold = gFEX_threshold_it->second;
307 if (gFEX_threshold != -1) {
308 if (jet_pt[
"leadingGfex_SmallRadiusTOB"] >= gFEX_threshold) {
309 trig_of_interest_decision =
true;
324 for (
auto &
r : reference_trigger_options){
325 if ( offlineLRJet_maxEta_minPt_requirement && reference_trigger_decision[
r]) {
329 bool trig_of_interest_decision =
false;
330 if (use_passed_before_prescale) {
332 trig_of_interest_decision = bits & TrigDefs::L1_isPassedBeforePrescale;
341 auto l1_trigger_flat_val = l1_trigger_flatline_vals.find(trigger_name);
342 if (l1_trigger_flat_val != l1_trigger_flatline_vals.end()) {
343 if(jet_pt[
"leadingOffline_LargelRadiusJet"]>l1_trigger_flat_val->second) {
352 bool trig_of_interest_decision =
false;
353 int gFEX_threshold = -1;
355 auto gFEX_threshold_it = gFEX_trigger_thresholds.find(trigger_name);
356 if (gFEX_threshold_it != gFEX_trigger_thresholds.end()) {
357 gFEX_threshold = gFEX_threshold_it->second;
363 if (gFEX_threshold != -1) {
364 if (jet_pt[
"leadingGfex_LargeRadiusTOB"] >= gFEX_threshold) {
365 trig_of_interest_decision =
true;
377 return StatusCode::SUCCESS;