Skip to content

Commit 938b323

Browse files
committed
Merge pull request #1097 in B2/basf2 from bugfix/BII-9410-a-bug-correction-of-svd-unpacker-packer-for-pcie40-readout_release-06-01 to release/06-01
* commit 'be5ee09357901a32a7e8017239015cc6899bd772': Change the location of the seenHeadersAndTrailers initialization in event() A bug in the header and trailer checks was fixed
2 parents b8ae780 + be5ee09 commit 938b323

File tree

1 file changed

+26
-27
lines changed

1 file changed

+26
-27
lines changed

svd/modules/svdUnpacker/src/SVDUnpackerModule.cc

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -233,14 +233,17 @@ void SVDUnpackerModule::event()
233233
short strip, sample[6];
234234
vector<uint32_t> crc16vec;
235235

236+
//reset value for headers and trailers check
237+
seenHeadersAndTrailers = 0;
238+
236239
for (; data32_it != &data32tab[buf][nWords[buf]]; data32_it++) {
237240
m_data32 = *data32_it; //put current 32-bit frame to union
238241

239242
if (m_data32 == 0xffaa0000) { // first part of FTB header
240243
crc16vec.clear(); // clear the input container for crc16 calculation
241244
crc16vec.push_back(m_data32);
242245

243-
seenHeadersAndTrailers++; // we found FTB header
246+
seenHeadersAndTrailers |= 0x1; // we found FTB header
244247

245248
data32_it++; // go to 2nd part of FTB header
246249
crc16vec.push_back(*data32_it);
@@ -290,7 +293,7 @@ void SVDUnpackerModule::event()
290293

291294
if (m_MainHeader.check == 6) { // FADC header
292295

293-
seenHeadersAndTrailers += 2; //we found FADC Header
296+
seenHeadersAndTrailers |= 0x2; //we found FADC Header
294297

295298
fadc = m_MainHeader.FADCnum;
296299
trgType = m_MainHeader.trgType;
@@ -437,7 +440,7 @@ void SVDUnpackerModule::event()
437440

438441
if (m_FADCTrailer.check == 14) { // FADC trailer
439442

440-
seenHeadersAndTrailers += 4; // we found FAD trailer
443+
seenHeadersAndTrailers |= 0x4; // we found FADC trailer
441444

442445
//additional check if we have a faulty/fake FADC that is not in the map
443446
if (APVmap->find(fadc) == APVmap->end()) badMapping = true;
@@ -503,7 +506,7 @@ void SVDUnpackerModule::event()
503506

504507
if (m_FTBTrailer.controlWord == 0xff55) {// FTB trailer
505508

506-
seenHeadersAndTrailers += 8; // we found FTB trailer
509+
seenHeadersAndTrailers |= 0x8; // we found FTB trailer
507510

508511
//check CRC16
509512
crc16vec.pop_back();
@@ -527,32 +530,28 @@ void SVDUnpackerModule::event()
527530

528531
} // end loop over 32-bit frames in each buffer
529532

530-
} // end iteration on 4(COPPER)/48(PCIe40) data buffers
531-
532-
//Let's check if all the headers and trailers were in place in the last frame
533-
if (seenHeadersAndTrailers != 0xf) {
534-
if (!(seenHeadersAndTrailers & 1)) {B2ERROR("Missing FTB Header is detected. SVD data might be corrupted!" << LogVar("Event number", eventNo) << LogVar("FADC", fadc)); missedHeader = true;}
535-
if (!(seenHeadersAndTrailers & 2)) {B2ERROR("Missing FADC Header is detected -> related FADC number couldn't be retreived. SVD data might be corrupted! " << LogVar("Event number", eventNo) << LogVar("previous FADC", fadc)); missedHeader = true;}
536-
if (!(seenHeadersAndTrailers & 4)) {B2ERROR("Missing FADC Trailer is detected. SVD data might be corrupted!" << LogVar("Event number", eventNo) << LogVar("FADC", fadc)); missedTrailer = true;}
537-
if (!(seenHeadersAndTrailers & 8)) {B2ERROR("Missing FTB Trailer is detected. SVD data might be corrupted!" << LogVar("Event number", eventNo) << LogVar("FADC", fadc)); missedTrailer = true;}
538-
}
539-
540-
//reset value for headers and trailers check
541-
seenHeadersAndTrailers = 0;
533+
//Let's check if all the headers and trailers were in place in the last frame
534+
if (seenHeadersAndTrailers != 0xf) {
535+
if (!(seenHeadersAndTrailers & 1)) {B2ERROR("Missing FTB Header is detected. SVD data might be corrupted!" << LogVar("Event number", eventNo) << LogVar("FADC", fadc)); missedHeader = true;}
536+
if (!(seenHeadersAndTrailers & 2)) {B2ERROR("Missing FADC Header is detected -> related FADC number couldn't be retreived. SVD data might be corrupted! " << LogVar("Event number", eventNo) << LogVar("previous FADC", fadc)); missedHeader = true;}
537+
if (!(seenHeadersAndTrailers & 4)) {B2ERROR("Missing FADC Trailer is detected. SVD data might be corrupted!" << LogVar("Event number", eventNo) << LogVar("FADC", fadc)); missedTrailer = true;}
538+
if (!(seenHeadersAndTrailers & 8)) {B2ERROR("Missing FTB Trailer is detected. SVD data might be corrupted!" << LogVar("Event number", eventNo) << LogVar("FADC", fadc)); missedTrailer = true;}
539+
}
542540

543-
for (auto p : vDiagnostic_ptr) {
544-
// adding remaining info to Diagnostic object
545-
p->setFTBFlags(ftbFlags);
546-
p->setApvErrorOR(apvErrorsOR);
547-
p->setAPVMatch(nAPVmatch);
548-
p->setBadMapping(badMapping);
549-
p->setBadTrailer(badTrailer);
550-
p->setMissedHeader(missedHeader);
551-
p->setMissedTrailer(missedTrailer);
541+
for (auto p : vDiagnostic_ptr) {
542+
// adding remaining info to Diagnostic object
543+
p->setFTBFlags(ftbFlags);
544+
p->setApvErrorOR(apvErrorsOR);
545+
p->setAPVMatch(nAPVmatch);
546+
p->setBadMapping(badMapping);
547+
p->setBadTrailer(badTrailer);
548+
p->setMissedHeader(missedHeader);
549+
p->setMissedTrailer(missedTrailer);
550+
}
552551

553-
}
552+
vDiagnostic_ptr.clear();
554553

555-
vDiagnostic_ptr.clear();
554+
} // end iteration on 4(COPPER)/48(PCIe40) data buffers
556555

557556
} // end event loop
558557

0 commit comments

Comments
 (0)