ATLAS Offline Software
MixingEventSelector.h
Go to the documentation of this file.
1 /* -*- C++ -*- */
2 
3 /*
4  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
5 */
6 
7 #ifndef ATHENASERVICES_MIXINGEVENTSELECTOR_H
8 #define ATHENASERVICES_MIXINGEVENTSELECTOR_H
9 
16 ATLAS_NO_CHECK_FILE_THREAD_SAFETY; // non-MT EventSelector
17 
18 #include <cassert>
19 #include <ostream>
20 #include <vector>
21 
26 
27 #include "GaudiKernel/ServiceHandle.h"
28 #include "GaudiKernel/IEvtSelector.h"
29 #include "GaudiKernel/IConverter.h"
30 #include "GaudiKernel/ToolHandle.h"
31 #include "GaudiKernel/StatusCode.h"
32 #include "Gaudi/Property.h" /*StringArrayProperty*/
33 
34 class ISvcLocator;
35 
36 class MixingEventIterator;
37 
38 class StoreGateSvc;
39 
40 namespace CLHEP {
41  class RandFlat;
42 }
43 
44 
69  : public extends<AthService, IEvtSelector, IConverter>,
70  virtual public IAddressProvider
71 {
72 public:
76  struct Context : public IEvtSelector::Context {
77  virtual ~Context() {}
78  virtual void* identifier() const {
79  return (void*)0;
80  }
81  } ;
83 
84  virtual StatusCode next(IEvtSelector::Context& refCtxt) const override;
85  virtual StatusCode createAddress(const IEvtSelector::Context& refCtxt,
86  IOpaqueAddress*&) const override;
87 
88  virtual StatusCode createContext(IEvtSelector::Context*& refpCtxt) const override;
89  virtual StatusCode last(IEvtSelector::Context&) const override;
90  virtual StatusCode next(IEvtSelector::Context&, int) const override;
91  virtual StatusCode previous(IEvtSelector::Context&) const override;
92  virtual StatusCode previous(IEvtSelector::Context&,int) const override;
93  virtual StatusCode rewind(IEvtSelector::Context& refCtxt) const override;
94  virtual StatusCode releaseContext(IEvtSelector::Context*& refCtxt) const override;
95  virtual StatusCode resetCriteria(const std::string& cr,IEvtSelector::Context& c) const override;
97 
99 
100  virtual StatusCode preLoadAddresses(StoreID::type storeID ,
101  IAddressProvider::tadList& tads ) override;
102  virtual StatusCode loadAddresses(StoreID::type storeID ,
103  IAddressProvider::tadList& tads ) override;
104  virtual StatusCode updateAddress(StoreID::type storeID ,
106  const EventContext& ctx) override;
108 
109 
111 
112  virtual const CLID& objType() const override;
113  virtual long repSvcType() const override;
114  virtual StatusCode createObj(IOpaqueAddress* pAddress, DataObject*& refpObject) override;
115 
116  // The rest of these are dummies.
117  virtual StatusCode setDataProvider(IDataProviderSvc* pService) override;
118  virtual SmartIF<IDataProviderSvc>& dataProvider() const override;
119  virtual StatusCode setConversionSvc(IConversionSvc* pService) override;
120  virtual SmartIF<IConversionSvc>& conversionSvc() const override;
121  virtual StatusCode setAddressCreator(IAddressCreator* creator) override;
122  virtual SmartIF<IAddressCreator>& addressCreator() const override;
123  virtual StatusCode fillObjRefs(IOpaqueAddress* pAddress, DataObject* pObject) override;
124  virtual StatusCode updateObj(IOpaqueAddress* pAddress, DataObject* refpObject) override;
125  virtual StatusCode updateObjRefs(IOpaqueAddress* pAddress, DataObject* pObject) override;
126  virtual StatusCode createRep(DataObject* pObject, IOpaqueAddress*& refpAddress) override;
127  virtual StatusCode fillRepRefs(IOpaqueAddress* pAddress, DataObject* pObject) override;
128  virtual StatusCode updateRep(IOpaqueAddress* pAddress, DataObject* pObject) override;
129  virtual StatusCode updateRepRefs(IOpaqueAddress* pAddress, DataObject* pObject) override;
131 
132 
134 
135  virtual StatusCode initialize() override;
136  virtual StatusCode finalize() override;
138 
141  void setUpTriggerList(Gaudi::Details::PropertyBase& trigList);
143  void decodeTrigger(std::string triggDescr);
144 
146 
147  MixingEventSelector(const std::string& name, ISvcLocator* svc);
148  virtual ~MixingEventSelector();
150 
151 private:
152  bool validTrigger() const { return (m_trigList.end()!=m_pCurrentTrigger);}
154 
155  StringProperty m_statusFileName;
156  StringArrayProperty m_triggerListProp;
157  IntegerProperty m_outputRunNumber;
158  UnsignedLongArrayProperty m_eventNumbers;
159  StringProperty m_mergedEventInfoKey;
160  ToolHandleArray<IAthenaSelectorTool> m_helperTools;
161 
163 
164 
168  class Trigger {
169  private:
170  IEvtSelector* m_pSelector;
171  unsigned int m_firstEvent;
172  unsigned int m_toRead;
173  unsigned int m_todo;
174  mutable unsigned int m_reads;
175  mutable IEvtSelector::Context* m_current;
176 
177  public:
178  Trigger(IEvtSelector* pSel,
179  //IEvtSelector::Context* pContext,
180  unsigned int firstEvt, unsigned int lastEvt);
181 
182  unsigned int todo() const { return m_todo; }
183  unsigned int toRead() const { return m_toRead; }
184  unsigned int read() const { return m_reads; }
185  bool done() const;
186 
187  StatusCode next() const;
188  StatusCode previous() const;
189  StatusCode createAddress(IOpaqueAddress*&) const;
190  StatusCode createContext(IEvtSelector::Context*& pCtxt) const;
191 
192  bool operator == (const Trigger& rhs) const {
193  return ( m_pSelector == rhs.m_pSelector );
194  }
195  bool operator != (const Trigger& rhs) const {
196  return ( m_pSelector != rhs.m_pSelector );
197  }
198  bool operator < (const Trigger& rhs) const {
199  return ( m_todo < rhs.m_todo ||
200  ((m_todo == rhs.m_todo) && (m_pSelector < rhs.m_pSelector)) );
201  }
202 
203  const std::string& name() const {
204  return dynamic_cast<IService&>(selector()).name();
205  }
206  std::string toString() const ;
207 
208  private:
209  IEvtSelector::Context& currentContext() const; //throws GaudiException
210  IEvtSelector& selector() const {
211  assert( m_pSelector );
212  return *m_pSelector;
213  }
214 
215  };
216 
220  class TriggerList {
221  private:
222  std::vector<Trigger> m_trigs;
223  std::vector<unsigned int> m_rangeEnd;
224  unsigned int m_todo;
225  public:
227  typedef std::vector<Trigger>::const_iterator const_iterator;
229  bool add(const Trigger&);
230  bool remove(iterator);
231  iterator begin() { return m_trigs.begin(); }
232  iterator end() { return m_trigs.end(); }
233  const_iterator begin() const { return m_trigs.begin(); }
234  const_iterator end() const { return m_trigs.end(); }
235  bool empty() const { return m_trigs.empty(); }
236  iterator elementInRange(unsigned int);
237  unsigned int todo() const { return m_todo; }
238  std::string toString() const;
239  };
240 
242 
244 
249 
250 
252 
253  unsigned long getEventNo() const;
255  mutable unsigned long m_eventPos;
256 
260  StringProperty m_randomStreamName;
261  CLHEP::RandFlat* m_chooseRangeRand;
262 
263 };
264 #endif // ATHENASERVICES_MIXINGEVENTSELECTOR_H
265 
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
MixingEventSelector::m_pCurrentTrigger
TriggerList::iterator m_pCurrentTrigger
the current trigger
Definition: MixingEventSelector.h:247
MixingEventSelector::m_trigList
TriggerList m_trigList
the ingredients
Definition: MixingEventSelector.h:241
MixingEventSelector
a stream of events read from different selectors.
Definition: MixingEventSelector.h:71
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
MixingEventSelector::m_atRndmSvc
ServiceHandle< IAtRndmGenSvc > m_atRndmSvc
Definition: MixingEventSelector.h:259
MixingEventSelector::TriggerList::remove
bool remove(iterator)
Definition: MixingEventSelector.cxx:359
MixingEventSelector::repSvcType
virtual long repSvcType() const override
Definition: MixingEventSelector.cxx:526
MixingEventSelector::objType
virtual const CLID & objType() const override
Definition: MixingEventSelector.cxx:522
MixingEventSelector::Context::~Context
virtual ~Context()
Definition: MixingEventSelector.h:77
MixingEventSelector::Trigger::m_todo
unsigned int m_todo
Definition: MixingEventSelector.h:173
MixingEventSelector::releaseContext
virtual StatusCode releaseContext(IEvtSelector::Context *&refCtxt) const override
Definition: MixingEventSelector.cxx:512
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::Trigger::operator==
bool operator==(const Trigger &rhs) const
Definition: MixingEventSelector.h:192
MixingEventSelector::setAddressCreator
virtual StatusCode setAddressCreator(IAddressCreator *creator) override
Definition: MixingEventSelector.cxx:586
IAthenaSelectorTool.h
This file contains the class definition for the IAthenaSelectorTool class.
MixingEventSelector::TriggerList::end
iterator end()
Definition: MixingEventSelector.h:232
MixingEventSelector::TriggerList::empty
bool empty() const
Definition: MixingEventSelector.h:235
MixingEventSelector::TriggerList::todo
unsigned int todo() const
Definition: MixingEventSelector.h:237
MixingEventSelector::Trigger::todo
unsigned int todo() const
Definition: MixingEventSelector.h:182
MixingEventSelector::m_triggerListProp
StringArrayProperty m_triggerListProp
the recipe
Definition: MixingEventSelector.h:156
MixingEventSelector::Trigger::selector
IEvtSelector & selector() const
Definition: MixingEventSelector.h:210
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::Trigger::m_pSelector
IEvtSelector * m_pSelector
Definition: MixingEventSelector.h:170
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
MixingEventSelector::m_outputRunNumber
IntegerProperty m_outputRunNumber
Definition: MixingEventSelector.h:157
MixingEventSelector::Trigger::read
unsigned int read() const
Definition: MixingEventSelector.h:184
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
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:128
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
MixingEventSelector::Trigger::m_toRead
unsigned int m_toRead
Definition: MixingEventSelector.h:172
MixingEventSelector::Context::identifier
virtual void * identifier() const
Definition: MixingEventSelector.h:78
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MixingEventSelector::m_eventNumbers
UnsignedLongArrayProperty m_eventNumbers
use these as event numbers
Definition: MixingEventSelector.h:158
CLHEP
STD'S.
Definition: IAtRndmGenSvc.h:19
MixingEventSelector::dataProvider
virtual SmartIF< IDataProviderSvc > & dataProvider() const override
Definition: MixingEventSelector.cxx:574
IAddressProvider
interface for IOA providers
Definition: IAddressProvider.h:28
MixingEventSelector::Trigger::operator<
bool operator<(const Trigger &rhs) const
Definition: MixingEventSelector.h:198
MixingEventSelector::Trigger::next
StatusCode next() const
Definition: MixingEventSelector.cxx:454
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
MixingEventSelector::StoreGateSvc_t
ServiceHandle< StoreGateSvc > StoreGateSvc_t
Definition: MixingEventSelector.h:257
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
MixingEventSelector::m_chooseRangeRand
CLHEP::RandFlat * m_chooseRangeRand
Definition: MixingEventSelector.h:261
MixingEventSelector::TriggerList::m_todo
unsigned int m_todo
Definition: MixingEventSelector.h:224
MixingEventSelector::Trigger::m_firstEvent
unsigned int m_firstEvent
Definition: MixingEventSelector.h:171
IAtRndmGenSvc.h
MixingEventSelector::TriggerList::TriggerList
TriggerList()
Definition: MixingEventSelector.h:226
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::TriggerList::end
const_iterator end() const
Definition: MixingEventSelector.h:234
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
MixingEventSelector::finalize
virtual StatusCode finalize() override
Definition: MixingEventSelector.cxx:103
MixingEventSelector::Context
dummy for now
Definition: MixingEventSelector.h:76
MixingEventSelector::TriggerList::toString
std::string toString() const
Definition: MixingEventSelector.cxx:392
MixingEventSelector::Trigger::m_current
IEvtSelector::Context * m_current
Definition: MixingEventSelector.h:175
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
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
MixingEventSelector::Trigger::done
bool done() const
Definition: MixingEventSelector.cxx:488
StoreID::type
type
Definition: StoreID.h:24
MixingEventSelector::TriggerList
the list of available selectors with their frequency range
Definition: MixingEventSelector.h:220
MixingEventSelector::Trigger::toRead
unsigned int toRead() const
Definition: MixingEventSelector.h:183
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
MixingEventSelector::Trigger::m_reads
unsigned int m_reads
Definition: MixingEventSelector.h:174
IAddressProvider::tadList
std::list< SG::TransientAddress * > tadList
Definition: IAddressProvider.h:32
AthService.h
MixingEventSelector::createAddress
virtual StatusCode createAddress(const IEvtSelector::Context &refCtxt, IOpaqueAddress *&) const override
Definition: MixingEventSelector.cxx:258
IAddressProvider.h
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
ATLAS_NO_CHECK_FILE_THREAD_SAFETY
ATLAS_NO_CHECK_FILE_THREAD_SAFETY
Definition: MixingEventSelector.h:16
MixingEventSelector::Trigger::operator!=
bool operator!=(const Trigger &rhs) const
Definition: MixingEventSelector.h:195
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.
MixingEventSelector::TriggerList::begin
const_iterator begin() const
Definition: MixingEventSelector.h:233
MixingEventSelector::updateRep
virtual StatusCode updateRep(IOpaqueAddress *pAddress, DataObject *pObject) override
Definition: MixingEventSelector.cxx:614
MixingEventSelector::Trigger::currentContext
IEvtSelector::Context & currentContext() const
Definition: MixingEventSelector.cxx:432
python.compressB64.c
def c
Definition: compressB64.py:93
MixingEventSelector::Trigger::createAddress
StatusCode createAddress(IOpaqueAddress *&) const
Definition: MixingEventSelector.cxx:471
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
ServiceHandle< StoreGateSvc >