17template <
class CellInputType>
23template <
class CellInputType>
25 mTriggerRecordsCellIndices(triggersCells),
27 mClusterCellIndices(cellIndices)
31template <
class CellInputType>
33 mTriggerRecordsCellIndices(triggersCellIndex),
34 mTriggerRecordsCells(triggersCell),
36 mClusterCellIndices(cellIndices),
41template <
class CellInputType>
44 int neventsClusters = mTriggerRecordsClusters.size(),
45 neventsCells = mTriggerRecordsCells.size();
46 if (neventsClusters) {
47 return neventsClusters;
48 }
else if (neventsCells) {
55template <
class CellInputType>
58 std::optional<o2::InteractionRecord> irClusters, irCells;
59 if (mTriggerRecordsClusters.size()) {
60 if (
static_cast<std::size_t
>(eventID) >= mTriggerRecordsClusters.size()) {
63 irClusters = mTriggerRecordsClusters[eventID].getBCData();
65 if (mTriggerRecordsCells.size()) {
66 if (
static_cast<std::size_t
>(eventID) >= mTriggerRecordsCells.size()) {
69 irCells = mTriggerRecordsCells[eventID].getBCData();
71 if (irClusters && irCells) {
72 if (compareInteractionRecords(irClusters.value(), irCells.value())) {
73 return irClusters.value();
77 }
else if (irClusters) {
78 return irClusters.value();
80 return irCells.value();
85template <
class CellInputType>
88 if (mTriggerRecordsClusters.size()) {
89 if (
static_cast<std::size_t
>(eventID) >= mTriggerRecordsClusters.size()) {
92 auto& trgrecord = mTriggerRecordsClusters[eventID];
93 return ClusterRange(mClusters.data() + trgrecord.getFirstEntry(), trgrecord.getNumberOfObjects());
98template <
class CellInputType>
101 if (mTriggerRecordsCells.size()) {
102 if (
static_cast<std::size_t
>(eventID) >= mTriggerRecordsCells.size()) {
105 auto& trgrecord = mTriggerRecordsCells[eventID];
106 return CellRange(mCells.data() + trgrecord.getFirstEntry(), trgrecord.getNumberOfObjects());
111template <
class CellInputType>
114 if (mCellLabels && mTriggerRecordsCells.size()) {
115 if (eventID >= mTriggerRecordsCells.size()) {
118 auto& trgrecord = mTriggerRecordsCells[eventID];
119 std::vector<gsl::span<const o2::phos::MCLabel>> eventlabels(trgrecord.getNumberOfObjects());
121 eventlabels[
index] = mCellLabels->getLabels(trgrecord.getFirstEntry() +
index);
128template <
class CellInputType>
131 if (mTriggerRecordsCellIndices.size()) {
132 if (
static_cast<std::size_t
>(eventID) >= mTriggerRecordsCellIndices.size()) {
135 auto& trgrecord = mTriggerRecordsCellIndices[eventID];
136 return CellIndexRange(mClusterCellIndices.data() + trgrecord.getFirstEntry(), trgrecord.getNumberOfObjects());
141template <
class CellInputType>
150 mCellLabels =
nullptr;
153template <
class CellInputType>
159 outputEvent.
mClusters = getClustersForEvent(eventID);
161 if (hasClusterIndices()) {
162 outputEvent.
mCellIndices = getClusterCellIndicesForEvent(eventID);
165 outputEvent.
mCells = getCellsForEvent(eventID);
174template <
class CellInputType>
177 return lhs.bc == rhs.bc && lhs.orbit == rhs.orbit;
180template <
class CellInputType>
186 mCurrentEvent = mEventHandler.
buildEvent(mEventID);
189template <
class CellInputType>
192 return &mEventHandler == &rhs.mEventHandler && mEventID == rhs.mEventID && mForward == rhs.mForward;
195template <
class CellInputType>
203 mCurrentEvent = mEventHandler.buildEvent(mEventID);
207template <
class CellInputType>
215template <
class CellInputType>
223 mCurrentEvent = mEventHandler.buildEvent(mEventID);
227template <
class CellInputType>
EventIterator & operator++()
Prefix incrementation operator.
bool operator==(const EventIterator &rhs) const
Check for equalness.
EventIterator(const EventHandler &handler, int eventID, bool forward)
Constructor, initializing the iterator.
EventIterator & operator--()
Prefix decrementation operator.
Error handling in case the interaction records from various sources do not match.
Exception handling unitialized event handler.
Exception handling errors due to exceeding the range of triggers handled by the handler.
EventData< CellInputType > buildEvent(int eventID) const
Build event information for a given event number within the timeframe.
gsl::span< const CellInputType > CellRange
EventHandler()=default
Dummy constructor.
const CellRange getCellsForEvent(int eventID) const
Get range of cells belonging to the given event.
const CellIndexRange getClusterCellIndicesForEvent(int eventID) const
Get range of cluster cell indices belonging to the given event.
gsl::span< const int > CellIndexRange
const ClusterRange getClustersForEvent(int eventID) const
Get range of clusters belonging to the given event.
void reset()
Reset containers with empty ranges.
std::vector< gsl::span< const o2::phos::MCLabel > > getCellMCLabelForEvent(int eventID) const
Get vector of MC labels belonging to the given event.
InteractionRecord getInteractionRecordForEvent(int eventID) const
int getNumberOfEvents() const
gsl::span< const Cluster > ClusterRange
gsl::span< const TriggerRecord > TriggerRange
InteractionRecord mInteractionRecord
Interaction record for the trigger corresponding to this event.
std::vector< gsl::span< const o2::phos::MCLabel > > mMCCellLabels
span of MC labels for each cell
gsl::span< const Cluster > mClusters
PHOS clusters.
gsl::span< const int > mCellIndices
Cell indices in cluster.
gsl::span< const InputType > mCells
PHOS cells / digits.
std::vector< Cluster > clusters
std::vector< Cell > cells