23#include <fmt/format.h>
30void Encoder::init(std::string_view outDir, std::string_view fileFor,
int verbosity, std::vector<ROBoardConfig> configurations)
37 for (
auto& linkUniqueId : linkUniqueIds) {
39 std::vector<ROBoardConfig> gbtConfigs;
40 for (
auto& cfg : configurations) {
42 gbtConfigs.emplace_back(cfg);
45 mGBTEncoders[gbtUniqueId].setConfig(gbtUniqueId, gbtConfigs);
49 auto ir = getOrbitIR(0);
51 for (uint16_t cruId = 0; cruId < 2; ++cruId) {
52 for (uint8_t epId = 0; epId < 2; ++epId) {
53 uint16_t feeId = 2 * cruId + epId;
54 std::string outFileLink = fmt::format(
"{}/MID", outDir);
55 if (fileFor !=
"all") {
56 outFileLink +=
"_alio2-cr1-flp159";
57 if (fileFor !=
"flp") {
58 outFileLink += fmt::format(
"_cru{}_{}", cruId, epId);
59 if (fileFor !=
"cruendpoint") {
60 outFileLink += fmt::format(
"_lnk{}_feeid{}", raw::sUserLogicLinkID, feeId);
61 if (fileFor !=
"link") {
62 throw std::runtime_error(
"invalid option provided for file grouping");
67 outFileLink +=
".raw";
68 mRawWriter.
registerLink(feeId, cruId, raw::sUserLogicLinkID, epId, outFileLink);
72 mGBTEncoders[gbtUniqueId].processTrigger(
ir, raw::sORB);
73 mGBTEncoders[gbtUniqueId].flush(mOrbitResponse[feeId],
ir);
76 mOrbitResponseWord[feeId] = mOrbitResponse[feeId];
77 completeWord(mOrbitResponseWord[feeId]);
87 toAdd = mOrbitResponseWord[o2::raw::RDHUtils::getFEEID(rdh)];
90void Encoder::onOrbitChange(uint32_t
orbit)
94 for (uint16_t feeId = 0; feeId < 4; ++feeId) {
96 writePayload(feeId,
ir);
100void Encoder::completeWord(std::vector<char>&
buffer)
112void Encoder::writePayload(uint16_t feeId,
const InteractionRecord&
ir,
bool onlyNonEmpty)
116 std::vector<char>
buf = mOrbitResponse[feeId];
117 for (
auto& gbtUniqueId : mFEEIdConfig.getGBTUniqueIdsInLink(feeId)) {
118 if (!mGBTEncoders[gbtUniqueId].isEmpty()) {
119 mGBTEncoders[gbtUniqueId].flush(
buf,
ir);
122 if (onlyNonEmpty &&
buf.size() == mOrbitResponse[feeId].size()) {
128 mRawWriter.
addData(feeId, feeId / 2, raw::sUserLogicLinkID, feeId % 2,
ir,
buf);
135 auto ir = getOrbitIR(mLastIR.
orbit);
136 auto nextIr = getOrbitIR(mLastIR.
orbit + 1);
137 for (uint16_t feeId = 0; feeId < 4; ++feeId) {
139 writePayload(feeId,
ir,
true);
143 writePayload(feeId, nextIr,
true);
165 onOrbitChange(mLastIR.
orbit);
176 mGBTMap[feeId].emplace_back(item.second);
180 for (
auto& item : mGBTMap) {
181 mGBTEncoders[item.first].process(item.second,
ir);
186void Encoder::initIR()
Raw data utilities for MID.
const std::unordered_map< uint8_t, ROBoard > getDataMap() const
Gets the output data as a map.
void process(gsl::span< const ColumnData > data, bool allowEmpty=false)
void finalize(bool closeFile=true)
void init(std::string_view outDir=".", std::string_view fileFor="all", int verbosity=0, std::vector< ROBoardConfig > configurations=makeDefaultROBoardConfig())
void emptyHBFMethod(const o2::header::RDHAny *rdh, std::vector< char > &toAdd) const
void process(gsl::span< const ColumnData > data, InteractionRecord ir, EventType eventType=EventType::Standard)
std::vector< uint32_t > getConfiguredLinkUniqueIDs() const
const std::vector< uint16_t > & getGBTUniqueIdsInLink(uint16_t feeId) const
uint16_t getGBTUniqueId(uint32_t linkUniqueId) const
void addData(uint16_t feeid, uint16_t cru, uint8_t lnk, uint8_t endpoint, const IR &ir, const gsl::span< char > data, bool preformatted=false, uint32_t trigger=0, uint32_t detField=0)
LinkData & registerLink(uint16_t fee, uint16_t cru, uint8_t link, uint8_t endpoint, std::string_view outFileName)
void setEmptyPageCallBack(const T *t)
const HBFUtils & getHBFUtils() const
GLenum GLuint GLenum GLsizei const GLchar * buf
uint16_t getGBTIdFromUniqueLocId(uint8_t uniqueLocId)
bool isBoardInGBT(uint8_t uniqueLocId, uint16_t gbtUniqueId)
void applyElectronicsDelay(uint32_t &orbit, uint16_t &bc, int16_t delay, uint16_t maxBunches=constants::lhc::LHCMaxBunches)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
uint16_t bc
bunch crossing ID of interaction
int64_t differenceInBC(const InteractionRecord &other) const
int16_t localToBC
Delay between collision BC and local clock.
IR getFirstSampledTFIR() const
get TF and HB (abs) for this IR
static constexpr int GBTWord128
o2::InteractionRecord ir(0, 0)