ATLAS Offline Software
Loading...
Searching...
No Matches
PileUpEventLoopMgr Class Reference

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

#include <PileUpEventLoopMgr.h>

Inheritance diagram for PileUpEventLoopMgr:

Public Member Functions

 PileUpEventLoopMgr (const std::string &nam, ISvcLocator *svcLoc)
 Standard Constructor.
virtual ~PileUpEventLoopMgr ()
 Standard Destructor.
virtual StatusCode initialize () override
virtual StatusCode finalize () override
virtual StatusCode nextEvent (int maxevt) override
virtual StatusCode executeEvent (EventContext &&ctx) override
virtual StatusCode seek (int evt) override
virtual int curEvent () const override
MsgStream & msg () const
 The standard message stream.
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream.
bool msgLvl (const MSG::Level lvl) const
 Test the output level.
void setLevel (MSG::Level lvl)
 Change the current logging level.

Private Member Functions

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

Private Attributes

SmartIF< IAlgExecStateSvc > m_aess
 Reference to the Algorithm Execution State Svc.
ServiceHandle< IIncidentSvc > m_incidentSvc
 Incident Service.
PileUpStream m_origStream
 Input Stream.
ServiceHandle< StoreGateSvcm_evtStore
 output store
ServiceHandle< IEvtSelector > m_origSel
ServiceHandle< IEvtSelector > m_signalSel
ServiceHandle< IBeamIntensitym_beamInt
ServiceHandle< IBeamLuminositym_beamLumi
ServiceHandle< PileUpMergeSvcm_mergeSvc
ServiceHandle< IEvtIdModifierSvcm_evtIdModSvc
Gaudi::Property< unsigned int > m_maxBunchCrossingPerOrbit
Gaudi::Property< float > m_xingFreq
Gaudi::Property< int > m_firstXing
Gaudi::Property< int > m_lastXing
Gaudi::Property< float > m_maxCollPerXing
ToolHandleArray< IBkgStreamsCachem_caches
Gaudi::Property< bool > m_allowSubEvtsEOF
Gaudi::Property< bool > m_xingByXing
Gaudi::Property< int > m_failureMode
Gaudi::Property< bool > m_allowSerialAndMPToDiffer
Gaudi::Property< std::string > m_evinfName
Gaudi::Property< std::string > m_evinfContName
Gaudi::Property< uint32_t > m_mcChannelNumber
uint32_t m_currentRun {0}
 current run number
bool m_firstRun {true}
int m_nevt {0}
int m_ncurevt {0}
bool m_skipExecAlgs {false}
bool m_loadProxies {true}
std::string m_nm
 Message source name.
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels)
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer.
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level.
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging)

Detailed Description

The ATLAS event loop for pile-up applications.

Definition at line 45 of file PileUpEventLoopMgr.h.

Constructor & Destructor Documentation

◆ PileUpEventLoopMgr()

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

Standard Constructor.

Definition at line 47 of file PileUpEventLoopMgr.cxx.

49 : base_class(name, svcLoc)
50 , AthMessaging (name)
51 , m_incidentSvc("IncidentSvc", name)
52 , m_evtStore("StoreGateSvc/StoreGateSvc", name)
53{
54 // m_caches.push_back("BkgStreamsCache/MinBiasCache");
55}
AthMessaging()
Default constructor:
ServiceHandle< StoreGateSvc > m_evtStore
output store
ServiceHandle< IIncidentSvc > m_incidentSvc
Incident Service.

◆ ~PileUpEventLoopMgr()

PileUpEventLoopMgr::~PileUpEventLoopMgr ( )
virtual

Standard Destructor.

Definition at line 60 of file PileUpEventLoopMgr.cxx.

60{}

Member Function Documentation

◆ curEvent()

int PileUpEventLoopMgr::curEvent ( ) const
overridevirtual

Definition at line 515 of file PileUpEventLoopMgr.cxx.

516{
517 return m_nevt;
518}

◆ executeAlgorithms()

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

Run the algorithms for the current event.

Definition at line 556 of file PileUpEventLoopMgr.cxx.

557{
558 // Call the execute() method of all top algorithms
559 for ( ListAlg::iterator ita = m_topAlgList.begin();
560 ita != m_topAlgList.end();
561 ++ita ) {
562 StatusCode sc = (*ita)->sysExecute( ctx );
563 // this duplicates what is already done in Algorithm::sysExecute, which
564 // calls Algorithm::setExecuted, but eventually we plan to remove that
565 // function
566 m_aess->algExecState(*ita, ctx ).setState(AlgExecState::State::Done, sc);
567 if ( !sc.isSuccess() ) {
568 ATH_MSG_INFO ( "Execution of algorithm " <<
569 (*ita)->name() << " failed with StatusCode::" << sc );
570 return sc;
571 }
572 }
573
574 return StatusCode::SUCCESS;
575}
#define ATH_MSG_INFO(x)
static Double_t sc
SmartIF< IAlgExecStateSvc > m_aess
Reference to the Algorithm Execution State Svc.
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ executeEvent()

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

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

