ATLAS Offline Software
Loading...
Searching...
No Matches
TrigTLAMonitorAlgorithm.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7
8TrigTLAMonitorAlgorithm::TrigTLAMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
9 : AthMonitorAlgorithm(name,pSvcLocator)
10{}
11
13
14
27
28/*************************************************
29* Main filling function *
30**************************************************/
31
32StatusCode TrigTLAMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
33 // This is the method exectued on every event (inherited from AthMonitorAlgorithm)
34 using namespace Monitored;
35
36 //
37 // print the trigger chain names
38 std::string chainName;
39
40 int size_AllChains = m_allChains.size();
41 ATH_MSG_DEBUG(" Size of the AllChains trigger container: " << size_AllChains );
42 for (int i =0; i<size_AllChains; i++){
43 chainName = m_allChains[i];
44 ATH_MSG_DEBUG(" Chain number: " << i << " AllChains Chain Name: " << chainName );
45 }
46
47 //
48 // Retrieve all the containers of monitored objects
54
61
62 //
63 // event-wide variables
64 ANA_CHECK(fillEventInfoHistogram<float>(tcEventInfo, "AvgMu", "eventInfo" ));
65 if (pfjets->size()>0){
66 ATH_MSG_DEBUG("nEMPFlowJets = "<<pfjets->size());
67 ANA_CHECK(fillEventInfoHistogram<int>(tcEventInfo, "NumPV", "eventInfo" ));
68 ANA_CHECK(fillEventInfoHistogram<double>(tcEventInfo, "JetDensityEMPFlow", "eventInfo" ));
69 }
70 if (jets->size()>0){
71 ATH_MSG_DEBUG("nEMTopoJets = "<<jets->size());
72 ANA_CHECK(fillEventInfoHistogram<double>(tcEventInfo, "JetDensityEMTopo", "eventInfo" ));
73 }
74
75 const std::vector<std::string> jetCalibStates = {"JetConstitScaleMomentum_pt", "JetPileupScaleMomentum_pt", "JetEtaJESScaleMomentum_pt"};
76 const std::vector<std::string> pfjetCalibStates = {"JetConstitScaleMomentum_pt", "JetPileupScaleMomentum_pt", "JetEtaJESScaleMomentum_pt", "JetGSCScaleMomentum_pt"};
77 const std::string jetStr{"jet"};
78 const std::string pfJetStr{"pfjet"};
79 const std::string trkStr{"trk"};
80 for ( const std::string& trigName : m_allChains ) {
81 //Test if trigName has fired
82 if(m_trigDecisionTool->isPassed(trigName, TrigDefs::requireDecision)){
83 ATH_MSG_DEBUG("--->"<<trigName<<" fired!");
84 // proceed filling the histogram
85
86 //
87 // jets
88 using J = xAOD::Jet;
89 ANA_CHECK(fillParticleHistograms<J>(jets, jetStr, trigName));
90 if (jets->size()>0){
91 for (const auto& calibState: jetCalibStates){
92 ANA_CHECK(fillJetPtCalibStatesHistograms(jets,calibState, jetStr, trigName));
93 }
94 ANA_CHECK( (fillObjectVariableHistogram<J,float>(jets,"N90Constituents", jetStr, trigName )) );
95 ANA_CHECK( (fillObjectVariableHistogram<J,float>(jets,"Timing", jetStr, trigName, -99)) );
96 ANA_CHECK( (fillObjectVariableHistogram<J,float>(jets,"EMFrac", jetStr, trigName, -99)) );
97 ANA_CHECK( (fillObjectVariableHistogram<J,float>(jets,"HECFrac", jetStr, trigName, -99)) );
98 }
99
100 //
101 // particle flow jets
102 ANA_CHECK(fillParticleHistograms<J>(pfjets, pfJetStr, trigName));
103 if (pfjets->size()>0){
104 for (const auto& calibState: pfjetCalibStates){
105 ANA_CHECK(fillJetPtCalibStatesHistograms(pfjets, calibState, pfJetStr, trigName));
106 }
107 ANA_CHECK( fillJetTrackVariableHistogram<float>(pfjets,"TrackWidthPt1000", pfJetStr, trigName) );
108 ANA_CHECK( fillJetTrackVariableHistogram<int> (pfjets,"NumTrkPt1000", pfJetStr, trigName) );
109 ANA_CHECK( fillJetTrackVariableHistogram<float>(pfjets,"SumPtTrkPt500", pfJetStr, trigName) );
110 ANA_CHECK( fillJetTrackVariableHistogram<float>(pfjets,"SumPtChargedPFOPt500", pfJetStr, trigName) );
111 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"ActiveArea", pfJetStr, trigName)) );
112 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"Jvt", pfJetStr, trigName, -99)) );
113 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"JvtRpt", pfJetStr, trigName, -99)) );
114 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"fastDIPS20211215_pu", pfJetStr, trigName)) );
115 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"fastDIPS20211215_pb", pfJetStr, trigName)) );
116 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"fastDIPS20211215_pc", pfJetStr, trigName)) );
117 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"GN120230331_pu", pfJetStr, trigName)) );
118 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"GN120230331_pb", pfJetStr, trigName)) );
119 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"GN120230331_pc", pfJetStr, trigName)) );
120 }
121
122 //
123 // photons
125
126 //
127 // muons
128 ANA_CHECK(fillParticleHistograms<xAOD::Muon>(muons, "muon", trigName));
129
130 //
131 // Tracks
132 using TP = xAOD::TrackParticle;
133 if ( !tracks->empty() && trigName.contains("pf_ftf")) {
134 ANA_CHECK( fillParticleHistograms<TP>(tracks, trkStr, trigName) );
135 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "qOverP", trkStr, trigName)) );
136 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "chiSquared", trkStr, trigName)) );
137 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "numberDoF", trkStr, trigName)) );
138 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "btagIp_d0", trkStr, trigName)) );
139 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "btagIp_d0Uncertainty", trkStr, trigName)) );
140 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "btagIp_z0SinTheta", trkStr, trigName)) );
141 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "btagIp_z0SinThetaUncertainty", trkStr, trigName)) );
142 }
143
144 //
145 // Delta Angles
146 if(jets->size()>=2) {
147 ANA_CHECK(fillDeltaRHistograms(jets ->at(0), jets ->at(1), "jet0jet1" , trigName));
148 }
149
150 if(pfjets->size()>=2) {
151 ANA_CHECK(fillDeltaRHistograms(pfjets->at(0), pfjets->at(1), "pfjet0pfjet1", trigName));
152 }
153
154 if(jets->size()>=1 && phs->size()>=1) {
155 ANA_CHECK(fillDeltaRHistograms(jets ->at(0), phs ->at(0), "jet0ph0" , trigName));
156 }
157
158 if(pfjets->size()>=1 && phs->size()>=1) {
159 ANA_CHECK(fillDeltaRHistograms(pfjets->at(0), phs ->at(0), "pfjet0ph0" , trigName));
160 }
161 }
162 } // for AllChains
163
164 return StatusCode::SUCCESS;
165}
166
167
168/*************************************************
169* Implementation of specialized fillers *
170**************************************************/
171
172StatusCode TrigTLAMonitorAlgorithm::fillDeltaRHistograms(const xAOD::IParticle* p0, const xAOD::IParticle* p1, const std::string& prefix, const std::string& trigName) const
173{
174 // histograms
175 Monitored::Scalar<double> dr(prefix+"dr_" +trigName,0.0);
176
177 // fill
178 dr = p0->p4().DeltaR(p1->p4());
179 fill("TrigTLAMonitor", dr);
180
181 return StatusCode::SUCCESS;
182}
183
184
185StatusCode TrigTLAMonitorAlgorithm::fillJetPtCalibStatesHistograms(SG::ReadHandle<xAOD::JetContainer>& jets, const std::string& calibState, const std::string& prefix, const std::string& trigName) const {
186 Monitored::Scalar<float> ptCalibScale (prefix+calibState+"_"+trigName,-1.0);
187
188 unsigned cnt(0);
189 for(auto jet : *jets) {
190 auto status = jet->getAttribute<float>(calibState, ptCalibScale);
191 if (!status){
192 ATH_MSG_WARNING("Failed retrieving "<<calibState<<" for "<<prefix);
193 }
194 ptCalibScale = ptCalibScale*1e-3;
195 fill("TrigTLAMonitor",ptCalibScale);
196 if (cnt < 3) ATH_MSG_DEBUG(prefix<<" "<<calibState<<" = "<<ptCalibScale<<" GeV");
197 cnt++;
198 }
199
200 return StatusCode::SUCCESS;
201}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_WARNING(x,...)
#define ANA_CHECK(EXP)
check whether the given expression was successful
virtual StatusCode initialize() override
initialize
AthMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Declare a monitored scalar variable.
SG::ReadHandleKey< xAOD::TrigCompositeContainer > m_tcEventInfoContainerKey
StatusCode fillObjectVariableHistogram(SG::ReadHandle< DataVector< C > > &container, const std::string &varname, const std::string &prefix, const std::string &trigName, T default_val=-1) const
Fill Analysis Object feature histogram`.
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
StatusCode fillJetTrackVariableHistogram(SG::ReadHandle< xAOD::JetContainer > &jets, const std::string &varname, const std::string &prefix, const std::string &trigName, T default_val=-1) const
Fill jet track variable to 1D histograms. Jet track variables are vectors where each element correspo...
virtual StatusCode initialize() override
initialize
SG::ReadHandleKey< xAOD::JetContainer > m_jetContainerKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecisionTool
SG::ReadHandleKey< xAOD::MuonContainer > m_muonContainerKey
StatusCode readContainer(SG::ReadHandle< T > &container, const SG::ReadHandleKey< T > &key, const EventContext &ctx) const
Retrieve a container of type T.
Gaudi::Property< std::vector< std::string > > m_allChains
StatusCode fillParticleHistograms(SG::ReadHandle< DataVector< T > > particles, const std::string &prefix, const std::string &trigName) const
Fill kinematic histograms for a given particle of type T.
TrigTLAMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
StatusCode fillJetPtCalibStatesHistograms(SG::ReadHandle< xAOD::JetContainer > &jets, const std::string &calibState, const std::string &prefix, const std::string &trigName) const
Fill jet pT to 1D histograms at different calibration scales.
SG::ReadHandleKey< xAOD::JetContainer > m_pfjetContainerKey
StatusCode fillEventInfoHistogram(SG::ReadHandle< DataVector< xAOD::TrigComposite_v1 > > &tcEventInfo, const std::string &varname, const std::string &prefix) const
Fill an event info variable to a 1D histogram.
SG::ReadHandleKey< xAOD::PhotonContainer > m_photonContainerKey
StatusCode fillDeltaRHistograms(const xAOD::IParticle *p0, const xAOD::IParticle *p1, const std::string &prefix, const std::string &trigName) const
Fill kinematic histograms for a given particle of type T.
Class providing the definition of the 4-vector interface.
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.
Generic monitoring tool for athena components.
Jet_v1 Jet
Definition of the current "jet version".
TrackParticle_v1 TrackParticle
Reference the current persistent version: