Skip to content

Commit 713020f

Browse files
wiechulasawenzel
authored andcommitted
Add present event number, processed time bins, loading of specific event
1 parent c2faf1f commit 713020f

1 file changed

Lines changed: 38 additions & 8 deletions

File tree

Detectors/TPC/calibration/include/TPCCalibration/CalibRawBase.h

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#include <vector>
1818
#include <memory>
19+
#include <algorithm>
1920

2021
#include "TString.h"
2122
#include "Rtypes.h"
@@ -49,10 +50,11 @@ class CalibRawBase
4950
Ok, ///< Processing ok
5051
Truncated, ///< Read fewer time bins than mTimeBinsPerCall
5152
NoMoreData, ///< No data read
53+
LastEvent, ///< Last event
5254
NoReaders ///< No raw reader configures
5355
};
5456

55-
CalibRawBase(PadSubset padSubset = PadSubset::ROC) : mMapper(Mapper::instance()), mNevents(0), mTimeBinsPerCall(500), mPadSubset(padSubset) {;}
57+
CalibRawBase(PadSubset padSubset = PadSubset::ROC) : mMapper(Mapper::instance()), mNevents(0), mTimeBinsPerCall(500), mProcessedTimeBins(0), mPresentEventNumber(0), mPadSubset(padSubset) {;}
5658

5759
/// Update function called once per digit
5860
///
@@ -90,7 +92,8 @@ class CalibRawBase
9092
PadSubset getPadSubset() const { return mPadSubset; }
9193

9294
/// Process one event
93-
ProcessStatus ProcessEvent();
95+
/// \param eventNumber: Either number >=0 or -1 (next event) or -2 (previous event)
96+
ProcessStatus ProcessEvent(int eventNumber=-1);
9497

9598
void setupContainers(TString fileInfo);
9699

@@ -103,12 +106,20 @@ class CalibRawBase
103106
/// number of processed events
104107
size_t getNumberOfProcessedEvents() const { return mNevents; }
105108

109+
/// get present event number
110+
size_t getPresentEventNumber() const { return mPresentEventNumber; }
111+
112+
/// number of processed time bins in last event
113+
size_t getNumberOfProcessedTimeBins() const { return mProcessedTimeBins; }
114+
106115
protected:
107116
const Mapper& mMapper; //!< TPC mapper
108117

109118
private:
110119
size_t mNevents; //!< number of processed events
111-
Int_t mTimeBinsPerCall; //!< numver of time bins to process in ProcessEvent
120+
Int_t mTimeBinsPerCall; //!< number of time bins to process in ProcessEvent
121+
size_t mProcessedTimeBins; //!< number of processed time bins in last event
122+
size_t mPresentEventNumber; //!< present event number
112123
PadSubset mPadSubset; //!< pad subset type used
113124
std::vector<std::unique_ptr<GBTFrameContainer>> mGBTFrameContainers; //! raw reader pointer
114125
std::vector<std::unique_ptr<RawReader>> mRawReaders; //! raw reader pointer
@@ -120,20 +131,20 @@ class CalibRawBase
120131
ProcessStatus ProcessEventGBT();
121132

122133
/// Process one event using RawReader
123-
ProcessStatus ProcessEventRawReader();
134+
ProcessStatus ProcessEventRawReader(int eventNumber=-1);
124135

125136
};
126137

127138
//----------------------------------------------------------------
128139
// Inline Functions
129140
//----------------------------------------------------------------
130-
inline CalibRawBase::ProcessStatus CalibRawBase::ProcessEvent()
141+
inline CalibRawBase::ProcessStatus CalibRawBase::ProcessEvent(int eventNumber)
131142
{
132143
if (mGBTFrameContainers.size()) {
133144
return ProcessEventGBT();
134145
}
135146
else if (mRawReaders.size()) {
136-
return ProcessEventRawReader();
147+
return ProcessEventRawReader(eventNumber);
137148
}
138149
else {
139150
return ProcessStatus::NoReaders;
@@ -218,7 +229,7 @@ inline CalibRawBase::ProcessStatus CalibRawBase::ProcessEventGBT()
218229
}
219230

220231
//______________________________________________________________________________
221-
inline CalibRawBase::ProcessStatus CalibRawBase::ProcessEventRawReader()
232+
inline CalibRawBase::ProcessStatus CalibRawBase::ProcessEventRawReader(int eventNumber)
222233
{
223234
if (!mRawReaders.size()) return ProcessStatus::NoReaders;
224235
ResetEvent();
@@ -230,17 +241,33 @@ inline CalibRawBase::ProcessStatus CalibRawBase::ProcessEventRawReader()
230241

231242
ProcessStatus status = ProcessStatus::Ok;
232243

244+
mProcessedTimeBins = 0;
233245
int processedReaders = 0;
234246
bool hasData = false;
247+
248+
uint64_t lastEvent = 0;
235249
for (auto& reader_ptr : mRawReaders) {
236250
auto reader = reader_ptr.get();
237251

238-
if (!reader->loadNextEvent()) continue;
252+
lastEvent = std::max(lastEvent, reader->getLastEvent());
253+
254+
if (eventNumber>=0) {
255+
reader->loadEvent(eventNumber);
256+
mPresentEventNumber = eventNumber;
257+
}
258+
else if (eventNumber==-1) {
259+
mPresentEventNumber = reader->loadNextEvent();
260+
}
261+
else if (eventNumber==-2) {
262+
mPresentEventNumber = reader->loadPreviousEvent();
263+
}
239264

240265
o2::TPC::PadPos padPos;
241266
while (std::shared_ptr<std::vector<uint16_t>> data = reader->getNextData(padPos)) {
242267
if (!data) continue;
243268

269+
mProcessedTimeBins = std::max(mProcessedTimeBins, data->size());
270+
244271
CRU cru(reader->getRegion());
245272
const int roc = cru.roc();
246273
// TODO: OROC case needs subtraction of number of pad rows in IROC
@@ -293,6 +320,9 @@ inline CalibRawBase::ProcessStatus CalibRawBase::ProcessEventRawReader()
293320
else if (processedReaders < mRawReaders.size()) {
294321
status = ProcessStatus::Truncated;
295322
}
323+
else if (mPresentEventNumber == lastEvent) {
324+
status = ProcessStatus::LastEvent;
325+
}
296326

297327
EndEvent();
298328
++mNevents;

0 commit comments

Comments
 (0)