ATLAS Offline Software
TrigTauMonitorTandPAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 
8 TrigTauMonitorTandPAlgorithm::TrigTauMonitorTandPAlgorithm(const std::string& name, ISvcLocator* pSvcLocator)
9  : TrigTauMonitorBaseAlgorithm(name, pSvcLocator)
10 {}
11 
12 
15 
18 
21 
22  return StatusCode::SUCCESS;
23 }
24 
25 
26 std::vector<const xAOD::Electron*> TrigTauMonitorTandPAlgorithm::getOfflineElectrons(const EventContext& ctx, const float threshold) const
27 {
28  std::vector<const xAOD::Electron*> el_vec;
29 
31  if(!electrons.isValid()) {
32  ATH_MSG_WARNING("Failed to retrieve offline Electrons");
33  return el_vec;
34  }
35 
36  for(const xAOD::Electron* el : *electrons) {
37  // Threshold selection
38  if(el->p4().Pt()/Gaudi::Units::GeV < threshold) continue;
39 
40  // Select offline electrons passing good quality cuts
41  if(!(el->passSelection("LHMedium") && el->isGoodOQ(xAOD::EgammaParameters::BADCLUSELECTRON))) continue;
42 
43  el_vec.push_back(el);
44  }
45 
46  return el_vec;
47 }
48 
49 
50 std::vector<const xAOD::Muon*> TrigTauMonitorTandPAlgorithm::getOfflineMuons(const EventContext& ctx, const float threshold) const
51 {
52  std::vector<const xAOD::Muon*> mu_vec;
53 
55  if(!muons.isValid()) {
56  ATH_MSG_WARNING("Failed to retrieve offline Muons");
57  return mu_vec;
58  }
59 
60  for(const xAOD::Muon* mu : *muons) {
61  // Threshold selection
62  if(mu->p4().Pt()/Gaudi::Units::GeV < threshold) continue;
63 
64  // Select offline muons passing good quality cuts (quality >= Medium, but the Enum indexes are reversed...)
65  if(!(mu->quality() <= xAOD::Muon::Medium && mu->passesIDCuts())) continue;
66 
67  mu_vec.push_back(mu);
68  }
69 
70  return mu_vec;
71 }
72 
73 
74 std::vector<const xAOD::Electron*> TrigTauMonitorTandPAlgorithm::getOnlineElectrons(const std::string& trigger) const
75 {
76  std::vector<const xAOD::Electron*> el_vec;
77 
78  auto vec = m_trigDecTool->features<xAOD::ElectronContainer>(trigger, TrigDefs::Physics, m_hltElectronKey.key());
79  for(auto &featLinkInfo : vec) {
80  const auto *feat = *(featLinkInfo.link);
81  if(!feat) continue;
82  el_vec.push_back(feat);
83  }
84 
85  return el_vec;
86 }
87 
88 
89 std::vector<const xAOD::Muon*> TrigTauMonitorTandPAlgorithm::getOnlineMuons(const std::string& trigger) const
90 {
91  std::vector<const xAOD::Muon*> mu_vec;
92 
93  auto vec = m_trigDecTool->features<xAOD::MuonContainer>(trigger, TrigDefs::Physics, m_hltMuonKey.key());
94  for(auto &featLinkInfo : vec) {
95  const auto *feat = *(featLinkInfo.link);
96  if(!feat) continue;
97  mu_vec.push_back(feat);
98  }
99 
100  return mu_vec;
101 }
102 
103 
105 {
106  constexpr float threshold_offset = 10.0;
107 
108  // Offline taus
109  auto offline_taus_all = getOfflineTausAll(ctx, 0.0);
110  if(m_requireOfflineTaus && offline_taus_all.empty()) return StatusCode::SUCCESS;
111 
112  for(const std::string& trigger : m_triggers) {
113  const TrigTauInfo& info = getTrigInfo(trigger);
114 
115  if(!info.isHLTTandP()) {
116  ATH_MSG_WARNING("Chain \"" << trigger << "\" is not a Tag and Probe trigger. Skipping...");
117  continue;
118  }
119 
120  const auto passBits = m_trigDecTool->isPassedBits(trigger);
121  const bool l1_accept_flag = passBits & TrigDefs::L1_isPassedAfterVeto;
122  const bool hlt_not_prescaled_flag = (passBits & TrigDefs::EF_prescaled) == 0;
123 
124  // Offline tau requirement check
125  std::vector<const xAOD::TauJet*> offline_taus_with_id = classifyTausAll(offline_taus_all, 0, static_cast<TauID>(m_offline_tau_id.value()));
126  if(m_requireOfflineTaus && offline_taus_with_id.empty()) continue;
127 
128  // Filter offline taus
129  std::vector<const xAOD::TauJet*> offline_taus = classifyTausAll(offline_taus_with_id, info.getHLTTauThreshold() - threshold_offset);
130 
131  // Online taus
132  std::vector<const xAOD::TauJet*> hlt_taus = getOnlineTausAll(trigger, true);
133 
134  if(info.hasHLTElectronLeg()) { // Electron channel
135  // Offline Electrons
136  std::vector<const xAOD::IParticle*> offline_electrons;
137  for(const xAOD::Electron* p : getOfflineElectrons(ctx, info.getHLTElecThreshold()+1)) offline_electrons.push_back(dynamic_cast<const xAOD::IParticle*>(p));
138 
139  // Overlap removal: dR(Offline Tau, Offline Electron) > 0.2
140  for(int i = offline_taus.size()-1; i >= 0; i--) {
141  bool is_match = matchObjects(offline_taus.at(i), offline_electrons, 0.2);
142  if(is_match) offline_taus.erase(offline_taus.begin() + i);
143  }
144 
145  // Online Electrons
146  std::vector<const xAOD::IParticle*> hlt_electrons;
147  for(const xAOD::Electron* p : getOnlineElectrons(trigger)) hlt_electrons.push_back(dynamic_cast<const xAOD::IParticle*>(p));
148 
149  if(m_do_variable_plots) fillTagAndProbeVars(trigger, hlt_taus, hlt_electrons);
150  if(m_do_efficiency_plots && l1_accept_flag && hlt_not_prescaled_flag) fillTAndPHLTEfficiencies(ctx, trigger, offline_electrons, hlt_electrons, offline_taus, hlt_taus);
151 
152  } else if(info.hasHLTMuonLeg()) { // Muon channel
153  // Offline Muons
154  std::vector<const xAOD::IParticle*> offline_muons;
155  for(const xAOD::Muon* p : getOfflineMuons(ctx, info.getHLTMuonThreshold()+1)) offline_muons.push_back(dynamic_cast<const xAOD::IParticle*>(p));
156 
157  // Overlap removal: dR(Offline Tau, Offline Tau) > 0.2
158  for(int i = offline_taus.size()-1; i >= 0; i--) {
159  bool is_match = matchObjects(offline_taus.at(i), offline_muons, 0.2);
160  if(is_match) offline_taus.erase(offline_taus.begin() + i);
161  }
162 
163  // Online Muons
164  std::vector<const xAOD::IParticle*> hlt_muons;
165  for(const xAOD::Muon* p : getOnlineMuons(trigger)) hlt_muons.push_back(dynamic_cast<const xAOD::IParticle*>(p));
166 
167  if(m_do_variable_plots) fillTagAndProbeVars(trigger, hlt_taus, hlt_muons);
168  if(m_do_efficiency_plots && l1_accept_flag && hlt_not_prescaled_flag) fillTAndPHLTEfficiencies(ctx, trigger, offline_muons, hlt_muons, offline_taus, hlt_taus);
169  }
170  }
171 
172  return StatusCode::SUCCESS;
173 }
174 
175 
176 void TrigTauMonitorTandPAlgorithm::fillTAndPHLTEfficiencies(const EventContext& ctx, const std::string& trigger, const std::vector<const xAOD::IParticle*>& offline_lep_vec, const std::vector<const xAOD::IParticle*>& online_lep_vec, const std::vector<const xAOD::TauJet*>& offline_tau_vec, const std::vector<const xAOD::TauJet*>& online_tau_vec) const
177 {
178  ATH_MSG_DEBUG("Fill Tag and Probe HLT efficiencies: " << trigger);
179 
180  // Require 1 offline taus and 1 online taus
181  if(online_tau_vec.size() != 1 || offline_tau_vec.size() != 1) return;
182  // ...and require 1 offline lepton and 1 online lepton
183  if(online_lep_vec.size() != 1 || offline_lep_vec.size() != 1) return;
184 
185  auto monGroup = getGroup(trigger+"_TAndPHLT_Efficiency");
186 
187  auto tauPt = Monitored::Scalar<float>("tauPt", 0.0);
188  auto tauEta = Monitored::Scalar<float>("tauEta", 0.0);
189  auto tauPhi = Monitored::Scalar<float>("tauPhi", 0.0);
190  auto dR = Monitored::Scalar<float>("dR", 0.0);
191  auto dEta = Monitored::Scalar<float>("dEta", 0.0);
192  auto dPhi = Monitored::Scalar<float>("dPhi", 0.0);
193  auto averageMu = Monitored::Scalar<float>("averageMu", 0.0);
194  auto HLT_match = Monitored::Scalar<bool>("HLT_pass", false);
195  auto HLT_match_highPt = Monitored::Scalar<bool>("HLT_pass_highPt", false);
196 
197  // efficiency denominator : 1 offline tau, 1 online tau, 1 offline lepton, 1 online lepton
198  // efficiency numerator : hlt fires + offline and online tau matched + offline and online lepton matched
199  bool hlt_fires = m_trigDecTool->isPassed(trigger, TrigDefs::Physics);
200  bool tau1_match = matchObjects(offline_tau_vec[0], online_tau_vec, 0.2);
201  bool lep1_match = matchObjects(offline_lep_vec[0], online_lep_vec, 0.2);
202 
203  tauPt = offline_tau_vec[0]->pt()/Gaudi::Units::GeV;
204  tauEta = offline_tau_vec[0]->eta();
205  tauPhi = offline_tau_vec[0]->phi();
206  dR = offline_tau_vec[0]->p4().DeltaR(offline_lep_vec[0]->p4());
207  dEta = std::abs(offline_tau_vec[0]->eta() - offline_lep_vec[0]->eta());
208  dPhi = offline_tau_vec[0]->p4().DeltaPhi(offline_lep_vec[0]->p4());
209  averageMu = lbAverageInteractionsPerCrossing(ctx);
210  HLT_match = hlt_fires && tau1_match && lep1_match;
211 
212  fill(monGroup, tauPt, tauEta, tauPhi, dR, dEta, dPhi, averageMu, HLT_match);
213 
214  bool is_highPt = tauPt > getTrigInfo(trigger).getHLTTauThreshold() + 20.0;
215  if(is_highPt) {
216  HLT_match_highPt = static_cast<bool>(HLT_match);
217  fill(monGroup, tauEta, tauPhi, HLT_match_highPt);
218  }
219 
220 
221  ATH_MSG_DEBUG("After fill Tag and Probe HLT efficiencies: " << trigger);
222 }
223 
224 
225 void TrigTauMonitorTandPAlgorithm::fillTagAndProbeVars(const std::string& trigger, const std::vector<const xAOD::TauJet*>& tau_vec, const std::vector<const xAOD::IParticle*>& lep_vec) const
226 {
227  ATH_MSG_DEBUG("Fill Tag & Probe Variables: " << trigger);
228 
229  auto monGroup = getGroup(trigger+"_TAndPVars");
230 
231  // Require 1 tau and 1 lepton
232  if(tau_vec.empty() || lep_vec.empty()) return;
233 
234  auto dR = Monitored::Scalar<float>("dR", 0.0);
235  auto dEta = Monitored::Scalar<float>("dEta", 0.0);
236  auto dPhi = Monitored::Scalar<float>("dPhi", 0.0);
237  auto dPt = Monitored::Scalar<float>("dPt", 0.0);
238 
239  auto Pt = Monitored::Scalar<float>("Pt", 0.0);
240  auto Eta = Monitored::Scalar<float>("Eta", 0.0);
241  auto Phi = Monitored::Scalar<float>("Phi", 0.0);
242  auto M = Monitored::Scalar<float>("M", 0.0);
243 
244  // Choose a pair with dR > 0.3 to fill the plot (there must be always at least one pair with dR > 0.3 if the trigger fires)
245  uint index_tau = 0;
246  uint index_lep = 0;
247 
248  for(uint i=0; i < tau_vec.size(); i++) {
249  for(uint j=0; j< lep_vec.size(); j++) {
250  if(tau_vec[i]->p4().DeltaR(lep_vec[j]->p4()) >= 0.3) {
251  index_tau = i;
252  index_lep = j;
253  }
254  }
255  }
256 
257  dR = tau_vec[index_tau]->p4().DeltaR(lep_vec[index_lep]->p4());
258  dEta = std::abs(tau_vec[index_tau]->eta() - lep_vec[index_lep]->eta());
259  dPhi = tau_vec[index_tau]->p4().DeltaPhi(lep_vec[index_lep]->p4());
260  dPt = std::abs((tau_vec[index_tau]->pt() - lep_vec[index_lep]->pt())/Gaudi::Units::GeV);
261 
262  TLorentzVector diTau4V = tau_vec[index_tau]->p4() + lep_vec[index_lep]->p4();
263 
264  Pt = diTau4V.Pt()/Gaudi::Units::GeV;
265  Eta = diTau4V.Eta();
266  Phi = diTau4V.Phi();
267  M = diTau4V.M()/Gaudi::Units::GeV;
268 
269  fill(monGroup, dR, dEta, dPhi, dPt, Pt, Eta, Phi, M);
270 
271  ATH_MSG_DEBUG("After fill Tag & Probe variables: " << trigger);
272 }
TrigTauMonitorTandPAlgorithm::m_hltElectronKey
SG::ReadHandleKey< xAOD::ElectronContainer > m_hltElectronKey
Definition: TrigTauMonitorTandPAlgorithm.h:41
python.TIDAMonTool.monGroup
def monGroup(analysis_chain)
Definition: TIDAMonTool.py:301
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:18
TrigTauInfo::getHLTTauThreshold
float getHLTTauThreshold() const
Definition: TrigTauInfo.h:26
TrigTauMonitorBaseAlgorithm::TauID
TauID
Definition: TrigTauMonitorBaseAlgorithm.h:30
TauAnalysisTools::tauEta
double tauEta(const xAOD::TauJet &xTau)
return tau eta
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:100
AthMonitorAlgorithm::m_trigDecTool
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
Definition: AthMonitorAlgorithm.h:340
TrigTauMonitorBaseAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TrigTauMonitorBaseAlgorithm.cxx:16
TauAnalysisTools::tauPt
double tauPt(const xAOD::TauJet &xTau)
return tau pt in GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:86
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
met::DeltaR
@ DeltaR
Definition: METRecoCommon.h:11
TrigTauMonitorTandPAlgorithm::fillTagAndProbeVars
void fillTagAndProbeVars(const std::string &trigger, const std::vector< const xAOD::TauJet * > &tau_vec, const std::vector< const xAOD::IParticle * > &lep_vec) const
Definition: TrigTauMonitorTandPAlgorithm.cxx:225
TrigTauMonitorTandPAlgorithm::getOfflineElectrons
std::vector< const xAOD::Electron * > getOfflineElectrons(const EventContext &ctx, const float threshold=0.0) const
Definition: TrigTauMonitorTandPAlgorithm.cxx:26
test_pyathena.pt
pt
Definition: test_pyathena.py:11
xAOD::passBits
passBits
Definition: TrigPassBits_v1.cxx:115
Phi
@ Phi
Definition: RPCdef.h:8
xAOD::EgammaParameters::BADCLUSELECTRON
const uint32_t BADCLUSELECTRON
Definition: EgammaDefs.h:116
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:9
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:41
xAOD::Muon_v1
Class describing a Muon.
Definition: Muon_v1.h:38
TrigTauMonitorBaseAlgorithm::m_do_variable_plots
Gaudi::Property< bool > m_do_variable_plots
Definition: TrigTauMonitorBaseAlgorithm.h:47
TrigTauMonitorTandPAlgorithm::processEvent
virtual StatusCode processEvent(const EventContext &ctx) const override
Definition: TrigTauMonitorTandPAlgorithm.cxx:104
uint
unsigned int uint
Definition: LArOFPhaseFill.cxx:20
TrigTauMonitorBaseAlgorithm::getOnlineTausAll
std::vector< const xAOD::TauJet * > getOnlineTausAll(const std::string &trigger, bool include_0P=true) const
Definition: TrigTauMonitorBaseAlgorithm.cxx:56
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
lumiFormat.i
int i
Definition: lumiFormat.py:85
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
TrigTauMonitorTandPAlgorithm::m_offlineMuonKey
SG::ReadHandleKey< xAOD::MuonContainer > m_offlineMuonKey
Definition: TrigTauMonitorTandPAlgorithm.h:39
TauGNNUtils::Variables::Track::dEta
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, float &out)
Definition: TauGNNUtils.cxx:401
TrigTauMonitorTandPAlgorithm::getOnlineElectrons
std::vector< const xAOD::Electron * > getOnlineElectrons(const std::string &trigger) const
Definition: TrigTauMonitorTandPAlgorithm.cxx:74
TrigTauMonitorTandPAlgorithm::m_requireOfflineTaus
Gaudi::Property< bool > m_requireOfflineTaus
Definition: TrigTauMonitorTandPAlgorithm.h:17
TrigTauMonitorTandPAlgorithm::m_offlineElectronKey
SG::ReadHandleKey< xAOD::ElectronContainer > m_offlineElectronKey
Definition: TrigTauMonitorTandPAlgorithm.h:38
TrigTauMonitorTandPAlgorithm::fillTAndPHLTEfficiencies
void fillTAndPHLTEfficiencies(const EventContext &ctx, const std::string &trigger, const std::vector< const xAOD::IParticle * > &offline_lep_vec, const std::vector< const xAOD::IParticle * > &online_lep_vec, const std::vector< const xAOD::TauJet * > &offline_tau_vec, const std::vector< const xAOD::TauJet * > &online_tau_vec) const
Definition: TrigTauMonitorTandPAlgorithm.cxx:176
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
python.getProblemFolderFromLogs.el
dictionary el
Definition: getProblemFolderFromLogs.py:48
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.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
TrigTauMonitorTandPAlgorithm::TrigTauMonitorTandPAlgorithm
TrigTauMonitorTandPAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrigTauMonitorTandPAlgorithm.cxx:8
TrigTauMonitorTandPAlgorithm::m_offline_tau_id
Gaudi::Property< unsigned int > m_offline_tau_id
Definition: TrigTauMonitorTandPAlgorithm.h:18
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TrigTauMonitorBaseAlgorithm::dR
double dR(const double eta1, const double phi1, const double eta2, const double phi2) const
Definition: TrigTauMonitorBaseAlgorithm.h:70
TrigTauMonitorTandPAlgorithm::getOfflineMuons
std::vector< const xAOD::Muon * > getOfflineMuons(const EventContext &ctx, const float threshold=0.0) const
Definition: TrigTauMonitorTandPAlgorithm.cxx:50
TrigTauMonitorTandPAlgorithm::m_hltMuonKey
SG::ReadHandleKey< xAOD::MuonContainer > m_hltMuonKey
Definition: TrigTauMonitorTandPAlgorithm.h:42
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
threshold
Definition: chainparser.cxx:74
TrigTauMonitorBaseAlgorithm
Definition: TrigTauMonitorBaseAlgorithm.h:24
TrigTauMonitorBaseAlgorithm::m_do_efficiency_plots
Gaudi::Property< bool > m_do_efficiency_plots
Definition: TrigTauMonitorBaseAlgorithm.h:46
xAOD::Electron_v1
Definition: Electron_v1.h:34
AthMonitorAlgorithm::lbAverageInteractionsPerCrossing
virtual float lbAverageInteractionsPerCrossing(const EventContext &ctx=Gaudi::Hive::currentContext()) const
Calculate the average mu, i.e.
Definition: AthMonitorAlgorithm.cxx:227
TrigTauInfo
Definition: TrigTauInfo.h:15
Prompt::Def::Pt
@ Pt
Definition: VarHolder.h:76
TrigTauMonitorBaseAlgorithm::classifyTausAll
std::vector< const xAOD::TauJet * > classifyTausAll(const std::vector< const xAOD::TauJet * > &taus, const float threshold=0.0, const TauID tau_id=TauID::None) const
Definition: TrigTauMonitorBaseAlgorithm.cxx:276
LikeEnum::Medium
@ Medium
Definition: LikelihoodEnums.h:14
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TrigTauMonitorBaseAlgorithm::matchObjects
bool matchObjects(const T1 *tau, const std::vector< const T2 * > &tau_vec, float threshold) const
Definition: TrigTauMonitorBaseAlgorithm.h:78
TauGNNUtils::Variables::Track::dPhi
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, float &out)
Definition: TauGNNUtils.cxx:412
TrigTauMonitorBaseAlgorithm::m_triggers
Gaudi::Property< std::vector< std::string > > m_triggers
Definition: TrigTauMonitorBaseAlgorithm.h:38
TrigTauMonitorTandPAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TrigTauMonitorTandPAlgorithm.cxx:13
TrigTauMonitorTandPAlgorithm::getOnlineMuons
std::vector< const xAOD::Muon * > getOnlineMuons(const std::string &trigger) const
Definition: TrigTauMonitorTandPAlgorithm.cxx:89
TrigTauMonitorBaseAlgorithm::getTrigInfo
const TrigTauInfo & getTrigInfo(const std::string &trigger) const
Definition: TrigTauMonitorBaseAlgorithm.h:51
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:51
python.ParticleTypeUtil.info
def info
Definition: ParticleTypeUtil.py:87
AthMonitorAlgorithm::getGroup
const ToolHandle< GenericMonitoringTool > & getGroup(const std::string &name) const
Get a specific monitoring tool from the tool handle array.
Definition: AthMonitorAlgorithm.cxx:164
InDetDD::electrons
@ electrons
Definition: InDetDD_Defs.h:17
Eta
@ Eta
Definition: RPCdef.h:8
TrigTauMonitorBaseAlgorithm::getOfflineTausAll
std::vector< const xAOD::TauJet * > getOfflineTausAll(const EventContext &ctx, const float threshold=20.0) const
Definition: TrigTauMonitorBaseAlgorithm.cxx:86
TrigTauMonitorTandPAlgorithm.h