582{
584 if (m_firstRun || (m_currentRun != ctx.eventID().run_number())) {
585 // Fire EndRun incident unless this is the first run
586 if (!m_firstRun) {
587 m_incidentSvc->fireIncident(Incident(this->name(),IncidentType::EndRun));
588 }
589 m_firstRun = false;
590 m_currentRun = ctx.eventID().run_number();
591
592 ATH_MSG_INFO ( " ===>>> start of run " << m_currentRun << " <<<===" );
593
594 // Fire BeginRun "Incident"
595 m_incidentSvc->fireIncident(Incident(this->name(),IncidentType::BeginRun,ctx));
596 }
597
598 bool eventFailed(false);
599 // Call the execute() method of all top algorithms
601
602 if (!sc.isSuccess()) {
603 eventFailed = true;
604 m_aess->setEventStatus( EventStatus::AlgFail, ctx );
605
609 if (m_failureMode == 1 && sc.isRecoverable()) {
610 ATH_MSG_WARNING ( "RECOVERABLE error returned by algorithm. " <<
611 "Skipping remaining algorithms." << std::endl <<
612 "\tNo output will be written for this event, " <<
613 "but job will continue to next event" );
614 eventFailed = false;
615 }
616
618 if (m_failureMode >= 2) {
619 ATH_MSG_INFO ( "Skipping remaining algorithms." << std::endl <<
620 "\tNo output will be written for this event, " <<
621 "but job will continue to next event" );
622 eventFailed = false;
623 }
624 }
625 else {
626 m_aess->setEventStatus( EventStatus::Success, ctx );
627
628 // Call the execute() method of all output streams
629 for (ListAlg::iterator ito = m_outStreamList.begin();
630 ito != m_outStreamList.end(); ++ito ) {
631 sc = (*ito)->sysExecute( ctx );
632 if ( !sc.isSuccess() ) {
633 eventFailed = true;
634 }
635 }
636 }
637
638 //------------------------------------------------------------------------
639 // Check if there was an error processing current event
640 //------------------------------------------------------------------------
641 return eventFailed?StatusCode::FAILURE:StatusCode::SUCCESS;
642}
#define ATH_MSG_WARNING(x)
Gaudi::Property< int > m_failureMode
virtual StatusCode executeAlgorithms(const EventContext &ctx)
Run the algorithms for the current event.
uint32_t m_currentRun
current run number

◆ finalize()

StatusCode PileUpEventLoopMgr::finalize ( )
overridevirtual

Definition at line 139 of file PileUpEventLoopMgr.cxx.

140{
141 ATH_MSG_INFO ( "Finalizing " << this->name() );
142
143 //we need to release all our BkgStreamCaches
144 ToolHandleArray<IBkgStreamsCache>::iterator cacheIterator(m_caches.begin());
145 ToolHandleArray<IBkgStreamsCache>::iterator endOfCaches(m_caches.end());
146 while (cacheIterator != endOfCaches) {
147 (*cacheIterator++)->release();
148 }
149 m_caches.clear();
150
151 //and to clean up the store the stream owns
152 CHECK(m_origStream.finalize());
153
154 return MinimalEventLoopMgr::finalize();
155}
#define CHECK(...)
Evaluate an expression and check for errors.
PileUpStream m_origStream
Input Stream.
ToolHandleArray< IBkgStreamsCache > m_caches
static std::string release
Definition computils.h:50

◆ getBCID()

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

return the 'fake BCID' corresponding to bunchXing

Definition at line 80 of file PileUpEventLoopMgr.h.

80 {
81 //FIXME to be completely safe this should should probably depend on the bunch spacing too. Perhaps that concept should be deprecated though?
82 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));
83 }
Gaudi::Property< unsigned int > m_maxBunchCrossingPerOrbit

◆ initialize()

StatusCode PileUpEventLoopMgr::initialize ( )
overridevirtual

Definition at line 65 of file PileUpEventLoopMgr.cxx.

66{
67 ATH_MSG_INFO ( "Initializing " << this->name() ) ;
69 ATH_MSG_WARNING ( "AllowSerialAndMPToDiffer=False! This will incur serious performance penalties! But Serial and MP output will be the same." );
70 }
71
72 //locate the StoreGateSvc and initialize our local ptr
73 CHECK(m_evtStore.retrieve());
74
75 //reset output store proxy provider: we don't want to have one!
76 m_evtStore->setProxyProviderSvc(nullptr);
77
78 //locate the IncidentSvc and initialize our local ptr
79 CHECK(m_incidentSvc.retrieve());
80
81 //locate the PileUpMergeSvc and initialize our local ptr
82 CHECK(m_mergeSvc.retrieve());
83
84 //-------------------------------------------------------------------------
85 // Setup Event Selector
86 //-------------------------------------------------------------------------
87 CHECK(this->setupStreams());
88
89 // Get the value of SkipEvents. It is needed for seeking
90 SmartIF<IProperty> prpMgr(serviceLocator());
91 SmartIF<IEvtSelector> evtSelector;
92 if (prpMgr.isValid()) {
93 // Get event selector name. Retrieve EventSelector
94 evtSelector = serviceLocator()->service(prpMgr->getProperty("EvtSel").toString());
95 CHECK(evtSelector.isValid());
96 }
97 else {
98 ATH_MSG_ERROR ( "IProperty interface not found in ApplicationMgr" );
99 return StatusCode::FAILURE;
100 }
101
102 SmartIF<IProperty> prpMgr1(evtSelector);
103 if (prpMgr1.isValid()) {
104 std::string skipEventsStr = prpMgr1->getProperty("SkipEvents").toString();
105 m_ncurevt = std::atoi(skipEventsStr.c_str());
106 }
107 else {
108 ATH_MSG_ERROR ( "IProperty interface not found on the event selector" );
109 return StatusCode::FAILURE;
110 }
111
112 // Get the AlgExecStateSvc
113 m_aess = serviceLocator()->service("AlgExecStateSvc");
114 if (!m_aess.isValid()) {
115 ATH_MSG_FATAL ( "Error retrieving AlgExecStateSvc" );
116 return StatusCode::FAILURE;
117 }
118
119 //--------------------------------------------------------------------------
120 // Set up the EventID modifier Service
121 //--------------------------------------------------------------------------
122 if( m_evtIdModSvc.empty() ) {
123 ATH_MSG_DEBUG ( "EventID modifier Service not set. No run number, ... overrides will be applied." );
124 }
125 else if ( !m_evtIdModSvc.retrieve().isSuccess() ) {
126 ATH_MSG_INFO ( "Could not find EventID modifier Service. No run number, ... overrides will be applied." );
127 }
128
129 //-------------------------------------------------------------------------
130 // Base class initialize (done at the end to allow algs to access stores)
131 //-------------------------------------------------------------------------
132
133 return MinimalEventLoopMgr::initialize();
134}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_DEBUG(x)
ServiceHandle< IEvtIdModifierSvc > m_evtIdModSvc
Gaudi::Property< bool > m_allowSerialAndMPToDiffer
ServiceHandle< PileUpMergeSvc > m_mergeSvc
StatusCode setupStreams()
setup input and overlay selectors and iters

