39 ATH_MSG_DEBUG(
"JetEfficiencyMonitorAlgorithm::fillHistograms");
40 std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>>
variables;
45 ATH_MSG_WARNING(
"Failed to retrieve Offline Small Radius Jet Container");
46 return StatusCode::SUCCESS;
52 return StatusCode::SUCCESS;
56 if(!gFexSRJetContainer.isValid()){
58 return StatusCode::SUCCESS;
62 if(!gFexLRJetContainer.isValid()){
64 return StatusCode::SUCCESS;
77 std::vector<std::string> gFex_types {
"leadingGfex_SmallRadiusTOB",
"leadingGfex_LargeRadiusTOB"};
81 std::vector<std::string> reference_trigger_options {
"Bootstrap",
"BootstrapHLT",
"RandomHLT",
"No",
"Muon"};
83 bool bootstrap_ref_decision =
false;
84 bool bootstrapHLT_ref_decision =
false;
85 bool random_ref_decision =
false;
86 bool muon_ref_decision =
false;
91 if (use_passed_before_prescale) {
93 bootstrap_ref_decision = bs_bits & TrigDefs::L1_isPassedBeforePrescale;
94 for (
auto &
u : muon_triggers) {
96 bool pass = bits & TrigDefs::L1_isPassedBeforePrescale;
97 if (pass) {muon_ref_decision =
true;}
103 for (
auto &
u : muon_triggers) {
110 for (
auto &
u : HLTrandom_triggers) {
115 std::map<std::string, bool> reference_trigger_decision {
116 {
"Bootstrap", bootstrap_ref_decision },
117 {
"BootstrapHLT", bootstrapHLT_ref_decision },
118 {
"RandomHLT", random_ref_decision},
120 {
"Muon", muon_ref_decision}
131 constexpr
int minPt = 10*
GeV;
132 constexpr
float maxEta = 2.5;
134 std::map<std::string, SG::ReadHandle<xAOD::gFexJetRoIContainer>> gFEX_Container {
139 {
"leadingGfex_SmallRadiusTOB",gFexSRJetContainer}, {
"leadingGfex_LargeRadiusTOB", gFexLRJetContainer}
143 float offline_SR_pt = 0, offline_LR_pt = 0, gfex_SR_pt = 0, gfex_LR_pt=0;
144 std::map<std::string, float> jet_pt {
145 {
"leadingOffline_SmallRadiusJet", offline_SR_pt}, {
"leadingOffline_LargeRadiusJet", offline_LR_pt},
146 {
"leadingGfex_SmallRadiusTOB", gfex_SR_pt}, {
"leadingGfex_LargeRadiusTOB", gfex_LR_pt}
149 float offline_SR_eta = 0, offline_LR_eta = 0, gfex_SR_eta = 0, gfex_LR_eta=0;
150 std::map<std::string, float> jet_eta {
151 {
"leadingOffline_SmallRadiusJet", offline_SR_eta}, {
"leadingOffline_LargeRadiusJet", offline_LR_eta},
152 {
"leadingGfex_SmallRadiusTOB", gfex_SR_eta}, {
"leadingGfex_LargeRadiusTOB", gfex_LR_eta}
155 float offline_SR_phi = 0, offline_LR_phi = 0, gfex_SR_phi = 0, gfex_LR_phi=0;
156 std::map<std::string, float>
jet_phi {
157 {
"leadingOffline_SmallRadiusJet", offline_SR_phi}, {
"leadingOffline_LargeRadiusJet", offline_LR_phi},
158 {
"leadingGfex_SmallRadiusTOB", gfex_SR_phi}, {
"leadingGfex_LargeRadiusTOB", gfex_LR_phi}
166 if (!
jets->empty()) {
168 jet_pt[
"leadingOffline_SmallRadiusJet"] = (*leading_offline_SR_jet)->pt();
169 jet_eta[
"leadingOffline_SmallRadiusJet"] = (*leading_offline_SR_jet)->eta();
170 jet_phi[
"leadingOffline_SmallRadiusJet"] = (*leading_offline_SR_jet)->phi();
173 if (!LRjets->
empty()) {
175 jet_pt[
"leadingOffline_LargeRadiusJet"] = (*leading_offline_LR_jet)->pt();
176 jet_eta[
"leadingOffline_LargeRadiusJet"] = (*leading_offline_LR_jet)->eta();
177 jet_phi[
"leadingOffline_LargeRadiusJet"] = (*leading_offline_LR_jet)->phi();
183 float maximum_value_for_delta_r = 0.4;
184 for (
auto &
g : gFex_types){
185 if (!gFEX_Container[
g]->
empty()) {
187 float min_delta_r = 10000;
189 for (
const auto* gfex_jet : *gFEX_Container[
g]) {
190 std::string comparison_offline_jet =
"";
191 if (
g ==
"gfex_SmallRadiusTOB") {comparison_offline_jet =
"offline_SmallRadiusJet"; }
192 else if (
g ==
"gfex_LargeRadiusTOB") {comparison_offline_jet =
"offline_LargeRadiusJet"; }
193 float gfex_eta = gfex_jet->
eta();
194 float gfex_phi = gfex_jet->phi();
195 float delta_eta = std::abs(gfex_eta-jet_eta[comparison_offline_jet]),
198 if (maximum_value_for_delta_r > delta_r && delta_r < min_delta_r && std::abs(gfex_eta) <
maxEta){
199 min_delta_r = delta_r;
200 matching_gfex_jet = gfex_jet;
205 if (matching_gfex_jet !=
nullptr) {
206 jet_eta[
g] = matching_gfex_jet->
eta(),
jet_phi[
g] = matching_gfex_jet->
phi(), jet_pt[
g] = matching_gfex_jet->
et();
222 bool offlineSRJet_maxEta_minPt_requirement =
false;
223 if(std::abs(jet_eta[
"leadingOffline_SmallRadiusJet"])<=
maxEta && (jet_pt[
"leadingOffline_SmallRadiusJet"] >= minPt)) { offlineSRJet_maxEta_minPt_requirement =
true; }
226 bool offlineLRJet_maxEta_minPt_requirement =
false;
227 if(std::abs(jet_eta[
"leadingOffline_LargeRadiusJet"])<=
maxEta && (jet_pt[
"leadingOffline_LargeRadiusJet"] >= minPt)) { offlineLRJet_maxEta_minPt_requirement =
true; }
239 std::map<std::string, int> l1_trigger_flatline_vals {
243 {
"L1_J15", 35*
GeV}, {
"L1_J20", 40*
GeV}, {
"L1_J30", 60*
GeV},
244 {
"L1_J40", 80*
GeV}, {
"L1_J50", 90*
GeV}, {
"L1_J75", 120*
GeV},
249 std::map<std::string, float> gFexTriggers_val {
251 {
"L1_gJ20", 20*
GeV}, {
"L1_gJ30", 30*
GeV}, {
"L1_gJ40", 40*
GeV},
252 {
"L1_gJ50", 50*
GeV}, {
"L1_gJ60", 60*
GeV}, {
"L1_gJ100", 100*
GeV},
253 {
"L1_gJ160", 160*
GeV}, {
"L1_gLJ80", 80*
GeV}, {
"L1_gLJ100", 100*
GeV},
254 {
"L1_gLJ140", 140*
GeV}, {
"L1_gLJ160", 160*
GeV}
257 std::map<std::string, std::vector<float>> multijet_triggers_val {
259 {
"L1_4J20", {20*
GeV, 20*
GeV, 20*
GeV, 20*
GeV}}, {
"L1_J85_3J30", {85*
GeV, 30*
GeV, 30*
GeV, 30*
GeV}},
260 {
"L1_2J15_XE55", {15*
GeV, 15*
GeV}}, {
"L1_2J50_XE40", {50*
GeV, 50*
GeV}}
265 std::string emulatedString =
" ";
266 if (use_emulated_gfex_trig) {emulatedString =
" Emulated Decision "; }
272 raw_pt = jet_pt[
"leadingOffline_SmallRadiusJet"];
279 for (
auto &
r : reference_trigger_options){
280 if (offlineSRJet_maxEta_minPt_requirement && reference_trigger_decision[
r]) {
281 for(
unsigned int t=0;
t< SmallRadiusJetTriggers_phase1_and_legacy.size(); ++
t) {
282 const std::string& trigger_name = SmallRadiusJetTriggers_phase1_and_legacy[
t];
286 bool trig_of_interest_decision =
false;
289 if ((gFexTriggers_val.find(trigger_name) != gFexTriggers_val.end()) && use_emulated_gfex_trig) {
294 if (jet_pt[
"leadingGfex_SmallRadiusTOB"] > gFexTriggers_val[trigger_name]) {
295 trig_of_interest_decision =
true;
297 }
else if (use_passed_before_prescale) {
301 trig_of_interest_decision = bits & TrigDefs::L1_isPassedBeforePrescale;
310 if (trig_of_interest_decision) {
319 if (l1_trigger_flatline_vals.find(trigger_name) != l1_trigger_flatline_vals.end()) {
320 if(jet_pt[
"leadingOffline_SmallRadiusJet"]>l1_trigger_flatline_vals[trigger_name]) {
326 if (trig_of_interest_decision) {
327 auto passed_eta_val =
Monitored::Scalar<float>(
"eta:" +
r +
"_" + trigger_name, jet_eta[
"leadingOffline_SmallRadiusJet"]);
338 for(
unsigned int t=0;
t< multiJet_LegacySmallRadiusTriggers.size(); ++
t) {
339 const std::string& trigger_name = multiJet_LegacySmallRadiusTriggers[
t];
342 bool trig_of_interest_decision =
false;
343 if (use_passed_before_prescale) {
345 trig_of_interest_decision = bits & TrigDefs::L1_isPassedBeforePrescale;
353 int multijet_num = multijet_triggers_val[trigger_name].size();
354 int jets_num =
jets->size();
355 if (jets_num >= multijet_num) {
358 for (
const auto* j : *
jets) {
360 if(jet_count == multijet_num) {
361 const float jet_pt_loop = j->pt();
365 if (trig_of_interest_decision) {
382 for (
auto &
r : reference_trigger_options){
383 if ( offlineLRJet_maxEta_minPt_requirement && reference_trigger_decision[
r]) {
384 for(
unsigned int t=0;
t< LargeRadiusJetTriggers_phase1_and_legacy.size(); ++
t){
385 const std::string& trigger_name = LargeRadiusJetTriggers_phase1_and_legacy[
t];
387 bool trig_of_interest_decision =
false;
389 if ((gFexTriggers_val.find(trigger_name) != gFexTriggers_val.end()) && use_emulated_gfex_trig) {
390 if (jet_pt[
"leadingGfex_LargeRadiusTOB"] > gFexTriggers_val[trigger_name]) {
391 trig_of_interest_decision =
true;
393 }
else if (use_passed_before_prescale) {
395 trig_of_interest_decision = bits & TrigDefs::L1_isPassedBeforePrescale;
402 if (trig_of_interest_decision) {
412 return StatusCode::SUCCESS;