@@ -18,6 +18,7 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
1818 const HGCalMappingModuleIndexer& moduleIndexer,
1919 const HGCalConfiguration& config,
2020 hgcaldigi::HGCalDigiHost& digis,
21+ hgcaldigi::HGCalFEDPacketInfoHost& fedPacketInfo,
2122 hgcaldigi::HGCalECONDPacketInfoHost& econdPacketInfo,
2223 bool headerOnlyMode) {
2324 // ReadoutSequence object for this FED
@@ -51,17 +52,18 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
5152 const auto * ptr = header;
5253
5354 // read L1A number from the SLink header
54- int8_t L1ASLink = ((*(header + 1 ) >> BACKEND_FRAME::SLINK_GLOBAL_EVENTID_LSB_POS) &
55- ECOND_FRAME::L1A_MASK); // use mask in ECON-D to get lowest 6 bits
55+ uint64_t SLinkL1Amask = (uint64_t (BACKEND_FRAME::SLINK_GLOBAL_EVENTID_MSB_MASK) << 32 ) |
56+ uint64_t (BACKEND_FRAME::SLINK_GLOBAL_EVENTID_LSB_MASK);
57+ uint64_t L1ASLink = ((*(header + 1 ) >> BACKEND_FRAME::SLINK_GLOBAL_EVENTID_LSB_POS) & SLinkL1Amask);
5658 // read BX number and Orbit number from the SLink trailer
57- int16_t BXSLink = ((*(trailer - 1 ) >> BACKEND_FRAME::SLINK_BXID_POS) &
58- ECOND_FRAME::BX_MASK); // use mask in ECON-D to get lowest 12 bits
59- int8_t OrbitSLink = ((*(trailer - 2 ) >> (BACKEND_FRAME::SLINK_ORBID_POS + 32 )) &
60- ECOND_FRAME::ORBIT_MASK); // use mask in ECON-D to get lowest 3 bits
59+ uint16_t BXSLink = ((*(trailer - 1 ) >> BACKEND_FRAME::SLINK_BXID_POS) & BACKEND_FRAME::SLINK_BXID_MASK);
60+ uint32_t OrbitSLink = ((*(trailer - 2 ) >> (BACKEND_FRAME::SLINK_ORBID_POS + 32 )) & BACKEND_FRAME::SLINK_ORBID_MASK);
61+ fedPacketInfo.view ()[fedId].FEDL1A () = L1ASLink;
62+ fedPacketInfo.view ()[fedId].FEDBX () = BXSLink;
63+ fedPacketInfo.view ()[fedId].FEDOrbit () = OrbitSLink;
6164#ifdef EDM_ML_DEBUG
62- LogDebug (" [HGCalUnpacker]" ) << " Global BX number:" << std::dec << BXSLink;
63- LogDebug (" [HGCalUnpacker]" ) << " Global L1A number:" << std::dec << (int )L1ASLink;
64- LogDebug (" [HGCalUnpacker]" ) << " Global Orbit ID:" << std::dec << (int )OrbitSLink;
65+ LogDebug (" [HGCalUnpacker]" ) << " S-Link BX number:" << std::dec << BXSLink << " , L1A number:" << std::dec
66+ << (int )L1ASLink << " , Orbit ID:" << std::dec << (int )OrbitSLink;
6567
6668 for (unsigned iword = 0 ; ptr < trailer; ++iword) {
6769 LogDebug (" [HGCalUnpacker]" ) << std::setw (8 ) << iword << " : 0x" << std::hex << std::setfill (' 0' ) << std::setw (16 )
@@ -100,6 +102,7 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
100102 for (uint32_t captureblockIdx = 0 ; captureblockIdx < HGCalMappingModuleIndexer::maxCBperFED_ && ptr < trailer - 2 ;
101103 captureblockIdx++) {
102104 // check capture block header (64b)
105+
103106#ifdef EDM_ML_DEBUG
104107 LogDebug (" [HGCalUnpacker]" ) << " @" << std::setw (8 ) << std::distance (header, ptr) << " : 0x" << std::hex
105108 << std::setfill (' 0' ) << std::setw (16 ) << *ptr << std::dec;
@@ -141,6 +144,16 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
141144 << " from 0x" << cb_header << " ." ;
142145 return (0x1 << hgcaldigi::FEDUnpackingFlags::ErrorCaptureBlockHeader);
143146 }
147+ uint16_t BXCaptureBlock =
148+ ((cb_header >> (BACKEND_FRAME::CAPTUREBLOCK_BC_POS + 32 )) & BACKEND_FRAME::CAPTUREBLOCK_BC_MASK);
149+ uint8_t L1ACaptureBlock =
150+ ((cb_header >> (BACKEND_FRAME::CAPTUREBLOCK_EC_POS + 32 )) & BACKEND_FRAME::CAPTUREBLOCK_EC_MASK);
151+ uint8_t OrbitCaptureBlock =
152+ ((cb_header >> (BACKEND_FRAME::CAPTUREBLOCK_OC_POS + 32 )) & BACKEND_FRAME::CAPTUREBLOCK_OC_MASK);
153+ #ifdef EDM_ML_DEBUG
154+ LogDebug (" [HGCalUnpacker]" ) << " CB BX number:" << std::dec << BXCaptureBlock << " , L1A number:" << std::dec
155+ << (int )L1ACaptureBlock << " , Orbit number:" << std::dec << (int )OrbitCaptureBlock;
156+ #endif
144157 ++ptr;
145158
146159 // parse Capture Block body (ECON-Ds)
@@ -176,22 +189,18 @@ uint16_t HGCalUnpacker::parseFEDData(unsigned fedId,
176189 const auto econd_payload_length = ((econd_headers[0 ] >> ECOND_FRAME::PAYLOAD_POS) & ECOND_FRAME::PAYLOAD_MASK);
177190
178191 // read BX, L1A, and Orbit number from the ECON-D header
179- int16_t BXECOND = ((econd_headers[1 ] >> ECOND_FRAME::BX_POS) & ECOND_FRAME::BX_MASK);
180- int8_t L1AECOND = ((econd_headers[1 ] >> ECOND_FRAME::L1A_POS) & ECOND_FRAME::L1A_MASK);
181- int8_t OrbitECOND = ((econd_headers[1 ] >> ECOND_FRAME::ORBIT_POS) & ECOND_FRAME::ORBIT_MASK);
182- // save the difference between the SLink and ECON-D BX, L1A, and Orbit numbers(ECON-D - SLink)
183- econdPacketInfo.view ()[ECONDdenseIdx].BXdifference () = BXECOND - BXSLink;
184- econdPacketInfo.view ()[ECONDdenseIdx].L1Adifference () = L1AECOND - L1ASLink;
185- econdPacketInfo.view ()[ECONDdenseIdx].Orbitdifference () = OrbitECOND - OrbitSLink;
192+ uint16_t BXECOND = ((econd_headers[1 ] >> ECOND_FRAME::BX_POS) & ECOND_FRAME::BX_MASK);
193+ uint8_t L1AECOND = ((econd_headers[1 ] >> ECOND_FRAME::L1A_POS) & ECOND_FRAME::L1A_MASK);
194+ uint8_t OrbitECOND = ((econd_headers[1 ] >> ECOND_FRAME::ORBIT_POS) & ECOND_FRAME::ORBIT_MASK);
195+ econdPacketInfo.view ()[ECONDdenseIdx].BX () = BXECOND;
196+ econdPacketInfo.view ()[ECONDdenseIdx].L1A () = L1AECOND;
197+ econdPacketInfo.view ()[ECONDdenseIdx].Orbit () = OrbitECOND;
198+ econdPacketInfo.view ()[ECONDdenseIdx].CBBX () = BXCaptureBlock;
199+ econdPacketInfo.view ()[ECONDdenseIdx].CBL1A () = L1ACaptureBlock;
200+ econdPacketInfo.view ()[ECONDdenseIdx].CBOrbit () = OrbitCaptureBlock;
186201#ifdef EDM_ML_DEBUG
187- LogDebug (" [HGCalUnpacker]" ) << " SLink BX number:" << std::dec << BXSLink << " , ECON-D BX number:" << std::dec
188- << BXECOND << " , difference:" << econdPacketInfo.view ()[ECONDdenseIdx].BXdifference ();
189- LogDebug (" [HGCalUnpacker]" ) << " SLink L1A number:" << std::dec << (int )L1ASLink
190- << " , ECON-D L1A number:" << std::dec << (int )L1AECOND
191- << " , difference:" << (int )econdPacketInfo.view ()[ECONDdenseIdx].L1Adifference ();
192- LogDebug (" [HGCalUnpacker]" ) << " SLink Orbit number:" << std::dec << (int )OrbitSLink
193- << " , ECON-D Orbit number:" << std::dec << (int )OrbitECOND
194- << " , difference:" << (int )econdPacketInfo.view ()[ECONDdenseIdx].Orbitdifference ();
202+ LogDebug (" [HGCalUnpacker]" ) << " ECON-D BX number:" << std::dec << BXECOND << " , L1A number:" << std::dec
203+ << (int )L1AECOND << " , Orbit number:" << std::dec << (int )OrbitECOND;
195204#endif
196205 // sanity check
197206 if (((econd_headers[0 ] >> ECOND_FRAME::HEADER_POS) & ECOND_FRAME::HEADER_MASK) !=
0 commit comments