12#ifndef O2_MCH_RAW_ENCODER_GBT_ENCODER_H
13#define O2_MCH_RAW_ENCODER_GBT_ENCODER_H
21#include <fmt/printf.h>
42template <
typename FORMAT,
typename CHARGESUM,
int VERSION = 0>
91 size_t size()
const {
return mGbtWords.size(); }
95 std::array<ElinkEncoder<FORMAT, CHARGESUM, VERSION>, 40> mElinks;
96 std::vector<uint64_t> mGbtWords;
100inline int phase(
int i,
bool forceNoPhase)
117template <
typename FORMAT,
typename CHARGESUM,
int VERSION>
120template <
typename FORMAT,
typename CHARGESUM,
int VERSION>
127 impl::assertIsInRange(
"linkId", linkId, 0, 11);
130template <
typename FORMAT,
typename CHARGESUM,
int VERSION>
132 const std::vector<SampaCluster>&
data)
135 impl::assertIsInRange(
"elinkGroupId", elinkGroupId, 0, 7);
136 impl::assertIsInRange(
"elinkIndexInGroup", elinkIndexInGroup, 0, 4);
137 mElinks.at(elinkGroupId * 5 + elinkIndexInGroup).addChannelData(chId,
data);
140template <
typename FORMAT,
typename CHARGESUM,
int VERSION>
144 impl::assertIsInRange(
"elinkGroupId", elinkGroupId, 0, 7);
145 impl::assertIsInRange(
"elinkIndexInGroup", elinkIndexInGroup, 0, 4);
146 mElinks.at(elinkGroupId * 5 + elinkIndexInGroup).addHeartbeat(bunchCrossing);
149template <
typename FORMAT,
typename CHARGESUM,
int VERSION>
152 auto s = gsl::span(mElinks.begin(), mElinks.end());
153 mElinkMerger(mLinkId,
s, mGbtWords);
154 for (
auto& elink : mElinks) {
157 return impl::moveBuffer(mGbtWords,
buffer);
unsigned short int uint16_t
Timeframe settings Average distance in cm of events merged into Randomize distance around average distance of merged events Simulate correct bunch interactions instead of placing only the average number of events A value[n] sets TFlen for[n] collisions in Number of bunches per trainsort Number of bunch trains Instantaneous interaction rate Do not simulate border Total number of collisions to be placed in the interior of all time Do not select random but walk over array of events in stride steps h Event generator settings h configStandalone Use CPU for GPU Force usage of the specified GPU device no CPU fallback Continue processing after an error s
A GBTEncoder manages 40 ElinkEncoder to encode the data of one GBT.
void resetLocalBunchCrossing()
size_t size() const
return the number of bytes our current buffer is
void addHeartbeat(uint8_t elinkGroupId, uint8_t elinkIndexInGroup, uint20_t bunchCrossing)
void addChannelData(uint8_t elinkGroupId, uint8_t elinkIndexInGroup, uint8_t chId, const std::vector< SampaCluster > &data)
size_t moveToBuffer(std::vector< std::byte > &buffer)
uint16_t linkId() const
returns the GBT id
GBTEncoder(uint16_t linkId)