ATLAS Offline Software
MixingEventSelector.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 ATLAS_NO_CHECK_FILE_THREAD_SAFETY; // non-MT EventSelector
7 
8 #include "MixingEventSelector.h"
11 #include "EventInfo/EventInfo.h"
12 #include "EventInfo/EventID.h"
13 #include "EventInfo/EventType.h"
14 #include "EventInfo/TriggerInfo.h"
17 #include "StoreGate/StoreGateSvc.h"
18 #include "SGTools/DataProxy.h"
20 
21 #include "GaudiKernel/GaudiException.h"
22 #include "GaudiKernel/ListItem.h"
23 #include "GaudiKernel/MsgStream.h"
24 #include "GaudiKernel/GenericAddress.h"
25 #include "CLHEP/Random/RandFlat.h"
26 #include <boost/lexical_cast.hpp>
27 #include <boost/tokenizer.hpp>
28 #include <algorithm>
29 #include <cassert>
30 #include <functional>
31 #include <iostream>
32 #include <fstream>
33 #include <stdexcept>
34 #include <sstream>
35 #include <string>
36 
37 using namespace std;
38 using boost::lexical_cast;
39 using boost::tokenizer;
40 using boost::char_separator;
41 using SG::DataProxy;
42 
43 #ifdef DEBUG_OUTPUT_STATUS
44 ofstream outfile2("status.txt");
45 #endif
46 
47 MixingEventSelector::MixingEventSelector(const string& name, ISvcLocator* svc) :
48  extends<AthService, IEvtSelector, IConverter>(name,svc),
49  m_helperTools(this),
50  m_trigList(), m_pCurrentTrigger(m_trigList.end()),
51  m_eventPos(0),
52  m_pEventStore( "StoreGateSvc", name ),
53  m_atRndmSvc("AtRndmGenSvc", name),
54  m_randomStreamName("MixingEventSelectorStream"),
55  m_chooseRangeRand(nullptr)
56 {
57  declareProperty("TriggerList", m_triggerListProp,
58  "list of triggers (streams) to be used. Format is SelectorType/SelectorName:firstEventToUse:lastEventToUse. One assumes events are consecutively numbered.");
59  m_triggerListProp.declareUpdateHandler(&MixingEventSelector::setUpTriggerList, this);
60  declareProperty("OutputRunNumber", m_outputRunNumber=123456789);
61  declareProperty("EventNumbers", m_eventNumbers,
62  "list of event numbers to be used for output stream. If list empty or not long enough, event numbers are assigned consucutively after last one in list");
63  declareProperty("StreamStatusFileName", m_statusFileName=string(),
64  "Name of the file recording the last event used and how many were available for each stream. Default is to produce no file." ); //no out
65  declareProperty("MergedEventInfoKey",
66  m_mergedEventInfoKey=string("MergedEventInfo"),
67  "StoreGate key for output (merged) event info object. Default is MergedEventInfo ");
68  declareProperty("RndmGenSvc", m_atRndmSvc, "IAtRndmGenSvc controlling the order with which events are takes from streams");
69  declareProperty("RndmStreamName", m_randomStreamName, "IAtRndmGenSvc stream used as engine for our random distributions");
70  declareProperty("HelperTools", m_helperTools, "a collection of selector tools");
71 
72 }
73 
75 }
76 
79  ATH_MSG_INFO ("Initializing " << name());
80 
81 // defer this (it triggers a init loop via PPS
82 // if (!m_pEventStore.retrieve().isSuccess())
83 // return StatusCode::FAILURE;
84 
85  //setup random stream
86  CLHEP::HepRandomEngine* collEng(m_atRndmSvc->GetEngine(m_randomStreamName.value()));
87  if(nullptr == collEng ) {
88  ATH_MSG_ERROR ("can not get random stream " << m_randomStreamName.value());
89  return StatusCode::FAILURE;
90  }
91  //flat distribution in [0,1] range
92  m_chooseRangeRand = new CLHEP::RandFlat(*(collEng), 0.0, 1.0);
93 
94  StatusCode sc= m_helperTools.retrieve();
95  std::vector<ToolHandle<IAthenaSelectorTool> >::iterator
96  i(m_helperTools.begin()), iE(m_helperTools.end());
97  while (sc.isSuccess() && (i != iE)) sc = (*i++)->postInitialize();
98 
99  return sc;
100 }
101 
104  ATH_MSG_DEBUG ("Finalizing " << name());
105 
106  StatusCode sc(StatusCode::SUCCESS);
107  std::vector<ToolHandle<IAthenaSelectorTool> >::iterator
108  i(m_helperTools.begin()), iE(m_helperTools.end());
109  while (i != iE) ((*i++)->preFinalize()).ignore();
110 
111  const std::string& fname(m_statusFileName.value());
112  ofstream outfile(fname.c_str());
113  if ( outfile ) {
116  while (i != iEnd) outfile << (*i++).toString();
117  } else if (!fname.empty()) {
118  ATH_MSG_WARNING("unable to open trigger list status file " << fname);
119  }
120 
121  m_helperTools.release().ignore();
122 
123  return sc;
124 
125 }
126 
127 
128 void
129 MixingEventSelector::setUpTriggerList(Gaudi::Details::PropertyBase&) {
130  using std::placeholders::_1;
132  for_each(m_triggerListProp.value().begin(), m_triggerListProp.value().end(),
133  bind(&MixingEventSelector::decodeTrigger, this, _1));
135 }
136 
137 void
139  //all this would be much more readable without error reporting...
140  typedef tokenizer<char_separator<char> > Tokenizer;
141  Tokenizer tokens(triggDescr, char_separator<char>(" :"));
142  //we need exactly three tokens: selector name, first and last event 2 B read
143  if ( (distance(tokens.begin(), tokens.end()) == 3) ||
144  (distance(tokens.begin(), tokens.end()) == 3) ){
145  Tokenizer::iterator iToken(tokens.begin());
146  try {
147  ListItem selTN(*iToken++);
148  const bool CREATEIF(true);
149  //get selector
150  IEvtSelector* pSelector(nullptr);
151  if ((serviceLocator()->service(selTN.type(), selTN.name(), pSelector, CREATEIF)).isSuccess()) {
152  //must be an address provider
153  if (nullptr != dynamic_cast<IEvtSelector*>(pSelector) ) {
154  //FIXME if (!pSelector.done()) {
155  //try to add to trig list
156  unsigned int firstEvt(boost::lexical_cast<unsigned int>(*iToken++));
157  unsigned int lastEvt(boost::lexical_cast<unsigned int>(*iToken));
158  if (m_trigList.add(Trigger(pSelector, firstEvt, lastEvt))) {
159  if (msgLvl(MSG::DEBUG)) {
160  INamedInterface *pNamed(dynamic_cast<INamedInterface*>(pSelector));
161  if (nullptr != pNamed) {
162  msg() << "decodeTrigger: added selector " << pNamed->name()
163  << " first event to be read " << firstEvt
164  << " last event to be read " << lastEvt << endmsg;
165  }
166  }
167  } else {
169  ("decodeTrigger: Selector ["
170  << selTN.type() << '/' << selTN.name()
171  << "] not added");
172  } //can add to range
173 // } else {
174 // log << MSG::ERROR << "decodeTrigger: Selector ["
175 // << selTN.type() << '/' << selTN.name()
176 // << "] is empty, not added" << endmsg;
177 // } //selector empty
178  } else {
180  ("decodeTrigger: Selector ["
181  << selTN.type() << '/' << selTN.name()
182  << "] not an IEvtSelector, not added");
183  } //is address provider
184  } else {
186  ("decodeTrigger: Selector ["
187  << selTN.type() << '/' << selTN.name()
188  << "] can not be found or created");
189  } //selector available
190  } catch (const boost::bad_lexical_cast& e) {
192  ("decodeTrigger: Can't cast ["<< *iToken
193  << "] to double(frequency). SKIPPING");
194  } //can cast to frequency
195  } else {
197  ("decodeTrigger: Badly formatted descriptor ["
198  << triggDescr << "]. SKIPPING");
199  } //can parse property string
200 }
201 
202 #ifndef NDEBUG
203 #define FORWARD___DEBUG( METHOD )\
204  { ATH_MSG_VERBOSE ("forwarding " << #METHOD << " to service "\
205  << (validTrigger() ? currentTrigger()->name() : "NONE")); }
206 #else
207 #define FORWARD___DEBUG( METHOD )
208 #endif
209 
210 StatusCode MixingEventSelector::createContext(IEvtSelector::Context*& pctxt) const {
211  pctxt=nullptr;
212  if (!validTrigger()) return StatusCode::FAILURE;
214  StatusCode sc(StatusCode::FAILURE);
215  while (iTr != m_trigList.end() && (sc=(iTr++)->createContext(pctxt)).isSuccess()) ;
216  return sc;
217 }
218 
220 MixingEventSelector::next(IEvtSelector::Context& /*c*/) const {
221  StatusCode sc(StatusCode::FAILURE);
222  do {
223 #ifdef DEBUG_OUTPUT_STATUS
226  while (i != iEnd) outfile2 << (*i++).toString(); //output status
227 #endif
229  sc = currentTrigger()->next();
230  if (sc.isFailure()){
232  continue; // we have to add "continue;" after "m_trigList.remove(m_pCurrentTrigger);
233  }
234  } while ((sc.isFailure() || currentTrigger()->done()) && !m_trigList.empty() );
235  // use !m_trigList.empty() to replace validTrigger(), which is not working well
236 
237  std::vector<ToolHandle<IAthenaSelectorTool> >::const_iterator
238  i(m_helperTools.begin()), iE(m_helperTools.end());
239  while (i != iE) ((*i++)->preNext()).ignore();
240 
241  ++m_eventPos;
242  FORWARD___DEBUG( next );
243 
244  i=m_helperTools.begin(); iE=m_helperTools.end();
245  while (sc.isSuccess() && (i != iE)) {
246  sc =(*i)->postNext();
247  if (sc.isRecoverable())
248  ATH_MSG_INFO("Request skipping event from: " << (*i)->name());
249  else if (sc.isFailure())
250  ATH_MSG_WARNING((*i)->name() << ":postNext failed");
251  ++i;
252  }
253  return sc;
254 }
255 
256 
258 MixingEventSelector::createAddress(const IEvtSelector::Context& /*c*/,
259  IOpaqueAddress*& pAddr) const {
260  pAddr=nullptr;
261  if (!validTrigger()) return StatusCode::FAILURE;
262 
264  return (currentTrigger()->createAddress(pAddr).isSuccess() &&
265  pAddr != nullptr) ? StatusCode::SUCCESS : StatusCode::FAILURE;
266 }
267 
270  IAddressProvider::tadList& /*tads*/ ) {
271  return StatusCode::SUCCESS;
272 }
273 
276  IAddressProvider::tadList& /*tads*/ )
277 {
278  if (storeID != StoreID::EVENT_STORE && storeID != StoreID::PILEUP_STORE)
279  return StatusCode::SUCCESS;
280 
282  if (!m_pEventStore->contains (mclid, m_mergedEventInfoKey)) {
283  // We create the DataProxy here rather than relying on ProxyProvideSvc
284  // to do it because we want to set a non-default dataloader on the proxy.
285  SG::TransientAddress tad (mclid,
287  new GenericAddress (0, mclid),
288  false);
289  auto dp = std::make_unique<SG::DataProxy> (std::move(tad),
290  this,
291  true);
292  ATH_CHECK( m_pEventStore->addToStore (mclid, dp.release()) );
293  }
294  return StatusCode::SUCCESS;
295 }
296 
299  const EventContext&) {
300  return StatusCode::FAILURE;
301 }
302 
303 #undef FORWARD___DEBUG
304 
305 unsigned long MixingEventSelector::getEventNo() const {
306  return ( (m_eventNumbers.value().size() > m_eventPos) ?
307  m_eventNumbers.value()[m_eventPos] :
308  m_eventPos );
309 }
310 
311 //remember that m_pCurrentTrigger and m_trigList are mutable
314  //we look for the first trigger which is not done
315  do {
316  //if called before initialize, choose the last trigger in list
317  unsigned int iTrig = (nullptr != m_chooseRangeRand) ?
318  (unsigned int)(m_chooseRangeRand->fire() * double(m_trigList.todo())) :
319  m_trigList.todo();
321  } while (validTrigger() && m_pCurrentTrigger->done() &&
322  m_trigList.remove(m_pCurrentTrigger)); //remove a done trigger
323 
324  //printouts
325  if (!validTrigger()) {
326  ATH_MSG_INFO ("setCurrentTrigger: end of input");
327  } else {
328  ATH_MSG_DEBUG ("setCurrentTrigger: now using selector "
329  << currentTrigger()->name());
330  }
331 
332  return m_pCurrentTrigger;
333 }
334 
338 }
339 
340 bool
342  bool newElem(end() == find(begin(), end() , trig));
343  if (newElem) {
344  m_todo += trig.todo();
345  m_trigs.push_back(trig);
346  m_rangeEnd.push_back(m_todo);
347 #ifndef NDEBUG
348  MsgStream log(Athena::getMessageSvc(), "MixingEventSelector::TriggerList");
349  if (log.level() <= MSG::DEBUG) {
350  log << MSG::DEBUG << "add: trigger "
351  << trig.name() << ". New trigger table: \n" << toString() <<endmsg;
352  }
353 #endif
354  }
355  return newElem;
356 }
357 
358 bool
360  bool removed(false);
361  unsigned int nElem(m_trigs.size());
362  if (nElem) {
363  unsigned int trigTodo(iTrig->todo());
364  unsigned int trigIndex(iTrig - begin());
365 #ifndef NDEBUG
366  string trigName(iTrig->name());
367 #endif
368  m_trigs.erase(iTrig);
369  removed = nElem > m_trigs.size();
370  if (removed) {
371  //this means we erased iTrig. Remove its todo count from total
372  m_todo -= trigTodo;
373  //and from each of the subsequent ranges
374  for (unsigned int i=trigIndex+1; i<m_rangeEnd.size(); ++i)
375  m_rangeEnd[i] -= trigTodo;
376  //finally erase the corresponding rangeEnd element
377  m_rangeEnd.erase(m_rangeEnd.begin()+trigIndex);
378 #ifndef NDEBUG
379  MsgStream log(Athena::getMessageSvc(), "MixingEventSelector::TriggerList"); //FIXME
380  if (log.level() <= MSG::DEBUG) {
381  log << MSG::DEBUG << "remove: trigger "
382  << trigName
383  << ". New trigger table: \n" << toString() <<endmsg;
384  }
385 #endif
386  }
387  }
388  return removed;
389 }
390 
391 string
393  ostringstream os;
394  for (unsigned int i=0; i<m_trigs.size(); ++i) {
395  //cant do os << m_trigs[i].toString();
396  os << m_trigs[i].name() << ", already read=" << m_trigs[i].read()
397  << ", to do=" << m_trigs[i].todo()
398  << (m_trigs[i].done() ? " done " : " ")
399  << " - endRange: " << m_rangeEnd[i] << '\n';
400  }
401  os << endl;
402  return string(os.str());
403 }
404 
407  iterator iTrig(m_trigs.begin()), eTrig(m_trigs.end());
408  std::vector<unsigned int>::const_iterator iRange(m_rangeEnd.begin());
409  std::vector<unsigned int>::const_iterator eRange(m_rangeEnd.end());
410  while (eRange != iRange && eTrig != iTrig && i > *iRange){
411  ++iRange; ++iTrig;
412  }
413 #ifndef NDEBUG
414  MsgStream log(Athena::getMessageSvc(), "MixingEventSelector::TriggerList");
415  if (log.level() <= MSG::VERBOSE) {
416  if (eRange != iRange) log << MSG::VERBOSE
417  << "elementInRange: rangeEnd=" << *iRange
418  << " matches i=" << i << endmsg;
419  }
420 #endif
421  return iTrig;
422 }
423 
425  unsigned int firstEvt,
426  unsigned int lastEvt):
427  m_pSelector(pSel), m_firstEvent(firstEvt),
428  m_toRead(lastEvt+1), m_todo(m_toRead-firstEvt), m_reads(0),
429  m_current(nullptr)
430  { }
431 
432 IEvtSelector::Context& MixingEventSelector::Trigger::currentContext() const {
433  //make sure we have a context!
434  if (nullptr == m_current) {
435  IEvtSelector::Context* pTmp(nullptr);
436  if ((createContext(pTmp)).isFailure())
437  throw GaudiException("MixingEventSelector::Trigger::currentContext(): can't create context",
438  name(),StatusCode::FAILURE);
439  }
440  // cppcheck-suppress nullPointerRedundantCheck; false positive
441  // createContext() sets m_current
442  return *m_current;
443 }
444 
445 std::string
447  ostringstream os;
448  os << name() << ", already read=" << m_reads
449  << ", to do=" << todo() << endl;
450  return string(os.str());
451 }
452 
455  StatusCode sc(StatusCode::FAILURE);
456  if (!done()) {
457  sc= selector().next(currentContext());
458  while (sc.isSuccess() && (++m_reads < m_firstEvent))
459  sc = selector().next(currentContext());// m_reads, m_current are mutable
460  }
461  // cout << "calling next on Trigger " << this << " " << dynamic_cast<IService&>(selector()).name() << endl;
462  return sc;
463 }
464 
467  return selector().previous(currentContext());
468 }
469 
471 MixingEventSelector::Trigger::createAddress(IOpaqueAddress*& pIOA) const {
472  return (done() ?
473  StatusCode::FAILURE :
474  selector().createAddress(currentContext(), pIOA) );
475 }
476 
478 MixingEventSelector::Trigger::createContext(IEvtSelector::Context*& pCtxt) const{
479  StatusCode sc(StatusCode::FAILURE);
480  if (!done()) {
481  sc = selector().createContext(pCtxt);
482  m_current = pCtxt;
483  }
484  return sc;
485 }
486 
487 bool
489  // cout << "calling done on Trigger " << this << " " << dynamic_cast<IService&>(selector()).name() << endl;
490  // cout << refCtxt << " " << selector().end() << endl;
491  // cout << toRead() << " " << m_reads << endl;
492  // cout << "done returns " << ((m_current && (currentContext() == *selector().end())) || (toRead() <= m_reads)) << endl;
493  return (toRead() <= m_reads);
494 }
495 
496 
497 StatusCode MixingEventSelector::last(IEvtSelector::Context&) const {
498  return StatusCode::FAILURE;
499 }
500 StatusCode MixingEventSelector::next(IEvtSelector::Context&, int) const {
501  return StatusCode::FAILURE;
502 }
503 StatusCode MixingEventSelector::previous(IEvtSelector::Context&) const {
504  return StatusCode::FAILURE;
505 }
506 StatusCode MixingEventSelector::previous(IEvtSelector::Context&,int) const {
507  return StatusCode::FAILURE;
508 }
509 StatusCode MixingEventSelector::rewind(IEvtSelector::Context&) const {
510  return StatusCode::FAILURE;
511 }
512 StatusCode MixingEventSelector::releaseContext(IEvtSelector::Context*&) const {
513  return StatusCode::FAILURE;
514 }
516  IEvtSelector::Context&)const {
517  return StatusCode::FAILURE;
518 }
519 
520 
521 // IConverter implementation.
523 {
525 }
527 {
528  return 0;
529 }
530 
531 
543 StatusCode MixingEventSelector::createObj(IOpaqueAddress* /*pAddress*/,
544  DataObject*& refpObject)
545 {
546  const EventInfo* pEInfo(nullptr);
547  if (!(m_pEventStore->retrieve(pEInfo)).isSuccess()) {
549  ("addMergedEventInfo: event store does not contain "\
550  "an EventInfo object!");
551  return StatusCode::RECOVERABLE;
552  }
553 
554  // copy the original event to a new MergedEventInfo
555  auto mei = std::make_unique<MergedEventInfo> (*pEInfo,
557  getEventNo());
558  refpObject = SG::asStorable (std::move (mei));
559 
560 
561  //finally slam a new EventID in place of the old! HACK!!! FIXME!!
562  (const_cast<EventInfo*>(pEInfo))->setEventID(
564 
565  return StatusCode::SUCCESS;
566 }
567 
568 
569 // IConverter dummies.
570 StatusCode MixingEventSelector::setDataProvider(IDataProviderSvc* /*pService*/)
571 {
572  std::abort();
573 }
574 SmartIF<IDataProviderSvc>& MixingEventSelector::dataProvider() const
575 {
576  std::abort();
577 }
579 {
580  std::abort();
581 }
582 SmartIF<IConversionSvc>& MixingEventSelector::conversionSvc() const
583 {
584  std::abort();
585 }
587 {
588  std::abort();
589 }
590 SmartIF<IAddressCreator>& MixingEventSelector::addressCreator() const
591 {
592  std::abort();
593 }
594 StatusCode MixingEventSelector::fillObjRefs(IOpaqueAddress* /*pAddress*/, DataObject* /*pObject*/)
595 {
596  std::abort();
597 }
598 StatusCode MixingEventSelector::updateObj(IOpaqueAddress* /*pAddress*/, DataObject* /*refpObject*/)
599 {
600  std::abort();
601 }
602 StatusCode MixingEventSelector::updateObjRefs(IOpaqueAddress* /*pAddress*/, DataObject* /*pObject*/)
603 {
604  std::abort();
605 }
606 StatusCode MixingEventSelector::createRep(DataObject* /*pObject*/, IOpaqueAddress*& /*refpAddress*/)
607 {
608  std::abort();
609 }
610 StatusCode MixingEventSelector::fillRepRefs(IOpaqueAddress* /*pAddress*/, DataObject* /*pObject*/)
611 {
612  std::abort();
613 }
614 StatusCode MixingEventSelector::updateRep(IOpaqueAddress* /*pAddress*/, DataObject* /*pObject*/)
615 {
616  std::abort();
617 }
618 StatusCode MixingEventSelector::updateRepRefs(IOpaqueAddress* /*pAddress*/, DataObject* /*pObject*/)
619 {
620  std::abort();
621 }
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
MixingEventSelector::m_pCurrentTrigger
TriggerList::iterator m_pCurrentTrigger
the current trigger
Definition: MixingEventSelector.h:247
TileDCSDataPlotter.dp
dp
Definition: TileDCSDataPlotter.py:840
MixingEventSelector::m_trigList
TriggerList m_trigList
the ingredients
Definition: MixingEventSelector.h:241
MixingEventSelector::MixingEventSelector
MixingEventSelector(const std::string &name, ISvcLocator *svc)
Definition: MixingEventSelector.cxx:47
MixingEventSelector::Trigger::toString
std::string toString() const
Definition: MixingEventSelector.cxx:446
MixingEventSelector::conversionSvc
virtual SmartIF< IConversionSvc > & conversionSvc() const override
Definition: MixingEventSelector.cxx:582
getMessageSvc.h
singleton-like access to IMessageSvc via open function and helper
MixingEventSelector::m_atRndmSvc
ServiceHandle< IAtRndmGenSvc > m_atRndmSvc
Definition: MixingEventSelector.h:259
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
MixingEventSelector::TriggerList::remove
bool remove(iterator)
Definition: MixingEventSelector.cxx:359
MixingEventSelector::repSvcType
virtual long repSvcType() const override
Definition: MixingEventSelector.cxx:526
StorableConversions.h
convert to and from a SG storable
MixingEventSelector::objType
virtual const CLID & objType() const override
Definition: MixingEventSelector.cxx:522
MixingEventSelector::releaseContext
virtual StatusCode releaseContext(IEvtSelector::Context *&refCtxt) const override
Definition: MixingEventSelector.cxx:512
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
MixingEventSelector::TriggerList::m_rangeEnd
std::vector< unsigned int > m_rangeEnd
Definition: MixingEventSelector.h:223
SG::TransientAddress
Definition: TransientAddress.h:32
MixingEventSelector::setDataProvider
virtual StatusCode setDataProvider(IDataProviderSvc *pService) override
Definition: MixingEventSelector.cxx:570
MixingEventSelector::last
virtual StatusCode last(IEvtSelector::Context &) const override
Definition: MixingEventSelector.cxx:497
MixingEventSelector::setAddressCreator
virtual StatusCode setAddressCreator(IAddressCreator *creator) override
Definition: MixingEventSelector.cxx:586
SG::asStorable
DataObject * asStorable(T *pObject)
Definition: StorableConversions.h:158
TriggerInfo.h
This class contains trigger related information.
MixingEventSelector::TriggerList::end
iterator end()
Definition: MixingEventSelector.h:232
EventType.h
This class provides general information about an event. It extends EventInfo with a list of sub-evts ...
MixingEventSelector::TriggerList::empty
bool empty() const
Definition: MixingEventSelector.h:235
MixingEventSelector::Trigger::todo
unsigned int todo() const
Definition: MixingEventSelector.h:182
MixingEventSelector::TriggerList::todo
unsigned int todo() const
Definition: MixingEventSelector.h:237
MixingEventSelector::m_triggerListProp
StringArrayProperty m_triggerListProp
the recipe
Definition: MixingEventSelector.h:156
beamspotman.tokens
tokens
Definition: beamspotman.py:1284
MixingEventSelector::next
virtual StatusCode next(IEvtSelector::Context &refCtxt) const override
Definition: MixingEventSelector.cxx:220
MixingEventSelector::currentTrigger
TriggerList::iterator currentTrigger() const
"intelligent" accessor to the above
Definition: MixingEventSelector.cxx:336
MixingEventSelector::loadAddresses
virtual StatusCode loadAddresses(StoreID::type storeID, IAddressProvider::tadList &tads) override
get all new addresses from Provider for this Event.
Definition: MixingEventSelector.cxx:275
MixingEventSelector::getEventNo
unsigned long getEventNo() const
setup and lookup m_evtsNotUsedSoFar. Returns next event no
Definition: MixingEventSelector.cxx:305
MixingEventSelector::m_eventPos
unsigned long m_eventPos
the internal event number
Definition: MixingEventSelector.h:255
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
MixingEventSelector::m_outputRunNumber
IntegerProperty m_outputRunNumber
Definition: MixingEventSelector.h:157
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
MixingEventSelector::m_helperTools
ToolHandleArray< IAthenaSelectorTool > m_helperTools
Definition: MixingEventSelector.h:160
MixingEventSelector::setConversionSvc
virtual StatusCode setConversionSvc(IConversionSvc *pService) override
Definition: MixingEventSelector.cxx:578
MixingEventSelector::TriggerList::elementInRange
iterator elementInRange(unsigned int)
Definition: MixingEventSelector.cxx:406
MixingEventSelector::Trigger::previous
StatusCode previous() const
Definition: MixingEventSelector.cxx:466
ClassID_traits::ID
static const CLID & ID()
the CLID of T
Definition: Control/AthenaKernel/AthenaKernel/ClassID_traits.h:50
DiTauMassTools::ignore
void ignore(T &&)
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:54
MergedEventInfo.h
This class provides general information about an event. It extends MergedEventInfo with a list of sub...
EventID.h
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
MixingEventSelector::createObj
virtual StatusCode createObj(IOpaqueAddress *pAddress, DataObject *&refpObject) override
Create the transient representation of an object.
Definition: MixingEventSelector.cxx:543
MixingEventSelector::TriggerList::iterator
std::vector< Trigger >::iterator iterator
Definition: MixingEventSelector.h:228
MixingEventSelector::decodeTrigger
void decodeTrigger(std::string triggDescr)
functor that creates a Trigger object and adds it to m_trigList
Definition: MixingEventSelector.cxx:138
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
StoreID::PILEUP_STORE
@ PILEUP_STORE
Definition: StoreID.h:31
lumiFormat.i
int i
Definition: lumiFormat.py:92
CP::DetailSelectionExprParser::Tokenizer
boost::tokenizer< Separator > Tokenizer
Definition: SelectionExprParser.h:34
ClassID_traits.h
a traits class that associates a CLID to a type T It also detects whether T inherits from Gaudi DataO...
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
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
AthService
Definition: AthService.h:32
MixingEventSelector::m_eventNumbers
UnsignedLongArrayProperty m_eventNumbers
use these as event numbers
Definition: MixingEventSelector.h:158
MixingEventSelector::dataProvider
virtual SmartIF< IDataProviderSvc > & dataProvider() const override
Definition: MixingEventSelector.cxx:574
FORWARD___DEBUG
#define FORWARD___DEBUG(METHOD)
Definition: MixingEventSelector.cxx:203
MixingEventSelector::Trigger::next
StatusCode next() const
Definition: MixingEventSelector.cxx:454
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MixingEventSelector::TriggerList::begin
iterator begin()
Definition: MixingEventSelector.h:231
MixingEventSelector::rewind
virtual StatusCode rewind(IEvtSelector::Context &refCtxt) const override
Definition: MixingEventSelector.cxx:509
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
ATLAS_NO_CHECK_FILE_THREAD_SAFETY
ATLAS_NO_CHECK_FILE_THREAD_SAFETY
Definition: MixingEventSelector.cxx:6
MixingEventSelector::setCurrentTrigger
TriggerList::iterator setCurrentTrigger() const
choose current trigger at random. Actually modifies state (use mutables)
Definition: MixingEventSelector.cxx:313
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
MixingEventSelector::TriggerList::m_trigs
std::vector< Trigger > m_trigs
Definition: MixingEventSelector.h:222
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
MixingEventSelector::m_chooseRangeRand
CLHEP::RandFlat * m_chooseRangeRand
Definition: MixingEventSelector.h:261
MixingEventSelector::TriggerList::m_todo
unsigned int m_todo
Definition: MixingEventSelector.h:224
IAtRndmGenSvc.h
MixingEventSelector::updateObj
virtual StatusCode updateObj(IOpaqueAddress *pAddress, DataObject *refpObject) override
Definition: MixingEventSelector.cxx:598
MixingEventSelector::updateAddress
virtual StatusCode updateAddress(StoreID::type storeID, SG::TransientAddress *tad, const EventContext &ctx) override
update a transient Address The ctx argument will give the current event information.
Definition: MixingEventSelector.cxx:298
MixingEventSelector::m_mergedEventInfoKey
StringProperty m_mergedEventInfoKey
SG key of MergedEventInfo.
Definition: MixingEventSelector.h:159
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
MixingEventSelector::setUpTriggerList
void setUpTriggerList(Gaudi::Details::PropertyBase &trigList)
TriggerList property call-back.
Definition: MixingEventSelector.cxx:129
MixingEventSelector::m_randomStreamName
StringProperty m_randomStreamName
Definition: MixingEventSelector.h:260
EventInfo
This class provides general information about an event. Event information is provided by the accessor...
Definition: EventInfo/EventInfo/EventInfo.h:42
MixingEventSelector::finalize
virtual StatusCode finalize() override
Definition: MixingEventSelector.cxx:103
MixingEventSelector::TriggerList::toString
std::string toString() const
Definition: MixingEventSelector.cxx:392
MixingEventSelector::previous
virtual StatusCode previous(IEvtSelector::Context &) const override
Definition: MixingEventSelector.cxx:503
MixingEventSelector::~MixingEventSelector
virtual ~MixingEventSelector()
Definition: MixingEventSelector.cxx:74
MixingEventSelector::Trigger
a selector with an associated frequency
Definition: MixingEventSelector.h:168
MixingEventSelector::fillRepRefs
virtual StatusCode fillRepRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Definition: MixingEventSelector.cxx:610
python.AthDsoLogger.fname
string fname
Definition: AthDsoLogger.py:67
MixingEventSelector::TriggerList::add
bool add(const Trigger &)
Definition: MixingEventSelector.cxx:341
MixingEventSelector::TriggerList::const_iterator
std::vector< Trigger >::const_iterator const_iterator
Definition: MixingEventSelector.h:227
MixingEventSelector::Trigger::name
const std::string & name() const
Definition: MixingEventSelector.h:203
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
MixingEventSelector::Trigger::done
bool done() const
Definition: MixingEventSelector.cxx:488
python.selector.AtlRunQuerySelectorLhcOlc.selector
selector
Definition: AtlRunQuerySelectorLhcOlc.py:611
StoreID::type
type
Definition: StoreID.h:24
MixingEventSelector::TriggerList
the list of available selectors with their frequency range
Definition: MixingEventSelector.h:220
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DEBUG
#define DEBUG
Definition: page_access.h:11
MixingEventSelector::initialize
virtual StatusCode initialize() override
Definition: MixingEventSelector.cxx:78
MixingEventSelector::createContext
virtual StatusCode createContext(IEvtSelector::Context *&refpCtxt) const override
Definition: MixingEventSelector.cxx:210
MixingEventSelector::preLoadAddresses
virtual StatusCode preLoadAddresses(StoreID::type storeID, IAddressProvider::tadList &tads) override
get all addresses from Provider : Called before Begin Event
Definition: MixingEventSelector.cxx:269
MixingEventSelector::Trigger::Trigger
Trigger(IEvtSelector *pSel, unsigned int firstEvt, unsigned int lastEvt)
Definition: MixingEventSelector.cxx:424
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
EventID
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
Definition: EventID.h:35
IAddressProvider::tadList
std::list< SG::TransientAddress * > tadList
Definition: IAddressProvider.h:32
MixingEventSelector::createAddress
virtual StatusCode createAddress(const IEvtSelector::Context &refCtxt, IOpaqueAddress *&) const override
Definition: MixingEventSelector.cxx:258
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
MixingEventSelector::Trigger::createContext
StatusCode createContext(IEvtSelector::Context *&pCtxt) const
Definition: MixingEventSelector.cxx:478
MixingEventSelector::addressCreator
virtual SmartIF< IAddressCreator > & addressCreator() const override
Definition: MixingEventSelector.cxx:590
StoreID::EVENT_STORE
@ EVENT_STORE
Definition: StoreID.h:26
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
MixingEventSelector::m_statusFileName
StringProperty m_statusFileName
optional stream output snapshot
Definition: MixingEventSelector.h:155
checker_macros.h
Define macros for attributes used to control the static checker.
SG::DataProxy
Definition: DataProxy.h:44
MixingEventSelector::updateRep
virtual StatusCode updateRep(IOpaqueAddress *pAddress, DataObject *pObject) override
Definition: MixingEventSelector.cxx:614
PrepareReferenceFile.outfile
outfile
Definition: PrepareReferenceFile.py:42
MixingEventSelector.h
a stream of events read from different selectors.
MixingEventSelector::Trigger::currentContext
IEvtSelector::Context & currentContext() const
Definition: MixingEventSelector.cxx:432
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
StoreGateSvc.h
MixingEventSelector::Trigger::createAddress
StatusCode createAddress(IOpaqueAddress *&) const
Definition: MixingEventSelector.cxx:471
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
MixingEventSelector::fillObjRefs
virtual StatusCode fillObjRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Definition: MixingEventSelector.cxx:594
MixingEventSelector::validTrigger
bool validTrigger() const
Definition: MixingEventSelector.h:152
MixingEventSelector::updateObjRefs
virtual StatusCode updateObjRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Definition: MixingEventSelector.cxx:602
MixingEventSelector::m_pEventStore
StoreGateSvc_t m_pEventStore
Definition: MixingEventSelector.h:258
MixingEventSelector::resetCriteria
virtual StatusCode resetCriteria(const std::string &cr, IEvtSelector::Context &c) const override
Definition: MixingEventSelector.cxx:515
MixingEventSelector::createRep
virtual StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress) override
Definition: MixingEventSelector.cxx:606
MixingEventSelector::updateRepRefs
virtual StatusCode updateRepRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
Definition: MixingEventSelector.cxx:618
DataProxy.h