153 edm::LogError(
"L1TDQM") <<
"Cannot analyse: no FEDRawDataCollection found";
164 std::map<unsigned int, bool> evtGood;
166 for (
const auto &
id: definedMaskCapIds_) {
169 unsigned valid_count = 0;
173 unsigned int fedDataSize = l1tRcd.
size();
174 std::map<unsigned int, unsigned int> readoutSizeNoZSMap;
175 std::map<unsigned int, unsigned int> readoutSizeZSMap;
176 std::map<unsigned int, unsigned int> readoutSizeZSExpectedMap;
180 for (
const auto &
id: definedMaskCapIds_) {
181 readoutSizeNoZSMap[
id] = 0;
182 readoutSizeZSMap[
id] = 0;
183 readoutSizeZSExpectedMap[
id] = 0;
186 edm::LogInfo(
"L1TDQM") <<
"Found FEDRawDataCollection with ID " <<
fedId <<
" and size " << l1tRcd.
size();
189 if (l1tRcd.
size() > 0) {
190 edm::LogError(
"L1TDQM") <<
"Cannot analyse: invalid L1T raw data (size = " << l1tRcd.
size() <<
") for ID " <<
fedId <<
".";
197 const unsigned char *
data = l1tRcd.
data();
201 edm::LogInfo(
"L1TDQM") <<
"Found SLink header:" <<
" Trigger type " <<
header.triggerType() <<
" L1 event ID " <<
header.lvl1ID() <<
" BX Number " <<
header.bxID() <<
" FED source " <<
header.sourceID() <<
" FED version " <<
header.version();
208 if (trailer.check()) {
209 edm::LogInfo(
"L1TDQM") <<
"Found SLink trailer:" <<
" Length " << trailer.fragmentLength() <<
" CRC " << trailer.crc() <<
" Status " << trailer.evtStatus() <<
" Throttling bits " << trailer.ttsBits();
221 edm::LogError(
"L1TDQM") <<
"Could not extract AMC13 Packet.";
229 auto payload64 =
amc.data();
230 auto start = (
const uint32_t*) payload64.get();
238 std::unique_ptr<l1t::Block>
block;
239 while ((block = payload->getBlock()) !=
nullptr) {
241 std::cout <<
">>> check zero suppression for block <<<" << std::endl
242 <<
"hdr: " << std::hex << std::setw(8) << std::setfill(
'0') << block->header().raw() <<
std::dec 243 <<
" (ID " << block->header().getID() <<
", size " << block->header().getSize()
244 <<
", CapID 0x" << std::hex << std::setw(2) << std::setfill(
'0') << block->header().getCapID()
245 <<
", flags 0x" << std::hex << std::setw(2) << std::setfill(
'0') << block->header().getFlags()
247 for (
const auto& word: block->payload()) {
248 std::cout <<
"data: " << std::hex << std::setw(8) << std::setfill(
'0') << word <<
std::dec << std::endl;
252 unsigned int blockCapId = block->header().getCapID();
253 unsigned int blockSize = block->header().getSize() * 4;
254 unsigned int blockHeaderSize =
sizeof(block->header().raw());
255 unsigned int blockHeaderFlags = block->header().getFlags();
257 bool blockZsFlagSet = newZsFlagSet ?
true : ((blockHeaderFlags &
zsFlagMask_) != 0);
258 bool dataInvertFlagSet = newZsFlagSet && ((blockHeaderFlags &
dataInvFlagMask_) != 0);
262 bool capIdDefined =
false;
284 auto totalBlockSize = blockHeaderSize;
286 totalBlockSize += blockSize;
288 auto totalBlockSizeExpected = totalBlockSize;
289 auto totalBlockSizeNoZS = blockHeaderSize + blockSize;
291 auto bxBlocks = block->getBxBlocks(6, newZsFlagSet);
294 bool allToSuppress =
true;
295 for (
const auto& bxBlock: bxBlocks) {
296 bool toSuppress =
false;
297 bool bxZsFlagSet = ((bxBlock.header().getFlags() &
zsFlagMask_) != 0);
300 unsigned int wordcounter = 0;
301 unsigned int wordsum = 0;
302 for (
const auto& word: bxBlock.payload()) {
303 if (dataInvertFlagSet) {
304 wordsum +=
masks_[blockCapId].at(wordcounter%6) & (~word);
306 wordsum +=
masks_[blockCapId].at(wordcounter%6) & word;
309 std::cout <<
"word: " << std::hex << std::setw(8) << std::setfill(
'0') << word <<
std::dec 310 <<
", maskword" << wordcounter%6 <<
": " << std::hex << std::setw(8) << std::setfill(
'0')
311 <<
masks_[blockCapId].at(wordcounter%6) <<
std::dec <<
", wordsum: " << wordsum << std::endl;
315 std::cout <<
"wordsum not 0: this BX block should be kept" << std::endl;
325 std::cout <<
"wordsum == 0: this BX block should be zero suppressed" << std::endl;
329 allToSuppress = allToSuppress && toSuppress;
334 blockZsFlagSet = blockZsFlagSet && bxZsFlagSet;
348 unsigned int totalBxBlockSize = bxBlock.getSize() * 4 +
sizeof(bxBlock.header().raw());
350 if (toSuppress && bxZsFlagSet) {
356 }
else if (!toSuppress && !bxZsFlagSet) {
358 totalBlockSize += totalBxBlockSize;
359 totalBlockSizeExpected += totalBxBlockSize;
364 }
else if (!toSuppress && bxZsFlagSet) {
366 totalBlockSizeExpected += totalBxBlockSize;
377 evtGood[blockCapId] =
false;
381 totalBlockSize += totalBxBlockSize;
392 evtGood[blockCapId] =
false;
398 readoutSizeNoZSMap[
maxMasks_] += totalBlockSizeNoZS;
400 readoutSizeNoZSMap[blockCapId] += totalBlockSizeNoZS;
404 if (allToSuppress && blockZsFlagSet) {
410 }
else if (!allToSuppress && !blockZsFlagSet) {
413 readoutSizeZSMap[
maxMasks_] += totalBlockSize;
414 readoutSizeZSExpectedMap[
maxMasks_] += totalBlockSizeExpected;
417 readoutSizeZSMap[blockCapId] += totalBlockSize;
418 readoutSizeZSExpectedMap[blockCapId] += totalBlockSizeExpected;
420 }
else if (!allToSuppress && blockZsFlagSet) {
426 readoutSizeZSExpectedMap[
maxMasks_] += totalBlockSizeExpected;
433 readoutSizeZSExpectedMap[blockCapId] += totalBlockSizeExpected;
434 evtGood[blockCapId] =
false;
442 readoutSizeZSMap[
maxMasks_] += totalBlockSize;
449 readoutSizeZSMap[blockCapId] += totalBlockSize;
450 evtGood[blockCapId] =
false;
456 std::cout <<
"FED data size: " << fedDataSize <<
" bytes" << std::endl;
457 std::cout <<
"Payload size no ZS: " << readoutSizeNoZSMap[
maxMasks_] <<
" bytes" << std::endl;
458 std::cout <<
"Payload size ZS: " << readoutSizeZSMap[
maxMasks_] <<
" bytes" << std::endl;
459 std::cout <<
"Payload size expected ZS: " << readoutSizeZSExpectedMap[
maxMasks_] <<
" bytes" << std::endl;
460 std::cout <<
"Filled readout size ZS with headers: " << readoutSizeZSMap[
maxMasks_] + fedDataSize - readoutSizeNoZSMap[
maxMasks_] <<
" bytes" << std::endl;
461 std::cout <<
"Filled expected readout size ZS with headers: " << readoutSizeZSExpectedMap[
maxMasks_] + fedDataSize - readoutSizeNoZSMap[
maxMasks_] <<
" bytes" << std::endl;
466 for (
const auto &
id: definedMaskCapIds_) {
473 if (evtGood[maxMasks_]) {
479 for (
const auto &
id: definedMaskCapIds_) {
std::vector< amc::Packet > payload() const
std::map< unsigned int, MonitorElement * > readoutSizeZSExpectedMap_
std::map< unsigned int, MonitorElement * > zeroSuppValMap_
edm::EDGetTokenT< FEDRawDataCollection > fedDataToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::map< unsigned int, MonitorElement * > readoutSizeNoZSMap_
size_t size() const
Lenght of the data buffer in bytes.
std::map< unsigned int, MonitorElement * > errorSummaryNumMap_
std::vector< unsigned int > definedMaskCapIds_
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
std::map< unsigned int, MonitorElement * > errorSummaryDenMap_
std::vector< std::vector< int > > masks_
static const unsigned int maxMasks_
unsigned long long uint64_t
bool parse(const uint64_t *start, const uint64_t *data, unsigned int size, unsigned int lv1, unsigned int bx, bool legacy_mc=false, bool mtf7_mode=false)
char data[epos_bytes_allocation]
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
std::vector< int > fedIds_
std::map< unsigned int, MonitorElement * > readoutSizeZSMap_
bool checkOnlyCapIdsWithMasks_