Skip to content

Commit c54dcf4

Browse files
committed
Get BX,Orb,L1A from S-Link, CB, ECON-D headers
1 parent f8a06f4 commit c54dcf4

File tree

6 files changed

+55
-33
lines changed

6 files changed

+55
-33
lines changed

DataFormats/HGCalDigi/interface/HGCalECONDPacketInfoSoA.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,14 @@ namespace hgcaldigi {
7474
// If exception found before ECON-D, this would be 0
7575
// Otherwise the payload length of the ECON-D
7676
SOA_COLUMN(uint16_t, payloadLength),
77-
// Diffrence between the BX,L1A,Orbit number in the S-Link header and the ECON-D header
78-
SOA_COLUMN(int16_t, BXdifference),
79-
SOA_COLUMN(int8_t, L1Adifference),
80-
SOA_COLUMN(int8_t, Orbitdifference),
77+
// BX,L1A,Orbit number of the ECON-D
78+
SOA_COLUMN(uint16_t, BX),
79+
SOA_COLUMN(uint8_t, L1A),
80+
SOA_COLUMN(uint8_t, Orbit),
81+
// BX,L1A,Orbit number of the Capture Block
82+
SOA_COLUMN(uint16_t, CBBX),
83+
SOA_COLUMN(uint8_t, CBL1A),
84+
SOA_COLUMN(uint8_t, CBOrbit),
8185
// Common modes
8286
SOA_EIGEN_COLUMN(Matrix, cm))
8387
using HGCalECONDPacketInfoSoA = HGCalECONDPacketInfoSoALayout<>;

DataFormats/HGCalDigi/interface/HGCalFEDPacketInfoSoA.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@ namespace hgcaldigi {
5858
// bit 1 : unable to unpack data
5959
// bit 2 : at least one capture block has active flags
6060
SOA_COLUMN(uint16_t, FEDUnpackingFlag),
61-
SOA_COLUMN(uint32_t, FEDPayload)) //number of words (char)
61+
SOA_COLUMN(uint32_t, FEDPayload), //number of words (char)
62+
// BX,L1A,Orbit number of the SLink
63+
SOA_COLUMN(uint16_t, FEDBX),
64+
SOA_COLUMN(uint64_t, FEDL1A),
65+
SOA_COLUMN(uint32_t, FEDOrbit))
6266

6367
using HGCalFEDPacketInfoSoA = HGCalFEDPacketInfoSoALayout<>;
6468
} // namespace hgcaldigi

DataFormats/HGCalDigi/interface/HGCalRawDataDefinitions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ namespace hgcal {
3232

3333
namespace BACKEND_FRAME {
3434
constexpr uint32_t CAPTUREBLOCK_RESERVED_MASK = 0x7f, CAPTUREBLOCK_RESERVED_POS = 25, CAPTUREBLOCK_BC_MASK = 0xfff,
35-
CAPTUREBLOCK_BC_POS = 13, CAPTUREBLOCK_EC_MASK = 0x7f, CAPTUREBLOCK_EC_POS = 7,
35+
CAPTUREBLOCK_BC_POS = 13, CAPTUREBLOCK_EC_MASK = 0x3f, CAPTUREBLOCK_EC_POS = 7,
3636
CAPTUREBLOCK_OC_MASK = 0x7, CAPTUREBLOCK_OC_POS = 4, SLINK_BOE_MASK = 0xff, SLINK_BOE_POS = 24,
3737
SLINK_V_MASK = 0xf, SLINK_V_POS = 19, SLINK_R8_MASK = 0xff, SLINK_R8_POS = 11,
3838
SLINK_GLOBAL_EVENTID_MSB_MASK = 0xfff, SLINK_GLOBAL_EVENTID_MSB_POS = 0,

EventFilter/HGCalRawToDigi/interface/HGCalUnpacker.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "DataFormats/HGCalDigi/interface/HGCalRawDataDefinitions.h"
1515
#include "DataFormats/FEDRawData/interface/FEDRawData.h"
1616
#include "DataFormats/HGCalDigi/interface/HGCalDigiHost.h"
17+
#include "DataFormats/HGCalDigi/interface/HGCalFEDPacketInfoHost.h"
1718
#include "DataFormats/HGCalDigi/interface/HGCalECONDPacketInfoHost.h"
1819
#include "CondFormats/HGCalObjects/interface/HGCalMappingModuleIndexer.h"
1920
#include "CondFormats/HGCalObjects/interface/HGCalConfiguration.h"
@@ -37,6 +38,7 @@ class HGCalUnpacker {
3738
const HGCalMappingModuleIndexer& moduleIndexer,
3839
const HGCalConfiguration& config,
3940
hgcaldigi::HGCalDigiHost& digis,
41+
hgcaldigi::HGCalFEDPacketInfoHost& fedPacketInfo,
4042
hgcaldigi::HGCalECONDPacketInfoHost& econdPacketInfo,
4143
bool headerOnlyMode = false);
4244

EventFilter/HGCalRawToDigi/plugins/HGCalRawToDigi.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class HGCalRawToDigi : public edm::stream::EDProducer<> {
3333
const HGCalMappingModuleIndexer& moduleIndexer,
3434
const HGCalConfiguration& config,
3535
hgcaldigi::HGCalDigiHost& digis,
36+
hgcaldigi::HGCalFEDPacketInfoHost& fedPacketInfo,
3637
hgcaldigi::HGCalECONDPacketInfoHost& econdPacketInfo);
3738
static void fillDescriptions(edm::ConfigurationDescriptions&);
3839

@@ -109,7 +110,8 @@ void HGCalRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
109110
if (fed_data.size() == 0)
110111
continue;
111112
fedPacketInfo.view()[fedId].FEDUnpackingFlag() =
112-
callUnpacker(fedId, fed_data, moduleIndexer, config, digis, econdPacketInfo);
113+
callUnpacker(fedId, fed_data, moduleIndexer, config, digis, fedPacketInfo, econdPacketInfo);
114+
113115
}
114116
}
115117
//parallel unpacking calls
@@ -121,7 +123,7 @@ void HGCalRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup)
121123
if (fed_data.size() == 0)
122124
return;
123125
fedPacketInfo.view()[fedId].FEDUnpackingFlag() =
124-
callUnpacker(fedId, fed_data, moduleIndexer, config, digis, econdPacketInfo);
126+
callUnpacker(fedId, fed_data, moduleIndexer, config, digis, fedPacketInfo, econdPacketInfo);
125127
return;
126128
});
127129
});
@@ -139,9 +141,10 @@ uint16_t HGCalRawToDigi::callUnpacker(unsigned fedId,
139141
const HGCalMappingModuleIndexer& moduleIndexer,
140142
const HGCalConfiguration& config,
141143
hgcaldigi::HGCalDigiHost& digis,
144+
hgcaldigi::HGCalFEDPacketInfoHost& fedPacketInfo,
142145
hgcaldigi::HGCalECONDPacketInfoHost& econdPacketInfo) {
143146
uint16_t status =
144-
unpacker_.parseFEDData(fedId, fed_data, moduleIndexer, config, digis, econdPacketInfo, headersOnly_);
147+
unpacker_.parseFEDData(fedId, fed_data, moduleIndexer, config, digis, fedPacketInfo, econdPacketInfo, headersOnly_);
145148
return status;
146149
}
147150

EventFilter/HGCalRawToDigi/src/HGCalUnpacker.cc

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)