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)
 
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...
 
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 104 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  : base_class(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.

Definition at line 570 of file PileUpEventLoopMgr.cxx.

571 {
572  return m_nevt;
573 }

◆ executeAlgorithms()

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

Run the algorithms for the current event.

Definition at line 611 of file PileUpEventLoopMgr.cxx.

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

◆ 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 636 of file PileUpEventLoopMgr.cxx.

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

◆ finalize()

StatusCode PileUpEventLoopMgr::finalize ( )
virtual

implementation of IAppMgrUI::finalize

Definition at line 195 of file PileUpEventLoopMgr.cxx.

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

◆ getBCID()

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

return the 'fake BCID' corresponding to bunchXing

Definition at line 87 of file PileUpEventLoopMgr.h.

87  {
88  //FIXME to be completely safe this should should probably depend on the bunch spacing too. Perhaps that concept should be deprecated though?
89  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));
90  }

◆ 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  SmartIF<IEvtSelector> evtSelector;
147  if (prpMgr.isValid()) {
148  // Get event selector name. Retrieve EventSelector
149  std::string evtSelName = prpMgr->getProperty("EvtSel").toString();
150  evtSelector = serviceLocator()->service(evtSelName);
151  CHECK(evtSelector.isValid());
152  }
153  else {
154  ATH_MSG_ERROR ( "IProperty interface not found in ApplicationMgr" );
155  return StatusCode::FAILURE;
156  }
157 
158  SmartIF<IProperty> prpMgr1(evtSelector);
159  if (prpMgr1.isValid()) {
160  std::string skipEventsStr = prpMgr1->getProperty("SkipEvents").toString();
161  m_ncurevt = std::atoi(skipEventsStr.c_str());
162  }
163  else {
164  ATH_MSG_ERROR ( "IProperty interface not found on the event selector" );
165  return StatusCode::FAILURE;
166  }
167 
168  // Get the AlgExecStateSvc
169  m_aess = serviceLocator()->service("AlgExecStateSvc");
170  if (!m_aess.isValid()) {
171  ATH_MSG_FATAL ( "Error retrieving AlgExecStateSvc" );
172  return StatusCode::FAILURE;
173  }
174 
175  //--------------------------------------------------------------------------
176  // Set up the EventID modifier Service
177  //--------------------------------------------------------------------------
178  if( m_evtIdModSvc.empty() ) {
179  ATH_MSG_DEBUG ( "EventID modifier Service not set. No run number, ... overrides will be applied." );
180  }
181  else if ( !m_evtIdModSvc.retrieve().isSuccess() ) {
182  ATH_MSG_INFO ( "Could not find EventID modifier Service. No run number, ... overrides will be applied." );
183  }
184 
185  //-------------------------------------------------------------------------
186  // Base class initialize (done at the end to allow algs to access stores)
187  //-------------------------------------------------------------------------
188 
190 }

◆ 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 225 of file PileUpEventLoopMgr.cxx.

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

◆ 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 252 of file PileUpEventLoopMgr.cxx.

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

◆ seek()

StatusCode PileUpEventLoopMgr::seek ( int  evt)
virtual

Seek to a given event.

Definition at line 549 of file PileUpEventLoopMgr.cxx.

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

◆ 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 579 of file PileUpEventLoopMgr.cxx.

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

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 78 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 166 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 130 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 145 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 147 of file PileUpEventLoopMgr.h.

◆ m_caches

ToolHandleArray<IBkgStreamsCache> PileUpEventLoopMgr::m_caches
private

BkgStreamsCaches managing background events.

Definition at line 118 of file PileUpEventLoopMgr.h.

◆ m_currentRun

uint32_t PileUpEventLoopMgr::m_currentRun
private

current run number

Definition at line 151 of file PileUpEventLoopMgr.h.

◆ m_evinfContName

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

SG key for the EventInfoContainer.

Definition at line 142 of file PileUpEventLoopMgr.h.

◆ m_evinfName

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

SG key for the EventInfoContainer.

Definition at line 139 of file PileUpEventLoopMgr.h.

◆ m_evtIdModSvc

IEvtIdModifierSvc_t PileUpEventLoopMgr::m_evtIdModSvc
private

Definition at line 106 of file PileUpEventLoopMgr.h.

◆ m_evtStore

ServiceHandle<StoreGateSvc> PileUpEventLoopMgr::m_evtStore
private

output store

Definition at line 102 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 136 of file PileUpEventLoopMgr.h.

◆ m_firstRun

bool PileUpEventLoopMgr::m_firstRun
private

Definition at line 152 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 125 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 93 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 127 of file PileUpEventLoopMgr.h.

