ATLAS Offline Software
EventSelectorByteStream.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef EVENTSELECTORBYTESTREAM_H
6 #define EVENTSELECTORBYTESTREAM_H
7 
19 #include "GaudiKernel/IEvtSelector.h"
20 #include "GaudiKernel/ServiceHandle.h"
21 #include "GaudiKernel/ToolHandle.h"
22 #include "GaudiKernel/IIoComponent.h"
23 
30 
33 #include <mutex>
34 
35 // Forward declarations.
36 class ISvcLocator;
38 class ByteStreamInputSvc;
40 
41 // Class EventSelectorByteStream.
43  public extends<::AthService, IEvtSelector, IEvtSelectorSeek, IEventShare, IIoComponent, ISecondaryEventSelector>
44 {
45 public:
47  EventSelectorByteStream(const std::string& name, ISvcLocator* svcloc);
49  virtual ~EventSelectorByteStream();
50 
52  virtual StatusCode initialize() override;
53  virtual StatusCode start() override;
54  virtual StatusCode stop() override;
55  virtual StatusCode finalize() override;
56 
57  // Implementation of IInterface methods.
58  virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvInterface) override;
59 
60  //-------------------------------------------------
61  // IEventSelector
63  virtual StatusCode createContext(Context*& it) const override;
65  virtual StatusCode next(Context& it) const override;
68  virtual StatusCode next(Context& it, int jump) const override;
70  virtual StatusCode previous(Context& it) const override;
73  virtual StatusCode previous(Context& it, int jump) const override;
74 
76  virtual StatusCode last(Context& it) const override;
78  virtual StatusCode rewind(Context& it) const override;
79 
82  virtual StatusCode createAddress(const Context& it,IOpaqueAddress*& iop) const override;
83 
85  virtual StatusCode releaseContext(Context*& it) const override;
86 
90  virtual StatusCode resetCriteria(const std::string& criteria, Context& context) const override;
91 
92  //-------------------------------------------------
93  // IEventSelectorSeek
97  virtual StatusCode seek (Context& /* it */, int evtnum) const override;
98 
101  virtual int curEvent (const Context& it) const override;
102 
105  virtual int size (Context& it) const override;
106 
107  //-------------------------------------------------
108  // IEventShare
110  virtual StatusCode makeServer(int num) override;
111 
113  virtual StatusCode makeClient(int num) override;
114 
117  virtual StatusCode share(int evtnum) override;
118 
121  virtual StatusCode readEvent(int maxevt) override;
122 
123  //-------------------------------------------------
124  // IIoComponent
126  virtual StatusCode io_reinit() override;
127 
128 protected:
129  typedef std::recursive_mutex mutex_t;
130  typedef std::lock_guard<mutex_t> lock_t;
131 
132  //-------------------------------------------------
133  // ISecondaryEventSelector
135  virtual StatusCode nextHandleFileTransition(IEvtSelector::Context& ctxt) const override;
137  virtual StatusCode nextWithSkip(IEvtSelector::Context& ctxt) const override;
139  virtual StatusCode recordAttributeList() const override;
141  virtual StatusCode fillAttributeList(coral::AttributeList *attrList, const std::string &suffix, bool copySource) const override;
142  // Disconnect DB if all events from the source FID were processed and the Selector moved to another file
143  virtual bool disconnectIfFinished(const SG::SourceID &fid) const override;
144 
145 private: // internal member functions
146  StatusCode nextImpl(Context& it, lock_t& lock) const;
147  StatusCode nextImpl(Context& it, int jump, lock_t& lock) const;
148  StatusCode previousImpl(Context& it, lock_t& lock) const;
149  StatusCode previousImpl(Context& it, int jump, lock_t& lock) const;
150  StatusCode nextHandleFileTransitionImpl(IEvtSelector::Context& ctxt,
151  lock_t& lock) const;
152  StatusCode nextWithSkipImpl(IEvtSelector::Context& ctxt,
153  lock_t& lock) const;
155  StatusCode fillAttributeListImpl(coral::AttributeList *attrList, const std::string &suffix, bool copySource,
156  lock_t& lock) const;
157 
159  StatusCode reinit(lock_t& lock);
160  StatusCode openNewRun(lock_t& lock) const;
161  void nextFile(lock_t& lock) const;
163  int findEvent(int evtNum, lock_t& lock) const;
164  StoreGateSvc* eventStore() const;
165 
166 private: // properties
167  // FIXME: A Gaudi EventSelector is not meant to have mutable state.
168  // Any needed state is meant to be kept in the Context object.
169  // So the mutable members here should instead be kept in
170  // EventContextByteStream. However, making that work would
171  // require redesigning other Athena interfaces. So for now,
172  // just add a mutex to protect access to them.
173  mutable mutex_t m_mutex;
174  mutable int m_fileCount ATLAS_THREAD_SAFE = 0;
175  mutable std::vector<int> m_numEvt ATLAS_THREAD_SAFE;
176  mutable std::vector<int> m_firstEvt ATLAS_THREAD_SAFE;
177  mutable std::vector<std::string>::const_iterator m_inputCollectionsIterator ATLAS_THREAD_SAFE;
178  mutable std::vector<long> m_skipEventSequence ATLAS_THREAD_SAFE;
179  mutable long m_NumEvents ATLAS_THREAD_SAFE = 0; // Number of Events read so far.
180  mutable ToolHandle<IAthenaIPCTool> m_eventStreamingTool ATLAS_THREAD_SAFE {this, "SharedMemoryTool", "", ""};
181 
183  Gaudi::Property<bool> m_isSecondary{this, "IsSecondary", false, ""};
184 
185  Gaudi::Property<std::string> m_eventSourceName{this, "ByteStreamInputSvc", "", ""};
186  Gaudi::Property<bool> m_procBadEvent{this, "ProcessBadEvent", false, ""};
187  Gaudi::Property<int> m_maxBadEvts{this, "MaxBadEvents", -1, ""};
188 
192  Gaudi::Property<std::vector<std::string>> m_inputCollectionsProp{this, "Input", {}, ""};
193  void inputCollectionsHandler(Gaudi::Details::PropertyBase&);
194  ServiceHandle<IIncidentSvc> m_incidentSvc{this, "IncidentSvc", "IncidentSvc", ""};
195 
196  Gaudi::Property<long> m_skipEvents{this, "SkipEvents", 0, ""}; // Number of events to skip at the beginning
197  Gaudi::Property<std::vector<long>> m_skipEventSequenceProp{this, "SkipEventSequence", {}, ""};
198 
201 
203  ToolHandleArray<IAthenaSelectorTool> m_helperTools{this};
204  ToolHandle<IAthenaSelectorTool> m_counterTool{this, "CounterTool", "", ""};
205 
209  Gaudi::Property<bool> m_overrideRunNumber{this, "OverrideRunNumber", false, ""};
210  Gaudi::Property<bool> m_filebased{this, "FileBased", true, ""};
211 
212  Gaudi::CheckedProperty<int> m_runNo{this, "RunNumber", 0, ""};
213  Gaudi::CheckedProperty<int> m_firstEventNo{this, "FirstEvent", 1, ""};
214  Gaudi::CheckedProperty<int> m_eventsPerRun{this, "EventsPerRun", 1000000, ""};
215  Gaudi::CheckedProperty<int> m_firstLBNo{this, "FirstLB", 0, ""};
216  Gaudi::CheckedProperty<int> m_eventsPerLB{this, "EventsPerLB", 1000, ""};
217  Gaudi::CheckedProperty<int> m_initTimeStamp{this, "InitialTimeStamp", 0, ""};
218  Gaudi::Property<int> m_timeStampInterval{this, "TimeStampInterval", 0, ""};
219 };
220 
221 #endif
EventSelectorByteStream::m_firstFileFired
bool m_firstFileFired
Definition: EventSelectorByteStream.h:199
EventSelectorByteStream::curEvent
virtual int curEvent(const Context &it) const override
Return the current event number.
Definition: EventSelectorByteStream.cxx:949
EventSelectorByteStream::findEvent
int findEvent(int evtNum, lock_t &lock) const
Search for event with number evtNum.
Definition: EventSelectorByteStream.cxx:911
EventSelectorByteStream::m_filebased
Gaudi::Property< bool > m_filebased
Definition: EventSelectorByteStream.h:210
hotSpotInTAG.suffix
string suffix
Definition: hotSpotInTAG.py:186
EventSelectorByteStream::m_skipEvents
Gaudi::Property< long > m_skipEvents
Definition: EventSelectorByteStream.h:196
EventSelectorByteStream::ATLAS_THREAD_SAFE
std::vector< int > m_firstEvt ATLAS_THREAD_SAFE
Definition: EventSelectorByteStream.h:176
EventSelectorByteStream::makeClient
virtual StatusCode makeClient(int num) override
Make this a client.
Definition: EventSelectorByteStream.cxx:970
EventSelectorByteStream::fillAttributeList
virtual StatusCode fillAttributeList(coral::AttributeList *attrList, const std::string &suffix, bool copySource) const override
Fill AttributeList with specific items from the selector and a suffix.
Definition: EventSelectorByteStream.cxx:814
IEventShare.h
ByteStreamInputSvc
This class provides the base class to services to read bytestream data. The concrete class can provid...
Definition: ByteStreamInputSvc.h:23
skel.it
it
Definition: skel.GENtoEVGEN.py:423
EventSelectorByteStream::nextWithSkipImpl
StatusCode nextWithSkipImpl(IEvtSelector::Context &ctxt, lock_t &lock) const
Definition: EventSelectorByteStream.cxx:584
EventSelectorByteStream::eventStore
StoreGateSvc * eventStore() const
Definition: EventSelectorByteStream.cxx:79
IAthenaSelectorTool.h
This file contains the class definition for the IAthenaSelectorTool class.
EventSelectorByteStream::openNewRun
StatusCode openNewRun(lock_t &lock) const
Definition: EventSelectorByteStream.cxx:294
EventSelectorByteStream::fillAttributeListImpl
StatusCode fillAttributeListImpl(coral::AttributeList *attrList, const std::string &suffix, bool copySource, lock_t &lock) const
Definition: EventSelectorByteStream.cxx:819
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
EventSelectorByteStream::m_runNo
Gaudi::CheckedProperty< int > m_runNo
Definition: EventSelectorByteStream.h:212
EventSelectorByteStream::~EventSelectorByteStream
virtual ~EventSelectorByteStream()
Standard Destructor.
Definition: EventSelectorByteStream.cxx:73
EventSelectorByteStream::nextHandleFileTransitionImpl
StatusCode nextHandleFileTransitionImpl(IEvtSelector::Context &ctxt, lock_t &lock) const
Definition: EventSelectorByteStream.cxx:528
EventSelectorByteStream::m_firstLBNo
Gaudi::CheckedProperty< int > m_firstLBNo
Definition: EventSelectorByteStream.h:215
EventSelectorByteStream::rewind
virtual StatusCode rewind(Context &it) const override
Definition: EventSelectorByteStream.cxx:712
EventSelectorByteStream::m_beginIter
EventContextByteStream * m_beginIter
Definition: EventSelectorByteStream.h:189
EventSelectorByteStream::EventSelectorByteStream
EventSelectorByteStream(const std::string &name, ISvcLocator *svcloc)
Standard Constructor.
Definition: EventSelectorByteStream.cxx:42
EventSelectorByteStream::nextHandleFileTransition
virtual StatusCode nextHandleFileTransition(IEvtSelector::Context &ctxt) const override
Handle file transition at the next iteration.
Definition: EventSelectorByteStream.cxx:523
EventSelectorByteStream::readEvent
virtual StatusCode readEvent(int maxevt) override
Read the next maxevt events.
Definition: EventSelectorByteStream.cxx:997
EventSelectorByteStream::createContext
virtual StatusCode createContext(Context *&it) const override
create context
Definition: EventSelectorByteStream.cxx:344
EventSelectorByteStream::m_mutex
mutex_t m_mutex
Definition: EventSelectorByteStream.h:173
EventSelectorByteStream::m_eventSource
ByteStreamInputSvc * m_eventSource
Definition: EventSelectorByteStream.h:191
EventSelectorByteStream::createAddress
virtual StatusCode createAddress(const Context &it, IOpaqueAddress *&iop) const override
Definition: EventSelectorByteStream.cxx:1044
EventSelectorByteStream::m_endIter
EventContextByteStream * m_endIter
Definition: EventSelectorByteStream.h:190
EventSelectorByteStream::size
virtual int size(Context &it) const override
Always returns -1.
Definition: EventSelectorByteStream.cxx:956
EventSelectorByteStream::m_helperTools
ToolHandleArray< IAthenaSelectorTool > m_helperTools
HelperTools, vector of names of AlgTools that are executed by the EventSelector.
Definition: EventSelectorByteStream.h:203
IROBDataProviderSvc
Interface class for managing ROB for both online and offline.
Definition: IROBDataProviderSvc.h:25
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:128
EventSelectorByteStream::m_initTimeStamp
Gaudi::CheckedProperty< int > m_initTimeStamp
Definition: EventSelectorByteStream.h:217
EventSelectorByteStream::reinit
StatusCode reinit(lock_t &lock)
Reinitialize the service when a fork() occurred/was-issued.
Definition: EventSelectorByteStream.cxx:178
EventSelectorByteStream::m_overrideRunNumber
Gaudi::Property< bool > m_overrideRunNumber
The following are included for compatibility with McEventSelector and are not really used.
Definition: EventSelectorByteStream.h:209
EventSelectorByteStream::nextFile
void nextFile(lock_t &lock) const
Definition: EventSelectorByteStream.cxx:287
EventSelectorByteStream::nextImpl
StatusCode nextImpl(Context &it, lock_t &lock) const
Definition: EventSelectorByteStream.cxx:353
EventSelectorByteStream::m_counterTool
ToolHandle< IAthenaSelectorTool > m_counterTool
Definition: EventSelectorByteStream.h:204
EventSelectorByteStream::m_eventsPerRun
Gaudi::CheckedProperty< int > m_eventsPerRun
Definition: EventSelectorByteStream.h:214
RawEvent.h
EventSelectorByteStream::m_procBadEvent
Gaudi::Property< bool > m_procBadEvent
process bad events, which fail check_tree().
Definition: EventSelectorByteStream.h:186
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
EventSelectorByteStream::inputCollectionsHandler
void inputCollectionsHandler(Gaudi::Details::PropertyBase &)
Definition: EventSelectorByteStream.cxx:64
EventSelectorByteStream
concrete implementation of IEvtSelector for ByteStream
Definition: EventSelectorByteStream.h:44
EventSelectorByteStream::mutex_t
std::recursive_mutex mutex_t
Definition: EventSelectorByteStream.h:129
EventSelectorByteStream::m_maxBadEvts
Gaudi::Property< int > m_maxBadEvts
number of bad events allowed before quitting.
Definition: EventSelectorByteStream.h:187
EventSelectorByteStream::ATLAS_THREAD_SAFE
int m_fileCount ATLAS_THREAD_SAFE
number of files to process.
Definition: EventSelectorByteStream.h:174
EventSelectorByteStream::last
virtual StatusCode last(Context &it) const override
Definition: EventSelectorByteStream.cxx:704
EventSelectorByteStream::ATLAS_THREAD_SAFE
std::vector< std::string >::const_iterator m_inputCollectionsIterator ATLAS_THREAD_SAFE
Definition: EventSelectorByteStream.h:177
EventSelectorByteStream::m_firstEventNo
Gaudi::CheckedProperty< int > m_firstEventNo
Definition: EventSelectorByteStream.h:213
EventSelectorByteStream::m_isSecondary
Gaudi::Property< bool > m_isSecondary
IsSecondary, know if this is an instance of secondary event selector.
Definition: EventSelectorByteStream.h:183
EventSelectorByteStream::m_timeStampInterval
Gaudi::Property< int > m_timeStampInterval
Definition: EventSelectorByteStream.h:218
EventSelectorByteStream::ATLAS_THREAD_SAFE
std::vector< long > m_skipEventSequence ATLAS_THREAD_SAFE
Definition: EventSelectorByteStream.h:178
trigbs_pickEvents.num
num
Definition: trigbs_pickEvents.py:76
EventSelectorByteStream::stop
virtual StatusCode stop() override
Definition: EventSelectorByteStream.cxx:240
EventSelectorByteStream::m_incidentSvc
ServiceHandle< IIncidentSvc > m_incidentSvc
Definition: EventSelectorByteStream.h:194
EventSelectorByteStream::m_eventSourceName
Gaudi::Property< std::string > m_eventSourceName
Definition: EventSelectorByteStream.h:185
EventSelectorByteStream::m_inputCollectionsProp
Gaudi::Property< std::vector< std::string > > m_inputCollectionsProp
Definition: EventSelectorByteStream.h:192
EventSelectorByteStream::queryInterface
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvInterface) override
Definition: EventSelectorByteStream.cxx:1063
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
EventSelectorByteStream::m_beginFileFired
bool m_beginFileFired
Definition: EventSelectorByteStream.h:200
EventSelectorByteStream::recordAttributeListImpl
StatusCode recordAttributeListImpl(lock_t &lock) const
Definition: EventSelectorByteStream.cxx:784
EventSelectorByteStream::previous
virtual StatusCode previous(Context &it) const override
Definition: EventSelectorByteStream.cxx:622
EventSelectorByteStream::seek
virtual StatusCode seek(Context &, int evtnum) const override
Seek to a given event number.
Definition: EventSelectorByteStream.cxx:723
EventSelectorByteStream::finalize
virtual StatusCode finalize() override
Definition: EventSelectorByteStream.cxx:255
EventSelectorByteStream::share
virtual StatusCode share(int evtnum) override
Request to share a given event number.
Definition: EventSelectorByteStream.cxx:980
EventSelectorByteStream::start
virtual StatusCode start() override
Definition: EventSelectorByteStream.cxx:228
SG::SourceID
std::string SourceID
Definition: AthenaKernel/AthenaKernel/SourceID.h:23
EventSelectorByteStream::makeServer
virtual StatusCode makeServer(int num) override
Make this a server.
Definition: EventSelectorByteStream.cxx:961
EventSelectorByteStream::releaseContext
virtual StatusCode releaseContext(Context *&it) const override
Definition: EventSelectorByteStream.cxx:1058
EventSelectorByteStream::disconnectIfFinished
virtual bool disconnectIfFinished(const SG::SourceID &fid) const override
Definition: EventSelectorByteStream.cxx:1125
EventContextByteStream
This class provides the Context for EventSelectorByteStream.
Definition: EventContextByteStream.h:21
AthService.h
EventSelectorByteStream::nextWithSkip
virtual StatusCode nextWithSkip(IEvtSelector::Context &ctxt) const override
Go to next event and skip if necessary.
Definition: EventSelectorByteStream.cxx:579
EventSelectorByteStream::recordAttributeList
virtual StatusCode recordAttributeList() const override
Record AttributeList in StoreGate.
Definition: EventSelectorByteStream.cxx:779
EventSelectorByteStream::m_eventsPerLB
Gaudi::CheckedProperty< int > m_eventsPerLB
Definition: EventSelectorByteStream.h:216
EventSelectorByteStream::m_skipEventSequenceProp
Gaudi::Property< std::vector< long > > m_skipEventSequenceProp
Definition: EventSelectorByteStream.h:197
IEvtSelectorSeek.h
Extension to IEvtSelector to allow for seeking.
EventSelectorByteStream::ATLAS_THREAD_SAFE
std::vector< int > m_numEvt ATLAS_THREAD_SAFE
Definition: EventSelectorByteStream.h:175
checker_macros.h
Define macros for attributes used to control the static checker.
EventSelectorByteStream::lock_t
std::lock_guard< mutex_t > lock_t
Definition: EventSelectorByteStream.h:130
EventSelectorByteStream::previousImpl
StatusCode previousImpl(Context &it, lock_t &lock) const
Definition: EventSelectorByteStream.cxx:627
IAthenaIPCTool.h
EventSelectorByteStream::initialize
virtual StatusCode initialize() override
Implementation of Service base class methods.
Definition: EventSelectorByteStream.cxx:85
EventSelectorByteStream::next
virtual StatusCode next(Context &it) const override
Definition: EventSelectorByteStream.cxx:349
EventSelectorByteStream::resetCriteria
virtual StatusCode resetCriteria(const std::string &criteria, Context &context) const override
Set a selection criteria.
Definition: EventSelectorByteStream.cxx:718
ServiceHandle< IIncidentSvc >
ISecondaryEventSelector.h
Abstract interface for secondary event selectors.
EventSelectorByteStream::io_reinit
virtual StatusCode io_reinit() override
Callback method to reinitialize the internal state of the component for I/O purposes (e....
Definition: EventSelectorByteStream.cxx:1083