ATLAS Offline Software
JetEfficiencyMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
10 #include "FourMomUtils/P4Helpers.h"
11 
12 #include <cstdlib>
13 
14 using Athena::Units::GeV;
15 
16 JetEfficiencyMonitorAlgorithm::JetEfficiencyMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
17  : AthMonitorAlgorithm(name,pSvcLocator)
18 {
19 }
20 
22  ATH_MSG_DEBUG("JetEfficiencyMonitorAlgorith::initialize");
23  ATH_MSG_DEBUG("Package Name "<< m_packageName);
24 
25  // we initialise all the containers that we need
26  ATH_CHECK(m_jetKey.initialize()); //initialize offline SR jets
27  ATH_CHECK(m_LRjetKey.initialize()); //initialize offline LR jets
28  ATH_CHECK(m_gFexLRJetContainerKey.initialize()); //initizlize gfex lr jets
29  ATH_CHECK(m_gFexSRJetContainerKey.initialize()); //initizlize gfex sr jets
30 
31  // TOBs may come from trigger bytestream - renounce from scheduler
34 
36 }
37 
39  ATH_MSG_DEBUG("JetEfficiencyMonitorAlgorithm::fillHistograms");
40  std::vector<std::reference_wrapper<Monitored::IMonitoredVariable>> variables;
41 
42  // Retrieve Offline Jets from SG
44  if(!jets.isValid()){
45  ATH_MSG_WARNING("Failed to retrieve Offline Small Radius Jet Container");
46  return StatusCode::SUCCESS;
47  }
48  // Retrieve Offline LR Jets from SG
50  if(!LRjets.isValid()){
51  ATH_MSG_WARNING("Failed to retrieve Offline Large Radius Jet Container "<<m_LRjetKey);
52  return StatusCode::SUCCESS;
53  }
54  // Retrieve gfex SR Jets from SG
56  if(!gFexSRJetContainer.isValid()){
57  ATH_MSG_WARNING("No gFex Small Radius Jet container found in storegate "<< m_gFexSRJetContainerKey);
58  return StatusCode::SUCCESS;
59  }
60  // Retrieve gfex LR Jets from SG
62  if(!gFexLRJetContainer.isValid()){
63  ATH_MSG_WARNING("No gFex Large Radius Jet container found in storegate "<< m_gFexLRJetContainerKey);
64  return StatusCode::SUCCESS;
65  }
66 
67 
70  //DEFINITIONS and extracting variables from the python config file!
71  bool use_emulated_gfex_trig = m_emulated;
72  bool use_passed_before_prescale = m_passedb4Prescale;
73  const std::string& HLTbootstrap_trigger = m_HLTbootstrap_reference_trigger.value();
74  const std::string& bootstrap_trigger = m_bootstrap_reference_trigger.value();
75  const std::vector<std::string>& muon_triggers = m_muon_reference_triggers.value();
76  const std::vector<std::string>& HLTrandom_triggers = m_HLTrandom_reference_triggers.value();
77  std::vector<std::string> gFex_types {"leadingGfex_SmallRadiusTOB", "leadingGfex_LargeRadiusTOB"};
78 
79 
80  //Define the various reference vector things!
81  std::vector<std::string> reference_trigger_options {"Bootstrap", "BootstrapHLT", "RandomHLT", "No", "Muon"};
82 
83  bool bootstrap_ref_decision = false; //bootstrap trigger decision
84  bool bootstrapHLT_ref_decision = false; //HLT bootstrap trigger chain decision
85  bool random_ref_decision = false; //random reference triggers decision
86  bool muon_ref_decision = false; //muon reference triggers decision
87 
88 
89 
90  //if using pass before prescale to increase statstics, we determine reference trigger decision differently
91  if (use_passed_before_prescale) {
92  const unsigned int bs_bits = AthMonitorAlgorithm::getTrigDecisionTool()->isPassedBits(bootstrap_trigger);
93  bootstrap_ref_decision = bs_bits & TrigDefs::L1_isPassedBeforePrescale;
94  for (auto & u : muon_triggers) {
95  const unsigned int bits = AthMonitorAlgorithm::getTrigDecisionTool()->isPassedBits(u);
96  bool pass = bits & TrigDefs::L1_isPassedBeforePrescale;
97  if (pass) {muon_ref_decision = true;}
98  } // iterating through the list of unbaised triggers
99  } //close if used pass before prescale
100  // if not using pass before prescale, then is a more direct process to see if trigger passed
101  else {
102  bootstrap_ref_decision = AthMonitorAlgorithm::getTrigDecisionTool()->isPassed(bootstrap_trigger);
103  for (auto & u : muon_triggers) {
104  if (AthMonitorAlgorithm::getTrigDecisionTool()->isPassed(u)) {muon_ref_decision = true;}
105  } //close iterating through the muon triggers
106  } //close else
107 
108  //then for the HLT decision chains, we always want to use the traditional way of getting our trigger deicsion
109  bootstrapHLT_ref_decision = AthMonitorAlgorithm::getTrigDecisionTool()->isPassed(HLTbootstrap_trigger);
110  for (auto & u : HLTrandom_triggers) {
111  if (AthMonitorAlgorithm::getTrigDecisionTool()->isPassed(u)) {random_ref_decision = true;}
112  } //close iterating through the HLT random chains
113 
114 
115  std::map<std::string, bool> reference_trigger_decision {
116  {"Bootstrap", bootstrap_ref_decision },
117  {"BootstrapHLT", bootstrapHLT_ref_decision },
118  {"RandomHLT", random_ref_decision},
119  {"No", true},
120  {"Muon", muon_ref_decision}
121  };
122 
123 
124  //fill a simple histogram of just the run number
125  auto run = Monitored::Scalar<int>("run",GetEventInfo(ctx)->runNumber());
126  fill(m_packageName, run); //fill the run number histogram that was default
127 
128 
129  //definition of variables for the offlineSRJet_maxEta_minPt_requirement and offlineLRJet_maxEta_minPt_requirement
130  //these just force us to have a minimum pt, and limited eta region for our efficiency checks
131  constexpr int minPt = 10*GeV;
132  constexpr float maxEta = 2.5;
133 
134  std::map<std::string, SG::ReadHandle<xAOD::gFexJetRoIContainer>> gFEX_Container {
135  //this naming is a bit misleading but it allows us to easily check the LR and SR gfex TOB contianers
136  //to find the leading LR and SR gfex TOBS (becuase they are not PT ordered by default)
137  //the string descripters are this way to stay conistent with the naming used later when we want to write
138  //and access the values of LR and SR gfex TOB properties, like pt, eta and phi
139  {"leadingGfex_SmallRadiusTOB",gFexSRJetContainer}, {"leadingGfex_LargeRadiusTOB", gFexLRJetContainer}
140  };
141 
142  //fill maps that allow us to keep track of variables according to the different containers
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}
147  };
148 
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}
153  };
154 
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}
159  };
160 
161 
164  // Fill pt, eta and phi vals for all the containers!
165  //offline jet containers
166  if (!jets->empty()) { //check that there are jets before accessing the container
167  xAOD::JetContainer::const_iterator leading_offline_SR_jet = jets->begin(); //the first jet in the contianer is the leading jet
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();
171  } //(close IF) jets size > 0 loop
172  //LR jet containers
173  if (!LRjets->empty()) { //check that there are jets before accessing the container
174  xAOD::JetContainer::const_iterator leading_offline_LR_jet = LRjets->begin(); //the first jet in the contianer is the leading jet
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();
178  } //(close IF) LRjets size > 0 loop
179 
180  // gFex SR and LR TOB containers
181  // when we emulate the gfex trigger decision, we just want to find the gfex tob that
182  // is the closest in physical space to the leading offline pt jet
183  float maximum_value_for_delta_r = 0.4;
184  for (auto & g : gFex_types){ //iterate through SR and LR gfex jets.
185  if (!gFEX_Container[g]->empty()) { //check that there are jets before accessing the container
186  const xAOD::gFexJetRoI* matching_gfex_jet = nullptr; //inital pointer of null
187  float min_delta_r = 10000;
188  //iterate through all the gfex tobs
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]),
196  delta_phi = P4Helpers::deltaPhi(gfex_phi,jet_phi[comparison_offline_jet]),
197  delta_r = std::sqrt(std::pow(delta_eta,2)+ std::pow(delta_phi,2));
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;
201  } //(close IF) loop if gfex jet satisfies pt and eta conditions
202  } //(close FOR) loop that iterates through gfex tobs for the given event
203 
204  //if we successfully found a leading gfex tob, then we can save its physics properties
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();
207  } // (close IF) loop that checks if there is a leading gfex jet
208  } // (close IF) loop that checks that there are gfex tobs
209  }// (close FOR) that loops through sr and lr gfex tobs
210 
211 
212 
213 
214 
217  //Physical cuts applied to all events on the offline jets
218  //requring a minimum pt threshold (Defined as minPt @ line 120)
219  //and maximum eta threshold (Defined as maxEta @ line 121)
220 
221  //offline SR Jet requriment
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; }
224 
225  // offline LR Jet requriment
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; }
228 
229 
232  //PREP LISTS OF TRIGGERS
233 
234  //Create and clean up the list of L1Triggers
235  std::vector<std::string> multiJet_LegacySmallRadiusTriggers = m_multiJet_LegacySmallRadiusTriggers;
236  std::vector<std::string> SmallRadiusJetTriggers_phase1_and_legacy = m_SmallRadiusJetTriggers_phase1_and_legacy;
237  std::vector<std::string> LargeRadiusJetTriggers_phase1_and_legacy = m_LargeRadiusJetTriggers_phase1_and_legacy;
238 
239  std::map<std::string, int> l1_trigger_flatline_vals {
240  //this is around where the l1trigger pt effiencies flatten out
241  //in order to make eta effiency curves, its useful to isolate the pt behavior,
242  // so we want 100% pt effiency, or after 'flattening out'
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},
245  {"L1_J100", 140*GeV}
246  };
247 
249  std::map<std::string, float> gFexTriggers_val {
250  //trigger val corresponding to the gfex triggers
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}
255  };
256 
257  std::map<std::string, std::vector<float>> multijet_triggers_val {
258  {"L1_3J50", {50*GeV, 50*GeV, 50*GeV}}, {"L1_4J15", {15*GeV, 15*GeV, 15*GeV, 15*GeV}},
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}}
261  };
262 
263  //define emulatedString variable so that we can have emulated in the title
264  //(or not) according to the status of the gfex triggers
265  std::string emulatedString = " ";
266  if (use_emulated_gfex_trig) {emulatedString = " Emulated Decision "; }
267 
270  // Fill sample histograms of the pt of leading jet
271  auto raw_pt = Monitored::Scalar<float>("raw_pt", 0.);
272  raw_pt = jet_pt["leadingOffline_SmallRadiusJet"];
273  fill(m_packageName, raw_pt);
274 
277  // FILL EFFIENCY HISTOGRAMS INVOLVING SMALL RADIUS OFFLINE JETS
278 
279  for (auto & r : reference_trigger_options){ //iterate through the refernce triggers
280  if (offlineSRJet_maxEta_minPt_requirement && reference_trigger_decision[r]) { //check that the physical cuts and reference trigger is passed
281  for(unsigned int t=0; t< SmallRadiusJetTriggers_phase1_and_legacy.size(); ++t) {//iterate through all of the useful triggers list (that we make effiency curves for)
282  const std::string& trigger_name = SmallRadiusJetTriggers_phase1_and_legacy[t]; // define the trigger name and get its decision
283 
284  //default definition of the trigger of interest decison to be false,
285  //we will then check if the trigger actually passed
286  bool trig_of_interest_decision = false;
287 
288  //check if we are looking at a gfex trigger and if we want to emulate the gfex trigger
289  if ((gFexTriggers_val.find(trigger_name) != gFexTriggers_val.end()) && use_emulated_gfex_trig) {
290  // check if the emuaulated trigger passed
291  // we have threshold values of gfex trigger values saved in the map
292  // gFexTriggers_val that connects the trigger name to the value
293  // here we check if the gfex SR TOB pt is large than the threshold, which should mean the trigger passes
294  if (jet_pt["leadingGfex_SmallRadiusTOB"] > gFexTriggers_val[trigger_name]) {
295  trig_of_interest_decision = true;
296  }
297  } else if (use_passed_before_prescale) {
298  //We can choose if we want to use pass before prescale, or not when defining our trigger efficiency
299  //this boolean is defiend in the jeteffmonalg.py file
300  const unsigned int bits = AthMonitorAlgorithm::getTrigDecisionTool()->isPassedBits(trigger_name);
301  trig_of_interest_decision = bits & TrigDefs::L1_isPassedBeforePrescale;
302  } else { trig_of_interest_decision = AthMonitorAlgorithm::getTrigDecisionTool()->isPassed(trigger_name); }
303 
304  //get values and fill the histogram of offline jet pt and boolean of trigger passing
305  auto pt_ref = Monitored::Scalar<float>("pt_"+ r, jet_pt["leadingOffline_SmallRadiusJet"]);
306  auto passed_pt = Monitored::Scalar<bool>("pt_" + r + "_" + trigger_name, trig_of_interest_decision);
307  fill(m_packageName, pt_ref, passed_pt);
308 
309  //if loop to see if trigger of interest passed. If yes we want to fill a histogram with the pt value
310  if (trig_of_interest_decision) {
311  auto passed_pt_val = Monitored::Scalar<float>("pt:" + r + "_" + trigger_name, jet_pt["leadingOffline_SmallRadiusJet"]);
312  fill(m_packageName, passed_pt_val);
313  } //(close IF) trig_of_interest_decision loop
314 
315  //filling histograms that are effiency curves as a funciton of eta
316  //in order to ensure that we are isolating only the eta behavior, we have a
317  // flatline value where the pt effiencies aproximtley flatten out to 1
318  //these are hard coded, and saved for only a few of the triggers!
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]) { //is jet pt greater than the flatline value?
321  //get value of eta, and histogram passing boolean and fill
322  auto eta_ref = Monitored::Scalar<float>("eta_" + r, jet_eta["leadingOffline_SmallRadiusJet"]);
323  auto passed_eta = Monitored::Scalar<bool>("eta_" + r + "_" + trigger_name, trig_of_interest_decision);
324  fill(m_packageName, eta_ref, passed_eta);
325  //if the trigger passes, we can also add the eta value to a stand alone histogram
326  if (trig_of_interest_decision) {
327  auto passed_eta_val = Monitored::Scalar<float>("eta:" + r +"_" + trigger_name, jet_eta["leadingOffline_SmallRadiusJet"]);
328  fill(m_packageName, passed_eta_val);
329  } //(close IF) passed eta if loop
330  } //(close IF) jet pt is greater than pt flatline vlaue loop
331  } //(close IF) loop that checks if the trigger of interest is int eh
332  } //(close FOR) loop that iterates through all of L1 single jet triggers we make effiency curves for
333 
334 
337  //now lets iterate through the multi jet triggers to make efficiency curves!
338  for(unsigned int t=0; t< multiJet_LegacySmallRadiusTriggers.size(); ++t) {
339  const std::string& trigger_name = multiJet_LegacySmallRadiusTriggers[t];
340 
341  //determine if the trigger passed
342  bool trig_of_interest_decision = false;
343  if (use_passed_before_prescale) {
344  const unsigned int bits = AthMonitorAlgorithm::getTrigDecisionTool()->isPassedBits(trigger_name);
345  trig_of_interest_decision = bits & TrigDefs::L1_isPassedBeforePrescale;
346  } else { trig_of_interest_decision = AthMonitorAlgorithm::getTrigDecisionTool()->isPassed(trigger_name); }
347 
348  // for these multijet triggers, we only want to fill the "last" jet
349  // of the trigger defintion
350  // example:
353  int multijet_num = multijet_triggers_val[trigger_name].size(); // number of jets we expect from trigger definition
354  int jets_num = jets->size(); //total number of jets in the event
355  if (jets_num >= multijet_num) {
356  //iterate through each jet required by trigger and check that the value is satisfied
357  int jet_count = 0;
358  for (const auto* j : *jets) {
359  jet_count += 1;
360  if(jet_count == multijet_num) { //only want to fill histogram on the last jet of the multijet
361  const float jet_pt_loop = j->pt();
362  auto pt_ref = Monitored::Scalar<float>("pt_"+ r, jet_pt_loop);
363  auto passed_pt = Monitored::Scalar<bool>("pt_" + r + "_" + trigger_name, trig_of_interest_decision);
364  fill(m_packageName, pt_ref, passed_pt);
365  if (trig_of_interest_decision) {
366  auto passed_pt_val = Monitored::Scalar<float>("pt:" + r + "_" + trigger_name, jet_pt_loop);
367  fill(m_packageName, passed_pt_val);
368  } //(close IF) passed_pt if loop
369  } //(close IF) loop that checks we are filling only the last jet of the multijet
370  } //(close FOR) loop that iterates trhrough each jet required by the multijet trigger
371  } //(close IF) loop that checks if the number of jets preseent agrees with the multijet trigger
372  } //(close FOR) loop that iterates through the multijet triggers
373 
374  } //(close IF) loop that checks if the reference trigger and physical property pass is passed
375  } //(close FOR) the iteration that fills effiency histogram for 4 different kinds of refernce triggers
376 
377 
380  //FILL EFFIENCY HISTOGRAMS INVOLVING LARGE RADIUS OFFLINE JETS
381 
382  for (auto & r : reference_trigger_options){ //iterate through the reference triggers
383  if ( offlineLRJet_maxEta_minPt_requirement && reference_trigger_decision[r]) { //check that the physical cuts and reference trigger is passed
384  for(unsigned int t=0; t< LargeRadiusJetTriggers_phase1_and_legacy.size(); ++t){ //iterate through all of the useful LR triggers list (that we make effiency curves for)
385  const std::string& trigger_name = LargeRadiusJetTriggers_phase1_and_legacy[t];
386 
387  bool trig_of_interest_decision = false;
388 
389  if ((gFexTriggers_val.find(trigger_name) != gFexTriggers_val.end()) && use_emulated_gfex_trig) {
390  if (jet_pt["leadingGfex_LargeRadiusTOB"] > gFexTriggers_val[trigger_name]) { //the qualifier for emulating trigger passing
391  trig_of_interest_decision = true;
392  }
393  } else if (use_passed_before_prescale) {
394  const unsigned int bits = AthMonitorAlgorithm::getTrigDecisionTool()->isPassedBits(trigger_name);
395  trig_of_interest_decision = bits & TrigDefs::L1_isPassedBeforePrescale;
396  } else { trig_of_interest_decision = AthMonitorAlgorithm::getTrigDecisionTool()->isPassed(trigger_name); }
397 
398  auto pt_ref = Monitored::Scalar<float>("pt_"+ r, jet_pt["leadingOffline_LargeRadiusJet"]);
399  auto passed_pt = Monitored::Scalar<bool>("pt_" + r + "_" + trigger_name, trig_of_interest_decision);
400  fill(m_packageName, pt_ref, passed_pt);
401 
402  if (trig_of_interest_decision) { //if loop to see if trigger of interest passed. If yes we want to fill a histogram with the value
403  auto passed_pt_val = Monitored::Scalar<float>("pt:" + r + "_" + trigger_name, jet_pt["leadingOffline_LargeRadiusJet"]);
404  fill(m_packageName, passed_pt_val);
405  } //(close IF) trig_of_interest_decision loop
406 
407  } //(close FOR) loop that iterates through all of the triggers we make effiency curves for
408  } //(close FOR) the iteration that fills effiency histogram for 4 different kinds of refernce triggers
409  } //(close IF) loop that checks if the physical properties were passed for the jet
410 
411  variables.clear();
412  return StatusCode::SUCCESS;
413 }
ReadHandleKey.h
Property holding a SG store/key/clid from which a ReadHandle is made.
beamspotman.r
def r
Definition: beamspotman.py:676
JetEfficiencyMonitorAlgorithm::m_emulated
Gaudi::Property< bool > m_emulated
Definition: JetEfficiencyMonitorAlgorithm.h:36
JetEfficiencyMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: JetEfficiencyMonitorAlgorithm.cxx:21
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
checkCoolLatestUpdate.variables
variables
Definition: checkCoolLatestUpdate.py:13
xAOD::gFexJetRoI_v1::eta
float eta() const
retrieves the Eta index from the 32-bit word
Definition: gFexJetRoI_v1.cxx:163
JetEfficiencyMonitorAlgorithm::m_gFexSRJetContainerKey
SG::ReadHandleKey< xAOD::gFexJetRoIContainer > m_gFexSRJetContainerKey
Definition: JetEfficiencyMonitorAlgorithm.h:47
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
JetEfficiencyMonitorAlgorithm::m_bootstrap_reference_trigger
StringProperty m_bootstrap_reference_trigger
Definition: JetEfficiencyMonitorAlgorithm.h:32
JetEfficiencyMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: JetEfficiencyMonitorAlgorithm.cxx:38
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
Definition: AthCommonDataStore.h:380
AthMonitorAlgorithm::getTrigDecisionTool
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool() const
Get the trigger decision tool member.
Definition: AthMonitorAlgorithm.cxx:189
JetEfficiencyMonitorAlgorithm::m_multiJet_LegacySmallRadiusTriggers
Gaudi::Property< std::vector< std::string > > m_multiJet_LegacySmallRadiusTriggers
Definition: JetEfficiencyMonitorAlgorithm.h:39
JetEfficiencyMonitorAlgorithm::JetEfficiencyMonitorAlgorithm
JetEfficiencyMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Definition: JetEfficiencyMonitorAlgorithm.cxx:16
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:83
PUfitVar::maxEta
constexpr float maxEta
Definition: GepMETPufitAlg.cxx:13
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
xAOD::gFexJetRoI_v1::phi
float phi() const
High value of phi corresponding to phi index (using gFex convention, phi in [0, 2pi]).
Definition: gFexJetRoI_v1.cxx:220
P4Helpers::deltaPhi
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
Definition: P4Helpers.h:29
JetEfficiencyMonitorAlgorithm::m_HLTbootstrap_reference_trigger
StringProperty m_HLTbootstrap_reference_trigger
Definition: JetEfficiencyMonitorAlgorithm.h:33
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthMonitorAlgorithm.h
xAOD::gFexJetRoI_v1
Class describing properties of a LVL1 gFEX jet Trigger Object (TOB) in the xAOD format.
Definition: gFexJetRoI_v1.h:25
JetEfficiencyMonitorAlgorithm::m_gFexLRJetContainerKey
SG::ReadHandleKey< xAOD::gFexJetRoIContainer > m_gFexLRJetContainerKey
Definition: JetEfficiencyMonitorAlgorithm.h:48
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
run
Definition: run.py:1
JetEfficiencyMonitorAlgorithm::m_SmallRadiusJetTriggers_phase1_and_legacy
Gaudi::Property< std::vector< std::string > > m_SmallRadiusJetTriggers_phase1_and_legacy
Definition: JetEfficiencyMonitorAlgorithm.h:40
AthMonitorAlgorithm::fill
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable >> &&variables) const
Fills a vector of variables to a group by reference.
AthMonitorAlgorithm::GetEventInfo
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
Definition: AthMonitorAlgorithm.cxx:107
Monitored.h
Header file to be included by clients of the Monitored infrastructure.
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
xAOD::gFexJetRoI_v1::et
float et() const
retrieves the Et index from the 32-bit word
Definition: gFexJetRoI_v1.cxx:157
JetEfficiencyMonitorAlgorithm::m_packageName
StringProperty m_packageName
Definition: JetEfficiencyMonitorAlgorithm.h:30
P4Helpers.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
JetEfficiencyMonitorAlgorithm::m_HLTrandom_reference_triggers
Gaudi::Property< std::vector< std::string > > m_HLTrandom_reference_triggers
Definition: JetEfficiencyMonitorAlgorithm.h:35
JetEfficiencyMonitorAlgorithm.h
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
DeMoAtlasDataLoss.runNumber
string runNumber
Definition: DeMoAtlasDataLoss.py:64
JetEfficiencyMonitorAlgorithm::m_passedb4Prescale
Gaudi::Property< bool > m_passedb4Prescale
Definition: JetEfficiencyMonitorAlgorithm.h:37
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
eFEXNTuple.delta_phi
def delta_phi(phi1, phi2)
Definition: eFEXNTuple.py:15
JetEfficiencyMonitorAlgorithm::m_LRjetKey
SG::ReadHandleKey< xAOD::JetContainer > m_LRjetKey
Definition: JetEfficiencyMonitorAlgorithm.h:46
defineDB.jets
list jets
Definition: JetTagCalibration/share/defineDB.py:24
Trk::jet_phi
@ jet_phi
Definition: JetVtxParamDefs.h:28
JetEfficiencyMonitorAlgorithm::m_muon_reference_triggers
Gaudi::Property< std::vector< std::string > > m_muon_reference_triggers
Definition: JetEfficiencyMonitorAlgorithm.h:34
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
JetEfficiencyMonitorAlgorithm::m_LargeRadiusJetTriggers_phase1_and_legacy
Gaudi::Property< std::vector< std::string > > m_LargeRadiusJetTriggers_phase1_and_legacy
Definition: JetEfficiencyMonitorAlgorithm.h:41
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
JetEfficiencyMonitorAlgorithm::m_jetKey
SG::ReadHandleKey< xAOD::JetContainer > m_jetKey
Definition: JetEfficiencyMonitorAlgorithm.h:45
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.