ATLAS Offline Software
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
PileUpEventLoopMgr Class Reference

The ATLAS event loop for pile-up applications. More...

#include <PileUpEventLoopMgr.h>

Inheritance diagram for PileUpEventLoopMgr:
Collaboration diagram for PileUpEventLoopMgr:

Public Member Functions

 PileUpEventLoopMgr (const std::string &nam, ISvcLocator *svcLoc)
 Standard Constructor. More...
 
virtual ~PileUpEventLoopMgr ()
 Standard Destructor. More...
 
virtual StatusCode initialize ()
 implementation of IAppMgrUI::initialize More...
 
virtual StatusCode finalize ()
 implementation of IAppMgrUI::finalize More...
 
virtual StatusCode nextEvent (int maxevt)
 implementation of IAppMgreUI::terminate More...
 
virtual StatusCode executeEvent (EventContext &&ctx)
 implementation of IEventProcessor::executeEvent(void* par) More...
 
virtual StatusCode seek (int evt)
 Seek to a given event. More...
 
virtual int curEvent () const
 Return the current event count. More...
 
virtual void modifyEventContext (EventContext &ctx, const EventID &eID, bool consume_modifier_stream)
 
virtual StatusCode queryInterface (const InterfaceID &riid, void **ppvInterface)
 
MsgStream & msg () const
 The standard message stream. More...
 
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream. More...
 
bool msgLvl (const MSG::Level lvl) const
 Test the output level. More...
 
 DeclareInterfaceID (IEventSeek, 1, 0)
 
bool msgLvl (const MSG::Level lvl) const
 Test the output level. More...
 
MsgStream & msg () const
 The standard message stream. More...
 
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream. More...
 
void setLevel (MSG::Level lvl)
 Change the current logging level. More...
 

Private Types

typedef ServiceHandle< IEvtIdModifierSvcIEvtIdModifierSvc_t
 

Private Member Functions

StatusCode setupStreams ()
 setup input and overlay selectors and iters More...
 
virtual StatusCode executeAlgorithms (const EventContext &ctx)
 Run the algorithms for the current event. More...
 
unsigned int getBCID (int bunchXing, unsigned int centralBCID) const
 return the 'fake BCID' corresponding to bunchXing More...
 
void initMessaging () const
 Initialize our message level and MessageSvc. More...
 

Private Attributes

SmartIF< IAlgExecStateSvc > m_aess
 Reference to the Algorithm Execution State Svc. More...
 
ServiceHandle< IIncidentSvc > m_incidentSvc
 Incident Service. More...
 
ServiceHandle< PileUpMergeSvcm_mergeSvc
 PileUp Merge Service. More...
 
PileUpStream m_origStream
 Input Stream. More...
 
ServiceHandle< StoreGateSvcm_evtStore
 output store More...
 
IEvtIdModifierSvc_t m_evtIdModSvc
 
std::string m_nm
 Message source name. More...
 
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels) More...
 
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer. More...
 
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level. More...
 
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging) More...
 
Properties
ServiceHandle< IEvtSelector > m_origSel
 Original (Physics) Event selector (background for overlay). More...
 
ServiceHandle< IEvtSelector > m_signalSel
 Signal Event selector (for overlay). More...
 
ToolHandleArray< IBkgStreamsCachem_caches
 BkgStreamsCaches managing background events. More...
 
Gaudi::Property< float > m_maxCollPerXing
 (max) minBias interactions per Xing, for setting MC luminosity More...
 
Gaudi::Property< float > m_xingFreq
 Xing frequency(ns);. More...
 
Gaudi::Property< int > m_firstXing
 first xing to be simulated (0th xing is 1st after trigger) More...
 
Gaudi::Property< int > m_lastXing
 last xing to be simulated (0th xing is 1st after trigger) More...
 
Gaudi::Property< bool > m_allowSubEvtsEOF
 property: allow sub evts EOF condition when maxevt==-1 More...
 
Gaudi::Property< bool > m_xingByXing
 property: process bkg events xing by xing without caching them More...
 
Gaudi::Property< int > m_failureMode
 property: control behaviour of event loop on algorithm failure More...
 
Gaudi::Property< std::string > m_evinfName
 SG key for the EventInfoContainer. More...
 
Gaudi::Property< std::string > m_evinfContName
 SG key for the EventInfoContainer. More...
 
ServiceHandle< IBeamIntensitym_beamInt
 property: beam intensity service handle for beam profile in local time More...
 
ServiceHandle< IBeamLuminositym_beamLumi
 property: beam intensity service handle for luminosity profile in iovtime More...
 
uint32_t m_currentRun
 current run number More...
 
bool m_firstRun
 
unsigned int m_maxBunchCrossingPerOrbit
 max bunch crossings per orbit More...
 
int m_nevt
 
int m_ncurevt
 
bool m_skipExecAlgs
 
bool m_loadProxies
 
Gaudi::Property< bool > m_allowSerialAndMPToDiffer
 property: Default true. More...
 
Gaudi::Property< uint32_t > m_mcChannelNumber { this, "MCChannelNumber", 0, "sample MC channel number" }
 

Detailed Description

The ATLAS event loop for pile-up applications.

Definition at line 43 of file PileUpEventLoopMgr.h.

Member Typedef Documentation

◆ IEvtIdModifierSvc_t

Definition at line 108 of file PileUpEventLoopMgr.h.

Constructor & Destructor Documentation

◆ PileUpEventLoopMgr()

PileUpEventLoopMgr::PileUpEventLoopMgr ( const std::string &  nam,
ISvcLocator *  svcLoc 
)

Standard Constructor.

Definition at line 53 of file PileUpEventLoopMgr.cxx.

55  : MinimalEventLoopMgr(name, svcLoc)
56  , AthMessaging (name)
57  , m_incidentSvc("IncidentSvc", name) //FIXME should this be configurable?
58  , m_mergeSvc("PileUpMergeSvc", name)
59  , m_evtStore("StoreGateSvc/StoreGateSvc", name)
60  , m_evtIdModSvc("", name)
61  , m_origSel("EventSelector", name)
62  , m_signalSel("", name)
63  , m_caches(this)
64  , m_maxCollPerXing(23.0)
65  , m_xingFreq(25)
66  , m_firstXing(-2)
67  , m_lastXing(+1)
68  , m_allowSubEvtsEOF(true)
69  , m_xingByXing(false)
70  , m_failureMode(1)
73  , m_beamInt("FlatBM", name)
74  , m_beamLumi("LumiProfileSvc", name)
75  , m_currentRun(0)
76  , m_firstRun(true)
78  , m_nevt(0)
79  , m_ncurevt(0)
80  , m_skipExecAlgs(false)
81  , m_loadProxies(true)
83 {
84  declareProperty("MaxBunchCrossingPerOrbit", m_maxBunchCrossingPerOrbit, "The number of slots in each LHC beam. Default: 3564.");
85  declareProperty("OrigSelector", m_origSel, "EventSelector for original (physics) events stream" );
86  declareProperty("SignalSelector", m_signalSel, "EventSelector for signal (hard-scatter) events stream" );
87  declareProperty("XingFrequency", m_xingFreq, "ns");
88  declareProperty("firstXing", m_firstXing, "time of first xing / XingFrequency (0th xing is 1st after trigger)");
89  declareProperty("lastXing", m_lastXing, "time of last xing / XingFrequency (0th xing is 1st after trigger)");
90  declareProperty("MaxMinBiasCollPerXing", m_maxCollPerXing, "Set to digitization numberOfCollisions prop. for variable-mu and RunDMC jobs.");
91  declareProperty("bkgCaches", m_caches, "list of tools managing bkg events");
92  declareProperty("AllowSubEvtsEOF", m_allowSubEvtsEOF, "if true(default) an EOF condition in the BkgStreamsCaches is not considered to be an error IF maxevt=-1 (loop over all available events)");
93  declareProperty("XingByXing", m_xingByXing, "if set to true we will not cache bkg events from one xing to then next. This greatly increases the amount of I/O and greatly reduces the memory required to run a job");
94  declareProperty("FailureMode", m_failureMode,
95  "Controls behaviour of event loop depending on return code of"
96  " Algorithms. 0: all non-SUCCESSes terminate job. "
97  "1: RECOVERABLE skips to next event, FAILURE terminates job "
98  "(DEFAULT). 2: RECOVERABLE and FAILURE skip to next events");
99 
100  declareProperty("BeamInt", m_beamInt,
101  "The service providing the beam intensity distribution");
102  declareProperty("BeamLuminosity", m_beamLumi,
103  "The service providing the beam luminosity distribution vs. run");
104  declareProperty("PileUpMergeSvc", m_mergeSvc, "PileUp Merge Service");
105  declareProperty("EvtIdModifierSvc", m_evtIdModSvc, "ServiceHandle for EvtIdModifierSvc");
106  declareProperty("AllowSerialAndMPToDiffer", m_allowSerialAndMPToDiffer, "When set to False, this will allow the code to reproduce serial output in an AthenaMP job, albeit with a significant performance penalty.");
107  declareProperty("EventInfoName", m_evinfName, "SG key for the EventInfo object");
108  declareProperty("EventInfoContName", m_evinfContName, "SG key for the EventInfoContainer object");
109  // m_caches.push_back("BkgStreamsCache/MinBiasCache");
110 }

