7 zsEnabled_(ps.getUntrackedParameter<
bool>(
"zsEnabled")),
8 fedIds_(ps.getParameter<
std::vector<
int>>(
"fedIds")),
9 slinkHeaderSize_(ps.getUntrackedParameter<
int>(
"lenSlinkHeader")),
10 slinkTrailerSize_(ps.getUntrackedParameter<
int>(
"lenSlinkTrailer")),
11 amc13HeaderSize_(ps.getUntrackedParameter<
int>(
"lenAMC13Header")),
12 amc13TrailerSize_(ps.getUntrackedParameter<
int>(
"lenAMC13Trailer")),
13 amcHeaderSize_(ps.getUntrackedParameter<
int>(
"lenAMCHeader")),
14 amcTrailerSize_(ps.getUntrackedParameter<
int>(
"lenAMCTrailer")),
15 newZsFlagMask_(ps.getUntrackedParameter<
int>(
"newZsFlagMask")),
16 zsFlagMask_(ps.getUntrackedParameter<
int>(
"zsFlagMask")),
17 dataInvFlagMask_(ps.getUntrackedParameter<
int>(
"dataInvFlagMask")),
18 maxFedReadoutSize_(ps.getUntrackedParameter<
int>(
"maxFEDReadoutSize")),
19 monitorDir_(ps.getUntrackedParameter<
std::
string>(
"monitorDir")),
20 verbose_(ps.getUntrackedParameter<
bool>(
"verbose"))
22 std::vector<int> zeroMask(6, 0);
28 if (ps.
exists(maskCapIdStr)) {
36 std::cout <<
"caption ID" <<
i <<
":" << std::endl;
37 for (
const auto& maskIt:
masks_.at(
i)) {
38 std::cout << std::hex << std::setw(8) << std::setfill(
'0') << maskIt <<
std::dec << std::endl;
50 desc.
add<std::vector<int>>(
"fedIds")->setComment(
"FED ids to analyze.");
51 desc.
addUntracked<
bool>(
"zsEnabled",
true)->setComment(
"MP7 zero suppression is enabled.");
52 desc.
addUntracked<
int>(
"lenSlinkHeader", 8)->setComment(
"Number of Slink header bytes.");
53 desc.
addUntracked<
int>(
"lenSlinkTrailer", 8)->setComment(
"Number of Slink trailer bytes.");
54 desc.
addUntracked<
int>(
"lenAMC13Header", 8)->setComment(
"Number of AMC13 header bytes.");
55 desc.
addUntracked<
int>(
"lenAMC13Trailer", 8)->setComment(
"Number of AMC13 trailer bytes.");
56 desc.
addUntracked<
int>(
"lenAMCHeader", 8)->setComment(
"Number of AMC header bytes.");
57 desc.
addUntracked<
int>(
"lenAMCTrailer", 0)->setComment(
"Number of AMC trailer bytes.");
58 desc.
addUntracked<
int>(
"zsFlagMask", 0x1)->setComment(
"Zero suppression flag mask.");
59 desc.
addUntracked<
int>(
"newZsFlagMask", 0x2)->setComment(
"Per-BX zero suppression flag mask.");
60 desc.
addUntracked<
int>(
"dataInvFlagMask", 0x1)->setComment(
"Data inversion flag mask.");
61 desc.
addUntracked<
int>(
"maxFEDReadoutSize", 10000)->setComment(
"Maximal FED readout size histogram x-axis value.");
63 desc.
addOptionalUntracked<std::vector<int>>(
"maskCapId"+std::to_string(
i))->setComment(
"ZS mask for caption id "+std::to_string(
i)+
".");
65 desc.
addUntracked<
std::string>(
"monitorDir",
"")->setComment(
"Target directory in the DQM file. Will be created if not existing.");
67 descriptions.
add(
"l1tMP7ZeroSupp", desc);
89 std::string summaryTitleText =
"Zero suppression validation summary";
92 sizeTitleText =
"FED readout ";
94 summaryTitleText = summaryTitleText+
", caption id "+std::to_string(
id);
95 sizeTitleText =
"cumulated caption id "+std::to_string(
id)+
" block ";
148 edm::LogError(
"L1TDQM") <<
"Cannot analyse: no FEDRawDataCollection found";
159 std::map<unsigned int, bool> evtGood;
161 for (
const auto &
id: definedMaskCapIds_) {
164 unsigned valid_count = 0;
168 unsigned int fedDataSize = l1tRcd.
size();
169 std::map<unsigned int, unsigned int> readoutSizeNoZSMap;
170 std::map<unsigned int, unsigned int> readoutSizeZSMap;
171 std::map<unsigned int, unsigned int> readoutSizeZSExpectedMap;
175 for (
const auto &
id: definedMaskCapIds_) {
176 readoutSizeNoZSMap[
id] = 0;
177 readoutSizeZSMap[
id] = 0;
178 readoutSizeZSExpectedMap[
id] = 0;
181 edm::LogInfo(
"L1TDQM") <<
"Found FEDRawDataCollection with ID " <<
fedId <<
" and size " << l1tRcd.
size();
184 if (l1tRcd.
size() > 0) {
185 edm::LogError(
"L1TDQM") <<
"Cannot analyse: invalid L1T raw data (size = " << l1tRcd.
size() <<
") for ID " <<
fedId <<
".";
192 const unsigned char *
data = l1tRcd.
data();
195 if (header.
check()) {
196 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();
203 if (trailer.
check()) {
204 edm::LogInfo(
"L1TDQM") <<
"Found SLink trailer:" <<
" Length " << trailer.
lenght() <<
" CRC " << trailer.
crc() <<
" Status " << trailer.
evtStatus() <<
" Throttling bits " << trailer.
ttsBits();
216 edm::LogError(
"L1TDQM") <<
"Could not extract AMC13 Packet.";
224 auto payload64 =
amc.data();
225 auto start = (
const uint32_t*) payload64.get();
233 std::unique_ptr<l1t::Block>
block;
234 while ((block = payload->getBlock()) !=
nullptr) {
236 std::cout <<
">>> check zero suppression for block <<<" << std::endl
237 <<
"hdr: " << std::hex << std::setw(8) << std::setfill(
'0') << block->header().raw() <<
std::dec 238 <<
" (ID " << block->header().getID() <<
", size " << block->header().getSize()
239 <<
", CapID 0x" << std::hex << std::setw(2) << std::setfill(
'0') << block->header().getCapID()
240 <<
", flags 0x" << std::hex << std::setw(2) << std::setfill(
'0') << block->header().getFlags()
242 for (
const auto& word: block->payload()) {
243 std::cout <<
"data: " << std::hex << std::setw(8) << std::setfill(
'0') << word <<
std::dec << std::endl;
247 unsigned int blockCapId = block->header().getCapID();
248 unsigned int blockSize = block->header().getSize() * 4;
249 unsigned int blockHeaderSize =
sizeof(block->header().raw());
250 unsigned int blockHeaderFlags = block->header().getFlags();
252 bool blockZsFlagSet = newZsFlagSet ?
true : ((blockHeaderFlags &
zsFlagMask_) != 0);
253 bool dataInvertFlagSet = newZsFlagSet && ((blockHeaderFlags &
dataInvFlagMask_) != 0);
258 bool capIdDefined =
false;
271 auto totalBlockSize = blockHeaderSize;
273 totalBlockSize += blockSize;
276 auto bxBlocks = block->getBxBlocks(6, newZsFlagSet);
279 bool allToSuppress =
true;
280 for (
const auto& bxBlock: bxBlocks) {
281 bool toSuppress =
false;
282 bool bxZsFlagSet = ((bxBlock.header().getFlags() &
zsFlagMask_) != 0);
285 unsigned int wordcounter = 0;
286 unsigned int wordsum = 0;
287 for (
const auto& word: bxBlock.payload()) {
288 if (dataInvertFlagSet) {
289 wordsum +=
masks_[blockCapId].at(wordcounter%6) & (~word);
291 wordsum +=
masks_[blockCapId].at(wordcounter%6) & word;
294 std::cout <<
"word: " << std::hex << std::setw(8) << std::setfill(
'0') << word <<
std::dec 295 <<
", maskword" << wordcounter%6 <<
": " << std::hex << std::setw(8) << std::setfill(
'0')
296 <<
masks_[blockCapId].at(wordcounter%6) <<
std::dec <<
", wordsum: " << wordsum << std::endl;
307 std::cout <<
"wordsum == 0: this BX block should be zero suppressed" << std::endl;
311 allToSuppress = allToSuppress && toSuppress;
316 blockZsFlagSet = blockZsFlagSet && bxZsFlagSet;
330 unsigned int totalBxBlockSize = bxBlock.getSize() * 4 +
sizeof(bxBlock.header().raw());
332 if (toSuppress && bxZsFlagSet) {
338 }
else if (!toSuppress && !bxZsFlagSet) {
344 }
else if (!toSuppress && bxZsFlagSet) {
346 totalBlockSize += totalBxBlockSize;
357 evtGood[blockCapId] =
false;
361 totalBlockSize += totalBxBlockSize;
372 evtGood[blockCapId] =
false;
378 readoutSizeNoZSMap[
maxMasks_] += totalBlockSize;
380 readoutSizeNoZSMap[blockCapId] += totalBlockSize;
384 if (allToSuppress && blockZsFlagSet) {
390 }
else if (!allToSuppress && !blockZsFlagSet) {
393 readoutSizeZSMap[
maxMasks_] += totalBlockSize;
394 readoutSizeZSExpectedMap[
maxMasks_] += totalBlockSize;
397 readoutSizeZSMap[blockCapId] += totalBlockSize;
398 readoutSizeZSExpectedMap[blockCapId] += totalBlockSize;
400 }
else if (!allToSuppress && blockZsFlagSet) {
406 readoutSizeZSExpectedMap[
maxMasks_] += totalBlockSize;
413 readoutSizeZSExpectedMap[blockCapId] += totalBlockSize;
414 evtGood[blockCapId] =
false;
422 readoutSizeZSMap[
maxMasks_] += totalBlockSize;
429 readoutSizeZSMap[blockCapId] += totalBlockSize;
430 evtGood[blockCapId] =
false;
438 for (
const auto &
id: definedMaskCapIds_) {
451 for (
const auto &
id: definedMaskCapIds_) {
std::vector< amc::Packet > payload() const
std::map< unsigned int, MonitorElement * > readoutSizeZSExpectedMap_
T getUntrackedParameter(std::string const &, T const &) const
std::map< unsigned int, MonitorElement * > zeroSuppValMap_
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
edm::EDGetTokenT< FEDRawDataCollection > fedDataToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::map< unsigned int, MonitorElement * > readoutSizeNoZSMap_
int evtStatus()
Event fragment status information.
L1TMP7ZeroSupp(const edm::ParameterSet &ps)
bool exists(std::string const ¶meterName) const
checks if a parameter exists
void analyze(const edm::Event &e, const edm::EventSetup &c) override
size_t size() const
Lenght of the data buffer in bytes.
void bookCapIdHistograms(DQMStore::IBooker &ibooker, const unsigned int &id)
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_
MonitorElement * book1D(Args &&...args)
std::vector< std::vector< int > > masks_
static const unsigned int maxMasks_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
int ttsBits()
Current value of the Trigger Throttling System bitsAQ).
void setCurrentFolder(const std::string &fullpath)
unsigned long long uint64_t
int lenght()
The length of the event fragment counted in 64-bit words including header and trailer.
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)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
~L1TMP7ZeroSupp() override
void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &) override
char data[epos_bytes_allocation]
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
int crc()
Cyclic Redundancy Code of the event fragment including header and trailer.
std::vector< int > fedIds_
ParameterDescriptionBase * addOptionalUntracked(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void bookHistograms(DQMStore::IBooker &, const edm::Run &, const edm::EventSetup &) override
void dqmBeginRun(const edm::Run &r, const edm::EventSetup &c) override
std::map< unsigned int, MonitorElement * > readoutSizeZSMap_
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)