◆ m_loadProxies

bool PileUpEventLoopMgr::m_loadProxies
private

Definition at line 161 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 155 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 120 of file PileUpEventLoopMgr.h.

◆ m_mcChannelNumber

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

Definition at line 168 of file PileUpEventLoopMgr.h.

◆ m_mergeSvc

ServiceHandle<PileUpMergeSvc> PileUpEventLoopMgr::m_mergeSvc
private

PileUp Merge Service.

Definition at line 96 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 159 of file PileUpEventLoopMgr.h.

◆ m_nevt

int PileUpEventLoopMgr::m_nevt
private

Definition at line 157 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 114 of file PileUpEventLoopMgr.h.

◆ m_origStream

PileUpStream PileUpEventLoopMgr::m_origStream
private

Input Stream.

Definition at line 99 of file PileUpEventLoopMgr.h.

◆ m_signalSel

ServiceHandle<IEvtSelector> PileUpEventLoopMgr::m_signalSel
private

Signal Event selector (for overlay).

Definition at line 116 of file PileUpEventLoopMgr.h.

◆ m_skipExecAlgs

bool PileUpEventLoopMgr::m_skipExecAlgs
private

Definition at line 160 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 133 of file PileUpEventLoopMgr.h.

◆ m_xingFreq

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

Xing frequency(ns);.

Definition at line 123 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:50
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:93
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:166
PileUpEventLoopMgr::m_signalSel
ServiceHandle< IEvtSelector > m_signalSel
Signal Event selector (for overlay).
Definition: PileUpEventLoopMgr.h:116
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:252
PileUpEventLoopMgr::m_origSel
ServiceHandle< IEvtSelector > m_origSel
Original (Physics) Event selector (background for overlay).
Definition: PileUpEventLoopMgr.h:114
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:123
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:160
PileUpEventLoopMgr::m_evtStore
ServiceHandle< StoreGateSvc > m_evtStore
output store
Definition: PileUpEventLoopMgr.h:102
PileUpEventLoopMgr::m_evinfName
Gaudi::Property< std::string > m_evinfName
SG key for the EventInfoContainer.
Definition: PileUpEventLoopMgr.h:139
PileUpEventLoopMgr::executeAlgorithms
virtual StatusCode executeAlgorithms(const EventContext &ctx)
Run the algorithms for the current event.
Definition: PileUpEventLoopMgr.cxx:611
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:99
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:155
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:216
PileUpStream::finalize
StatusCode finalize()
finalize and release store. To be called on ... finalize()
Definition: PileUpStream.cxx:255
PileUpEventLoopMgr::m_ncurevt
int m_ncurevt
Definition: PileUpEventLoopMgr.h:159
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:96
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:130
lumiFormat.i
int i
Definition: lumiFormat.py:85
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:145
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:157
ATH_MSG_ALWAYS
#define ATH_MSG_ALWAYS(x)
Definition: AthMsgStreamMacros.h:35
PileUpStream
a triple selector/context/store defines a stream
Definition: PileUpStream.h:32
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:142
PileUpEventLoopMgr::setupStreams
StatusCode setupStreams()
setup input and overlay selectors and iters
Definition: PileUpEventLoopMgr.cxx:579
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:168
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
PileUpStream::store
StoreGateSvc & store()
Definition: PileUpStream.h:60
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:125
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:87
PileUpEventLoopMgr::executeEvent
virtual StatusCode executeEvent(EventContext &&ctx)
implementation of IEventProcessor::executeEvent(void* par)
Definition: PileUpEventLoopMgr.cxx:636
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:120
PileUpEventLoopMgr::m_firstRun
bool m_firstRun
Definition: PileUpEventLoopMgr.h:152
PileUpEventLoopMgr::m_evtIdModSvc
IEvtIdModifierSvc_t m_evtIdModSvc
Definition: PileUpEventLoopMgr.h:106
python.EventInfoMgtInit.release
release
Definition: EventInfoMgtInit.py:24
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
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:118
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:133
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:151
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:78
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
PileUpEventLoopMgr::m_lastXing
Gaudi::Property< int > m_lastXing
last xing to be simulated (0th xing is 1st after trigger)
Definition: PileUpEventLoopMgr.h:127
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:136
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:225
xAOD::EventInfo_v1::mcEventNumber
uint64_t mcEventNumber() const
The MC generator's event number.
xAOD::EventInfo_v1::setMCEventWeights
void setMCEventWeights(const std::vector< float > &value)
Set the weights of all the MC events used in the simulation.
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:147
PileUpEventLoopMgr::m_loadProxies
bool m_loadProxies
Definition: PileUpEventLoopMgr.h:161