33#include < iostream>
44#include < iterator>
55#include < vector>
6+ #include < bitset>
67
78#include " CondFormats/HGCalObjects/interface/HGCalMappingCellIndexer.h"
89#include " CondFormats/HGCalObjects/interface/HGCalMappingModuleIndexer.h"
@@ -50,7 +51,7 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
5051 // Others: big endianness
5152 const auto * const header = reinterpret_cast <const uint64_t *>(fed_data.data ());
5253 const auto * const trailer = reinterpret_cast <const uint64_t *>(fed_data.data () + fed_data.size ());
53- LogDebug (" [HGCalUnpacker]" ) << " fedId = " << fedId << " nwords (64b) = " << std::distance (header, trailer);
54+ LogDebug (" [HGCalUnpacker]" ) << " fedId = " << fedId << " , nwords (64b) = " << std::distance (header, trailer);
5455 const auto * ptr = header;
5556
5657#ifdef EDM_ML_DEBUG
@@ -77,7 +78,7 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
7778 << " ), got 0x" << std::hex
7879 << ((slink_header >> (BACKEND_FRAME::SLINK_BOE_POS + 32 )) &
7980 BACKEND_FRAME::SLINK_BOE_MASK)
80- << " from " << slink_header << " ." ;
81+ << " from word = 0x " << std::hex << slink_header << " ." ;
8182 return (0x1 << hgcaldigi::FEDUnpackingFlags::ErrorSLinkHeader);
8283 }
8384
@@ -130,12 +131,13 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
130131 // parse Capture Block body (ECON-Ds)
131132 for (uint32_t econdIdx = 0 ; econdIdx < HGCalMappingModuleIndexer::maxECONDperCB_; econdIdx++) {
132133 auto econd_pkt_status = (cb_header >> (3 * econdIdx)) & 0b111 ;
133- LogDebug (" [HGCalUnpacker]" ) << " fedId = " << fedId << " , captureblockIdx = " << captureblockIdx
134- << " , econdIdx = " << econdIdx << " , econd_pkt_status = " << econd_pkt_status;
135134 if (econd_pkt_status != backend::ECONDPacketStatus::InactiveECOND) {
136135 // always increment the global ECON-D index (unless inactive/unconnected)
137136 globalECONDIdx++;
138137 }
138+ LogDebug (" [HGCalUnpacker]" ) << " fedId = " << fedId << " , captureblockIdx = " << captureblockIdx
139+ << " , econdIdx = " << econdIdx << " , globalECONDIdx = " << (int )globalECONDIdx
140+ << " , econd_pkt_status = " << econd_pkt_status;
139141 hasActiveCBFlags = (econd_pkt_status != backend::ECONDPacketStatus::Normal) &&
140142 (econd_pkt_status != backend::ECONDPacketStatus::InactiveECOND);
141143 bool pkt_exists =
@@ -155,21 +157,23 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
155157 econdPacketInfo.view ()[ECONDdenseIdx].location () = (uint32_t )(ptr - header);
156158 const auto econd_payload_length = ((econd_headers[0 ] >> ECOND_FRAME::PAYLOAD_POS) & ECOND_FRAME::PAYLOAD_MASK);
157159
158- // sanity check
160+ // ECON-D header marker check
159161 if (((econd_headers[0 ] >> ECOND_FRAME::HEADER_POS) & ECOND_FRAME::HEADER_MASK) !=
160162 fedConfig.econds [globalECONDIdx].headerMarker ) {
161163 econdPacketInfo.view ()[ECONDdenseIdx].exception () = 3 ;
162164 edm::LogWarning (" [HGCalUnpacker]" )
163165 << " Expected a ECON-D header at word " << std::dec << (uint32_t )(ptr - header) << " /0x" << std::hex
164- << (uint32_t )(ptr - header) << " (marker: 0x" << fedConfig.econds [globalECONDIdx].headerMarker
165- << " ), got 0x" << econd_headers[0 ] << " and payload=" << econd_payload_length << " ." ;
166+ << (uint32_t )(ptr - header) << " , word = 0x" << econd_headers[0 ] << " (expected marker: 0x"
167+ << fedConfig.econds [globalECONDIdx].headerMarker << " , got marker: 0x"
168+ << ((econd_headers[0 ] >> ECOND_FRAME::HEADER_POS) & ECOND_FRAME::HEADER_MASK)
169+ << " ), and econd_payload_length = " << std::dec << econd_payload_length << " ." ;
166170 return (0x1 << hgcaldigi::FEDUnpackingFlags::ErrorECONDHeader) |
167171 (hasActiveCBFlags << hgcaldigi::FEDUnpackingFlags::ActiveCaptureBlockFlags);
168172 }
169173
170174 // Compute ECON-D trailer CRC
171175 bool crcvalid = hgcal::econdCRCAnalysis (ptr, 0 , econd_payload_length);
172- LogDebug (" [HGCalUnpacker]" ) << " crc value " << crcvalid;
176+ LogDebug (" [HGCalUnpacker]" ) << " CRC valid = " << crcvalid;
173177 ++ptr;
174178
175179 if (!crcvalid) {
@@ -184,7 +188,7 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
184188 if (econd_payload_length > 469 ) {
185189 econdPacketInfo.view ()[ECONDdenseIdx].exception () = 4 ;
186190 edm::LogWarning (" [HGCalUnpacker]" )
187- << " Unpacked payload length=" << econd_payload_length << " exceeds the maximal length=469" ;
191+ << " Unpacked payload length=" << econd_payload_length << " exceeds the maximal length ( =469) " ;
188192 return (0x1 << hgcaldigi::FEDUnpackingFlags::ECONDPayloadLengthOverflow) |
189193 (hasActiveCBFlags << hgcaldigi::FEDUnpackingFlags::ActiveCaptureBlockFlags);
190194 }
@@ -203,7 +207,13 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
203207 LogDebug (" [HGCalUnpacker]" ) << " fedId = " << fedId << " , captureblockIdx = " << captureblockIdx
204208 << " , econdIdx = " << econdIdx << " , econd_headers = " << std::hex
205209 << std::setfill (' 0' ) << std::setw (8 ) << econd_headers[0 ] << " " << econd_headers[1 ]
206- << std::dec << " , econd_payload_length = " << econd_payload_length;
210+ << " , econd_payload_length = " << std::dec << econd_payload_length << " , "
211+ << " H/T = 0b"
212+ << std::bitset<2 >((econd_headers[0 ] >> ECOND_FRAME::HT_POS) & ECOND_FRAME::HT_MASK)
213+ << " , E/B/O = 0b"
214+ << std::bitset<2 >((econd_headers[0 ] >> ECOND_FRAME::EBO_POS) & ECOND_FRAME::EBO_MASK)
215+ << " , M = " << ((econd_headers[0 ] >> ECOND_FRAME::BITM_POS) & 0b1 );
216+
207217 // quality check for ECON-D (check econd_pkt_status here for error in trailer CRC)
208218 if ((((econd_headers[0 ] >> ECOND_FRAME::HT_POS) & ECOND_FRAME::HT_MASK) >= 0b10 ) ||
209219 (((econd_headers[0 ] >> ECOND_FRAME::EBO_POS) & ECOND_FRAME::EBO_MASK) >= 0b10 ) ||
@@ -221,22 +231,23 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
221231 unsigned iword = 0 ;
222232 if (!pass_through_mode) {
223233 // Standard ECON-D
224- LogDebug (" [HGCalUnpacker]" ) << " Standard ECON-D, erxMax=" << erxMax << " enabledErx= " << enabledErx;
234+ LogDebug (" [HGCalUnpacker]" ) << " Standard ECON-D, erxMax = " << erxMax << " , enabledErx = 0b"
235+ << std::bitset<12 >(enabledErx);
225236 for (uint32_t erxIdx = 0 ; erxIdx < erxMax; erxIdx++) {
226237 // check if the eRx is enabled
227238 if ((enabledErx >> erxIdx & 1 ) == 0 ) {
228239 continue ;
229240 }
230241 LogDebug (" [HGCalUnpacker]" ) << " fedId = " << fedId << " , captureblockIdx = " << captureblockIdx
231- << " , econdIdx = " << econdIdx << " , erxIdx= " << erxIdx;
242+ << " , econdIdx = " << econdIdx << " , erxIdx = " << erxIdx;
232243
233244 econdPacketInfo.view ()[ECONDdenseIdx].cm ()(erxIdx, 0 ) =
234245 (econd_payload[iword] >> ECOND_FRAME::COMMONMODE0_POS) & ECOND_FRAME::COMMONMODE0_MASK;
235246 econdPacketInfo.view ()[ECONDdenseIdx].cm ()(erxIdx, 1 ) =
236247 (econd_payload[iword] >> ECOND_FRAME::COMMONMODE1_POS) & ECOND_FRAME::COMMONMODE1_MASK;
237248 // check if the eRx sub-packet is empty (the "F" flag in the eRx sub-packet header)
238249 if (((econd_payload[iword] >> ECOND_FRAME::ERXFORMAT_POS) & ECOND_FRAME::ERXFORMAT_MASK) == 1 ) {
239- LogDebug (" [HGCalUnpacker]" ) << " eRx " << erxIdx << " is empty" ;
250+ LogDebug (" [HGCalUnpacker]" ) << " eRxIdx = " << erxIdx << " is empty" ;
240251 iword += 1 ; // length of an empty eRx header (32 bits)
241252 continue ; // go to the next eRx
242253 }
@@ -273,6 +284,15 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
273284 digis.view ()[denseIdx].cm () = cmSum;
274285 digis.view ()[denseIdx].flags () = 0 ;
275286 iBit += erxBodyBits_[code];
287+
288+ LogDebug (" [HGCalUnpacker]" ) << " channelIdx = " << channelIdx << " , denseIdx = " << denseIdx
289+ << " , tctp = " << uint16_t (digis.view ()[denseIdx].tctp ())
290+ << " , adcm1 = " << digis.view ()[denseIdx].adcm1 ()
291+ << " , adc = " << digis.view ()[denseIdx].adc ()
292+ << " , tot = " << digis.view ()[denseIdx].tot ()
293+ << " , toa = " << digis.view ()[denseIdx].toa ()
294+ << " , cm = " << digis.view ()[denseIdx].cm () << std::hex
295+ << " , flags = " << digis.view ()[denseIdx].flags ();
276296 }
277297 iword += iBit / 32 ;
278298 if (iBit % 32 != 0 ) {
@@ -281,7 +301,8 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
281301 }
282302 } else {
283303 // Passthrough ECON-D
284- LogDebug (" [HGCalUnpacker]" ) << " Passthrough ECON-D, erxMax=" << erxMax << " enabledErx= " << enabledErx;
304+ LogDebug (" [HGCalUnpacker]" ) << " Passthrough ECON-D, erxMax = " << erxMax << " , enabledErx = 0b"
305+ << std::bitset<12 >(enabledErx);
285306 for (uint32_t erxIdx = 0 ; erxIdx < erxMax; erxIdx++) {
286307 // check if the eRx is enabled
287308 if ((enabledErx >> erxIdx & 1 ) == 0 ) {
@@ -296,7 +317,7 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
296317 (econd_payload[iword] >> ECOND_FRAME::COMMONMODE1_POS) & ECOND_FRAME::COMMONMODE1_MASK;
297318 // check if the eRx sub-packet is empty (the "F" flag in the eRx sub-packet header)
298319 if (((econd_payload[iword] >> ECOND_FRAME::ERXFORMAT_POS) & ECOND_FRAME::ERXFORMAT_MASK) == 1 ) {
299- LogDebug (" [HGCalUnpacker]" ) << " eRx " << erxIdx << " is empty" ;
320+ LogDebug (" [HGCalUnpacker]" ) << " erxIdx = " << erxIdx << " is empty" ;
300321 iword += 1 ; // length of an empty eRx header (32 bits)
301322 continue ; // go to the next eRx
302323 }
@@ -344,8 +365,16 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
344365 digis.view ()[denseIdx].cm () = cmSum;
345366 digis.view ()[denseIdx].flags () = hgcal::DIGI_FLAG::Normal;
346367 }
347-
348368 iword += 1 ;
369+
370+ LogDebug (" [HGCalUnpacker]" ) << " channelIdx = " << channelIdx << " , denseIdx = " << denseIdx
371+ << " , tctp = " << uint16_t (digis.view ()[denseIdx].tctp ())
372+ << " , adcm1 = " << digis.view ()[denseIdx].adcm1 ()
373+ << " , adc = " << digis.view ()[denseIdx].adc ()
374+ << " , tot = " << digis.view ()[denseIdx].tot ()
375+ << " , toa = " << digis.view ()[denseIdx].toa ()
376+ << " , cm = " << digis.view ()[denseIdx].cm () << std::hex
377+ << " , flags = " << digis.view ()[denseIdx].flags ();
349378 }
350379 }
351380 }
@@ -371,9 +400,9 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
371400 if (ptr + 2 != trailer) {
372401 uint32_t ECONDdenseIdx = moduleIndexer.getIndexForModule (fedId, 0 );
373402 econdPacketInfo.view ()[ECONDdenseIdx].exception () = 6 ;
374- edm::LogWarning (" [HGCalUnpacker]" ) << " Error finding the S-link trailer, expected at" << std::dec
403+ edm::LogWarning (" [HGCalUnpacker]" ) << " Error finding the S-link trailer, expected at " << std::dec
375404 << (uint32_t )(trailer - header) << " /0x" << std::hex
376- << (uint32_t )(trailer - header) << " Unpacked trailer at" << std::dec
405+ << (uint32_t )(trailer - header) << " , unpacked trailer at " << std::dec
377406 << (uint32_t )(trailer - header + 2 ) << " /0x" << std::hex
378407 << (uint32_t )(ptr - header + 2 );
379408 return (0x1 << hgcaldigi::FEDUnpackingFlags::ErrorSLinkTrailer) |
0 commit comments