17 static const std::map<std::string, int> l1_trigger_flatline_vals = {
18 {
"L1_gLJ80p0ETA25", 175*
GeV}, {
"L1_gLJ100p0ETA25", 200*
GeV},
19 {
"L1_gLJ140p0ETA25", 270*
GeV}, {
"L1_gLJ160p0ETA25", 270*
GeV},
20 {
"L1_SC175-SCjJ10", 270*
GeV}, {
"L1_gJ20p0ETA25", 40*
GeV},
21 {
"L1_gJ50p0ETA25", 80*
GeV}, {
"L1_gJ100p0ETA25", 200*
GeV},
22 {
"L1_gJ400p0ETA25", 800*
GeV}, {
"L1_jJ30", 50*
GeV},
23 {
"L1_jJ40", 60*
GeV}, {
"L1_jJ50", 70*
GeV},
24 {
"L1_jJ60", 80*
GeV}, {
"L1_jJ80", 100*
GeV},
25 {
"L1_jJ90", 110*
GeV}, {
"L1_jJ125", 135*
GeV},
26 {
"L1_jJ140", 160*
GeV}, {
"L1_jJ160", 180*
GeV},
34 static const std::map<std::string, int> gFEX_trigger_thresholds = {};
40 if (
key.find(
"gLJ") != std::string::npos) {
75 ATH_MSG_DEBUG(
"JetEfficiencyMonitorAlgorithm::fillHistograms");
76 std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>>
variables;
91 std::map<std::string, SG::ReadHandle<xAOD::gFexJetRoIContainer>> gFEX_Container;
96 if (!gFexSRJetContainer.isValid()) {
99 gFEX_Container.emplace(
"leadingGfex_SmallRadiusTOB", gFexSRJetContainer);
106 if (!gFexLRJetContainer.isValid()) {
109 gFEX_Container.emplace(
"leadingGfex_LargeRadiusTOB", gFexLRJetContainer);
121 std::vector<std::string> gFex_types {
"leadingGfex_SmallRadiusTOB",
"leadingGfex_LargeRadiusTOB"};
125 std::vector<std::string> reference_trigger_options {
"Bootstrap",
"RandomHLT",
"No",
"Muon"};
127 bool bootstrap_ref_decision =
false;
128 bool random_ref_decision =
false;
129 bool muon_ref_decision =
false;
134 for (
auto &
u : muon_triggers) {
139 for (
auto &
u : HLTrandom_triggers) {
144 std::map<std::string, bool> reference_trigger_decision {
145 {
"Bootstrap", bootstrap_ref_decision },
146 {
"RandomHLT", random_ref_decision},
148 {
"Muon", muon_ref_decision}
154 constexpr
int minPt = 10*
GeV;
155 constexpr
float maxEta = 2.5;
158 float offline_SR_pt = 0, offline_LR_pt = 0, gfex_SR_pt = 0, gfex_LR_pt=0;
159 std::map<std::string, float> jet_pt {
160 {
"leadingOffline_SmallRadiusJet", offline_SR_pt},
161 {
"leadingOffline_LargeRadiusJet", offline_LR_pt},
162 {
"leadingGfex_SmallRadiusTOB", gfex_SR_pt},
163 {
"leadingGfex_LargeRadiusTOB", gfex_LR_pt}
166 float offline_SR_eta = 0, offline_LR_eta = 0, gfex_SR_eta = 0, gfex_LR_eta=0;
167 std::map<std::string, float> jet_eta {
168 {
"leadingOffline_SmallRadiusJet", offline_SR_eta},
169 {
"leadingOffline_LargeRadiusJet", offline_LR_eta},
170 {
"leadingGfex_SmallRadiusTOB", gfex_SR_eta},
171 {
"leadingGfex_LargeRadiusTOB", gfex_LR_eta}
174 float offline_SR_phi = 0, offline_LR_phi = 0, gfex_SR_phi = 0, gfex_LR_phi=0;
175 std::map<std::string, float>
jet_phi {
176 {
"leadingOffline_SmallRadiusJet", offline_SR_phi},
177 {
"leadingOffline_LargeRadiusJet", offline_LR_phi},
178 {
"leadingGfex_SmallRadiusTOB", gfex_SR_phi},
179 {
"leadingGfex_LargeRadiusTOB", gfex_LR_phi}
188 if (!
jets->empty()) {
190 jet_pt[
"leadingOffline_SmallRadiusJet"] = (*leading_offline_SR_jet)->pt();
191 jet_eta[
"leadingOffline_SmallRadiusJet"] = (*leading_offline_SR_jet)->eta();
192 jet_phi[
"leadingOffline_SmallRadiusJet"] = (*leading_offline_SR_jet)->phi();
197 if (!LRjets->
empty()) {
199 jet_pt[
"leadingOffline_LargeRadiusJet"] = (*leading_offline_LR_jet)->pt();
200 jet_eta[
"leadingOffline_LargeRadiusJet"] = (*leading_offline_LR_jet)->eta();
201 jet_phi[
"leadingOffline_LargeRadiusJet"] = (*leading_offline_LR_jet)->phi();
207 float max_gfex_pt = -1.0;
210 for (
auto &
g : gFex_types) {
211 if(
auto itr = gFEX_Container.find(
g); itr != gFEX_Container.end() ) {
212 for (
const auto* gfex_jet : *(itr->second)) {
213 float gfex_pt = gfex_jet->
et();
214 if (gfex_pt > max_gfex_pt && std::abs(gfex_jet->eta()) <
maxEta) {
215 max_gfex_pt = gfex_pt;
216 most_energetic_gfex_jet = gfex_jet;
219 if(most_energetic_gfex_jet) {
220 jet_eta[
g] = most_energetic_gfex_jet->
eta();
222 jet_pt[
g] = most_energetic_gfex_jet->
et();
234 bool offlineSRJet_maxEta_minPt_requirement =
false;
235 if(std::abs(jet_eta[
"leadingOffline_SmallRadiusJet"])<=
maxEta && (jet_pt[
"leadingOffline_SmallRadiusJet"] >= minPt)) {
236 offlineSRJet_maxEta_minPt_requirement =
true;
240 bool offlineLRJet_maxEta_minPt_requirement =
false;
241 if(std::abs(jet_eta[
"leadingOffline_LargeRadiusJet"])<=
maxEta && (jet_pt[
"leadingOffline_LargeRadiusJet"] >= minPt)) {
242 offlineLRJet_maxEta_minPt_requirement =
true;
248 if (offlineSRJet_maxEta_minPt_requirement ) {
258 for (
auto &
r : reference_trigger_options){
259 if (offlineSRJet_maxEta_minPt_requirement && reference_trigger_decision[
r]) {
264 bool trig_of_interest_decision =
false;
265 if (use_passed_before_prescale) {
269 trig_of_interest_decision = bits & TrigDefs::L1_isPassedBeforePrescale;
280 auto l1_trigger_flat_val = l1_trigger_flatline_vals.find(trigger_name);
281 if (l1_trigger_flat_val != l1_trigger_flatline_vals.end()) {
282 if(jet_pt[
"leadingOffline_SmallRadiusJet"]>l1_trigger_flat_val->second) {
295 bool trig_of_interest_decision =
false;
296 int gFEX_threshold = -1;
298 auto gFEX_threshold_it = gFEX_trigger_thresholds.find(trigger_name);
299 if (gFEX_threshold_it != gFEX_trigger_thresholds.end()) {
300 gFEX_threshold = gFEX_threshold_it->second;
308 if (gFEX_threshold != -1) {
309 if (jet_pt[
"leadingGfex_SmallRadiusTOB"] >= gFEX_threshold) {
310 trig_of_interest_decision =
true;
325 for (
auto &
r : reference_trigger_options){
326 if ( offlineLRJet_maxEta_minPt_requirement && reference_trigger_decision[
r]) {
330 bool trig_of_interest_decision =
false;
331 if (use_passed_before_prescale) {
333 trig_of_interest_decision = bits & TrigDefs::L1_isPassedBeforePrescale;
342 auto l1_trigger_flat_val = l1_trigger_flatline_vals.find(trigger_name);
343 if (l1_trigger_flat_val != l1_trigger_flatline_vals.end()) {
344 if(jet_pt[
"leadingOffline_LargelRadiusJet"]>l1_trigger_flat_val->second) {
353 bool trig_of_interest_decision =
false;
354 int gFEX_threshold = -1;
356 auto gFEX_threshold_it = gFEX_trigger_thresholds.find(trigger_name);
357 if (gFEX_threshold_it != gFEX_trigger_thresholds.end()) {
358 gFEX_threshold = gFEX_threshold_it->second;
364 if (gFEX_threshold != -1) {
365 if (jet_pt[
"leadingGfex_LargeRadiusTOB"] >= gFEX_threshold) {
366 trig_of_interest_decision =
true;
378 return StatusCode::SUCCESS;