◆ 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 // If user did not set an explicit level, set a default
43 if (m_lvl == MSG::NIL) {
44 m_lvl = m_imsg ?
45 static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
46 MSG::INFO;
47 }
48}
std::string m_nm
Message source name.
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
std::atomic< MSG::Level > m_lvl
Current logging level.
IMessageSvc * getMessageSvc(bool quiet=false)

◆ modifyEventContext()

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

Definition at line 169 of file PileUpEventLoopMgr.cxx.

169 {
170
171 if (m_evtIdModSvc.isSet()) {
172 EventID new_eID(eID);
173 // m_nevt - 1 because the PileUpEventLoopMgr increments it rather early
174 m_evtIdModSvc->modify_evtid(new_eID, m_ncurevt - 1, consume_modifier_stream);
175 if (msgLevel(MSG::DEBUG)) {
176 unsigned int oldrunnr=eID.run_number();
177 unsigned int oldLB=eID.lumi_block();
178 unsigned int oldTS=eID.time_stamp();
179 unsigned int oldTSno=eID.time_stamp_ns_offset();
180 ATH_MSG_DEBUG ( "modifyEventContext: use evtIdModSvc runnr=" << oldrunnr << " -> " << new_eID.run_number() );
181 ATH_MSG_DEBUG ( "modifyEventContext: use evtIdModSvc LB=" << oldLB << " -> " << new_eID.lumi_block() );
182 ATH_MSG_DEBUG ( "modifyEventContext: use evtIdModSvc TimeStamp=" << oldTS << " -> " << new_eID.time_stamp() );
183 ATH_MSG_DEBUG ( "modifyEventContext: use evtIdModSvc TimeStamp ns Offset=" << oldTSno << " -> " << new_eID.time_stamp_ns_offset() );
184 }
185 ctx.setEventID(new_eID);
186 return;
187 }
188
189 ctx.setEventID( eID );
190}

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
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.

164{
165 MsgStream* ms = m_msg_tls.get();
166 if (!ms) {
167 if (!m_initialized.test_and_set()) initMessaging();
168 ms = new MsgStream(m_imsg,m_nm);
169 m_msg_tls.reset( ms );
170 }
171
172 ms->setLevel (m_lvl);
173 return *ms;
174}
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
void initMessaging() const
Initialize our message level and MessageSvc.

◆ msg() [2/2]

MsgStream & AthMessaging::msg ( const MSG::Level lvl) const
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.

179{ return msg() << lvl; }
MsgStream & msg() const
The standard message stream.

◆ msgLvl()

bool AthMessaging::msgLvl ( const MSG::Level lvl) const
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_lvl <= lvl) {
154 msg() << lvl;
155 return true;
156 } else {
157 return false;
158 }
159}

◆ nextEvent()

StatusCode PileUpEventLoopMgr::nextEvent ( int maxevt)
overridevirtual

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

ask the BeamLuminositySvc to check for a new scalefactor

Definition at line 196 of file PileUpEventLoopMgr.cxx.

