ATLAS Offline Software
Loading...
Searching...
No Matches
TestPileUpTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include <algorithm>
6
7#include "TestPileUpTool.h"
8
10 const std::string& name,
11 const IInterface* parent)
12 : PileUpToolBase(type, name, parent)
13{
14}
15
16StatusCode TestPileUpTool::prepareEvent(const EventContext& /*ctx*/, unsigned int nInputEvents)
17{
18 ATH_MSG_INFO( "prepareEvent: expect to process " << nInputEvents << " events this time." );
19 return StatusCode::SUCCESS;
20}
21
22StatusCode TestPileUpTool::mergeEvent(const EventContext& /*ctx*/)
23{
24 for (const auto& bc : m_seen)
25 {
26 ATH_MSG_INFO( "mergeEvent: there are " << bc.first << " events in bunch xing " << bc.second );
27 }
28 return StatusCode::SUCCESS;
29}
30
31StatusCode TestPileUpTool::processBunchXing(int bunchXing,
32 SubEventIterator bSubEvents,
33 SubEventIterator eSubEvents)
34{
35 m_seen.push_back(std::make_pair(std::distance(bSubEvents,eSubEvents), bunchXing));
36 if(m_doFiltering && bunchXing==0)
37 {
38 if(m_maxInTimePileUp < m_seen.back().first)
39 {
40 ATH_MSG_INFO("Triggering filter as there were " << m_seen.back().first << " pile-up events in time.");
41 m_filterPassed = false;
42 }
43 }
44
45 SubEventIterator iEvt(bSubEvents);
46 while (iEvt != eSubEvents)
47 {
48 StoreGateSvc& seStore(*iEvt->ptr()->evtStore());
49 ATH_MSG_DEBUG("SubEvt EventInfo from StoreGate " << seStore.name() << " : "
50 << " bunch crossing : " << bunchXing
51 << " time offset: " << iEvt->time()
52 << " event: " << iEvt->ptr()->eventNumber()
53 << " run: " << iEvt->ptr()->runNumber()
54 );
55 ++iEvt;
56 }
57 return StatusCode::SUCCESS;
58}
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
std::vector< xAOD::EventInfo::SubEvent >::const_iterator SubEventIterator
Definition IPileUpTool.h:22
a sample implementation of IPileUpTool to test the framework
PileUpToolBase(const std::string &type, const std::string &name, const IInterface *parent)
The Athena Transient Store API.
Gaudi::Property< unsigned int > m_maxInTimePileUp
virtual StatusCode prepareEvent(const EventContext &ctx, unsigned int nInputEvents) override final
called before the bunchXing loop
virtual StatusCode processBunchXing(int bunchXing, SubEventIterator bSubEvents, SubEventIterator eSubEvents) override final
called for each active bunch-crossing to process current SubEvents bunchXing is in ns
TestPileUpTool(const std::string &type, const std::string &name, const IInterface *parent)
Gaudi::Property< bool > m_doFiltering
virtual StatusCode mergeEvent(const EventContext &ctx) override final
called at the end of the subevts loop.
std::vector< std::pair< unsigned int, int > > m_seen
return false if not interested in certain xing times (in ns) implemented by default in PileUpToolBase...