43 auto stop = [
this]() {
45 LOG(info) <<
"Capacities: ROFRecords: " << mDecoder->getROFRecords().capacity() <<
" LocalBoards: " << mDecoder->getData().capacity();
46 double scaleFactor = (mNROFs == 0) ? 0. : 1.e6 / mNROFs;
47 LOG(info) <<
"Processing time / " << mNROFs <<
" ROFs: full: " << mTimer.count() * scaleFactor <<
" us decoding: " << mTimerAlgo.count() * scaleFactor <<
" us";
55 auto tStart = std::chrono::high_resolution_clock::now();
57 auto tAlgoStart = std::chrono::high_resolution_clock::now();
60 std::vector<ROBoard>
data;
61 std::vector<ROFRecord> rofs;
73 mDecoder =
createDecoder(*rdhPtr, mIsDebugMode, mElectronicsDelay, mCrateMasks, mFeeIdConfig);
77 for (
auto it = parser.
begin(),
end = parser.
end(); it !=
end; ++it) {
79 gsl::span<const uint8_t> payload(it.data(), it.size());
80 mDecoder->process(payload, *rdhPtr);
83 mTimerAlgo += std::chrono::high_resolution_clock::now() - tAlgoStart;
88 mTimer += std::chrono::high_resolution_clock::now() - tStart;
89 mNROFs += mDecoder->getROFRecords().size();
93 std::unique_ptr<Decoder> mDecoder{
nullptr};
94 bool mIsDebugMode{
false};
95 FEEIdConfig mFeeIdConfig{};
96 CrateMasks mCrateMasks{};
97 ElectronicsDelay mElectronicsDelay{};
99 std::chrono::duration<double> mTimer{0};
100 std::chrono::duration<double> mTimerAlgo{0};
101 unsigned int mNROFs{0};
114 of::adaptFromTask<o2::mid::RawDecoderDeviceDPL>(isDebugMode, feeIdConfig, crateMasks, electronicsDelay, subSpecType)};
126 return getRawDecoderSpec(isDebugMode, feeIdConfig, crateMasks, electronicsDelay, inputSpecs, askDISTSTF, subSpec);
133 return getRawDecoderSpec(isDebugMode, feeIdConfig, crateMasks, electronicsDelay, inputSpecs, askDISTSTF, subSpec);
A raw page parser for DPL input.
Data processor spec for MID raw decoder device.
buffer_type const * raw() const
get pointer to raw block at current position, rdh starts here
The parser handles transparently input in the format of raw pages.
const_iterator end() const
const_iterator begin() const
void snapshot(const Output &spec, T const &object)
ServiceRegistryRef services()
DataAllocator & outputs()
The data allocator is used to allocate memory for the output data.
InputRecord & inputs()
The inputs associated with this processing context.
RawDecoderDeviceDPL(bool isDebugMode, const FEEIdConfig &feeIdConfig, const CrateMasks &crateMasks, const ElectronicsDelay &electronicsDelay, header::DataHeader::SubSpecificationType subSpec)
void init(of::InitContext &ic)
void run(of::ProcessingContext &pc)
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
constexpr o2::header::DataOrigin gDataOriginMID
constexpr o2::header::DataDescription gDataDescriptionRawData
Defining PrimaryVertex explicitly as messageable.
bool isDroppedTF(o2::framework::ProcessingContext &pc, o2::header::DataOrigin origin=o2::header::gDataOriginMID)
framework::DataProcessorSpec getRawDecoderSpec(bool isDebugMode=false)
o2::framework::InputSpec getDiSTSTFSpec()
std::unique_ptr< Decoder > createDecoder(const o2::header::RDHAny &rdh, bool isDebugMode, const ElectronicsDelay &electronicsDelay, const CrateMasks &crateMasks, const FEEIdConfig &feeIdConfig)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"