197{
198 // make nextEvent(0) a dummy call, as needed by athenaMP
199 if (0 == maxevt) {
200 return StatusCode::SUCCESS;
201 }
202
203
204 // These following two initialization loops are performed here in case new
205 // Top level Algorithms or Output Streams have been created interactively
206 // at run-time instead of configuration time. Note also that it is possible
207 // that some newly created Algorithms are still not initialized as a result
208 // of these loops (e.g. where the membership of an existing Sequencer is
209 // changed at run-time. In this case, the Algorithm::sysExecute() function
210 // will ensure that the Algorithm is correctly initialized. This mechanism
211 // actually makes loops redundant, but they do provide a well defined
212 // location for the initialization to take place in the non-interactive case.
213
214 // Initialize the list of Algorithms. Note that existing Algorithms
215 // are protected against multiple initialization attempts.
216 ListAlg::iterator ita;
217 for ( ita = m_topAlgList.begin(); ita != m_topAlgList.end(); ++ita ) {
218 if( !((*ita)->sysInitialize()).isSuccess() ) {
219 ATH_MSG_ERROR ( "Unable to initialize Algorithm: " <<
220 (*ita)->name() );
221 return StatusCode::FAILURE;
222 }
223 }
224
225 // Initialize the list of Output Streams. Note that existing Output Streams
226 // are protected against multiple initialization attempts.
227 for (ita = m_outStreamList.begin(); ita != m_outStreamList.end(); ++ita ) {
228 if( !((*ita)->sysInitialize()).isSuccess() ) {
229 ATH_MSG_ERROR ( "Unable to initialize Output Stream: " <<
230 (*ita)->name() );
231 return StatusCode::FAILURE;
232 }
233 }
234
235 const xAOD::EventInfo *inputEventInfo{};
236
237 // loop over events if the maxevt (received as input) is different from -1.
238 // if evtmax is -1 it means infinite loop
239 while( (maxevt == -1 || m_nevt < maxevt) &&
240 0 != (inputEventInfo = m_origStream.nextEventPre()) ) {
241 // Check if there is a scheduled stop issued by some algorithm/sevice
242 if ( m_scheduledStop ) {
243 m_scheduledStop = false;
244 ATH_MSG_ALWAYS ( "A stopRun was requested. Terminating event loop." );
245 break;
246 }
247 ++m_nevt; ++m_ncurevt;
248
249 //-----------------------------------------------------------------------
250 // Setup overlaid event in the event store
251 //-----------------------------------------------------------------------
252
253 auto upOverEvent = std::make_unique<xAOD::EventInfo>();
254 auto upOverEventAux = std::make_unique<xAOD::EventAuxInfo>();
255 upOverEvent->setStore( upOverEventAux.get() );
256 xAOD::EventInfo* pOverEvent = upOverEvent.get();
257 ATH_MSG_DEBUG(" #subevents in the signal event =" << inputEventInfo->subEvents().size());
258
259 // Copy the eventInfo data from origStream event
260 *pOverEvent = *inputEventInfo;
261 pOverEvent->clearSubEvents(); // start clean without any subevents
262
263 // Need to copy this explicitly as it may be marked as a decoration.
264 pOverEvent->setMCEventWeights(inputEventInfo->mcEventWeights());
265
266 // Propagate MC metadata
267 if (pOverEvent->mcChannelNumber() == 0) {
268 if (m_mcChannelNumber.value() != 0) {
269 ATH_MSG_WARNING("Input mcChannelNumber is 0, setting it to " << m_mcChannelNumber.value());
270 pOverEvent->setMCChannelNumber(m_mcChannelNumber.value());
271 } else {
272 ATH_MSG_WARNING("Input mcChannelNumber is 0");
273 }
274 } else {
275 if (m_mcChannelNumber.value() != 0 && pOverEvent->mcChannelNumber() != m_mcChannelNumber.value()) {
276 ATH_MSG_WARNING("Input mcChannelNumber (" << pOverEvent->mcChannelNumber()
277 << ") and provided mcChannelNumber (" << m_mcChannelNumber.value() << ") do not match.");
278 }
279 }
280
281 if (pOverEvent->mcEventNumber() == 0) {
282 if (pOverEvent->eventNumber() != 0) {
283 ATH_MSG_WARNING("Input mcEventNumber is 0, setting it to match the eventNumber (" << pOverEvent->eventNumber() << ")");
284 pOverEvent->setMCEventNumber(pOverEvent->eventNumber());
285 } else {
286 ATH_MSG_ERROR("Input eventNumber and mcEventNumber are 0");
287 return StatusCode::FAILURE;
288 }
289 }
290
291 if (pOverEvent->mcEventWeights().empty()) {
292 ATH_MSG_ERROR("Input mcEventWeights are empty. This should not happen.");
293 return StatusCode::FAILURE;
294 }
295
296 // Record the xAOD object(s):
297 CHECK( m_evtStore->record( std::move(upOverEventAux), m_evinfName + "Aux." ) );
298 CHECK( m_evtStore->record( std::move(upOverEvent), m_evinfName ) );
299 pOverEvent->setEvtStore( m_evtStore.get() );
300 // Create an EventInfoContainer for the pileup events:
303 puei->setStore( puaux );
304
305 // Record the EI container object(s):
306 CHECK( m_evtStore->record( puei, m_evinfContName ) );
307 CHECK( m_evtStore->record( puaux, m_evinfContName+"Aux." ) );
308
309 // Setup the EventContext.
310 // Ensure that the overridden run number etc. is being used
311 EventContext ctx;
312 EventID ev_id = eventIDFromxAOD( pOverEvent );
313 bool consume_modifier_stream = false; // FIXME/CHECK: was true inside TP converter and checks for active storegate
314 // kludge FIXME
315 const AthenaAttributeList* pAttrList = m_origStream.store().tryConstRetrieve<AthenaAttributeList>("Input");
316 if ( pAttrList != nullptr && pAttrList->size() > 6 ) {
317 // Ideally we would create the initial EventID from the TAG
318 // information, but not doing that (yet?). For now using the
319 // presence of TAG information in the HITS file to indicate that
320 // the EvtIdModifierSvc has not already been called for this
321 // Athena event.
322 consume_modifier_stream = true;
323 }
324 ctx.set(m_nevt,0);
325 modifyEventContext(ctx, ev_id, consume_modifier_stream);
327 ctx.setExtension( Atlas::ExtendedEventContext(m_evtStore->hiveProxyDict(),
328 ctx.eventID().run_number()) );
329 Gaudi::Hive::setCurrentContext( ctx );
330 m_aess->reset(ctx);
331 // make copy to std::move into store
332 auto puctx =std::make_unique<EventContext> ( ctx );
333 if (m_evtStore->record( std::move(puctx) ,"EventContext").isFailure()) {
334 ATH_MSG_ERROR ( "Error recording event context object" );
335 return StatusCode::FAILURE;
336 }
337
338 //Update run number, event number, lumi block and timestamp from EventContext
339 pOverEvent->setRunNumber( ctx.eventID().run_number() );
340 pOverEvent->setEventNumber( ctx.eventID().event_number() );
341 pOverEvent->setLumiBlock( ctx.eventID().lumi_block() );
342 pOverEvent->setTimeStamp( ctx.eventID().time_stamp() );
343 ATH_MSG_DEBUG( "Updated pOverEvent " << *pOverEvent );
344
345 ATH_MSG_INFO ( "nextEvent(): overlaying original event " <<
346 pOverEvent->runNumber() << '/' <<
347 pOverEvent->eventNumber() << '/' <<
348 pOverEvent->lumiBlock() );
349
350 //ask the BeamIntensitySvc to choose (and remember)
351 //in which xing this event will be wrto the beam int distribution
352 m_beamInt->selectT0(ctx.eventID().run_number(), ctx.eventID().event_number());
353
354 // Use the position in the beam intensity array to set a BCID-like quantity
355 pOverEvent->setBCID( m_beamInt->getCurrentT0BunchCrossing() );
356
357 unsigned int t0BCID = pOverEvent->bcid();
358 ATH_MSG_VERBOSE ( "BCID =" << t0BCID );
359
360 // pOvrEt->set_user_type("Overlaid"); //FIXME ?? MN: ?? what to do with that
361
362 // Overlay RDO files should be treated like data for reco
363 // purposes, so only set this for SimHit level pile-up.
365
366 // register as sub event of the overlaid
367 bool addpEvent(true);
368
369 ATH_MSG_DEBUG( "inputEventInfo->evtStore()="<<inputEventInfo->evtStore()<<", pOverEvent->evtStore()=" << pOverEvent->evtStore()<<", &m_origStream.store()="<<&m_origStream.store() );
370 if ( addpEvent ) {
371 xAOD::EventInfo* newEv=addSubEvent(pOverEvent, inputEventInfo, 0, xAOD::EventInfo::Signal, puei, m_evinfContName );
372 if(newEv->evtStore()==nullptr) newEv->setEvtStore(&m_origStream.store());
373 newEv->setRunNumber( ctx.eventID().run_number() );
374 newEv->setEventNumber( ctx.eventID().event_number() );
375 newEv->setLumiBlock( ctx.eventID().lumi_block() );
376 newEv->setTimeStamp( ctx.eventID().time_stamp() );
377 ATH_MSG_DEBUG( "Added inputEventInfo="<<inputEventInfo<<" as subEvent "<<newEv<<" to pOverEvent " << pOverEvent );
378 ATH_MSG_DEBUG( " afterwards: newEv->evtStore()="<<newEv->evtStore()<<", pOverEvent->evtStore()=" << pOverEvent->evtStore() );
379 ATH_MSG_DEBUG( " pOverEvent->subEvents()[0].ptr()="<<pOverEvent->subEvents()[0].ptr()<<" content="<<*pOverEvent->subEvents()[0].ptr()<<" store="<< pOverEvent->subEvents()[0].ptr()->evtStore() );
380 }
381
382 ATH_MSG_INFO ( "set aliases" );
383 //add an alias to "OverlayEvent" (backward compatibility)
384 CHECK(m_evtStore->setAlias(pOverEvent, "OverlayEvent"));
385
386 //FIXME at this point one may want to look into the original event
387 //FIXME to decide whether to skip it or to do the pile-up
388
390 bool needupdate;
391 float sf = m_beamLumi->scaleFactor( pOverEvent->runNumber(), pOverEvent->lumiBlock(), needupdate );
392 float currentaveragemu(sf*m_maxCollPerXing);
393 pOverEvent->setAverageInteractionsPerCrossing(currentaveragemu);
394 //FIXME check whether actualInteractionsPerCrossing should be set
395 //to mu for the central bunch crossing, as below, or whether it
396 //should be set to the actual number of minbias piled-up in the
397 //central bunch crossing for this particular event.
398 pOverEvent->setActualInteractionsPerCrossing(m_beamInt->normFactor(0)*currentaveragemu);
399 ATH_MSG_DEBUG ( "BCID = "<< t0BCID <<
400 ", mu =" << pOverEvent->actualInteractionsPerCrossing() <<
401 ", <mu> =" << pOverEvent->averageInteractionsPerCrossing() );
402 ToolHandleArray<IBkgStreamsCache>::iterator cacheIterator(m_caches.begin());
403 ToolHandleArray<IBkgStreamsCache>::iterator endOfCaches(m_caches.end());
404 while (cacheIterator != endOfCaches) {
405 if (needupdate) {
406 (*cacheIterator)->resetEvtsPerXingScaleFactor(sf);//set cache scale factor. some caches should ignore it?
407 }
408 (*cacheIterator++)->newEvent(); //inform cache we overlay a new event
409 }
410 //-----------------------------------------------------------------------
411 // loop over x-ings
412 //-----------------------------------------------------------------------
413 for (int iXing=m_firstXing; iXing<=m_lastXing; iXing++) {
414 // if (m_xingByXing.value()) test that PileUpToolsAlg is there?
415 //-----------------------------------------------------------------------
416 // Read input events in bkg stores and link them to overlay store
417 //-----------------------------------------------------------------------
418 int t0BinCenter((int)m_xingFreq*iXing);
419 unsigned int currentBCID = getBCID((t0BinCenter/25), t0BCID); //Should account for m_xingFreq>25. FIXME - hardcoded 25ns
420 ATH_MSG_VERBOSE ( "Background BCID =" << currentBCID );
421 cacheIterator = m_caches.begin();
422 while (cacheIterator != endOfCaches) {
423 // Now set the BCID for background events - also requires changes to PileUpEventInfo, SubEvent
424 if (((*cacheIterator)->addSubEvts(iXing-m_firstXing, pOverEvent, t0BinCenter, m_loadProxies, currentBCID)).isFailure()) {
425 //if (((*cacheIterator)->addSubEvts(iXing-m_firstXing, *pOverEvent, t0BinCenter)).isFailure()) {
426 if (maxevt == -1 && m_allowSubEvtsEOF) {
427 ATH_MSG_INFO ( "No more sub events for " << cacheIterator->name() );
428 return StatusCode::SUCCESS;
429 }
430 else {
431 ATH_MSG_FATAL ( "Error adding sub events to " << cacheIterator->name() );
432 return StatusCode::FAILURE;
433 }
434 }
435 ++cacheIterator;
436 }
437 } //loop over xings
438
439 // Calculate/copy pile-up hash
440 PileUpHashHelper pileUpHashHelper;
441
442 pileUpHashHelper.addToHashSource(pOverEvent);
443
444 ATH_MSG_VERBOSE ( "Pile-up hash source:" << pileUpHashHelper.hashSource() );
445
446 // Calculate and set hash
447 uuid_t pileUpHash;
448 pileUpHashHelper.calculateHash(pileUpHash);
449
451
452 ATH_MSG_DEBUG("PileUpMixtureID = " << pOverEvent->pileUpMixtureID());
453
454 //set active store back to the overlaid one
455 m_evtStore->makeCurrent();
456
457 // Execute event for all required algorithms. The overlaid event
458 // (PileUpEventInfo) is considered to be current
459 if (m_skipExecAlgs) {
460 ATH_MSG_INFO ( "Firing reseed incident (" << pOverEvent->eventNumber() << "," << pOverEvent->runNumber() << ")" );
461 m_incidentSvc->fireIncident(ContextIncident<std::pair<unsigned,unsigned> >(this->name(),"ReseedIncident",std::pair<unsigned,unsigned>(pOverEvent->eventNumber(),pOverEvent->runNumber())));
462 m_incidentSvc->fireIncident(Incident(this->name(),"AfterReseedIncident"));
463 ATH_MSG_INFO ( "Not going to process this event" );
464 }
465 else {
466 if ( !(executeEvent( std::move(ctx) ).isSuccess()) ) {
467 ATH_MSG_ERROR ( "Terminating event processing loop due to errors" );
468 return StatusCode::FAILURE;
469 }
470 else {
471 ATH_MSG_INFO ( "Event processing successful." );
472 }
473 }
474 //if we are not doing overlap xing by xing clean up all stores at the end
475 //the clean up is done object by object and controlled by
476 //PileUpXingFolder.CacheRefreshFrequency property
477 if (!m_xingByXing.value()) {
478 // FIXME test that PileUpToolsAlg is NOT there?
479 //clear all stores as configured in
480 CHECK(m_mergeSvc->clearDataCaches());
481 ATH_MSG_DEBUG ( "Cleared data caches" );
482 }
483 CHECK(m_evtStore->clearStore());
484 } //end of event loop
485
486 if (m_skipExecAlgs) {
487 m_nevt--;
488 }
489
490 return StatusCode::SUCCESS;
491
492}
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_ALWAYS(x)
EventID eventIDFromxAOD(const xAOD::EventInfo *xaod)
Create EventID object from xAOD::EventInfo.
xAOD::EventInfo * addSubEvent(xAOD::EventInfo *targetEv, const xAOD::EventInfo::SubEvent &subev, xAOD::EventInfoContainer *eiContainer, const std::string &eiContKey, StoreGateSvc *subev_store=nullptr)
Gaudi::Property< bool > m_xingByXing
Gaudi::Property< float > m_xingFreq
Gaudi::Property< uint32_t > m_mcChannelNumber
Gaudi::Property< float > m_maxCollPerXing
void modifyEventContext(EventContext &ctx, const EventID &eID, bool consume_modifier_stream)
Gaudi::Property< std::string > m_evinfName
Gaudi::Property< int > m_firstXing
unsigned int getBCID(int bunchXing, unsigned int centralBCID) const
return the 'fake BCID' corresponding to bunchXing
virtual StatusCode executeEvent(EventContext &&ctx) override
Gaudi::Property< int > m_lastXing
ServiceHandle< IBeamLuminosity > m_beamLumi
ServiceHandle< IBeamIntensity > m_beamInt
Gaudi::Property< bool > m_allowSubEvtsEOF
Gaudi::Property< std::string > m_evinfContName
std::string hashSource() const
Get the current hash base.
void addToHashSource(const std::string &string)
Add a plain string to the stream.
void calculateHash(uuid_t &hash) const
Calculate the hash.
static xAOD::EventInfo::PileUpMixtureID uuidToPileUpMixtureId(const uuid_t &hash)
Convert uuid_t to xAOD::EventInfo::PileUpMixtureID.
uint64_t mcEventNumber() const
The MC generator's event number.
const std::vector< float > & mcEventWeights() const
The weights of all the MC events used in the simulation.
void setAverageInteractionsPerCrossing(float value)
Set average interactions per crossing for all BCIDs.
void setBCID(uint32_t value)
Set the bunch crossing ID of the event.
uint32_t lumiBlock() const
The current event's luminosity block number.
void setMCEventNumber(uint64_t value)
Set the MC generator's event number.
uint32_t eventTypeBitmask() const
The event type bitmask.
uint32_t bcid() const
The bunch crossing ID of the event.
void setTimeStamp(uint32_t value)
Set the POSIX time of the event.
void clearSubEvents()
Clear all the currently held sub-events.
void setEventNumber(uint64_t value)
Set the current event's event number.
float averageInteractionsPerCrossing() const
Average interactions per crossing for all BCIDs - for out-of-time pile-up.
PileUpMixtureID pileUpMixtureID() const
Unique pile-up mixture identifier.
float actualInteractionsPerCrossing() const
Average interactions per crossing for the current BCID - for in-time pile-up.
void setPileUpMixtureID(const PileUpMixtureID &value)
Set unique pile-up mixture identifier.
void setEventTypeBitmask(uint32_t value)
Set the event type bitmask.
void setMCChannelNumber(uint32_t value)
Set the MC generator's channel number.
const std::vector< SubEvent > & subEvents() const
Get the pileup events that were used in the simulation.
void setMCEventWeights(const std::vector< float > &value)
Set the weights of all the MC events used in the simulation.
void setRunNumber(uint32_t value)
Set the current event's run number.
void setEvtStore(StoreGateSvc *svc)
Set the pointer to the event store associated with this event.
@ Signal
The signal event.
@ IS_SIMULATION
true: simulation, false: data
uint32_t runNumber() const
The current event's run number.
uint32_t mcChannelNumber() const
The MC generator's channel number.
uint64_t eventNumber() const
The current event's event number.
void setLumiBlock(uint32_t value)
Set the current event's luminosity block number.
void setActualInteractionsPerCrossing(float value)
Set average interactions per crossing for the current BCID.
EventInfoContainer_v1 EventInfoContainer
Define the latest version of the container.
EventInfo_v1 EventInfo
Definition of the latest event info version.
EventInfoAuxContainer_v1 EventInfoAuxContainer
Define the latest version of the auxiliary container.

