ATLAS Offline Software
Loading...
Searching...
No Matches
TrigTLAMonitorAlgorithm.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
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
78 for ( const std::string& trigName : m_allChains ) {
79 //Test if trigName has fired
80 if(m_trigDecisionTool->isPassed(trigName, TrigDefs::requireDecision)){
81 ATH_MSG_DEBUG("--->"<<trigName<<" fired!");
82 // proceed filling the histogram
83
84 //
85 // jets
86 using J = xAOD::Jet;
87 ANA_CHECK(fillParticleHistograms<J>(jets, "jet", trigName));
88 if (jets->size()>0){
89 for (const auto& calibState: jetCalibStates){
90 ANA_CHECK(fillJetPtCalibStatesHistograms(jets,calibState, "jet", trigName));
91 }
92 ANA_CHECK( (fillObjectVariableHistogram<J,float>(jets,"N90Constituents", "jet", trigName )) );
93 ANA_CHECK( (fillObjectVariableHistogram<J,float>(jets,"Timing", "jet", trigName, -99)) );
94 ANA_CHECK( (fillObjectVariableHistogram<J,float>(jets,"EMFrac", "jet", trigName, -99)) );
95 ANA_CHECK( (fillObjectVariableHistogram<J,float>(jets,"HECFrac", "jet", trigName, -99)) );
96 }
97
98 //
99 // particle flow jets
100 ANA_CHECK(fillParticleHistograms<J>(pfjets, "pfjet", trigName));
101 if (pfjets->size()>0){
102 for (const auto& calibState: pfjetCalibStates){
103 ANA_CHECK(fillJetPtCalibStatesHistograms(pfjets, calibState, "pfjet", trigName));
104 }
105 ANA_CHECK( fillJetTrackVariableHistogram<float>(pfjets,"TrackWidthPt1000", "pfjet", trigName) );
106 ANA_CHECK( fillJetTrackVariableHistogram<int> (pfjets,"NumTrkPt1000", "pfjet", trigName) );
107 ANA_CHECK( fillJetTrackVariableHistogram<float>(pfjets,"SumPtTrkPt500", "pfjet", trigName) );
108 ANA_CHECK( fillJetTrackVariableHistogram<float>(pfjets,"SumPtChargedPFOPt500", "pfjet", trigName) );
109 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"ActiveArea", "pfjet", trigName)) );
110 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"Jvt", "pfjet", trigName, -99)) );
111 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"JvtRpt", "pfjet", trigName, -99)) );
112 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"fastDIPS20211215_pu", "pfjet", trigName)) );
113 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"fastDIPS20211215_pb", "pfjet", trigName)) );
114 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"fastDIPS20211215_pc", "pfjet", trigName)) );
115 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"GN120230331_pu", "pfjet", trigName)) );
116 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"GN120230331_pb", "pfjet", trigName)) );
117 ANA_CHECK( (fillObjectVariableHistogram<J,float>(pfjets,"GN120230331_pc", "pfjet", trigName)) );
118 }
119
120 //
121 // photons
123
124 //
125 // muons
126 ANA_CHECK(fillParticleHistograms<xAOD::Muon>(muons, "muon", trigName));
127
128 //
129 // Tracks
130 using TP = xAOD::TrackParticle;
131 if (tracks->size()>0 && trigName.find("pf_ftf") != std::string::npos) {
132 ANA_CHECK( fillParticleHistograms<TP>(tracks, "trk", trigName) );
133 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "qOverP", "trk", trigName)) );
134 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "chiSquared", "trk", trigName)) );
135 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "numberDoF", "trk", trigName)) );
136 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "btagIp_d0", "trk", trigName)) );
137 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "btagIp_d0Uncertainty", "trk", trigName)) );
138 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "btagIp_z0SinTheta", "trk", trigName)) );
139 ANA_CHECK( (fillObjectVariableHistogram<TP,float>(tracks, "btagIp_z0SinThetaUncertainty", "trk", trigName)) );
140 }
141
142 //
143 // Delta Angles
144 if(jets->size()>=2) {
145 ANA_CHECK(fillDeltaRHistograms(jets ->at(0), jets ->at(1), "jet0jet1" , trigName));
146 }
147
148 if(pfjets->size()>=2) {
149 ANA_CHECK(fillDeltaRHistograms(pfjets->at(0), pfjets->at(1), "pfjet0pfjet1", trigName));
150 }
151
152 if(jets->size()>=1 && phs->size()>=1) {
153 ANA_CHECK(fillDeltaRHistograms(jets ->at(0), phs ->at(0), "jet0ph0" , trigName));
154 }
155
156 if(pfjets->size()>=1 && phs->size()>=1) {
157 ANA_CHECK(fillDeltaRHistograms(pfjets->at(0), phs ->at(0), "pfjet0ph0" , trigName));
158 }
159 }
160 } // for AllChains
161
162 return StatusCode::SUCCESS;
163}
164
165
166/*************************************************
167* Implementation of specialized fillers *
168**************************************************/
169
170StatusCode TrigTLAMonitorAlgorithm::fillDeltaRHistograms(const xAOD::IParticle* p0, const xAOD::IParticle* p1, const std::string& prefix, const std::string& trigName) const
171{
172 // histograms
173 Monitored::Scalar<double> dr(prefix+"dr_" +trigName,0.0);
174
175 // fill
176 dr = p0->p4().DeltaR(p1->p4());
177 fill("TrigTLAMonitor", dr);
178
179 return StatusCode::SUCCESS;
180}
181
182
183StatusCode TrigTLAMonitorAlgorithm::fillJetPtCalibStatesHistograms(SG::ReadHandle<xAOD::JetContainer>& jets, const std::string& calibState, const std::string& prefix, const std::string& trigName) const {
184 Monitored::Scalar<float> ptCalibScale (prefix+calibState+"_"+trigName,-1.0);
185
186 unsigned cnt(0);
187 for(auto jet : *jets) {
188 auto status = jet->getAttribute<float>(calibState, ptCalibScale);
189 if (!status){
190 ATH_MSG_WARNING("Failed retrieving "<<calibState<<" for "<<prefix);
191 }
192 ptCalibScale = ptCalibScale*1e-3;
193 fill("TrigTLAMonitor",ptCalibScale);
194 if (cnt < 3) ATH_MSG_DEBUG(prefix<<" "<<calibState<<" = "<<ptCalibScale<<" GeV");
195 cnt++;
196 }
197
198 return StatusCode::SUCCESS;
199}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(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: