57 auto ccdbUrl = ic.options().get<std::string>(
"ccdb-path");
58 auto lutPath = ic.options().get<std::string>(
"lut-path");
59 mDumpMetrics = ic.options().get<
bool>(
"dump-raw-data-metric");
60 if (!ic.options().get<
bool>(
"disable-empty-tf-protection")) {
64 RawReader_t::LookupTable_t::setCCDBurl(
ccdbUrl);
67 RawReader_t::LookupTable_t::setLUTpath(lutPath);
70 RawReader_t::LookupTable_t::Instance().printFullMap();
72 const auto nReserveVecDig = ic.options().get<
int>(
"reserve-vec-dig");
73 const auto nReserveVecChData = ic.options().get<
int>(
"reserve-vec-chdata");
74 const auto nReserveVecBuffer = ic.options().get<
int>(
"reserve-vec-buffer");
75 const auto nReserveMapDig = ic.options().get<
int>(
"reserve-map-dig");
76 if (nReserveVecDig || nReserveVecChData) {
77 mRawReader.reserveVecDPL(nReserveVecDig, nReserveVecChData);
79 if (nReserveVecBuffer || nReserveMapDig) {
80 mRawReader.reserve(nReserveVecBuffer, nReserveMapDig);
88 static size_t contDeadBeef = 0;
91 const auto dh = o2::framework::DataRefUtils::getHeader<o2::header::DataHeader*>(
ref);
93 if (payloadSize == 0) {
95 if (++contDeadBeef <= maxWarn) {
96 LOGP(alarm,
"Found input [{}/{}/{:#x}] TF#{} 1st_orbit:{} Payload {} : assuming no payload for all links in this TF{}",
97 dh->dataOrigin.str, dh->dataDescription.str, dh->subSpecification, dh->tfCounter, dh->firstTForbit, payloadSize,
98 contDeadBeef == maxWarn ? fmt::format(
". {} such inputs in row received, stopping reporting", contDeadBeef) :
"");
108 std::size_t cntDF0{0};
109 std::size_t cntDF2{0};
110 std::size_t cntDF_unknown{0};
111 auto start = std::chrono::high_resolution_clock::now();
113 pc.inputs().get<
typename RawReader_t::LookupTable_t::Table_t*>(
"channel_map");
115 auto stop = std::chrono::high_resolution_clock::now();
116 auto duration = std::chrono::duration_cast<std::chrono::microseconds>(
stop -
start);
117 LOG(
debug) <<
"Channel map upload delay: " << duration.count();
119 for (
auto it = parser.
begin(),
end = parser.
end(); it !=
end; ++it) {
124 gsl::span<const uint8_t> payload(it.data(), it.size());
125 const auto rdhDataFormat = o2::raw::RDHUtils::getDataFormat(rdhPtr);
126 if (rdhDataFormat == 0) {
128 mRawReader.process(
true, payload, o2::raw::RDHUtils::getFEEID(rdhPtr), o2::raw::RDHUtils::getLinkID(rdhPtr), o2::raw::RDHUtils::getEndPointID(rdhPtr));
129 }
else if (rdhDataFormat == 2) {
131 mRawReader.process(
false, payload, o2::raw::RDHUtils::getFEEID(rdhPtr), o2::raw::RDHUtils::getLinkID(rdhPtr), o2::raw::RDHUtils::getEndPointID(rdhPtr));
136 }
catch (std::exception& e) {
137 LOG(error) <<
"Failed to extract RDH, abandoning TF sending dummy output, exception was: " << e.what();
149 if ((cntDF0 > 0 && cntDF2 > 0) || cntDF_unknown > 0) {
150 LOG(error) <<
"Strange RDH::dataFormat in TF. Number of pages: DF=0 - " << cntDF0 <<
" , DF=2 - " << cntDF2 <<
" , DF=unknown - " << cntDF_unknown;
152 auto stop = std::chrono::high_resolution_clock::now();
153 auto duration = std::chrono::duration_cast<std::chrono::microseconds>(
stop -
start);
154 LOG(
debug) <<
"TF delay: " << duration.count();