◆ seek()

StatusCode PileUpEventLoopMgr::seek ( int evt)
overridevirtual

Definition at line 494 of file PileUpEventLoopMgr.cxx.

495{
496 int nevtsToAdvance = evt-m_ncurevt;
497 int nParam = m_nevt+1;
498 ATH_MSG_INFO ( "In PileUpEventLoopMgr::seek. m_ncurevt=" << m_ncurevt <<
499 " nevtsToAdvance=" << nevtsToAdvance );
500
501 m_skipExecAlgs = true;
502 for (int i=0; i<nevtsToAdvance; ++i) {
504 m_loadProxies = (nevtsToAdvance==(i+1));
505 }
506 if (this->nextEvent(nParam).isFailure()) {
507 ATH_MSG_ERROR ( "Seek error! Failed to advance to evt=" << m_ncurevt+1 );
508 return StatusCode::FAILURE;
509 }
510 }
511 m_skipExecAlgs = false;
512 return StatusCode::SUCCESS;
513}
virtual StatusCode nextEvent(int maxevt) override

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

525{
526 //OK now we can run
527 // retrieve selector and setup iterator (the selector has been setup as an ExtService)
528 CHECK(m_origSel.retrieve());
529
530 m_origStream = PileUpStream("OriginalEvent", serviceLocator(), &*m_origSel);
531 if (!m_origStream.setupStore()) {
532 ATH_MSG_ERROR ( "Can not setup original evt store " << m_origSel );
533 return StatusCode::FAILURE;
534 }
535
536 //now get the bkg stream caches, and set them up
537 CHECK(m_caches.retrieve());
538 ATH_MSG_DEBUG ( "retrieved BkgStreamsCaches " << m_caches );
539
540 ToolHandleArray<IBkgStreamsCache>::iterator cacheIterator(m_caches.begin());
541 ToolHandleArray<IBkgStreamsCache>::iterator endOfCaches(m_caches.end());
542 unsigned int nXings(m_lastXing-m_firstXing+1);
543 unsigned int firstStore(0);
544 StatusCode sc(StatusCode::SUCCESS);
545 while ((cacheIterator != endOfCaches) && sc.isSuccess()) {
546 sc = (*cacheIterator)->setup(m_firstXing, nXings, firstStore, &*m_beamInt);
547 firstStore += (*cacheIterator)->nStores() ;
548 ++cacheIterator;
549 }
550 return sc;
551}
ServiceHandle< IEvtSelector > m_origSel

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 69 of file PileUpEventLoopMgr.h.

