ATLAS Offline Software
Loading...
Searching...
No Matches
TrigTauMonitorBoostedDiTauAlgorithm.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
8
9
10TrigTauMonitorBoostedDiTauAlgorithm::TrigTauMonitorBoostedDiTauAlgorithm(const std::string& name, ISvcLocator* pSvcLocator)
11 : TrigTauMonitorBaseAlgorithm(name, pSvcLocator)
12{}
13
16
17 ATH_CHECK( m_hltBoostedDiTauJetKey.initialize() );
18
19 return StatusCode::SUCCESS;
20}
21
22StatusCode TrigTauMonitorBoostedDiTauAlgorithm::processEvent(const EventContext& /*ctx*/) const
23{
24 ATH_MSG_DEBUG("Entry process event boosted");
25 for(const std::string& trigger : m_triggers) {
26 const TrigTauInfo& info = getTrigInfo(trigger);
27 if(!info.isHLTBoostedDiTau()) {
28 ATH_MSG_WARNING("Chain \"" << trigger << "\" is not a boosted di-tau trigger. Skipping...");
29 continue;
30 }
31
32 // Online taus
33 std::vector<const xAOD::DiTauJet*> hlt_boosted_ditaus = getOnlineBoostedDiTausAll(trigger);
34
35 if(m_do_variable_plots && !hlt_boosted_ditaus.empty()) fillBoostedDiTauVars(trigger, hlt_boosted_ditaus);
36 }
37
38 return StatusCode::SUCCESS;
39}
40
41std::vector<const xAOD::DiTauJet*> TrigTauMonitorBoostedDiTauAlgorithm::getOnlineBoostedDiTausAll(const std::string& trigger) const
42{
43 std::vector<const xAOD::DiTauJet*> boosted_ditau_vec;
44
45 std::vector<TrigCompositeUtils::LinkInfo<xAOD::DiTauJetContainer>> features_boosted_ditau =
47
48 for (const auto& fb_ditau : features_boosted_ditau) {
49 if (!fb_ditau.link.isValid()) continue;
50
51 const xAOD::DiTauJet* ditau = *(fb_ditau.link);
52 if (!ditau) continue;
53
54 boosted_ditau_vec.push_back(ditau);
55 }
56 return boosted_ditau_vec;
57}
58
59void TrigTauMonitorBoostedDiTauAlgorithm::fillBoostedDiTauVars(const std::string& trigger, const std::vector<const xAOD::DiTauJet*>& boosted_ditau_vec) const
60{
61 auto monGroup = getGroup(trigger+"_BoostedDiTauVars");
62
63 static const SG::ConstAccessor<float> OmniScore("omni_score");
64 static const SG::ConstAccessor<float> RTracksLead("R_tracks_lead");
65 static const SG::ConstAccessor<float> RTracksSubl("R_tracks_subl");
66 static const SG::ConstAccessor<float> FCoreLead("f_core_lead");
67 static const SG::ConstAccessor<float> FCoreSubl("f_core_subl");
68 static const SG::ConstAccessor<int> NTracks("n_track");
69 static const SG::ConstAccessor<int> NTracksLead("n_tracks_lead");
70 static const SG::ConstAccessor<int> NTracksSubl("n_tracks_subl");
71
72 const auto* ditau = boosted_ditau_vec.at(0);
73
74 auto omni_score = Monitored::Scalar<float>("omni_score", OmniScore(*ditau));
75 auto R_tracks_lead = Monitored::Scalar<float>("R_tracks_lead", RTracksLead(*ditau));
76 auto R_tracks_subl = Monitored::Scalar<float>("R_tracks_subl", RTracksSubl(*ditau));
77 auto f_core_lead = Monitored::Scalar<float>("f_core_lead", FCoreLead(*ditau));
78 auto f_core_subl = Monitored::Scalar<float>("f_core_subl", FCoreSubl(*ditau));
79 auto n_track = Monitored::Scalar<int>("n_track", NTracks(*ditau));
80 auto n_tracks_lead = Monitored::Scalar<int>("n_tracks_lead", NTracksLead(*ditau));
81 auto n_tracks_subl = Monitored::Scalar<int>("n_tracks_subl", NTracksSubl(*ditau));
82 auto Pt = Monitored::Scalar<float>("Pt", 0.0);
83 auto Eta = Monitored::Scalar<float>("Eta", 0.0);
84 auto Phi = Monitored::Scalar<float>("Phi", 0.0);
85 auto M = Monitored::Scalar<float>("M", 0.0);
86
87 TLorentzVector boosted_diTau4V;
88 boosted_diTau4V.SetPtEtaPhiM(0,0,0,0);
89
90 boosted_diTau4V = boosted_ditau_vec.at(0)->p4();
91
92 Pt = boosted_diTau4V.Pt()/Gaudi::Units::GeV;
93 Eta = boosted_diTau4V.Eta();
94 Phi = boosted_diTau4V.Phi();
95 M = boosted_diTau4V.M()/Gaudi::Units::GeV;
96
97 fill(monGroup, omni_score, R_tracks_lead, R_tracks_subl, f_core_lead, f_core_subl, n_track, n_tracks_lead, n_tracks_subl, Pt, Eta, Phi, M);
98}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
const ToolHandle< GenericMonitoringTool > & getGroup(const std::string &name) const
Get a specific monitoring tool from the tool handle array.
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
Declare a monitored scalar variable.
Helper class to provide constant type-safe access to aux data.
virtual StatusCode initialize() override
initialize
TrigTauMonitorBaseAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Gaudi::Property< std::vector< std::string > > m_triggers
const TrigTauInfo & getTrigInfo(const std::string &trigger) const
Gaudi::Property< bool > m_do_variable_plots
std::vector< const xAOD::DiTauJet * > getOnlineBoostedDiTausAll(const std::string &trigger) const
SG::ReadHandleKey< xAOD::DiTauJetContainer > m_hltBoostedDiTauJetKey
virtual StatusCode initialize() override
initialize
void fillBoostedDiTauVars(const std::string &trigger, const std::vector< const xAOD::DiTauJet * > &tau_vec) const
TrigTauMonitorBoostedDiTauAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode processEvent(const EventContext &ctx) const override
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.
DiTauJetContainer_v1 DiTauJetContainer
Definition of the current DiTauJet container version.
DiTauJet_v1 DiTauJet
Definition of the current version.
Definition DiTauJet.h:17