◆ ~PileUpEventLoopMgr()

PileUpEventLoopMgr::~PileUpEventLoopMgr ( )
virtual

Standard Destructor.

Definition at line 115 of file PileUpEventLoopMgr.cxx.

115 {}

Member Function Documentation

◆ curEvent()

int PileUpEventLoopMgr::curEvent ( ) const
virtual

Return the current event count.

Implements IEventSeek.

Definition at line 566 of file PileUpEventLoopMgr.cxx.

567 {
568  return m_nevt;
569 }

◆ DeclareInterfaceID()

IEventSeek::DeclareInterfaceID ( IEventSeek  ,
,
 
)
inherited

◆ executeAlgorithms()

StatusCode PileUpEventLoopMgr::executeAlgorithms ( const EventContext &  ctx)
privatevirtual

Run the algorithms for the current event.

Definition at line 607 of file PileUpEventLoopMgr.cxx.

608 {
609  // Call the execute() method of all top algorithms
610  for ( ListAlg::iterator ita = m_topAlgList.begin();
611  ita != m_topAlgList.end();
612  ++ita ) {
613  StatusCode sc = (*ita)->sysExecute( ctx );
614  // this duplicates what is already done in Algorithm::sysExecute, which
615  // calls Algorithm::setExecuted, but eventually we plan to remove that
616  // function
617  m_aess->algExecState(*ita, ctx ).setState(AlgExecState::State::Done, sc);
618  if ( !sc.isSuccess() ) {
619  ATH_MSG_INFO ( "Execution of algorithm " <<
620  (*ita)->name() << " failed with StatusCode::" << sc );
621  return sc;
622  }
623  }
624 
625  return StatusCode::SUCCESS;
626 }

◆ executeEvent()

StatusCode PileUpEventLoopMgr::executeEvent ( EventContext &&  ctx)
virtual

implementation of IEventProcessor::executeEvent(void* par)

Fire begin-Run incident if new run:

m_failureMode 1, RECOVERABLE: skip algorithms, but do not terminate job FAILURE: terminate job

m_failureMode 2: skip algorithms, but do not terminate job

Definition at line 632 of file PileUpEventLoopMgr.cxx.

633 {
635  if (m_firstRun || (m_currentRun != ctx.eventID().run_number())) {
636  // Fire EndRun incident unless this is the first run
637  if (!m_firstRun) {
638  m_incidentSvc->fireIncident(Incident(this->name(),IncidentType::EndRun));
639  }
640  m_firstRun = false;
641  m_currentRun = ctx.eventID().run_number();
642 
643  ATH_MSG_INFO ( " ===>>> start of run " << m_currentRun << " <<<===" );
644 
645  // Fire BeginRun "Incident"
646  m_incidentSvc->fireIncident(Incident(this->name(),IncidentType::BeginRun,ctx));
647  }
648 
649  bool eventFailed(false);
650  // Call the execute() method of all top algorithms
652 
653  if (!sc.isSuccess()) {
654  eventFailed = true;
655  m_aess->setEventStatus( EventStatus::AlgFail, ctx );
656 
660  if (m_failureMode == 1 && sc.isRecoverable()) {
661  ATH_MSG_WARNING ( "RECOVERABLE error returned by algorithm. " <<
662  "Skipping remaining algorithms." << std::endl <<
663  "\tNo output will be written for this event, " <<
664  "but job will continue to next event" );
665  eventFailed = false;
666  }
667 
669  if (m_failureMode >= 2) {
670  ATH_MSG_INFO ( "Skipping remaining algorithms." << std::endl <<
671  "\tNo output will be written for this event, " <<
672  "but job will continue to next event" );
673  eventFailed = false;
674  }
675  }
676  else {
677  m_aess->setEventStatus( EventStatus::Success, ctx );
678 
679  // Call the execute() method of all output streams
680  for (ListAlg::iterator ito = m_outStreamList.begin();
681  ito != m_outStreamList.end(); ++ito ) {
682  sc = (*ito)->sysExecute( ctx );
683  if ( !sc.isSuccess() ) {
684  eventFailed = true;
685  }
686  }
687  }
688 
689  //------------------------------------------------------------------------
690  // Check if there was an error processing current event
691  //------------------------------------------------------------------------
692  return eventFailed?StatusCode::FAILURE:StatusCode::SUCCESS;
693 }

◆ finalize()

StatusCode PileUpEventLoopMgr::finalize ( )
virtual

implementation of IAppMgrUI::finalize

Definition at line 194 of file PileUpEventLoopMgr.cxx.

195 {
196  ATH_MSG_INFO ( "Finalizing " << this->name() );
197 
198  //we need to release all our BkgStreamCaches
201  while (cacheIterator != endOfCaches) {
202  (*cacheIterator++)->release();
203  }
204  m_caches.clear();
205 
206  //and to clean up the store the stream owns
208 
210 }

◆ getBCID()

unsigned int PileUpEventLoopMgr::getBCID ( int  bunchXing,
unsigned int  centralBCID 
) const
inlineprivate

return the 'fake BCID' corresponding to bunchXing

Definition at line 91 of file PileUpEventLoopMgr.h.

91  {
92  //FIXME to be completely safe this should should probably depend on the bunch spacing too. Perhaps that concept should be deprecated though?
93  return static_cast<unsigned int>((((bunchXing + static_cast<int>(centralBCID)) % static_cast<int>(m_maxBunchCrossingPerOrbit)) + static_cast<int>(m_maxBunchCrossingPerOrbit) ) % static_cast<int>(m_maxBunchCrossingPerOrbit));
94  }

◆ initialize()

StatusCode PileUpEventLoopMgr::initialize ( )
virtual

implementation of IAppMgrUI::initialize

Definition at line 120 of file PileUpEventLoopMgr.cxx.