◆ m_allowSerialAndMPToDiffer

Gaudi::Property<bool> PileUpEventLoopMgr::m_allowSerialAndMPToDiffer
private
Initial value:
{this, "AllowSerialAndMPToDiffer", 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 130 of file PileUpEventLoopMgr.h.

130 {this, "AllowSerialAndMPToDiffer", true,
131 "When set to False, this will allow the code to reproduce serial output in an "
132 "AthenaMP job, albeit with a significant performance penalty."};

◆ m_allowSubEvtsEOF

Gaudi::Property<bool> PileUpEventLoopMgr::m_allowSubEvtsEOF
private
Initial value:
{this, "AllowSubEvtsEOF", true,
"if true(default) an EOF condition in the BkgStreamsCaches is not considered "
"to be an error IF maxevt=-1 (loop over all available events)"}

Definition at line 119 of file PileUpEventLoopMgr.h.

119 {this, "AllowSubEvtsEOF", true,
120 "if true(default) an EOF condition in the BkgStreamsCaches is not considered "
121 "to be an error IF maxevt=-1 (loop over all available events)"};

◆ m_beamInt

ServiceHandle<IBeamIntensity> PileUpEventLoopMgr::m_beamInt
private
Initial value:
{this, "BeamInt", "FlatBM",
"The service providing the beam intensity distribution"}

Definition at line 98 of file PileUpEventLoopMgr.h.

98 {this, "BeamInt", "FlatBM",
99 "The service providing the beam intensity distribution"};

◆ m_beamLumi

ServiceHandle<IBeamLuminosity> PileUpEventLoopMgr::m_beamLumi
private
Initial value:
{this, "BeamLuminosity", "LumiProfileSvc",
"The service providing the beam luminosity distribution vs. run"}

Definition at line 100 of file PileUpEventLoopMgr.h.

100 {this, "BeamLuminosity", "LumiProfileSvc",
101 "The service providing the beam luminosity distribution vs. run"};

◆ m_caches

ToolHandleArray<IBkgStreamsCache> PileUpEventLoopMgr::m_caches
private
Initial value:
{this, "bkgCaches", {},
"list of tools managing bkg events"}

Definition at line 117 of file PileUpEventLoopMgr.h.

117 {this, "bkgCaches", {},
118 "list of tools managing bkg events"};

◆ m_currentRun

uint32_t PileUpEventLoopMgr::m_currentRun {0}
private

current run number

Definition at line 141 of file PileUpEventLoopMgr.h.

141{0};

◆ m_evinfContName

Gaudi::Property<std::string> PileUpEventLoopMgr::m_evinfContName
private
Initial value:
{this, "EventInfoContName", c_pileUpEventInfoContName,
"SG key for the EventInfoContainer object"}
const std::string c_pileUpEventInfoContName
default value for the EventInfoContainer storing subevents for PileUp
Definition PileUpMisc.h:15

Definition at line 135 of file PileUpEventLoopMgr.h.

135 {this, "EventInfoContName", c_pileUpEventInfoContName,
136 "SG key for the EventInfoContainer object"};

◆ m_evinfName

Gaudi::Property<std::string> PileUpEventLoopMgr::m_evinfName
private
Initial value:
{this, "EventInfoName", c_pileUpEventInfoObjName,
"SG key for the EventInfo object"}
const std::string c_pileUpEventInfoObjName
default value for the EventInfoContainer storing subevents for PileUp
Definition PileUpMisc.h:12

Definition at line 133 of file PileUpEventLoopMgr.h.

133 {this, "EventInfoName", c_pileUpEventInfoObjName,
134 "SG key for the EventInfo object"};

◆ m_evtIdModSvc

ServiceHandle<IEvtIdModifierSvc> PileUpEventLoopMgr::m_evtIdModSvc
private
Initial value:
{this, "EvtIdModifierSvc", "",
"ServiceHandle for EvtIdModifierSvc"}

Definition at line 104 of file PileUpEventLoopMgr.h.

104 {this, "EvtIdModifierSvc", "",
105 "ServiceHandle for EvtIdModifierSvc"};

◆ m_evtStore

ServiceHandle<StoreGateSvc> PileUpEventLoopMgr::m_evtStore
private

output store

Definition at line 92 of file PileUpEventLoopMgr.h.

◆ m_failureMode

Gaudi::Property<int> PileUpEventLoopMgr::m_failureMode
private
Initial value:
{this, "FailureMode", 1,
"Controls behaviour of event loop depending on return code of"
" Algorithms. 0: all non-SUCCESSes terminate job. "
"1: RECOVERABLE skips to next event, FAILURE terminates job "
"(DEFAULT). 2: RECOVERABLE and FAILURE skip to next events"}

Definition at line 125 of file PileUpEventLoopMgr.h.

125 {this, "FailureMode", 1,
126 "Controls behaviour of event loop depending on return code of"
127 " Algorithms. 0: all non-SUCCESSes terminate job. "
128 "1: RECOVERABLE skips to next event, FAILURE terminates job "
129 "(DEFAULT). 2: RECOVERABLE and FAILURE skip to next events"};

◆ m_firstRun

bool PileUpEventLoopMgr::m_firstRun {true}
private

Definition at line 142 of file PileUpEventLoopMgr.h.

142{true};

◆ m_firstXing

Gaudi::Property<int> PileUpEventLoopMgr::m_firstXing
private
Initial value:
{this, "firstXing", -2,
"time of first xing / XingFrequency (0th xing is 1st after trigger)"}

Definition at line 111 of file PileUpEventLoopMgr.h.

111 {this, "firstXing", -2,
112 "time of first xing / XingFrequency (0th xing is 1st after trigger)"};

◆ m_imsg

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

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

135{ nullptr };

◆ m_incidentSvc

ServiceHandle<IIncidentSvc> PileUpEventLoopMgr::m_incidentSvc
private

Incident Service.

Definition at line 86 of file PileUpEventLoopMgr.h.

◆ m_lastXing

Gaudi::Property<int> PileUpEventLoopMgr::m_lastXing
private
Initial value:
{this, "lastXing", 1,
"time of last xing / XingFrequency (0th xing is 1st after trigger)"}

Definition at line 113 of file PileUpEventLoopMgr.h.

113 {this, "lastXing", 1,
114 "time of last xing / XingFrequency (0th xing is 1st after trigger)"};

◆ m_loadProxies

bool PileUpEventLoopMgr::m_loadProxies {true}
private

Definition at line 147 of file PileUpEventLoopMgr.h.

147{true};

◆ m_lvl

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

Current logging level.

Definition at line 138 of file AthMessaging.h.

138{ MSG::NIL };

◆ m_maxBunchCrossingPerOrbit

Gaudi::Property<unsigned int> PileUpEventLoopMgr::m_maxBunchCrossingPerOrbit
private
Initial value:
{this, "MaxBunchCrossingPerOrbit", 3564,
"The number of slots in each LHC beam. Default: 3564."}

Definition at line 107 of file PileUpEventLoopMgr.h.

107 {this, "MaxBunchCrossingPerOrbit", 3564,
108 "The number of slots in each LHC beam. Default: 3564."};

◆ m_maxCollPerXing

Gaudi::Property<float> PileUpEventLoopMgr::m_maxCollPerXing
private
Initial value:
{this, "MaxMinBiasCollPerXing", 23.0,
"Set to digitization numberOfCollisions prop. for variable-mu and RunDMC jobs."}

Definition at line 115 of file PileUpEventLoopMgr.h.

115 {this, "MaxMinBiasCollPerXing", 23.0,
116 "Set to digitization numberOfCollisions prop. for variable-mu and RunDMC jobs."};

◆ m_mcChannelNumber

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

Definition at line 137 of file PileUpEventLoopMgr.h.

137 { this, "MCChannelNumber", 0,
138 "sample MC channel number" };

◆ m_mergeSvc

ServiceHandle<PileUpMergeSvc> PileUpEventLoopMgr::m_mergeSvc
private
Initial value:
{this, "PileUpMergeSvc", "PileUpMergeSvc",
"PileUp Merge Service"}

Definition at line 102 of file PileUpEventLoopMgr.h.

102 {this, "PileUpMergeSvc", "PileUpMergeSvc",
103 "PileUp Merge Service"};

◆ 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 {0}
private

Definition at line 145 of file PileUpEventLoopMgr.h.

145{0};

◆ m_nevt

int PileUpEventLoopMgr::m_nevt {0}
private

Definition at line 144 of file PileUpEventLoopMgr.h.

144{0};

◆ 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
Initial value:
{this, "OrigSelector", "EventSelector",
"EventSelector for original (physics) events stream"}

Definition at line 94 of file PileUpEventLoopMgr.h.

94 {this, "OrigSelector", "EventSelector",
95 "EventSelector for original (physics) events stream"};

◆ m_origStream

PileUpStream PileUpEventLoopMgr::m_origStream
private

Input Stream.

Definition at line 89 of file PileUpEventLoopMgr.h.

◆ m_signalSel

ServiceHandle<IEvtSelector> PileUpEventLoopMgr::m_signalSel
private
Initial value:
{this, "SignalSelector", "",
"EventSelector for signal (hard-scatter) events stream"}

Definition at line 96 of file PileUpEventLoopMgr.h.

96 {this, "SignalSelector", "",
97 "EventSelector for signal (hard-scatter) events stream"};

◆ m_skipExecAlgs

bool PileUpEventLoopMgr::m_skipExecAlgs {false}
private

Definition at line 146 of file PileUpEventLoopMgr.h.

146{false};

◆ m_xingByXing

Gaudi::Property<bool> PileUpEventLoopMgr::m_xingByXing
private
Initial value:
{this, "XingByXing", false,
"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"}

Definition at line 122 of file PileUpEventLoopMgr.h.

122 {this, "XingByXing", false,
123 "if set to true we will not cache bkg events from one xing to then next. "
124 "This greatly increases the amount of I/O and greatly reduces the memory required to run a job"};

◆ m_xingFreq

Gaudi::Property<float> PileUpEventLoopMgr::m_xingFreq
private
Initial value:
{this, "XingFrequency", 25.0,
"ns"}

Definition at line 109 of file PileUpEventLoopMgr.h.

109 {this, "XingFrequency", 25.0,
110 "ns"};

The documentation for this class was generated from the following files: