ATLAS Offline Software
Loading...
Searching...
No Matches
TrigTauMonitorBaseAlgorithm.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef TRIGTAUMONITORING_TRIGTAUMONITORBASEALGORITHM_H
6#define TRIGTAUMONITORING_TRIGTAUMONITORBASEALGORITHM_H
7
9
12
15
17
18#include "Gaudi/Parsers/Factory.h" // Needed to declare less common Property types
19#include "GaudiKernel/SystemOfUnits.h"
20#include "CxxUtils/phihelper.h"
21
23
25public:
26 TrigTauMonitorBaseAlgorithm(const std::string& name, ISvcLocator* pSvcLocator);
27 virtual StatusCode initialize() override;
28 virtual StatusCode fillHistograms(const EventContext& ctx) const override;
29
30 enum TauID {
31 None = 0,
32 RNN = 1,
33 GNTau = 2,
34 };
35
36protected:
37 // List of triggers from menu (before duplicate filtering)
38 Gaudi::Property<std::vector<std::string>> m_triggers{this, "TriggerList", {}};
39
40 // Phase1 L1 tau threshold information
41 Gaudi::Property<std::map<std::string, float>> m_L1_Phase1_thresholds{this, "L1Phase1Thresholds", {}};
42 Gaudi::Property<std::map<std::string, uint64_t>> m_L1_Phase1_threshold_patterns{this, "L1Phase1ThresholdPatterns", {}};
43 Gaudi::Property<bool> m_L1_select_by_et_only{this, "SelectL1ByETOnly", false};
44
45 // Toggle efficiency and variable plots
46 Gaudi::Property<bool> m_do_efficiency_plots{this, "DoEfficiencyPlots", true};
47 Gaudi::Property<bool> m_do_variable_plots{this, "DoVariablePlots", true};
48
49 // TrigTauInfo objects, containing all information from each trigger
50 inline std::map<std::string, TrigTauInfo>& getTrigInfoMap() { return m_trigInfo; }
51 inline const TrigTauInfo& getTrigInfo(const std::string& trigger) const { return m_trigInfo.at(trigger); }
52
53 // Get online 0P, 1P and MP TauJets
54 std::vector<const xAOD::TauJet*> getOnlineTausAll(const std::string& trigger, bool include_0P=true) const;
55 std::tuple<std::vector<const xAOD::TauJet*>, std::vector<const xAOD::TauJet*>, std::vector<const xAOD::TauJet*>> getOnlineTaus(const std::string& trigger) const;
56
57 // Get offline 1P and 3P TauJet objects that pass the quality selection cuts
58 std::vector<const xAOD::TauJet*> getOfflineTausAll(const EventContext& ctx, const float threshold = 20.0) const;
59 std::pair<std::vector<const xAOD::TauJet*>, std::vector<const xAOD::TauJet*>> getOfflineTaus(const EventContext& ctx, const float threshold = 20.0, const TauID tau_id = TauID::None) const;
60
61 // Get L1 RoIs
62 std::vector<const xAOD::eFexTauRoI*> getL1eTAUs(const EventContext& ctx, const std::string& l1_item) const;
63 std::vector<const xAOD::jFexTauRoI*> getL1jTAUs(const EventContext& ctx, const std::string& l1_item) const;
64 std::vector<std::pair<const xAOD::eFexTauRoI*, const xAOD::jFexTauRoI*>> getL1cTAUs(const EventContext& ctx, const std::string& l1_item) const;
65
66 // Process event, after bad event cleaning
67 virtual StatusCode processEvent(const EventContext& ctx) const = 0;
68
69 // Helper functions
70 inline double dR(const double eta1, const double phi1, const double eta2, const double phi2) const
71 {
72 double deta = std::fabs(eta1 - eta2);
73 double dphi = std::fabs(CxxUtils::wrapToPi(phi1-phi2));
74 return std::sqrt(deta*deta + dphi*dphi);
75 }
76
77 template <typename T1 = xAOD::IParticle, typename T2 = xAOD::IParticle>
78 inline bool matchObjects(const T1* tau, const std::vector<const T2*>& tau_vec, float threshold) const
79 {
80 for(auto tau_2 : tau_vec) {
81 if(tau->p4().DeltaR(tau_2->p4()) < threshold) return true;
82 }
83 return false;
84 }
85
86 inline bool matchObjects(const TLorentzVector& tau, const std::vector<TLorentzVector>& tau_vec, float threshold) const
87 {
88 for(auto& tau_2 : tau_vec) {
89 if(tau.DeltaR(tau_2) < threshold) return true;
90 }
91 return false;
92 }
93
94 template <typename T1 = xAOD::IParticle, typename T2 = xAOD::eFexTauRoI>
95 inline bool matchObjects(const T1* tau_1, const T2* tau_2, float threshold) const
96 {
97 return dR(tau_1->eta(), tau_1->phi(), tau_2->eta(), tau_2->phi()) < threshold;
98 }
99
100 template <typename T1 = xAOD::IParticle, typename T2 = xAOD::IParticle>
101 inline bool matchTruthObjects(const T1* true_tau, const std::vector<const T2*>& tau_vec, float threshold) const
102 {
103 static const SG::ConstAccessor<double> acc_ptvis("pt_vis");
104 static const SG::ConstAccessor<double> acc_etavis("eta_vis");
105 static const SG::ConstAccessor<double> acc_phivis("phi_vis");
106 static const SG::ConstAccessor<double> acc_mvis("mvis");
107 TLorentzVector true_tau_p4;
108 true_tau_p4.SetPtEtaPhiM(acc_ptvis(*true_tau), acc_etavis(*true_tau), acc_phivis(*true_tau), acc_mvis(*true_tau));
109
110 for(auto tau : tau_vec) {
111 if(true_tau_p4.DeltaR(tau->p4()) < threshold) return true;
112 }
113 return false;
114 }
115
116 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;
117 std::pair<std::vector<const xAOD::TauJet*>, std::vector<const xAOD::TauJet*>> classifyOfflineTaus(const std::vector<const xAOD::TauJet*>& taus, const float threshold = 0.0, const TauID tau_id = TauID::None) const;
118 std::tuple<std::vector<const xAOD::TauJet*>, std::vector<const xAOD::TauJet*>, std::vector<const xAOD::TauJet*>> classifyOnlineTaus(const std::vector<const xAOD::TauJet*>& taus, const float threshold = 0.0) const;
119
120 // StorageGate keys, accessible by subclasses
121 SG::ReadHandleKey<xAOD::TauJetContainer> m_offlineTauJetKey{this, "OfflineTauJetKey", "TauJets", "Offline taujet container key"};
122
123 SG::ReadHandleKey<xAOD::TauJetContainer> m_hltTauJetKey{this, "HLTTauJetKey", "HLT_TrigTauRecMerged_MVA", "HLT tracktwoMVA taujet container key"};
124 SG::ReadHandleKey<xAOD::TauJetContainer> m_hltTauJetLLPKey{this, "HLTTauJetLLPKey", "HLT_TrigTauRecMerged_LLP", "HLT tracktwoLLP taujet container key"};
125 SG::ReadHandleKey<xAOD::TauJetContainer> m_hltTauJetLRTKey{this, "HLTTauJetLRTKey", "HLT_TrigTauRecMerged_LRT", "HLT trackLRT taujet container key"};
126 SG::ReadHandleKey<xAOD::TauJetContainer> m_hltTauJetCaloMVAOnlyKey{this, "HLTTauJetCaloMVAOnlyKey", "HLT_TrigTauRecMerged_CaloMVAOnly", "HLT ptonly taujet container key"};
127
128 const SG::ReadHandleKey<xAOD::TauJetContainer>& getOnlineContainerKey(const std::string& sequence) const;
129
130private:
131 std::map<std::string, TrigTauInfo> m_trigInfo; // TauTrigInfo cache
132
133
134 // StorageGate keys
135 SG::ReadDecorHandleKey<xAOD::EventInfo> m_eventInfoDecorKey{this, "LArStatusFlag", "EventInfo.larFlags", "Key for EventInfo object"}; // To get data-dependencies right
136
137 SG::ReadDecorHandleKey<xAOD::TauJetContainer> m_offlineGNTauDecorKey{this, "OfflineGNTauDecorKey", "", "Offline GNTau decoration key"};
138
139 SG::ReadHandleKey<xAOD::eFexTauRoIContainer> m_phase1l1eTauRoIKey{this, "Phase1L1eTauRoIKey", "L1_eTauRoI", "eTau Phase1 L1 RoI key"};
140 SG::ReadDecorHandleKey<xAOD::eFexTauRoIContainer> m_phase1l1eTauRoIThresholdPatternsKey{this, "Phase1L1eTauRoIThresholdPatternsKey", "L1_eTauRoI.thresholdPatterns", "Decoration for the threshold patterns for the eTau RoIs"};
141 SG::ReadHandleKey<xAOD::jFexTauRoIContainer> m_phase1l1jTauRoIKey{this, "Phase1L1jTauRoIKey", "L1_jFexTauRoI", "jTau Phase1 L1 RoI key"};
142 SG::ReadDecorHandleKey<xAOD::jFexTauRoIContainer> m_phase1l1jTauRoIThresholdPatternsKey{this, "Phase1L1jTauRoIThresholdPatternsKey", "L1_jFexTauRoI.thresholdPatterns", "Decoration for the threshold patterns for the jTau RoIs"};
143 SG::ReadHandleKey<xAOD::eFexTauRoIContainer> m_phase1l1cTauRoIKey{this, "Phase1L1cTauRoIKey", "L1_cTauRoI", "cTau Phase1 L1 RoI key"};
144 SG::ReadDecorHandleKey<xAOD::eFexTauRoIContainer> m_phase1l1cTauRoIDecorKey{this, "Phase1L1cTauRoIjTauRoILinkKey", "L1_cTauRoI.jTauLink", "Decoration for the link from eTau to the matching jTau"};
145 SG::ReadDecorHandleKey<xAOD::eFexTauRoIContainer> m_phase1l1cTauRoIThresholdPatternsKey{this, "Phase1L1cTauRoIThresholdPatternsKey", "L1_cTauRoI.thresholdPatterns", "Decoration for the threshold patterns for the cTau RoIs"};
146};
147
148#endif
static Double_t taus
Header file to be included by clients of the Monitored infrastructure.
Property holding a SG store/key/clid/attr name from which a ReadDecorHandle is made.
AthMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Helper class to provide constant type-safe access to aux data.
Property holding a SG store/key/clid/attr name from which a ReadDecorHandle is made.
Property holding a SG store/key/clid from which a ReadHandle is made.
std::vector< const xAOD::eFexTauRoI * > getL1eTAUs(const EventContext &ctx, const std::string &l1_item) const
const SG::ReadHandleKey< xAOD::TauJetContainer > & getOnlineContainerKey(const std::string &sequence) const
Gaudi::Property< bool > m_do_efficiency_plots
Gaudi::Property< std::map< std::string, float > > m_L1_Phase1_thresholds
SG::ReadHandleKey< xAOD::jFexTauRoIContainer > m_phase1l1jTauRoIKey
SG::ReadDecorHandleKey< xAOD::eFexTauRoIContainer > m_phase1l1cTauRoIDecorKey
virtual StatusCode initialize() override
initialize
SG::ReadHandleKey< xAOD::TauJetContainer > m_hltTauJetKey
std::map< std::string, TrigTauInfo > m_trigInfo
double dR(const double eta1, const double phi1, const double eta2, const double phi2) const
TrigTauMonitorBaseAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
std::vector< const xAOD::TauJet * > getOfflineTausAll(const EventContext &ctx, const float threshold=20.0) const
bool matchTruthObjects(const T1 *true_tau, const std::vector< const T2 * > &tau_vec, float threshold) const
std::pair< std::vector< const xAOD::TauJet * >, std::vector< const xAOD::TauJet * > > getOfflineTaus(const EventContext &ctx, const float threshold=20.0, const TauID tau_id=TauID::None) const
bool matchObjects(const T1 *tau, const std::vector< const T2 * > &tau_vec, float threshold) const
Gaudi::Property< std::vector< std::string > > m_triggers
SG::ReadDecorHandleKey< xAOD::eFexTauRoIContainer > m_phase1l1cTauRoIThresholdPatternsKey
SG::ReadHandleKey< xAOD::eFexTauRoIContainer > m_phase1l1eTauRoIKey
SG::ReadDecorHandleKey< xAOD::jFexTauRoIContainer > m_phase1l1jTauRoIThresholdPatternsKey
SG::ReadHandleKey< xAOD::TauJetContainer > m_hltTauJetLLPKey
bool matchObjects(const T1 *tau_1, const T2 *tau_2, float threshold) const
std::map< std::string, TrigTauInfo > & getTrigInfoMap()
bool matchObjects(const TLorentzVector &tau, const std::vector< TLorentzVector > &tau_vec, float threshold) const
const TrigTauInfo & getTrigInfo(const std::string &trigger) const
virtual StatusCode processEvent(const EventContext &ctx) const =0
SG::ReadHandleKey< xAOD::TauJetContainer > m_hltTauJetCaloMVAOnlyKey
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
SG::ReadDecorHandleKey< xAOD::eFexTauRoIContainer > m_phase1l1eTauRoIThresholdPatternsKey
Gaudi::Property< bool > m_L1_select_by_et_only
SG::ReadDecorHandleKey< xAOD::TauJetContainer > m_offlineGNTauDecorKey
std::vector< const xAOD::jFexTauRoI * > getL1jTAUs(const EventContext &ctx, const std::string &l1_item) const
std::vector< std::pair< const xAOD::eFexTauRoI *, const xAOD::jFexTauRoI * > > getL1cTAUs(const EventContext &ctx, const std::string &l1_item) const
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
SG::ReadHandleKey< xAOD::eFexTauRoIContainer > m_phase1l1cTauRoIKey
SG::ReadHandleKey< xAOD::TauJetContainer > m_hltTauJetLRTKey
std::tuple< std::vector< const xAOD::TauJet * >, std::vector< const xAOD::TauJet * >, std::vector< const xAOD::TauJet * > > getOnlineTaus(const std::string &trigger) const
std::pair< std::vector< const xAOD::TauJet * >, std::vector< const xAOD::TauJet * > > classifyOfflineTaus(const std::vector< const xAOD::TauJet * > &taus, const float threshold=0.0, const TauID tau_id=TauID::None) const
Gaudi::Property< bool > m_do_variable_plots
Gaudi::Property< std::map< std::string, uint64_t > > m_L1_Phase1_threshold_patterns
SG::ReadDecorHandleKey< xAOD::EventInfo > m_eventInfoDecorKey
SG::ReadHandleKey< xAOD::TauJetContainer > m_offlineTauJetKey
std::tuple< std::vector< const xAOD::TauJet * >, std::vector< const xAOD::TauJet * >, std::vector< const xAOD::TauJet * > > classifyOnlineTaus(const std::vector< const xAOD::TauJet * > &taus, const float threshold=0.0) const
std::vector< const xAOD::TauJet * > getOnlineTausAll(const std::string &trigger, bool include_0P=true) const
T wrapToPi(T phi)
Wrap angle in radians to [-pi, pi].
Definition phihelper.h:24
Helper for azimuthal angle calculations.