121 {
122  ATH_MSG_INFO ( "Initializing " << this->name() ) ;
124  ATH_MSG_WARNING ( "AllowSerialAndMPToDiffer=False! This will incur serious performance penalties! But Serial and MP output will be the same." );
125  }
126 
127  //locate the StoreGateSvc and initialize our local ptr
128  CHECK(m_evtStore.retrieve());
129 
130  //reset output store proxy provider: we don't want to have one!
131  m_evtStore->setProxyProviderSvc(nullptr);
132 
133  //locate the IncidentSvc and initialize our local ptr
134  CHECK(m_incidentSvc.retrieve());
135 
136  //locate the PileUpMergeSvc and initialize our local ptr
137  CHECK(m_mergeSvc.retrieve());
138 
139  //-------------------------------------------------------------------------
140  // Setup Event Selector
141  //-------------------------------------------------------------------------
142  CHECK(this->setupStreams());
143 
144  // Get the value of SkipEvents. It is needed for seeking
145  SmartIF<IProperty> prpMgr(serviceLocator());
146  IEvtSelector* evtSelector{};
147  if (prpMgr.isValid()) {
148  // Get event selector name. Retrieve EventSelector
149  std::string evtSelName = prpMgr->getProperty("EvtSel").toString();
150  CHECK(serviceLocator()->service(evtSelName,evtSelector));
151  }
152  else {
153  ATH_MSG_ERROR ( "IProperty interface not found in ApplicationMgr" );
154  return StatusCode::FAILURE;
155  }
156 
157  SmartIF<IProperty> prpMgr1(evtSelector);
158  if (prpMgr1.isValid()) {
159  std::string skipEventsStr = prpMgr1->getProperty("SkipEvents").toString();
160  m_ncurevt = std::atoi(skipEventsStr.c_str());
161  }
162  else {
163  ATH_MSG_ERROR ( "IProperty interface not found on the event selector" );
164  return StatusCode::FAILURE;
165  }
166 
167  // Get the AlgExecStateSvc
168  m_aess = serviceLocator()->service("AlgExecStateSvc");
169  if (!m_aess.isValid()) {
170  ATH_MSG_FATAL ( "Error retrieving AlgExecStateSvc" );
171  return StatusCode::FAILURE;
172  }
173 
174  //--------------------------------------------------------------------------
175  // Set up the EventID modifier Service
176  //--------------------------------------------------------------------------
177  if( m_evtIdModSvc.empty() ) {
178  ATH_MSG_DEBUG ( "EventID modifier Service not set. No run number, ... overrides will be applied." );
179  }
180  else if ( !m_evtIdModSvc.retrieve().isSuccess() ) {
181  ATH_MSG_INFO ( "Could not find EventID modifier Service. No run number, ... overrides will be applied." );
182  }
183 
184  //-------------------------------------------------------------------------
185  // Base class initialize (done at the end to allow algs to access stores)
186  //-------------------------------------------------------------------------
187 
189 }

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40 {
42  m_lvl = m_imsg ?
43  static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
44  MSG::INFO;
45 }

◆ modifyEventContext()

void PileUpEventLoopMgr::modifyEventContext ( EventContext &  ctx,
const EventID eID,
bool  consume_modifier_stream 
)
virtual

Definition at line 224 of file PileUpEventLoopMgr.cxx.

224  {
225 
226  if (m_evtIdModSvc.isSet()) {
227  EventID new_eID(eID);
228  // m_nevt - 1 because the PileUpEventLoopMgr increments it rather early
229  m_evtIdModSvc->modify_evtid(new_eID, m_ncurevt - 1, consume_modifier_stream);
230  if (msgLevel(MSG::DEBUG)) {
231  unsigned int oldrunnr=eID.run_number();
232  unsigned int oldLB=eID.lumi_block();
233  unsigned int oldTS=eID.time_stamp();
234  unsigned int oldTSno=eID.time_stamp_ns_offset();
235  ATH_MSG_DEBUG ( "modifyEventContext: use evtIdModSvc runnr=" << oldrunnr << " -> " << new_eID.run_number() );
236  ATH_MSG_DEBUG ( "modifyEventContext: use evtIdModSvc LB=" << oldLB << " -> " << new_eID.lumi_block() );
237  ATH_MSG_DEBUG ( "modifyEventContext: use evtIdModSvc TimeStamp=" << oldTS << " -> " << new_eID.time_stamp() );
238  ATH_MSG_DEBUG ( "modifyEventContext: use evtIdModSvc TimeStamp ns Offset=" << oldTSno << " -> " << new_eID.time_stamp_ns_offset() );
239  }
240  ctx.setEventID(new_eID);
241  return;
242  }
243 
244  ctx.setEventID( eID );
245 }

◆ msg() [1/4]

MsgStream & AthMessaging::msg
inline

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 92 of file AthMessaging.h.

165 {
166  MsgStream* ms = m_msg_tls.get();
167  if (!ms) {
168  if (!m_initialized.test_and_set()) initMessaging();
169  ms = new MsgStream(m_imsg,m_nm);
170  m_msg_tls.reset( ms );
171  }
172 
173  ms->setLevel (m_lvl);
174  return *ms;
175 }

◆ msg() [2/4]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 164 of file AthMessaging.h.

165 {
166  MsgStream* ms = m_msg_tls.get();
167  if (!ms) {
168  if (!m_initialized.test_and_set()) initMessaging();
169  ms = new MsgStream(m_imsg,m_nm);
170  m_msg_tls.reset( ms );
171  }
172 
173  ms->setLevel (m_lvl);
174  return *ms;
175 }

◆ msg() [3/4]

MsgStream & AthMessaging::msg
inline

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 99 of file AthMessaging.h.

180 { return msg() << lvl; }

◆ msg() [4/4]

