7#ifndef ATHENASERVICES_MIXINGEVENTSELECTOR_H
8#define ATHENASERVICES_MIXINGEVENTSELECTOR_H
28#include "GaudiKernel/ServiceHandle.h"
29#include "GaudiKernel/IEvtSelector.h"
30#include "GaudiKernel/IConverter.h"
31#include "GaudiKernel/ToolHandle.h"
32#include "GaudiKernel/StatusCode.h"
33#include "Gaudi/Property.h"
37class MixingEventIterator;
70 :
public extends<AthService, IEvtSelector, IConverter, IAddressProvider>
76 struct Context :
public IEvtSelector::Context {
84 virtual StatusCode
next(IEvtSelector::Context& refCtxt)
const override;
85 virtual StatusCode
createAddress(
const IEvtSelector::Context& refCtxt,
86 IOpaqueAddress*&)
const override;
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;
106 const EventContext& ctx)
override;
114 virtual StatusCode
createObj(IOpaqueAddress* pAddress, DataObject*& refpObject)
override;
117 virtual StatusCode
setDataProvider(IDataProviderSvc* pService)
override;
118 virtual SmartIF<IDataProviderSvc>&
dataProvider()
const override;
120 virtual SmartIF<IConversionSvc>&
conversionSvc()
const 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;
136 virtual StatusCode
finalize()
override;
157 "Name of the file recording the last event used and how many were available for each stream. Default is to produce no file."};
160 "List of triggers (streams) to be used. Format is SelectorType/SelectorName:firstEventToUse:lastEventToUse. "
161 "One assumes events are consecutively numbered."};
165 Gaudi::Property<std::vector<unsigned long>>
m_eventNumbers{
this,
"EventNumbers", {},
166 "List of event numbers to be used for output stream. If list empty or not long enough, event numbers are "
167 "assigned consucutively after last one in list."};
170 "StoreGate key for output (merged) event info object. Default is MergedEventInfo"};
173 "IAtRndmGenSvc stream used as engine for our random distributions"};
176 "Collection of selector tools"};
179 "IAtRndmGenSvc controlling the order with which events are takes from streams"};
199 unsigned int firstEvt,
unsigned int lastEvt);
206 StatusCode
next()
const;
209 StatusCode
createContext(IEvtSelector::Context*& pCtxt)
const;
222 const std::string&
name()
const {
uint32_t CLID
The Class ID type.
Define macros for attributes used to control the static checker.
#define ATLAS_NO_CHECK_FILE_THREAD_SAFETY
std::list< SG::TransientAddress * > tadList
the list of available selectors with their frequency range
std::string toString() const
const_iterator begin() const
bool add(const Trigger &)
const_iterator end() const
std::vector< Trigger >::iterator iterator
std::vector< Trigger > m_trigs
std::vector< unsigned int > m_rangeEnd
unsigned int todo() const
std::vector< Trigger >::const_iterator const_iterator
iterator elementInRange(unsigned int)
a selector with an associated frequency
bool operator<(const Trigger &rhs) const
StatusCode createContext(IEvtSelector::Context *&pCtxt) const
Trigger(IEvtSelector *pSel, unsigned int firstEvt, unsigned int lastEvt)
const std::string & name() const
IEvtSelector * m_pSelector
StatusCode createAddress(IOpaqueAddress *&) const
unsigned int toRead() const
bool operator==(const Trigger &rhs) const
bool operator!=(const Trigger &rhs) const
IEvtSelector & selector() const
std::string toString() const
IEvtSelector::Context * m_current
unsigned int read() const
unsigned int m_firstEvent
IEvtSelector::Context & currentContext() const
unsigned int todo() const
StatusCode previous() const
Gaudi::Property< std::string > m_mergedEventInfoKey
virtual StatusCode setConversionSvc(IConversionSvc *pService) override
TriggerList::iterator currentTrigger() const
"intelligent" accessor to the above
Gaudi::Property< std::string > m_statusFileName
virtual StatusCode createContext(IEvtSelector::Context *&refpCtxt) const override
virtual StatusCode initialize() override
TriggerList::iterator setCurrentTrigger() const
choose current trigger at random. Actually modifies state (use mutables)
virtual StatusCode next(IEvtSelector::Context &refCtxt) const override
virtual SmartIF< IDataProviderSvc > & dataProvider() const override
virtual StatusCode createAddress(const IEvtSelector::Context &refCtxt, IOpaqueAddress *&) const override
virtual StatusCode rewind(IEvtSelector::Context &refCtxt) const override
Gaudi::Property< int > m_outputRunNumber
virtual StatusCode previous(IEvtSelector::Context &) const override
Gaudi::Property< std::vector< unsigned long > > m_eventNumbers
unsigned long getEventNo() const
setup and lookup m_evtsNotUsedSoFar. Returns next event no
void decodeTrigger(std::string triggDescr)
functor that creates a Trigger object and adds it to m_trigList
virtual StatusCode updateObj(IOpaqueAddress *pAddress, DataObject *refpObject) override
virtual StatusCode last(IEvtSelector::Context &) const override
MixingEventSelector(const std::string &name, ISvcLocator *svc)
virtual ~MixingEventSelector()
Gaudi::Property< std::string > m_randomStreamName
virtual StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress) override
Gaudi::Property< std::vector< std::string > > m_triggerListProp
virtual StatusCode setAddressCreator(IAddressCreator *creator) override
virtual StatusCode updateObjRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
virtual StatusCode updateAddress(StoreID::type storeID, SG::TransientAddress *tad, const EventContext &ctx) override
virtual StatusCode releaseContext(IEvtSelector::Context *&refCtxt) const override
virtual const CLID & objType() const override
bool validTrigger() const
TriggerList m_trigList
the ingredients
virtual StatusCode updateRepRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
virtual StatusCode fillRepRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
virtual StatusCode fillObjRefs(IOpaqueAddress *pAddress, DataObject *pObject) override
virtual StatusCode finalize() override
virtual StatusCode loadAddresses(StoreID::type storeID, IAddressProvider::tadList &tads) override
virtual StatusCode updateRep(IOpaqueAddress *pAddress, DataObject *pObject) override
virtual SmartIF< IAddressCreator > & addressCreator() const override
virtual StatusCode preLoadAddresses(StoreID::type storeID, IAddressProvider::tadList &tads) override
TriggerList::iterator m_pCurrentTrigger
the current trigger
ServiceHandle< StoreGateSvc > m_pEventStore
virtual StatusCode setDataProvider(IDataProviderSvc *pService) override
ServiceHandle< IAtRndmGenSvc > m_atRndmSvc
virtual long repSvcType() const override
unsigned long m_eventPos
the internal event number
void setUpTriggerList(Gaudi::Details::PropertyBase &trigList)
TriggerList property call-back.
std::unique_ptr< CLHEP::RandFlat > m_chooseRangeRand
ToolHandleArray< IAthenaSelectorTool > m_helperTools
virtual StatusCode createObj(IOpaqueAddress *pAddress, DataObject *&refpObject) override
Create the transient representation of an object.
virtual SmartIF< IConversionSvc > & conversionSvc() const override
virtual StatusCode resetCriteria(const std::string &cr, IEvtSelector::Context &c) const override
The Athena Transient Store API.
virtual void * identifier() const