ATLAS Offline Software
Loading...
Searching...
No Matches
TileEventFillerTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5/*
6 * File: TileEventFillerTool.cxx
7 * Author: Marco van Woerden <mvanwoer@cern.ch>
8 * Date: September 2012
9 *
10 */
11
25
26// INCLUDE HEADER FILE
27#include "TileEventFillerTool.h"
28
29
30// ADD TILEMUONTRACKFILLERTOOL TO D3PD NAMESPACE
31namespace D3PD{
32//=========================================================================
34 const std::string& name,
35 const IInterface* parent)
36 : D3PD::BlockFillerTool<xAOD::EventInfo>(type,name,parent)
37{
38//=========================================================================
39// CONSTRUCTOR
40 declareProperty("LevelOfDetails", m_LevelOfDetails);
41 declareProperty("METContainer", m_metContainer = "MET_Reference_AntiKt4LCTopo"); // 'MET_RefFinal' in r19
42
43 m_trigDec = 0;
44 m_pVertex = 0;
45 // PILE-UP
48
49 // EVENT TYPE
52 m_is_testbeam = 0;
53
54 // VERTEXING
55 m_nVtx = 0;
56
57 // EVENT FILTERS
58 m_EF_2mu10 = 0;
60 m_EF_2mu4 = 0;
61 m_EF_2mu6 = 0;
62 m_EF_3mu4 = 0;
63 m_EF_3mu6 = 0;
64 m_EF_4mu4 = 0;
65 m_EF_mu10 = 0;
68 m_EF_mu13 = 0;
69 m_EF_mu15 = 0;
70 m_EF_mu15i = 0;
72 m_EF_mu18 = 0;
74 m_EF_mu20 = 0;
76 m_EF_mu20i = 0;
78 m_EF_mu22 = 0;
84 m_EF_mu4 = 0;
85 m_EF_mu4_mu6 = 0;
87 m_EF_mu6 = 0;
88
89 // LEVEL 1 TRIGGERS
91 m_L1_MU0 = 0;
92 m_L1_MU4 = 0;
93 m_L1_MU6 = 0;
94 m_L1_MU10 = 0;
95 m_L1_MU11 = 0;
96 m_L1_MU15 = 0;
97 m_L1_MU20 = 0;
98 m_L1_MU40 = 0;
99 m_L1_MU0_COMM = 0;
100 m_L1_2MU0 = 0;
101 m_L1_2MU4 = 0;
102 m_L1_2MU6 = 0;
103 m_L1_2MU10 = 0;
104 m_L1_2MU11 = 0;
105 m_L1_2MU15 = 0;
106 m_L1_2MU20 = 0;
107 m_L1_3MU0 = 0;
108 m_L1_3MU4 = 0;
109 m_L1_3MU6 = 0;
110 m_L1_4MU0 = 0;
111
112
113 // EVENT FLAGS
114 m_run_number = 0;
115 m_event_number = 0;
116 m_timestamp = 0;
117 m_timestamp_ns = 0;
118 m_lbn = 0;
119 m_bcid = 0;
120 m_detmask0 = 0;
121 m_detmask1 = 0;
122
123 // MISSING ENERGY VARIABLES
125
129
133
134 //size of Muons container
135 m_N_mu = 0;
136
137
138} // TILEMUONEVENTFILLERTOOL
139
140//===============================================
142//===============================================
143// RETRIEVES NECESSARY SERVICES AND TOOLS, INSTANTIATES GLOBAL VARIABLES
144
145 // CHECK WHETHER BLOCKFILLERTOOL HAS BEEN INITIALIZED
147
148 // OUTPUT MESSAGING SERVICE
149
150 ATH_MSG_DEBUG(" NOW IN TILEMUONEVENTFILLERTOOL::INITIALIZE() ");
151
152 // RETRIEVE TRIGGER DECISION TOOL
153 if(m_LevelOfDetails > 4){
154 if( ! evtStore()->retrieve( m_trigDec , "xTrigDecision").isSuccess() ){
155 ATH_MSG_WARNING("TRIGGER DECISIONS ARE NOT LOADED PROPERLY.");
156 return StatusCode::FAILURE;
157 }
158 } // IF
159
160 return StatusCode::SUCCESS;
161} // TILEMUONEVENTFILLERTOOL::INITIALIZE
162
163//=========================================
165//=========================================
166// ADDS VARIABLES TO THE D3PD TREE
167
168 // OUTPUT MESSAGING SERVICE
169
170 ATH_MSG_DEBUG(" NOW IN TileEventFillerTool::book() ");
171
172 // EVENT FLAGS AND VARIABLES
173 if(m_LevelOfDetails > 0){
174 CHECK( addVariable( "run_number", m_run_number) );
175 CHECK( addVariable( "event_number", m_event_number) );
176 CHECK( addVariable( "timestamp", m_timestamp) );
177
178 CHECK( addVariable( "actualMu", m_actualInteractionPerCrossing, "", 0 ) );
179 CHECK( addVariable( "averageMu", m_averageInteractionPerCrossing, "", 0 ) );
180 CHECK( addVariable( "is_simulation", m_is_simulation, "", false ) );
181 CHECK( addVariable( "is_calibration", m_is_calibration, "", false ) );
182 CHECK( addVariable( "is_testbeam", m_is_testbeam, "", false ) );
183
184 CHECK( addVariable( "lbn", m_lbn) );
185
186 } // IF
187
188 // ELABORATE EVENT INFORMATION
189 if(m_LevelOfDetails > 1){
190 CHECK( addVariable( "timestamp_ns", m_timestamp_ns) );
191 CHECK( addVariable( "bcid", m_bcid) );
192 CHECK( addVariable( "detmask0", m_detmask0) );
193 CHECK( addVariable( "detmask1", m_detmask1) );
194 } // IF
195
196 // NUMBER OF MUONS
197 if(m_LevelOfDetails > 2){
198 CHECK( addVariable( "muon_n", m_N_mu, "", 0 ) );
199 } // IF
200
201 // BASIC MISSING ENERGY
202 if(m_LevelOfDetails > 3){
203 CHECK( addVariable( "MET_Ref_FinalClus_Ex", m_MET_Ref_FinalClus_Ex, "", 0.) );
204 CHECK( addVariable( "MET_Ref_FinalClus_Ey", m_MET_Ref_FinalClus_Ey, "", 0.) );
205 CHECK( addVariable( "MET_Ref_FinalClus_EtSum", m_MET_Ref_FinalClus_EtSum, "", 0.) );
206
207 CHECK( addVariable( "MET_Ref_FinalTrk_Ex", m_MET_Ref_FinalTrk_Ex, "", 0.) );
208 CHECK( addVariable( "MET_Ref_FinalTrk_Ey", m_MET_Ref_FinalTrk_Ey, "", 0.) );
209 CHECK( addVariable( "MET_Ref_FinalTrk_EtSum", m_MET_Ref_FinalTrk_EtSum, "", 0.) );
210
211 } // IF
212
213 // TRIGGER DECISIONS
214 if(m_LevelOfDetails > 4){
215 // HIGH LEVEL TRIGGERS (HLT): EVENT FILTERS (EF)
216 CHECK( addVariable ("EF_2mu10", m_EF_2mu10, "", false) );
217 CHECK( addVariable ("EF_2mu10_loose", m_EF_2mu10_loose, "", false) );
218 CHECK( addVariable ("EF_2mu4", m_EF_2mu4, "", false) );
219 CHECK( addVariable ("EF_2mu6", m_EF_2mu6, "", false) );
220 CHECK( addVariable ("EF_3mu4", m_EF_3mu4, "", false) );
221 CHECK( addVariable ("EF_3mu6", m_EF_3mu6, "", false) );
222 CHECK( addVariable ("EF_4mu4", m_EF_4mu4, "", false) );
223 CHECK( addVariable ("EF_mu10", m_EF_mu10, "", false) );
224 CHECK( addVariable ("EF_mu10_loose", m_EF_mu10_loose, "", false) );
225 CHECK( addVariable ("EF_mu10i_loose", m_EF_mu10i_loose, "", false) );
226 CHECK( addVariable ("EF_mu13", m_EF_mu13, "", false) );
227 CHECK( addVariable ("EF_mu15", m_EF_mu15, "", false) );
228 CHECK( addVariable ("EF_mu15i", m_EF_mu15i, "", false) );
229 CHECK( addVariable ("EF_mu15i_medium",m_EF_mu15i_medium,"", false) );
230 CHECK( addVariable ("EF_mu18", m_EF_mu18, "", false) );
231 CHECK( addVariable ("EF_mu18_medium", m_EF_mu18_medium, "", false) );
232 CHECK( addVariable ("EF_mu20", m_EF_mu20, "", false) );
233 CHECK( addVariable ("EF_mu20_medium", m_EF_mu20_medium, "", false) );
234 CHECK( addVariable ("EF_mu20i", m_EF_mu20i, "", false) );
235 CHECK( addVariable ("EF_mu20i_medium",m_EF_mu20i_medium,"", false) );
236 CHECK( addVariable ("EF_mu22", m_EF_mu22, "", false) );
237 CHECK( addVariable ("EF_mu22_medium", m_EF_mu22_medium, "", false) );
238 CHECK( addVariable ("EF_mu24_medium", m_EF_mu24_medium, "", false) );
239 CHECK( addVariable ("EF_mu24_tight", m_EF_mu24_tight, "", false) );
240 CHECK( addVariable ("EF_mu30_medium", m_EF_mu30_medium, "", false) );
241 CHECK( addVariable ("EF_mu30_tight", m_EF_mu30_tight, "", false) );
242 CHECK( addVariable ("EF_mu4", m_EF_mu4, "", false) );
243 CHECK( addVariable ("EF_mu4_mu6", m_EF_mu4_mu6, "", false) );
244 CHECK( addVariable ("EF_mu40_slow", m_EF_mu40_slow, "", false) );
245 CHECK( addVariable ("EF_mu6", m_EF_mu6, "", false) );
246
247 // LEVEL 1 TRIGGERS
248 CHECK( addVariable ("L1_MU0_EMPTY", m_L1_MU0_EMPTY ,"", false) );
249 CHECK( addVariable ("L1_MU0", m_L1_MU0 ,"", false) );
250 CHECK( addVariable ("L1_MU4", m_L1_MU4 ,"", false) );
251 CHECK( addVariable ("L1_MU6", m_L1_MU6 ,"", false) );
252 CHECK( addVariable ("L1_MU10", m_L1_MU10 ,"", false) );
253 CHECK( addVariable ("L1_MU11", m_L1_MU11 ,"", false) );
254 CHECK( addVariable ("L1_MU15", m_L1_MU15 ,"", false) );
255 CHECK( addVariable ("L1_MU20", m_L1_MU20 ,"", false) );
256 CHECK( addVariable ("L1_MU40", m_L1_MU40 ,"", false) );
257 CHECK( addVariable ("L1_MU0_COMM", m_L1_MU0_COMM ,"", false) );
258 CHECK( addVariable ("L1_2MU0", m_L1_2MU0 ,"", false) );
259 CHECK( addVariable ("L1_2MU4", m_L1_2MU4 ,"", false) );
260 CHECK( addVariable ("L1_2MU6", m_L1_2MU6 ,"", false) );
261 CHECK( addVariable ("L1_2MU10", m_L1_2MU10 ,"", false) );
262 CHECK( addVariable ("L1_2MU11", m_L1_2MU11 ,"", false) );
263 CHECK( addVariable ("L1_2MU15", m_L1_2MU15 ,"", false) );
264 CHECK( addVariable ("L1_2MU20", m_L1_2MU20 ,"", false) );
265 CHECK( addVariable ("L1_3MU0", m_L1_3MU0 ,"", false) );
266 CHECK( addVariable ("L1_3MU4", m_L1_3MU4 ,"", false) );
267 CHECK( addVariable ("L1_3MU6", m_L1_3MU6 ,"", false) );
268 CHECK( addVariable ("L1_4MU0", m_L1_4MU0 ,"", false) );
269 } // IF
270
271 // VERTEXING AND PILEUP
272 if(m_LevelOfDetails > 5){
273 CHECK( addVariable( "nVtx", m_nVtx, "", 0 ) );
274 } // IF
275
276 return StatusCode::SUCCESS;
277} // TILEMUONEVENTFILLERTOOL::BOOK
278
279//===========================================================
281//===========================================================
282// FILLS D3PD TREE EVENT-BY-EVENT
283
284 // OUTPUT MESSAGING SERVICE
285
286 ATH_MSG_DEBUG(" in TileEventFillerTool::fill ");
287
288 // GENERAL EVENT IDENTIFICATION INFORMATION
289 if(m_LevelOfDetails > 0){
290 // EVENT ID
291 *m_run_number = p.runNumber();
292 *m_event_number = p.eventNumber();
293 *m_timestamp = p.timeStamp();
297 *m_lbn = p.lumiBlock();
298 *m_actualInteractionPerCrossing = p.actualInteractionsPerCrossing();
299 *m_averageInteractionPerCrossing = p.averageInteractionsPerCrossing();
300 } // IF
301
302 // ELABORATE EVENT INFORMATION
303 if(m_LevelOfDetails > 1){
304 *m_timestamp_ns = p.timeStampNSOffset();
305 *m_bcid = p.bcid();
306 *m_detmask0 = p.detectorMask0();
307 *m_detmask1 = p.detectorMask1();
308 } // IF
309
310 // NUMBER OF MUONS
311 if(m_LevelOfDetails > 2){
312 const xAOD::MuonContainer *MuonsCont = 0;
313 CHECK( evtStore()->retrieve( MuonsCont, "Muons" ) );
314 *m_N_mu = MuonsCont->size();
315 } // IF
316
317 //======================//
318 // STORE MISSING ENERGY //
319 //======================//
320 // MISSING ENERGY POINTER RETRIEVAL: EACH TIME IT IS CHECKED WHETHER THE MISSING ENERGY VARIABLE
321 // COULD BE RETRIEVED FROM THE STOREGATE. THEN THE TRANSVERSE ENERGIES IN X AND Y AND THE SUMMED
322 // MISSING ENERGY ARE STORED.
324 // SET WHICH MISSING ENERGY VARIABLES SHOULD BE ADDED TO D3PD
325 const xAOD::MissingETContainer* missingEtContainer = nullptr;
326 if(!evtStore()->retrieve(missingEtContainer, m_metContainer).isFailure()) {
327
328 const xAOD::MissingET* finalClus = (*missingEtContainer)["FinalClus"];
329 if (!finalClus) {
330 ATH_MSG_WARNING( "No total MissingET object found in container with name FinalClus");
331 } else {
332 *m_MET_Ref_FinalClus_Ex = finalClus->mpx();
333 *m_MET_Ref_FinalClus_Ey = finalClus->mpy();
334 *m_MET_Ref_FinalClus_EtSum = finalClus->sumet();
335 }
336
337 const xAOD::MissingET* finalTrk = (*missingEtContainer)["FinalTrk"];
338 if (!finalTrk) {
339 ATH_MSG_WARNING( "No total MissingET object found in container with name FinalTrk");
340 } else {
341 *m_MET_Ref_FinalTrk_Ex = finalTrk->mpx();
342 *m_MET_Ref_FinalTrk_Ey = finalTrk->mpy();
343 *m_MET_Ref_FinalTrk_EtSum = finalTrk->sumet();
344 }
345
346 } else {
348 ATH_MSG_ERROR("COULD NOT RETRIEVE MET!");
349 }
350
351 } // IF
352
353
354
355 if(m_LevelOfDetails > 4){
356 // ACCESS TRIGGER INFORMATION
357 const std::vector< xAOD::EventInfo::StreamTag > stags = p.streamTags();
358 //std::vector< xAOD::EventInfo::StreamTag >::const_iterator itr = stags.begin();
359 //std::vector< xAOD::EventInfo::StreamTag >::const_iterator end = stags.end();
360
361/* //THIS NEEDS TO MODIFY TO WORK ON xAODs
362 // CHECK TRIGGER DECISIONS
363 *m_EF_2mu10 = m_trigDec->isPassed("EF_2mu10");
364 *m_EF_2mu10_loose = m_trigDec->isPassed("EF_2mu10_loose");
365 *m_EF_2mu4 = m_trigDec->isPassed("EF_2mu4");
366 *m_EF_2mu6 = m_trigDec->isPassed("EF_2mu6");
367 *m_EF_3mu4 = m_trigDec->isPassed("EF_3mu4");
368 *m_EF_3mu6 = m_trigDec->isPassed("EF_3mu6");
369 *m_EF_4mu4 = m_trigDec->isPassed("EF_4mu4");
370 *m_EF_mu10 = m_trigDec->isPassed("EF_mu10");
371 *m_EF_mu10_loose = m_trigDec->isPassed("EF_mu10_loose");
372 *m_EF_mu10i_loose = m_trigDec->isPassed("EF_mu10i_loose");
373 *m_EF_mu13 = m_trigDec->isPassed("EF_mu13");
374 *m_EF_mu15 = m_trigDec->isPassed("EF_mu15");
375 *m_EF_mu15i = m_trigDec->isPassed("EF_mu15i");
376 *m_EF_mu15i_medium= m_trigDec->isPassed("EF_mu15i_medium");
377 *m_EF_mu18 = m_trigDec->isPassed("EF_mu18");
378 *m_EF_mu18_medium = m_trigDec->isPassed("EF_mu18_medium");
379 *m_EF_mu20 = m_trigDec->isPassed("EF_mu20");
380 *m_EF_mu20_medium = m_trigDec->isPassed("EF_mu20_medium");
381 *m_EF_mu20i = m_trigDec->isPassed("EF_mu20i");
382 *m_EF_mu20i_medium= m_trigDec->isPassed("EF_mu20i_medium");
383 *m_EF_mu22 = m_trigDec->isPassed("EF_mu22");
384 *m_EF_mu22_medium = m_trigDec->isPassed("EF_mu22_medium");
385 *m_EF_mu24_medium = m_trigDec->isPassed("EF_mu24_medium");
386 *m_EF_mu24_tight = m_trigDec->isPassed("EF_mu24_tight");
387 *m_EF_mu30_medium = m_trigDec->isPassed("EF_mu30_medium");
388 *m_EF_mu30_tight = m_trigDec->isPassed("EF_mu30_tight");
389 *m_EF_mu4 = m_trigDec->isPassed("EF_mu4");
390 *m_EF_mu4_mu6 = m_trigDec->isPassed("EF_mu4_mu6");
391 *m_EF_mu40_slow = m_trigDec->isPassed("EF_mu40_slow");
392 *m_EF_mu6 = m_trigDec->isPassed("EF_mu6");
393
394 // LEVEL 1 TRIGGERS
395 *m_L1_MU0_EMPTY = m_trigDec->isPassed("L1_MU0_EMPTY");
396 *m_L1_MU0 = m_trigDec->isPassed("L1_MU0");
397 *m_L1_MU4 = m_trigDec->isPassed("L1_MU4");
398 *m_L1_MU6 = m_trigDec->isPassed("L1_MU6");
399 *m_L1_MU10 = m_trigDec->isPassed("L1_MU10");
400 *m_L1_MU11 = m_trigDec->isPassed("L1_MU11");
401 *m_L1_MU15 = m_trigDec->isPassed("L1_MU15");
402 *m_L1_MU20 = m_trigDec->isPassed("L1_MU20");
403 *m_L1_MU40 = m_trigDec->isPassed("L1_MU40");
404 *m_L1_MU0_COMM = m_trigDec->isPassed("L1_MU0_COMM");
405 *m_L1_2MU0 = m_trigDec->isPassed("L1_2MU0");
406 *m_L1_2MU4 = m_trigDec->isPassed("L1_2MU4");
407 *m_L1_2MU6 = m_trigDec->isPassed("L1_2MU6");
408 *m_L1_2MU10 = m_trigDec->isPassed("L1_2MU10");
409 *m_L1_2MU11 = m_trigDec->isPassed("L1_2MU11");
410 *m_L1_2MU15 = m_trigDec->isPassed("L1_2MU15");
411 *m_L1_2MU20 = m_trigDec->isPassed("L1_2MU20");
412 *m_L1_3MU0 = m_trigDec->isPassed("L1_3MU0");
413 *m_L1_3MU4 = m_trigDec->isPassed("L1_3MU4");
414 *m_L1_3MU6 = m_trigDec->isPassed("L1_3MU6");
415 *m_L1_4MU0 = m_trigDec->isPassed("L1_4MU0");
416*/
417 } // IF
418
419 if(m_LevelOfDetails > 5){
420 // STORE NUMBER OF VERTICES
421 // RETRIEVE PRIMARY VERTICES
422 if(evtStore()->retrieve( m_pVertex, "VxPrimaryCandidate").isFailure()){
423 ATH_MSG_WARNING("No VxPrimaryCandidate container found in TES");
424 } // IF
425 *m_nVtx = m_pVertex ? m_pVertex->size() : -1;
426 } // IF
427
428 return StatusCode::SUCCESS;
429} // TILEMUONEVENTFILLERTOOL::FILL
430} // NAMESPACE D3PD
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
#define CHECK(...)
Evaluate an expression and check for errors.
virtual StatusCode addVariable(const std::string &name, const std::type_info &ti, void *&ptr, const std::string &docstring="", const void *defval=0)
Type-safe wrapper for block filler tools.
virtual StatusCode book()
Declare tuple variables.
const xAOD::TrigDecision * m_trigDec
const VxContainer * m_pVertex
virtual StatusCode fill(const xAOD::EventInfo &ei)
Fill one block — type-safe version.
TileEventFillerTool(const std::string &type, const std::string &name, const IInterface *parent)
size_type size() const noexcept
Returns the number of elements in the collection.
@ IS_CALIBRATION
true: calibration, false: physics
@ IS_SIMULATION
true: simulation, false: data
@ IS_TESTBEAM
true: testbeam, false: full detector
float sumet() const
Returns.
float mpx() const
Returns .
float mpy() const
Returns .
Block filler tool for noisy FEB information.
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
EventInfo_v1 EventInfo
Definition of the latest event info version.
MissingET_v1 MissingET
Version control by type defintion.
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".