MsgStream & AthMessaging::msg ( const MSG::Level  lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 179 of file AthMessaging.h.

180 { return msg() << lvl; }

◆ msgLvl() [1/2]

bool AthMessaging::msgLvl
inline

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 86 of file AthMessaging.h.

152 {
153  if (!m_initialized.test_and_set()) initMessaging();
154  if (m_lvl <= lvl) {
155  msg() << lvl;
156  return true;
157  } else {
158  return false;
159  }
160 }

◆ msgLvl() [2/2]

bool AthMessaging::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 151 of file AthMessaging.h.

152 {
153  if (!m_initialized.test_and_set()) initMessaging();
154  if (m_lvl <= lvl) {
155  msg() << lvl;
156  return true;
157  } else {
158  return false;
159  }
160 }

◆ nextEvent()

StatusCode PileUpEventLoopMgr::nextEvent ( int  maxevt)
virtual

implementation of IAppMgreUI::terminate

implementation of IAppMgrUI::nextEvent

Is this correct, or should it be set to a pileup store?

ask the BeamLuminositySvc to check for a new scalefactor

Definition at line 251 of file PileUpEventLoopMgr.cxx.

252 {
253  // make nextEvent(0) a dummy call, as needed by athenaMP
254  if (0 == maxevt) {
255  return StatusCode::SUCCESS;
256  }
257 
258 
259  // These following two initialization loops are performed here in case new
260  // Top level Algorithms or Output Streams have been created interactively
261  // at run-time instead of configuration time. Note also that it is possible
262  // that some newly created Algorithms are still not initialized as a result
263  // of these loops (e.g. where the membership of an existing Sequencer is
264  // changed at run-time. In this case, the Algorithm::sysExecute() function
265  // will ensure that the Algorithm is correctly initialized. This mechanism
266  // actually makes loops redundant, but they do provide a well defined
267  // location for the initialization to take place in the non-interactive case.
268 
269  // Initialize the list of Algorithms. Note that existing Algorithms
270  // are protected against multiple initialization attempts.
271  ListAlg::iterator ita;
272  for ( ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ++ita ) {
273  if( !((*ita)->sysInitialize()).isSuccess() ) {
274  ATH_MSG_ERROR ( "Unable to initialize Algorithm: " <<
275  (*ita)->name() );
276  return StatusCode::FAILURE;
277  }
278  }
279 
280  // Initialize the list of Output Streams. Note that existing Output Streams
281  // are protected against multiple initialization attempts.
282  for (ita = m_outStreamList.begin(); ita != m_outStreamList.end(); ++ita ) {
283  if( !((*ita)->sysInitialize()).isSuccess() ) {
284  ATH_MSG_ERROR ( "Unable to initialize Output Stream: " <<
285  (*ita)->name() );
286  return StatusCode::FAILURE;
287  }
288  }
289 
290  const xAOD::EventInfo *inputEventInfo{};
291 
292  // loop over events if the maxevt (received as input) is different from -1.
293  // if evtmax is -1 it means infinite loop
294  while( (maxevt == -1 || m_nevt < maxevt) &&
295  0 != (inputEventInfo = m_origStream.nextEventPre()) ) {
296  // Check if there is a scheduled stop issued by some algorithm/sevice
297  if ( m_scheduledStop ) {
298  m_scheduledStop = false;
299  ATH_MSG_ALWAYS ( "A stopRun was requested. Terminating event loop." );
300  break;
301  }
302  ++m_nevt; ++m_ncurevt;
303 
304  //-----------------------------------------------------------------------
305  // Setup overlaid event in the event store
306  //-----------------------------------------------------------------------
307 
308  xAOD::EventInfo *pOverEvent = new xAOD::EventInfo();
309  xAOD::EventAuxInfo *pOverEventAux = new xAOD::EventAuxInfo();
310  pOverEvent->setStore( pOverEventAux );
311  ATH_MSG_DEBUG(" #subevents in the signal event =" << inputEventInfo->subEvents().size());
312 
313  // Copy the eventInfo data from origStream event
314  *pOverEvent = *inputEventInfo;
315  pOverEvent->clearSubEvents(); // start clean without any subevents
316 
317  // Propagate MC metadata
318  if (pOverEvent->mcChannelNumber() == 0) {
319  if (m_mcChannelNumber.value() != 0) {
320  ATH_MSG_WARNING("Input mcChannelNumber is 0, setting it to " << m_mcChannelNumber.value());
321  pOverEvent->setMCChannelNumber(m_mcChannelNumber.value());
322  } else {
323  ATH_MSG_WARNING("Input mcChannelNumber is 0");
324  }
325  } else {
326  if (m_mcChannelNumber.value() != 0 && pOverEvent->mcChannelNumber() != m_mcChannelNumber.value()) {
327  ATH_MSG_WARNING("Input mcChannelNumber (" << pOverEvent->mcChannelNumber()
328  << ") and provided mcChannelNumber (" << m_mcChannelNumber.value() << ") do not match.");
329  }
330  }
331 
332  if (pOverEvent->mcEventNumber() == 0) {
333  if (pOverEvent->eventNumber() != 0) {
334  ATH_MSG_WARNING("Input mcEventNumber is 0, setting it to match the eventNumber (" << pOverEvent->eventNumber() << ")");
335  pOverEvent->setMCEventNumber(pOverEvent->eventNumber());
336  } else {
337  ATH_MSG_ERROR("Input eventNumber and mcEventNumber are 0");
338  return StatusCode::FAILURE;
339  }
340  }
341 
342  if (pOverEvent->mcEventWeights().empty()) {
343  ATH_MSG_ERROR("Input mcEventWeights are empty. This should not happen.");
344  return StatusCode::FAILURE;
345  }
346 
347  // Record the xAOD object(s):
348  CHECK( m_evtStore->record( pOverEventAux, m_evinfName + "Aux." ) );
349  CHECK( m_evtStore->record( pOverEvent, m_evinfName ) );
350  pOverEvent->setEvtStore( &*m_evtStore );
351  // Create an EventInfoContainer for the pileup events:
354  puei->setStore( puaux );
355 
356  // Record the EI container object(s):
357  CHECK( m_evtStore->record( puei, m_evinfContName ) );
358  CHECK( m_evtStore->record( puaux, m_evinfContName+"Aux." ) );
359 
360  // Setup the EventContext.
361  // Ensure that the overridden run number etc. is being used
362  EventContext ctx;
363  EventID ev_id = eventIDFromxAOD( pOverEvent );
364  bool consume_modifier_stream = false; // FIXME/CHECK: was true inside TP converter and checks for active storegate
365  // kludge FIXME
367  if ( pAttrList != nullptr && pAttrList->size() > 6 ) {
368  // Ideally we would create the initial EventID from the TAG
369  // information, but not doing that (yet?). For now using the
370  // presence of TAG information in the HITS file to indicate that
371  // the EvtIdModifierSvc has not already been called for this
372  // Athena event.
373  consume_modifier_stream = true;
374  }
375  ctx.set(m_nevt,0);
376  modifyEventContext(ctx, ev_id, consume_modifier_stream);
378  ctx.setExtension( Atlas::ExtendedEventContext(m_evtStore->hiveProxyDict(),
379  ctx.eventID().run_number()) );
380  Gaudi::Hive::setCurrentContext( ctx );
381  m_aess->reset(ctx);
382  // make copy to std::move into store
383  auto puctx =std::make_unique<EventContext> ( ctx );
384  if (m_evtStore->record( std::move(puctx) ,"EventContext").isFailure()) {
385  ATH_MSG_ERROR ( "Error recording event context object" );
386  return StatusCode::FAILURE;
387  }
388 
389  //Update run number, event number, lumi block and timestamp from EventContext
390  pOverEvent->setRunNumber( ctx.eventID().run_number() );
391  pOverEvent->setEventNumber( ctx.eventID().event_number() );
392  pOverEvent->setLumiBlock( ctx.eventID().lumi_block() );
393  pOverEvent->setTimeStamp( ctx.eventID().time_stamp() );
394  ATH_MSG_DEBUG( "Updated pOverEvent " << *pOverEvent );
395 
396  ATH_MSG_INFO ( "nextEvent(): overlaying original event " <<
397  pOverEvent->runNumber() << '/' <<
398  pOverEvent->eventNumber() << '/' <<
399  pOverEvent->lumiBlock() );
400 
401  //ask the BeamIntensitySvc to choose (and remember)
402  //in which xing this event will be wrto the beam int distribution
403  m_beamInt->selectT0(ctx.eventID().run_number(), ctx.eventID().event_number());
404 
405  // Use the position in the beam intensity array to set a BCID-like quantity
406  pOverEvent->setBCID( m_beamInt->getCurrentT0BunchCrossing() );
407 
408  unsigned int t0BCID = pOverEvent->bcid();
409  ATH_MSG_VERBOSE ( "BCID =" << t0BCID );
410 
411  // pOvrEt->set_user_type("Overlaid"); //FIXME ?? MN: ?? what to do with that
412 
413  // Overlay RDO files should be treated like data for reco
414  // purposes, so only set this for SimHit level pile-up.
415  pOverEvent->setEventTypeBitmask( inputEventInfo->eventTypeBitmask() | xAOD::EventInfo::IS_SIMULATION );
416 
417  // register as sub event of the overlaid
418  bool addpEvent(true);
419 
420  ATH_MSG_DEBUG( "inputEventInfo->evtStore()="<<inputEventInfo->evtStore()<<", pOverEvent->evtStore()=" << pOverEvent->evtStore()<<", &m_origStream.store()="<<&m_origStream.store() );
421  if ( addpEvent ) {
422  xAOD::EventInfo* newEv=addSubEvent(pOverEvent, inputEventInfo, 0, xAOD::EventInfo::Signal, puei, m_evinfContName );
423  if(newEv->evtStore()==nullptr) newEv->setEvtStore(&m_origStream.store());
424  newEv->setRunNumber( ctx.eventID().run_number() );
425  newEv->setEventNumber( ctx.eventID().event_number() );
426  newEv->setLumiBlock( ctx.eventID().lumi_block() );
427  newEv->setTimeStamp( ctx.eventID().time_stamp() );
428  ATH_MSG_DEBUG( "Added inputEventInfo="<<inputEventInfo<<" as subEvent "<<newEv<<" to pOverEvent " << pOverEvent );
429  ATH_MSG_DEBUG( " afterwards: newEv->evtStore()="<<newEv->evtStore()<<", pOverEvent->evtStore()=" << pOverEvent->evtStore() );
430  ATH_MSG_DEBUG( " pOverEvent->subEvents()[0].ptr()="<<pOverEvent->subEvents()[0].ptr()<<" content="<<*pOverEvent->subEvents()[0].ptr()<<" store="<< pOverEvent->subEvents()[0].ptr()->evtStore() );
431  }
432 
433  ATH_MSG_INFO ( "set aliases" );
434  //add an alias to "OverlayEvent" (backward compatibility)
435  CHECK(m_evtStore->setAlias(pOverEvent, "OverlayEvent"));
436 
437  //FIXME at this point one may want to look into the original event
438  //FIXME to decide whether to skip it or to do the pile-up
439 
441  bool needupdate;
442  float sf = m_beamLumi->scaleFactor( pOverEvent->runNumber(), pOverEvent->lumiBlock(), needupdate );
443  float currentaveragemu(sf*m_maxCollPerXing);
444  pOverEvent->setAverageInteractionsPerCrossing(currentaveragemu);
445  //FIXME check whether actualInteractionsPerCrossing should be set
446  //to mu for the central bunch crossing, as below, or whether it
447  //should be set to the actual number of minbias piled-up in the
448  //central bunch crossing for this particular event.
449  pOverEvent->setActualInteractionsPerCrossing(m_beamInt->normFactor(0)*currentaveragemu);
450  ATH_MSG_DEBUG ( "BCID = "<< t0BCID <<
451  ", mu =" << pOverEvent->actualInteractionsPerCrossing() <<
452  ", <mu> =" << pOverEvent->averageInteractionsPerCrossing() );
455  while (cacheIterator != endOfCaches) {
456  if (needupdate) {
457  (*cacheIterator)->resetEvtsPerXingScaleFactor(sf);//set cache scale factor. some caches should ignore it?
458  }
459  (*cacheIterator++)->newEvent(); //inform cache we overlay a new event
460  }
461  //-----------------------------------------------------------------------
462  // loop over x-ings
463  //-----------------------------------------------------------------------
464  for (int iXing=m_firstXing; iXing<=m_lastXing; iXing++) {
465  // if (m_xingByXing.value()) test that PileUpToolsAlg is there?
466  //-----------------------------------------------------------------------
467  // Read input events in bkg stores and link them to overlay store
468  //-----------------------------------------------------------------------
469  int t0BinCenter((int)m_xingFreq*iXing);
470  unsigned int currentBCID = getBCID((t0BinCenter/25), t0BCID); //Should account for m_xingFreq>25. FIXME - hardcoded 25ns
471  ATH_MSG_VERBOSE ( "Background BCID =" << currentBCID );
472  cacheIterator = m_caches.begin();
473  while (cacheIterator != endOfCaches) {
474  // Now set the BCID for background events - also requires changes to PileUpEventInfo, SubEvent
475  if (((*cacheIterator)->addSubEvts(iXing-m_firstXing, pOverEvent, t0BinCenter, m_loadProxies, currentBCID)).isFailure()) {
476  //if (((*cacheIterator)->addSubEvts(iXing-m_firstXing, *pOverEvent, t0BinCenter)).isFailure()) {
477  if (maxevt == -1 && m_allowSubEvtsEOF) {
478  ATH_MSG_INFO ( "No more sub events for " << cacheIterator->name() );
479  return StatusCode::SUCCESS;
480  }
481  else {
482  ATH_MSG_FATAL ( "Error adding sub events to " << cacheIterator->name() );
483  return StatusCode::FAILURE;
484  }
485  }
486  ++cacheIterator;
487  }
488  } //loop over xings
489 
490  // Calculate/copy pile-up hash
491  PileUpHashHelper pileUpHashHelper;
492 
493  pileUpHashHelper.addToHashSource(pOverEvent);
494 
495  ATH_MSG_VERBOSE ( "Pile-up hash source:" << pileUpHashHelper.hashSource() );
496 
497  // Calculate and set hash
498  uuid_t pileUpHash;
499  pileUpHashHelper.calculateHash(pileUpHash);
500 
502 
503  ATH_MSG_DEBUG("PileUpMixtureID = " << pOverEvent->pileUpMixtureID());
504 
505  //set active store back to the overlaid one
506  m_evtStore->makeCurrent();
507 
508  // Execute event for all required algorithms. The overlaid event
509  // (PileUpEventInfo) is considered to be current
510  if (m_skipExecAlgs) {
511  ATH_MSG_INFO ( "Firing reseed incident (" << pOverEvent->eventNumber() << "," << pOverEvent->runNumber() << ")" );
512  m_incidentSvc->fireIncident(ContextIncident<std::pair<unsigned,unsigned> >(this->name(),"ReseedIncident",std::pair<unsigned,unsigned>(pOverEvent->eventNumber(),pOverEvent->runNumber())));
513  m_incidentSvc->fireIncident(Incident(this->name(),"AfterReseedIncident"));
514  ATH_MSG_INFO ( "Not going to process this event" );
515  }
516  else {
517  if ( !(executeEvent( std::move(ctx) ).isSuccess()) ) {
518  ATH_MSG_ERROR ( "Terminating event processing loop due to errors" );
519  return StatusCode::FAILURE;
520  }
521  else {
522  ATH_MSG_INFO ( "Event processing successful." );
523  }
524  }
525  //if we are not doing overlap xing by xing clean up all stores at the end
526  //the clean up is done object by object and controlled by
527  //PileUpXingFolder.CacheRefreshFrequency property
528  if (!m_xingByXing.value()) {
529  // FIXME test that PileUpToolsAlg is NOT there?
530  //clear all stores as configured in
531  CHECK(m_mergeSvc->clearDataCaches());
532  ATH_MSG_DEBUG ( "Cleared data caches" );
533  }
534  CHECK(m_evtStore->clearStore());
535  } //end of event loop
536 
537  if (m_skipExecAlgs) {
538  m_nevt--;
539  }
540 
541  return StatusCode::SUCCESS;
542 
543 }

◆ queryInterface()

StatusCode PileUpEventLoopMgr::queryInterface ( const InterfaceID &  riid,
void **  ppvInterface 
)
virtual

Definition at line 695 of file PileUpEventLoopMgr.cxx.

696 {
697  if (IEventSeek::interfaceID().versionMatch(riid)) {
698  *ppvInterface = dynamic_cast<IEventSeek*>(this);
699  }
700  else {
701  // Interface is not directly available : try out a base class
702  return MinimalEventLoopMgr::queryInterface(riid, ppvInterface);
703  }
704  addRef();
705  return StatusCode::SUCCESS;
706 }

◆ seek()

StatusCode PileUpEventLoopMgr::seek ( int  evt)
virtual

Seek to a given event.

Implements IEventSeek.

Definition at line 545 of file PileUpEventLoopMgr.cxx.

546 {
547  int nevtsToAdvance = evt-m_ncurevt;
548  int nParam = m_nevt+1;
549  ATH_MSG_INFO ( "In PileUpEventLoopMgr::seek. m_ncurevt=" << m_ncurevt <<
550  " nevtsToAdvance=" << nevtsToAdvance );
551 
552  m_skipExecAlgs = true;
553  for (int i=0; i<nevtsToAdvance; ++i) {
555  m_loadProxies = (nevtsToAdvance==(i+1));
556  }
557  if (this->nextEvent(nParam).isFailure()) {
558  ATH_MSG_ERROR ( "Seek error! Failed to advance to evt=" << m_ncurevt+1 );
559  return StatusCode::FAILURE;
560  }
561  }
562  m_skipExecAlgs = false;
563  return StatusCode::SUCCESS;
564 }

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level  lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29 {
30  m_lvl = lvl;
31 }

◆ setupStreams()

StatusCode PileUpEventLoopMgr::setupStreams ( )
private

setup input and overlay selectors and iters

Definition at line 575 of file PileUpEventLoopMgr.cxx.

576 {
577  //OK now we can run
578  // retrieve selector and setup iterator (the selector has been setup as an ExtService)
579  CHECK(m_origSel.retrieve());
580 
581  m_origStream = PileUpStream("OriginalEvent", serviceLocator(), &*m_origSel);
582  if (!m_origStream.setupStore()) {
583  ATH_MSG_ERROR ( "Can not setup original evt store " << m_origSel );
584  return StatusCode::FAILURE;
585  }
586 
587  //now get the bkg stream caches, and set them up
588  CHECK(m_caches.retrieve());
589  ATH_MSG_DEBUG ( "retrieved BkgStreamsCaches " << m_caches );
590 
593  unsigned int nXings(m_lastXing-m_firstXing+1);
594  unsigned int firstStore(0);
595  StatusCode sc(StatusCode::SUCCESS);
596  while ((cacheIterator != endOfCaches) && sc.isSuccess()) {
597  sc = (*cacheIterator)->setup(m_firstXing, nXings, firstStore, &*m_beamInt);
598  firstStore += (*cacheIterator)->nStores() ;
599  ++cacheIterator;
600  }
601  return sc;
602 }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging)

Definition at line 141 of file AthMessaging.h.

◆ m_aess

SmartIF<IAlgExecStateSvc> PileUpEventLoopMgr::m_aess
private

Reference to the Algorithm Execution State Svc.

Definition at line 82 of file PileUpEventLoopMgr.h.

◆ m_allowSerialAndMPToDiffer

Gaudi::Property<bool> PileUpEventLoopMgr::m_allowSerialAndMPToDiffer
private

property: Default true.

When set to false, this will allow the code to reproduce serial output in an AthenaMP job, albeit with a significant performance penalty.

Definition at line 170 of file PileUpEventLoopMgr.h.

◆ m_allowSubEvtsEOF

Gaudi::Property<bool> PileUpEventLoopMgr::m_allowSubEvtsEOF
private

property: allow sub evts EOF condition when maxevt==-1

Definition at line 134 of file PileUpEventLoopMgr.h.

◆ m_beamInt

ServiceHandle<IBeamIntensity> PileUpEventLoopMgr::m_beamInt
private

property: beam intensity service handle for beam profile in local time

Definition at line 149 of file PileUpEventLoopMgr.h.

◆ m_beamLumi

ServiceHandle<IBeamLuminosity> PileUpEventLoopMgr::m_beamLumi
private

property: beam intensity service handle for luminosity profile in iovtime

Definition at line 151 of file PileUpEventLoopMgr.h.

◆ m_caches

ToolHandleArray<IBkgStreamsCache> PileUpEventLoopMgr::m_caches
private

BkgStreamsCaches managing background events.

Definition at line 122 of file PileUpEventLoopMgr.h.

◆ m_currentRun

uint32_t PileUpEventLoopMgr::m_currentRun
private

current run number

Definition at line 155 of file PileUpEventLoopMgr.h.

◆ m_evinfContName

Gaudi::Property<std::string> PileUpEventLoopMgr::m_evinfContName
private

SG key for the EventInfoContainer.

Definition at line 146 of file PileUpEventLoopMgr.h.

◆ m_evinfName

Gaudi::Property<std::string> PileUpEventLoopMgr::m_evinfName
private

SG key for the EventInfoContainer.

Definition at line 143 of file PileUpEventLoopMgr.h.

◆ m_evtIdModSvc

IEvtIdModifierSvc_t PileUpEventLoopMgr::m_evtIdModSvc
private

Definition at line 110 of file PileUpEventLoopMgr.h.

◆ m_evtStore

ServiceHandle<StoreGateSvc> PileUpEventLoopMgr::m_evtStore
private

output store

Definition at line 106 of file PileUpEventLoopMgr.h.

◆ m_failureMode

Gaudi::Property<int> PileUpEventLoopMgr::m_failureMode
private

property: control behaviour of event loop on algorithm failure

Definition at line 140 of file PileUpEventLoopMgr.h.

◆ m_firstRun

bool PileUpEventLoopMgr::m_firstRun
private

Definition at line 156 of file PileUpEventLoopMgr.h.

◆ m_firstXing

Gaudi::Property<int> PileUpEventLoopMgr::m_firstXing
private

first xing to be simulated (0th xing is 1st after trigger)

Definition at line 129 of file PileUpEventLoopMgr.h.

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

◆ m_incidentSvc

ServiceHandle<IIncidentSvc> PileUpEventLoopMgr::m_incidentSvc
private

Incident Service.

Definition at line 97 of file PileUpEventLoopMgr.h.

◆ m_lastXing

Gaudi::Property<int> PileUpEventLoopMgr::m_lastXing
private

last xing to be simulated (0th xing is 1st after trigger)

Definition at line 131 of file PileUpEventLoopMgr.h.

◆ m_loadProxies

bool PileUpEventLoopMgr::m_loadProxies
private

Definition at line 165 of file PileUpEventLoopMgr.h.

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

◆ m_maxBunchCrossingPerOrbit

unsigned int PileUpEventLoopMgr::m_maxBunchCrossingPerOrbit
private

max bunch crossings per orbit

Definition at line 159 of file PileUpEventLoopMgr.h.

◆ m_maxCollPerXing

Gaudi::Property<float> PileUpEventLoopMgr::m_maxCollPerXing
private

(max) minBias interactions per Xing, for setting MC luminosity

Definition at line 124 of file PileUpEventLoopMgr.h.

◆ m_mcChannelNumber

Gaudi::Property<uint32_t> PileUpEventLoopMgr::m_mcChannelNumber { this, "MCChannelNumber", 0, "sample MC channel number" }
private

Definition at line 172 of file PileUpEventLoopMgr.h.

◆ m_mergeSvc

ServiceHandle<PileUpMergeSvc> PileUpEventLoopMgr::m_mergeSvc
private

PileUp Merge Service.

Definition at line 100 of file PileUpEventLoopMgr.h.

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels)

Definition at line 132 of file AthMessaging.h.

◆ m_ncurevt

int PileUpEventLoopMgr::m_ncurevt
private

Definition at line 163 of file PileUpEventLoopMgr.h.

◆ m_nevt

int PileUpEventLoopMgr::m_nevt
private

Definition at line 161 of file PileUpEventLoopMgr.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_origSel

ServiceHandle<IEvtSelector> PileUpEventLoopMgr::m_origSel
private

Original (Physics) Event selector (background for overlay).

Definition at line 118 of file PileUpEventLoopMgr.h.

◆ m_origStream

PileUpStream PileUpEventLoopMgr::m_origStream
private

Input Stream.

Definition at line 103 of file PileUpEventLoopMgr.h.

◆ m_signalSel

ServiceHandle<IEvtSelector> PileUpEventLoopMgr::m_signalSel
private

Signal Event selector (for overlay).

Definition at line 120 of file PileUpEventLoopMgr.h.

◆ m_skipExecAlgs

bool PileUpEventLoopMgr::m_skipExecAlgs
private

Definition at line 164 of file PileUpEventLoopMgr.h.

◆ m_xingByXing

Gaudi::Property<bool> PileUpEventLoopMgr::m_xingByXing
private

property: process bkg events xing by xing without caching them

Definition at line 137 of file PileUpEventLoopMgr.h.

◆ m_xingFreq

Gaudi::Property<float> PileUpEventLoopMgr::m_xingFreq
private

Xing frequency(ns);.

Definition at line 127 of file PileUpEventLoopMgr.h.


The documentation for this class was generated from the following files:
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
AthMessaging::m_lvl
std::atomic< MSG::Level > m_lvl
Current logging level.
Definition: AthMessaging.h:138
c_pileUpEventInfoContName
const std::string c_pileUpEventInfoContName
default value for the EventInfoContainer storing subevents for PileUp
Definition: PileUpMisc.h:15
xAOD::EventInfo_v1::setActualInteractionsPerCrossing
void setActualInteractionsPerCrossing(float value)
Set average interactions per crossing for the current BCID.
Definition: EventInfo_v1.cxx:391
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:53
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
xAOD::EventInfo_v1::setEventNumber
void setEventNumber(uint64_t value)
Set the current event's event number.
PileUpEventLoopMgr::m_incidentSvc
ServiceHandle< IIncidentSvc > m_incidentSvc
Incident Service.
Definition: PileUpEventLoopMgr.h:97
xAOD::EventInfo
EventInfo_v1 EventInfo
Definition of the latest event info version.
Definition: IEventInfoCnvTool.h:17
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
xAOD::EventInfo_v1::mcEventWeights
const std::vector< float > & mcEventWeights() const
The weights of all the MC events used in the simulation.
PileUpEventLoopMgr::m_allowSerialAndMPToDiffer
Gaudi::Property< bool > m_allowSerialAndMPToDiffer
property: Default true.
Definition: PileUpEventLoopMgr.h:170
PileUpEventLoopMgr::m_signalSel
ServiceHandle< IEvtSelector > m_signalSel
Signal Event selector (for overlay).
Definition: PileUpEventLoopMgr.h:120
initialize
void initialize()
Definition: run_EoverP.cxx:894
xAOD::EventAuxInfo_v3
Auxiliary information about the event.
Definition: EventAuxInfo_v3.h:28
xAOD::EventInfo_v1::clearSubEvents
void clearSubEvents()
Clear all the currently held sub-events.
Definition: EventInfo_v1.cxx:647
PileUpEventLoopMgr::nextEvent
virtual StatusCode nextEvent(int maxevt)
implementation of IAppMgreUI::terminate
Definition: PileUpEventLoopMgr.cxx:251
PileUpEventLoopMgr::m_origSel
ServiceHandle< IEvtSelector > m_origSel
Original (Physics) Event selector (background for overlay).
Definition: PileUpEventLoopMgr.h:118
PileUpHashHelper::uuidToPileUpMixtureId
static xAOD::EventInfo::PileUpMixtureID uuidToPileUpMixtureId(const uuid_t &hash)
Convert uuid_t to xAOD::EventInfo::PileUpMixtureID.
Definition: PileUpHashHelper.cxx:57
PileUpHashHelper
Definition: PileUpHashHelper.h:21
PileUpHashHelper::hashSource
std::string hashSource() const
Get the current hash base.
Definition: PileUpHashHelper.h:35
PileUpEventLoopMgr::m_xingFreq
Gaudi::Property< float > m_xingFreq
Xing frequency(ns);.
Definition: PileUpEventLoopMgr.h:127
LArG4FSStartPointFilter.evt
evt
Definition: LArG4FSStartPointFilter.py:42
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
PileUpEventLoopMgr::m_skipExecAlgs
bool m_skipExecAlgs
Definition: PileUpEventLoopMgr.h:164
PileUpEventLoopMgr::m_evtStore
ServiceHandle< StoreGateSvc > m_evtStore
output store
Definition: PileUpEventLoopMgr.h:106
PileUpEventLoopMgr::m_evinfName
Gaudi::Property< std::string > m_evinfName
SG key for the EventInfoContainer.
Definition: PileUpEventLoopMgr.h:143
PileUpEventLoopMgr::executeAlgorithms
virtual StatusCode executeAlgorithms(const EventContext &ctx)
Run the algorithms for the current event.
Definition: PileUpEventLoopMgr.cxx:607
xAOD::EventInfo_v1::IS_SIMULATION
@ IS_SIMULATION
true: simulation, false: data
Definition: EventInfo_v1.h:151
AthMessaging::m_imsg
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
Definition: AthMessaging.h:135
python.SystemOfUnits.ms
int ms
Definition: SystemOfUnits.py:132
PileUpEventLoopMgr::m_origStream
PileUpStream m_origStream
Input Stream.
Definition: PileUpEventLoopMgr.h:103
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
xAOD::EventInfo_v1::runNumber
uint32_t runNumber() const
The current event's run number.
PileUpEventLoopMgr::m_maxBunchCrossingPerOrbit
unsigned int m_maxBunchCrossingPerOrbit
max bunch crossings per orbit
Definition: PileUpEventLoopMgr.h:159
xAOD::EventInfo_v1::pileUpMixtureID
PileUpMixtureID pileUpMixtureID() const
Unique pile-up mixture identifier.
Definition: EventInfo_v1.cxx:421
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
xAOD::EventInfo_v1::mcChannelNumber
uint32_t mcChannelNumber() const
The MC generator's channel number.
xAOD::EventInfo_v1::setPileUpMixtureID
void setPileUpMixtureID(const PileUpMixtureID &value)
Set unique pile-up mixture identifier.
Definition: EventInfo_v1.cxx:436
AthMessaging::AthMessaging
AthMessaging()
Default constructor:
PileUpStream::nextEventPre
const xAOD::EventInfo * nextEventPre(bool readRecord=true)
return next Event, load store with next Event
Definition: PileUpStream.cxx:223
PileUpStream::finalize
StatusCode finalize()
finalize and release store. To be called on ... finalize()
Definition: PileUpStream.cxx:262
PileUpEventLoopMgr::m_ncurevt
int m_ncurevt
Definition: PileUpEventLoopMgr.h:163
TrigConf::MSGTC::Level
Level
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:21
PileUpEventLoopMgr::m_mergeSvc
ServiceHandle< PileUpMergeSvc > m_mergeSvc
PileUp Merge Service.
Definition: PileUpEventLoopMgr.h:100
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
xAOD::EventInfo_v1::setMCEventNumber
void setMCEventNumber(uint64_t value)
Set the MC generator's event number.
xAOD::EventInfo_v1::setEventTypeBitmask
void setEventTypeBitmask(uint32_t value)
Set the event type bitmask.
PileUpEventLoopMgr::m_allowSubEvtsEOF
Gaudi::Property< bool > m_allowSubEvtsEOF
property: allow sub evts EOF condition when maxevt==-1
Definition: PileUpEventLoopMgr.h:134
lumiFormat.i
int i
Definition: lumiFormat.py:92
SG::AuxElement::setStore
void setStore(const SG::IConstAuxStore *store)
Set the store associated with this object.
Definition: AuxElement.cxx:221
PileUpStream::setupStore
bool setupStore()
setup input and overlay selectors and iters
Definition: PileUpStream.cxx:113
Atlas::ExtendedEventContext
Definition: ExtendedEventContext.h:23
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
PileUpEventLoopMgr::m_beamInt
ServiceHandle< IBeamIntensity > m_beamInt
property: beam intensity service handle for beam profile in local time
Definition: PileUpEventLoopMgr.h:149
PileUpHashHelper::addToHashSource
void addToHashSource(const std::string &string)
Add a plain string to the stream.
Definition: PileUpHashHelper.cxx:11
PileUpEventLoopMgr::m_nevt
int m_nevt
Definition: PileUpEventLoopMgr.h:161
ATH_MSG_ALWAYS
#define ATH_MSG_ALWAYS(x)
Definition: AthMsgStreamMacros.h:35
PileUpStream
a triple selector/context/store defines a stream
Definition: PileUpStream.h:33
AthenaAttributeList
An AttributeList represents a logical row of attributes in a metadata table. The name and type of eac...
Definition: PersistentDataModel/PersistentDataModel/AthenaAttributeList.h:45
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
PileUpEventLoopMgr::m_evinfContName
Gaudi::Property< std::string > m_evinfContName
SG key for the EventInfoContainer.
Definition: PileUpEventLoopMgr.h:146
PileUpEventLoopMgr::setupStreams
StatusCode setupStreams()
setup input and overlay selectors and iters
Definition: PileUpEventLoopMgr.cxx:575
xAOD::EventInfo_v1::setTimeStamp
void setTimeStamp(uint32_t value)
Set the POSIX time of the event.
xAOD::EventInfo_v1::setBCID
void setBCID(uint32_t value)
Set the bunch crossing ID of the event.
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
PileUpEventLoopMgr::m_mcChannelNumber
Gaudi::Property< uint32_t > m_mcChannelNumber
Definition: PileUpEventLoopMgr.h:172
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
PileUpStream::store
StoreGateSvc & store()
Definition: PileUpStream.h:61
xAOD::EventAuxInfo
EventAuxInfo_v3 EventAuxInfo
Definition of the latest event auxiliary info version.
Definition: EventAuxInfo.h:15
PileUpEventLoopMgr::m_firstXing
Gaudi::Property< int > m_firstXing
first xing to be simulated (0th xing is 1st after trigger)
Definition: PileUpEventLoopMgr.h:129
xAOD::EventInfoAuxContainer_v1
Auxiliary information about the pileup events.
Definition: EventInfoAuxContainer_v1.h:31
PileUpEventLoopMgr::getBCID
unsigned int getBCID(int bunchXing, unsigned int centralBCID) const
return the 'fake BCID' corresponding to bunchXing
Definition: PileUpEventLoopMgr.h:91
PileUpEventLoopMgr::executeEvent
virtual StatusCode executeEvent(EventContext &&ctx)
implementation of IEventProcessor::executeEvent(void* par)
Definition: PileUpEventLoopMgr.cxx:632
xAOD::EventInfo_v1::averageInteractionsPerCrossing
float averageInteractionsPerCrossing() const
Average interactions per crossing for all BCIDs - for out-of-time pile-up.
Definition: EventInfo_v1.cxx:397
PileUpEventLoopMgr::m_maxCollPerXing
Gaudi::Property< float > m_maxCollPerXing
(max) minBias interactions per Xing, for setting MC luminosity
Definition: PileUpEventLoopMgr.h:124
PileUpEventLoopMgr::m_firstRun
bool m_firstRun
Definition: PileUpEventLoopMgr.h:156
PileUpEventLoopMgr::m_evtIdModSvc
IEvtIdModifierSvc_t m_evtIdModSvc
Definition: PileUpEventLoopMgr.h:110
python.EventInfoMgtInit.release
release
Definition: EventInfoMgtInit.py:24
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
xAOD::EventInfo_v1::setAverageInteractionsPerCrossing
void setAverageInteractionsPerCrossing(float value)
Set average interactions per crossing for all BCIDs.
Definition: EventInfo_v1.cxx:408
StoreGateSvc::tryConstRetrieve
const T * tryConstRetrieve() const
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
xAOD::EventInfo_v1::setMCChannelNumber
void setMCChannelNumber(uint32_t value)
Set the MC generator's channel number.
PileUpEventLoopMgr::m_caches
ToolHandleArray< IBkgStreamsCache > m_caches
BkgStreamsCaches managing background events.
Definition: PileUpEventLoopMgr.h:122
xAOD::EventInfo_v1::Signal
@ Signal
The signal event.
Definition: EventInfo_v1.h:266
PileUpEventLoopMgr::m_xingByXing
Gaudi::Property< bool > m_xingByXing
property: process bkg events xing by xing without caching them
Definition: PileUpEventLoopMgr.h:137
mapkey::sf
@ sf
Definition: TElectronEfficiencyCorrectionTool.cxx:38
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::EventInfo_v1::setRunNumber
void setRunNumber(uint32_t value)
Set the current event's run number.
AthMessaging::m_nm
std::string m_nm
Message source name.
Definition: AthMessaging.h:129
c_pileUpEventInfoObjName
const std::string c_pileUpEventInfoObjName
default value for the EventInfoContainer storing subevents for PileUp
Definition: PileUpMisc.h:12
PileUpEventLoopMgr::m_currentRun
uint32_t m_currentRun
current run number
Definition: PileUpEventLoopMgr.h:155
DEBUG
#define DEBUG
Definition: page_access.h:11
PileUpEventLoopMgr::m_aess
SmartIF< IAlgExecStateSvc > m_aess
Reference to the Algorithm Execution State Svc.
Definition: PileUpEventLoopMgr.h:82
PileUpHashHelper::calculateHash
void calculateHash(uuid_t &hash) const
Calculate the hash.
Definition: PileUpHashHelper.cxx:49
eventIDFromxAOD
EventID eventIDFromxAOD(const xAOD::EventInfo *xaod)
Create EventID object from xAOD::EventInfo.
Definition: EventInfoFromxAOD.cxx:16
EventID
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
Definition: EventID.h:35
IEventSeek
Abstract interface for seeking within an event stream.
Definition: IEventSeek.h:27
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
PileUpEventLoopMgr::m_lastXing
Gaudi::Property< int > m_lastXing
last xing to be simulated (0th xing is 1st after trigger)
Definition: PileUpEventLoopMgr.h:131
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
AthMessaging::initMessaging
void initMessaging() const
Initialize our message level and MessageSvc.
Definition: AthMessaging.cxx:39
xAOD::EventInfo_v1::setLumiBlock
void setLumiBlock(uint32_t value)
Set the current event's luminosity block number.
xAOD::EventInfo_v1::subEvents
const std::vector< SubEvent > & subEvents() const
Get the pileup events that were used in the simulation.
Definition: EventInfo_v1.cxx:596
AthMessaging::m_msg_tls
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
Definition: AthMessaging.h:132
xAOD::EventInfo_v1::bcid
uint32_t bcid() const
The bunch crossing ID of the event.
PileUpEventLoopMgr::m_failureMode
Gaudi::Property< int > m_failureMode
property: control behaviour of event loop on algorithm failure
Definition: PileUpEventLoopMgr.h:140
addSubEvent
xAOD::EventInfo * addSubEvent(xAOD::EventInfo *targetEv, const xAOD::EventInfo::SubEvent &subev, xAOD::EventInfoContainer *eiContainer, const std::string &eiContKey, StoreGateSvc *subev_store=nullptr)
Definition: PileUpMisc.cxx:17
PileUpEventLoopMgr::modifyEventContext
virtual void modifyEventContext(EventContext &ctx, const EventID &eID, bool consume_modifier_stream)
Definition: PileUpEventLoopMgr.cxx:224
xAOD::EventInfo_v1::mcEventNumber
uint64_t mcEventNumber() const
The MC generator's event number.
xAOD::EventInfo_v1::actualInteractionsPerCrossing
float actualInteractionsPerCrossing() const
Average interactions per crossing for the current BCID - for in-time pile-up.
Definition: EventInfo_v1.cxx:380
PileUpEventLoopMgr::m_beamLumi
ServiceHandle< IBeamLuminosity > m_beamLumi
property: beam intensity service handle for luminosity profile in iovtime
Definition: PileUpEventLoopMgr.h:151
PileUpEventLoopMgr::m_loadProxies
bool m_loadProxies
Definition: PileUpEventLoopMgr.h:165