CMS 3D CMS Logo

L1TMP7ZeroSupp.cc
Go to the documentation of this file.
2 
3 const unsigned int L1TMP7ZeroSupp::maxMasks_ = 16;
4 
6  : fedDataToken_(consumes<FEDRawDataCollection>(ps.getParameter<edm::InputTag>("rawData"))),
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  checkOnlyCapIdsWithMasks_(ps.getUntrackedParameter<bool>("checkOnlyCapIdsWithMasks")),
20  monitorDir_(ps.getUntrackedParameter<std::string>("monitorDir")),
21  verbose_(ps.getUntrackedParameter<bool>("verbose"))
22 {
23  std::vector<int> onesMask(6, 0xffffffff);
24  masks_.reserve(maxMasks_);
25  for (unsigned int i = 0; i < maxMasks_; ++i) {
26  std::string maskCapIdStr{"maskCapId"+std::to_string(i)};
27  masks_.push_back(ps.getUntrackedParameter<std::vector<int>>(maskCapIdStr, onesMask));
28  // which masks are defined?
29  if (ps.exists(maskCapIdStr)) {
30  definedMaskCapIds_.push_back(i);
31  }
32  }
33  if (verbose_) {
34  // check masks
35  std::cout << "masks" << std::endl;
36  for (unsigned int i = 0; i < maxMasks_; ++i) {
37  std::cout << "caption ID" << i << ":" << std::endl;
38  for (const auto& maskIt: masks_.at(i)) {
39  std::cout << std::hex << std::setw(8) << std::setfill('0') << maskIt << std::dec << std::endl;
40  }
41  }
42  std::cout << "----------" << std::endl;
43  }
44 }
45 
47 
50  desc.add<edm::InputTag>("rawData");
51  desc.add<std::vector<int>>("fedIds")->setComment("FED ids to analyze.");
52  desc.addUntracked<bool>("zsEnabled", true)->setComment("MP7 zero suppression is enabled.");
53  desc.addUntracked<int>("lenSlinkHeader", 8)->setComment("Number of Slink header bytes.");
54  desc.addUntracked<int>("lenSlinkTrailer", 8)->setComment("Number of Slink trailer bytes.");
55  desc.addUntracked<int>("lenAMC13Header", 8)->setComment("Number of AMC13 header bytes.");
56  desc.addUntracked<int>("lenAMC13Trailer", 8)->setComment("Number of AMC13 trailer bytes.");
57  desc.addUntracked<int>("lenAMCHeader", 8)->setComment("Number of AMC header bytes.");
58  desc.addUntracked<int>("lenAMCTrailer", 0)->setComment("Number of AMC trailer bytes.");
59  desc.addUntracked<int>("zsFlagMask", 0x1)->setComment("Zero suppression flag mask.");
60  desc.addUntracked<int>("newZsFlagMask", 0x2)->setComment("Per-BX zero suppression flag mask.");
61  desc.addUntracked<int>("dataInvFlagMask", 0x1)->setComment("Data inversion flag mask.");
62  desc.addUntracked<int>("maxFEDReadoutSize", 10000)->setComment("Maximal FED readout size histogram x-axis value.");
63  for (unsigned int i = 0; i < maxMasks_; ++i) {
64  desc.addOptionalUntracked<std::vector<int>>("maskCapId"+std::to_string(i))->setComment("ZS mask for caption id "+std::to_string(i)+".");
65  }
66  desc.addUntracked<bool>("checkOnlyCapIdsWithMasks", true)->setComment("Check only blocks that have a CapId for which a mask is defined.");
67  desc.addUntracked<std::string>("monitorDir", "")->setComment("Target directory in the DQM file. Will be created if not existing.");
68  desc.addUntracked<bool>("verbose", false);
69  descriptions.add("l1tMP7ZeroSupp", desc);
70 }
71 
73 
74 
76  // overall summary
79  capIds_ = ibooker.book1D("capIds", "Caption ids found in data", maxMasks_, 0, maxMasks_);
80  capIds_->setAxisTitle("caption id", 1);
81 
82  // per caption id subdirectories
83  for (const auto &id: definedMaskCapIds_) {
84  ibooker.setCurrentFolder(monitorDir_+"/CapId"+std::to_string(id));
85  bookCapIdHistograms(ibooker, id);
86  }
87 }
88 
89 void L1TMP7ZeroSupp::bookCapIdHistograms(DQMStore::IBooker& ibooker, const unsigned int& id) {
90  std::string summaryTitleText = "Zero suppression validation summary";
91  std::string sizeTitleText;
92  if (id == maxMasks_) {
93  sizeTitleText = "FED readout ";
94  } else {
95  summaryTitleText = summaryTitleText+", caption id "+std::to_string(id);
96  sizeTitleText = "cumulated caption id "+std::to_string(id)+" block ";
97  }
98 
99  zeroSuppValMap_[id] = ibooker.book1D("zeroSuppVal", summaryTitleText, NBINLABELS, 0, NBINLABELS);
100  zeroSuppValMap_[id]->setAxisTitle("ZS status", 1);
101  zeroSuppValMap_[id]->setBinLabel(EVTS+1, "events", 1);
102  zeroSuppValMap_[id]->setBinLabel(EVTSGOOD+1, "good events", 1);
103  zeroSuppValMap_[id]->setBinLabel(EVTSBAD+1, "bad events", 1);
104  zeroSuppValMap_[id]->setBinLabel(BLOCKS+1, "blocks", 1);
105  zeroSuppValMap_[id]->setBinLabel(ZSBLKSGOOD+1, "good blocks", 1);
106  zeroSuppValMap_[id]->setBinLabel(ZSBLKSBAD+1, "bad blocks", 1);
107  zeroSuppValMap_[id]->setBinLabel(ZSBLKSBADFALSEPOS+1, "false pos.", 1);
108  zeroSuppValMap_[id]->setBinLabel(ZSBLKSBADFALSENEG+1, "false neg.", 1);
109  zeroSuppValMap_[id]->setBinLabel(BXBLOCKS+1, "BX blocks", 1);
110  zeroSuppValMap_[id]->setBinLabel(ZSBXBLKSGOOD+1, "good BX blocks", 1);
111  zeroSuppValMap_[id]->setBinLabel(ZSBXBLKSBAD+1, "bad BX blocks", 1);
112  zeroSuppValMap_[id]->setBinLabel(ZSBXBLKSBADFALSEPOS+1, "BX false pos.", 1);
113  zeroSuppValMap_[id]->setBinLabel(ZSBXBLKSBADFALSENEG+1, "BX false neg.", 1);
114 
115  errorSummaryNumMap_[id] = ibooker.book1D("errorSummaryNum", summaryTitleText, RNBINLABELS, 0, RNBINLABELS);
116  errorSummaryNumMap_[id]->setBinLabel(REVTS+1, "bad events", 1);
117  errorSummaryNumMap_[id]->setBinLabel(RBLKS+1, "bad blocks", 1);
118  errorSummaryNumMap_[id]->setBinLabel(RBLKSFALSEPOS+1, "false pos.", 1);
119  errorSummaryNumMap_[id]->setBinLabel(RBLKSFALSENEG+1, "false neg.", 1);
120  errorSummaryNumMap_[id]->setBinLabel(RBXBLKS+1, "bad BX blocks", 1);
121  errorSummaryNumMap_[id]->setBinLabel(RBXBLKSFALSEPOS+1, "BX false pos.", 1);
122  errorSummaryNumMap_[id]->setBinLabel(RBXBLKSFALSENEG+1, "BX false neg.", 1);
123 
124  errorSummaryDenMap_[id] = ibooker.book1D("errorSummaryDen", "denominators", RNBINLABELS, 0, RNBINLABELS);
125  errorSummaryDenMap_[id]->setBinLabel(REVTS+1, "# events", 1);
126  errorSummaryDenMap_[id]->setBinLabel(RBLKS+1, "# blocks", 1);
127  errorSummaryDenMap_[id]->setBinLabel(RBLKSFALSEPOS+1, "# blocks", 1);
128  errorSummaryDenMap_[id]->setBinLabel(RBLKSFALSENEG+1, "# blocks", 1);
129  errorSummaryDenMap_[id]->setBinLabel(RBXBLKS+1, "# BX blocks", 1);
130  errorSummaryDenMap_[id]->setBinLabel(RBXBLKSFALSEPOS+1, "# BX blocks", 1);
131  errorSummaryDenMap_[id]->setBinLabel(RBXBLKSFALSENEG+1, "# BX blocks", 1);
132  // Setting canExtend to false is needed to get the correct behaviour when running multithreaded.
133  // Otherwise, when merging the histgrams of the threads, TH1::Merge sums bins that have the same label in one bin.
134  // This needs to come after the calls to setBinLabel.
135  errorSummaryDenMap_[id]->getTH1F()->GetXaxis()->SetCanExtend(false);
136 
137  readoutSizeNoZSMap_[id] = ibooker.book1D("readoutSize", sizeTitleText + "size", 100, 0, maxFedReadoutSize_);
138  readoutSizeNoZSMap_[id]->setAxisTitle("size (byte)", 1);
139  readoutSizeZSMap_[id] = ibooker.book1D("readoutSizeZS", sizeTitleText + "size with zero suppression", 100, 0, maxFedReadoutSize_);
140  readoutSizeZSMap_[id]->setAxisTitle("size (byte)", 1);
141  readoutSizeZSExpectedMap_[id] = ibooker.book1D("readoutSizeZSExpected", "Expected " + sizeTitleText + "size with zero suppression", 100, 0, maxFedReadoutSize_);
142  readoutSizeZSExpectedMap_[id]->setAxisTitle("size (byte)", 1);
143 }
144 
146 
147  if (verbose_) edm::LogInfo("L1TDQM") << "L1TMP7ZeroSupp: analyze..." << std::endl;
148 
150  e.getByToken(fedDataToken_, feds);
151 
152  if (!feds.isValid()) {
153  edm::LogError("L1TDQM") << "Cannot analyse: no FEDRawDataCollection found";
154  return;
155  }
156 
159  for (const auto &id: definedMaskCapIds_) {
160  zeroSuppValMap_[id]->Fill(EVTS);
161  errorSummaryDenMap_[id]->Fill(REVTS);
162  }
163 
164  std::map<unsigned int, bool> evtGood;
165  evtGood[maxMasks_] = true;
166  for (const auto &id: definedMaskCapIds_) {
167  evtGood[id] = true;
168  }
169  unsigned valid_count = 0;
170  for (const auto& fedId: fedIds_) {
171  const FEDRawData& l1tRcd = feds->FEDData(fedId);
172 
173  unsigned int fedDataSize = l1tRcd.size();
174  std::map<unsigned int, unsigned int> readoutSizeNoZSMap;
175  std::map<unsigned int, unsigned int> readoutSizeZSMap;
176  std::map<unsigned int, unsigned int> readoutSizeZSExpectedMap;
177  readoutSizeNoZSMap[maxMasks_] = 0;
178  readoutSizeZSMap[maxMasks_] = 0;
179  readoutSizeZSExpectedMap[maxMasks_] = 0;
180  for (const auto &id: definedMaskCapIds_) {
181  readoutSizeNoZSMap[id] = 0;
182  readoutSizeZSMap[id] = 0;
183  readoutSizeZSExpectedMap[id] = 0;
184  }
185 
186  edm::LogInfo("L1TDQM") << "Found FEDRawDataCollection with ID " << fedId << " and size " << l1tRcd.size();
187 
189  if (l1tRcd.size() > 0) {
190  edm::LogError("L1TDQM") << "Cannot analyse: invalid L1T raw data (size = " << l1tRcd.size() << ") for ID " << fedId << ".";
191  }
192  continue;
193  } else {
194  valid_count++;
195  }
196 
197  const unsigned char *data = l1tRcd.data();
198  FEDHeader header(data);
199 
200  if (header.check()) {
201  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();
202  } else {
203  edm::LogWarning("L1TDQM") << "Did not find a SLink header!";
204  }
205 
206  FEDTrailer trailer(data + (l1tRcd.size() - slinkTrailerSize_));
207 
208  if (trailer.check()) {
209  edm::LogInfo("L1TDQM") << "Found SLink trailer:" << " Length " << trailer.fragmentLength() << " CRC " << trailer.crc() << " Status " << trailer.evtStatus() << " Throttling bits " << trailer.ttsBits();
210  } else {
211  edm::LogWarning("L1TDQM") << "Did not find a SLink trailer!";
212  }
213 
214  amc13::Packet packet;
215  if (!packet.parse(
216  (const uint64_t*) data,
217  (const uint64_t*) (data + slinkHeaderSize_),
218  (l1tRcd.size() - slinkHeaderSize_ - slinkTrailerSize_) / 8,
219  header.lvl1ID(),
220  header.bxID())) {
221  edm::LogError("L1TDQM") << "Could not extract AMC13 Packet.";
222  return;
223  }
224 
225  for (auto& amc: packet.payload()) {
226  if (amc.size() == 0)
227  continue;
228 
229  auto payload64 = amc.data();
230  auto start = (const uint32_t*) payload64.get();
231  // Want to have payload size in 32 bit words, but AMC measures
232  // it in 64 bit words -> factor 2.
233  const uint32_t * end = start + (amc.size() * 2);
234 
235  auto payload = std::make_unique<l1t::MP7Payload>(start, end, false);
236 
237  // getBlock() returns a non-null unique_ptr on success
238  std::unique_ptr<l1t::Block> block;
239  while ((block = payload->getBlock()) != nullptr) {
240  if (verbose_) {
241  std::cout << ">>> check zero suppression for block <<<" << std::endl
242  << "hdr: " << std::hex << std::setw(8) << std::setfill('0') << block->header().raw() << std::dec
243  << " (ID " << block->header().getID() << ", size " << block->header().getSize()
244  << ", CapID 0x" << std::hex << std::setw(2) << std::setfill('0') << block->header().getCapID()
245  << ", flags 0x" << std::hex << std::setw(2) << std::setfill('0') << block->header().getFlags()
246  << ")" << std::dec << std::endl;
247  for (const auto& word: block->payload()) {
248  std::cout << "data: " << std::hex << std::setw(8) << std::setfill('0') << word << std::dec << std::endl;
249  }
250  }
251 
252  unsigned int blockCapId = block->header().getCapID();
253  unsigned int blockSize = block->header().getSize() * 4; // times 4 to get the size in byte
254  unsigned int blockHeaderSize = sizeof(block->header().raw());
255  unsigned int blockHeaderFlags = block->header().getFlags();
256  bool newZsFlagSet = ((blockHeaderFlags & newZsFlagMask_) != 0); // use the per-BX ZS
257  bool blockZsFlagSet = newZsFlagSet ? true : ((blockHeaderFlags & zsFlagMask_) != 0); // ZS validation flag for whole block
258  bool dataInvertFlagSet = newZsFlagSet && ((blockHeaderFlags & dataInvFlagMask_) != 0); // invert the data before applying the mask
259 
260  capIds_->Fill(blockCapId);
261 
262  bool capIdDefined = false;
263  if (zeroSuppValMap_.find(blockCapId) != zeroSuppValMap_.end()) {
264  capIdDefined = true;
265  }
266 
267  // Only check blocks with a CapId that has a defined ZS mask.
268  if (checkOnlyCapIdsWithMasks_ and not capIdDefined) {
269  continue;
270  }
271 
272  // fill the denominator histograms
277  if (capIdDefined) {
278  zeroSuppValMap_[blockCapId]->Fill(BLOCKS);
279  errorSummaryDenMap_[blockCapId]->Fill(RBLKS);
280  errorSummaryDenMap_[blockCapId]->Fill(RBLKSFALSEPOS);
281  errorSummaryDenMap_[blockCapId]->Fill(RBLKSFALSENEG);
282  }
283 
284  auto totalBlockSize = blockHeaderSize;
285  if (!newZsFlagSet) {
286  totalBlockSize += blockSize;
287  }
288  auto totalBlockSizeExpected = totalBlockSize;
289  auto totalBlockSizeNoZS = blockHeaderSize + blockSize;
290 
291  auto bxBlocks = block->getBxBlocks(6, newZsFlagSet); // 6 32 bit MP7 payload words per BX
292 
293  // check all BX blocks
294  bool allToSuppress = true;
295  for (const auto& bxBlock: bxBlocks) {
296  bool toSuppress = false;
297  bool bxZsFlagSet = ((bxBlock.header().getFlags() & zsFlagMask_) != 0); // ZS validation flag
298 
299  // check if this bxblock should be suppressed
300  unsigned int wordcounter = 0;
301  unsigned int wordsum = 0;
302  for (const auto& word: bxBlock.payload()) {
303  if (dataInvertFlagSet) {
304  wordsum += masks_[blockCapId].at(wordcounter%6) & (~word);
305  } else {
306  wordsum += masks_[blockCapId].at(wordcounter%6) & word;
307  }
308  if (verbose_) {
309  std::cout << "word: " << std::hex << std::setw(8) << std::setfill('0') << word << std::dec
310  << ", maskword" << wordcounter%6 << ": " << std::hex << std::setw(8) << std::setfill('0')
311  << masks_[blockCapId].at(wordcounter%6) << std::dec << ", wordsum: " << wordsum << std::endl;
312  }
313  if (wordsum > 0) {
314  if (verbose_) {
315  std::cout << "wordsum not 0: this BX block should be kept" << std::endl;
316  }
317  break;
318  }
319  ++wordcounter;
320  }
321  // the sum of payload words must be 0 for correct ZS
322  if (wordsum == 0 && zsEnabled_) {
323  toSuppress = true;
324  if (verbose_) {
325  std::cout << "wordsum == 0: this BX block should be zero suppressed" << std::endl;
326  }
327  }
328  // update the overall block status
329  allToSuppress = allToSuppress && toSuppress;
330 
331  // only fill the BX related things for the per-BX ZS
332  if (newZsFlagSet) {
333  // the ZS flag of the block is the AND of all BX block ZS flags
334  blockZsFlagSet = blockZsFlagSet && bxZsFlagSet;
335 
336  // fill the BX related bins of the denominator histogram
341  if (capIdDefined) {
342  zeroSuppValMap_[blockCapId]->Fill(BXBLOCKS);
343  errorSummaryDenMap_[blockCapId]->Fill(RBXBLKS);
344  errorSummaryDenMap_[blockCapId]->Fill(RBXBLKSFALSEPOS);
345  errorSummaryDenMap_[blockCapId]->Fill(RBXBLKSFALSENEG);
346  }
347 
348  unsigned int totalBxBlockSize = bxBlock.getSize() * 4 + sizeof(bxBlock.header().raw()); // times 4 to get the size in byte
349  // check if zero suppression flag agrees for the BX block
350  if (toSuppress && bxZsFlagSet) {
351  if (verbose_) std::cout << "GOOD BX block with ZS flag true" << std::endl;
353  if (capIdDefined) {
354  zeroSuppValMap_[blockCapId]->Fill(ZSBXBLKSGOOD);
355  }
356  } else if (!toSuppress && !bxZsFlagSet) {
357  if (verbose_) std::cout << "GOOD BX block with ZS flag false" << std::endl;
358  totalBlockSize += totalBxBlockSize;
359  totalBlockSizeExpected += totalBxBlockSize;
361  if (capIdDefined) {
362  zeroSuppValMap_[blockCapId]->Fill(ZSBXBLKSGOOD);
363  }
364  } else if (!toSuppress && bxZsFlagSet) {
365  if (verbose_) std::cout << "BAD BX block with ZS flag true" << std::endl;
366  totalBlockSizeExpected += totalBxBlockSize;
371  evtGood[maxMasks_] = false;
372  if (capIdDefined) {
373  zeroSuppValMap_[blockCapId]->Fill(ZSBXBLKSBAD);
374  zeroSuppValMap_[blockCapId]->Fill(ZSBXBLKSBADFALSEPOS);
375  errorSummaryNumMap_[blockCapId]->Fill(RBXBLKS);
376  errorSummaryNumMap_[blockCapId]->Fill(RBXBLKSFALSEPOS);
377  evtGood[blockCapId] = false;
378  }
379  } else {
380  if (verbose_) std::cout << "BAD BX block with ZS flag false" << std::endl;
381  totalBlockSize += totalBxBlockSize;
386  evtGood[maxMasks_] = false;
387  if (capIdDefined) {
388  zeroSuppValMap_[blockCapId]->Fill(ZSBXBLKSBAD);
389  zeroSuppValMap_[blockCapId]->Fill(ZSBXBLKSBADFALSENEG);
390  errorSummaryNumMap_[blockCapId]->Fill(RBXBLKS);
391  errorSummaryNumMap_[blockCapId]->Fill(RBXBLKSFALSENEG);
392  evtGood[blockCapId] = false;
393  }
394  }
395  }
396  }
397 
398  readoutSizeNoZSMap[maxMasks_] += totalBlockSizeNoZS;
399  if (capIdDefined) {
400  readoutSizeNoZSMap[blockCapId] += totalBlockSizeNoZS;
401  }
402 
403  // check if zero suppression flag agrees for the whole block
404  if (allToSuppress && blockZsFlagSet) {
405  if (verbose_) std::cout << "GOOD block with ZS flag true" << std::endl;
407  if (capIdDefined) {
408  zeroSuppValMap_[blockCapId]->Fill(ZSBLKSGOOD);
409  }
410  } else if (!allToSuppress && !blockZsFlagSet) {
411  if (verbose_) std::cout << "GOOD block with ZS flag false" << std::endl;
413  readoutSizeZSMap[maxMasks_] += totalBlockSize;
414  readoutSizeZSExpectedMap[maxMasks_] += totalBlockSizeExpected;
415  if (capIdDefined) {
416  zeroSuppValMap_[blockCapId]->Fill(ZSBLKSGOOD);
417  readoutSizeZSMap[blockCapId] += totalBlockSize;
418  readoutSizeZSExpectedMap[blockCapId] += totalBlockSizeExpected;
419  }
420  } else if (!allToSuppress && blockZsFlagSet) {
421  if (verbose_) std::cout << "BAD block with ZS flag true" << std::endl;
426  readoutSizeZSExpectedMap[maxMasks_] += totalBlockSizeExpected;
427  evtGood[maxMasks_] = false;
428  if (capIdDefined) {
429  zeroSuppValMap_[blockCapId]->Fill(ZSBLKSBAD);
430  zeroSuppValMap_[blockCapId]->Fill(ZSBLKSBADFALSEPOS);
431  errorSummaryNumMap_[blockCapId]->Fill(RBLKS);
432  errorSummaryNumMap_[blockCapId]->Fill(RBLKSFALSEPOS);
433  readoutSizeZSExpectedMap[blockCapId] += totalBlockSizeExpected;
434  evtGood[blockCapId] = false;
435  }
436  } else {
437  if (verbose_) std::cout << "BAD block with ZS flag false" << std::endl;
442  readoutSizeZSMap[maxMasks_] += totalBlockSize;
443  evtGood[maxMasks_] = false;
444  if (capIdDefined) {
445  zeroSuppValMap_[blockCapId]->Fill(ZSBLKSBAD);
446  zeroSuppValMap_[blockCapId]->Fill(ZSBLKSBADFALSENEG);
447  errorSummaryNumMap_[blockCapId]->Fill(RBLKS);
448  errorSummaryNumMap_[blockCapId]->Fill(RBLKSFALSENEG);
449  readoutSizeZSMap[blockCapId] += totalBlockSize;
450  evtGood[blockCapId] = false;
451  }
452  }
453  }
454  }
455  if (verbose_) {
456  std::cout << "FED data size: " << fedDataSize << " bytes" << std::endl;
457  std::cout << "Payload size no ZS: " << readoutSizeNoZSMap[maxMasks_] << " bytes" << std::endl;
458  std::cout << "Payload size ZS: " << readoutSizeZSMap[maxMasks_] << " bytes" << std::endl;
459  std::cout << "Payload size expected ZS: " << readoutSizeZSExpectedMap[maxMasks_] << " bytes" << std::endl;
460  std::cout << "Filled readout size ZS with headers: " << readoutSizeZSMap[maxMasks_] + fedDataSize - readoutSizeNoZSMap[maxMasks_] << " bytes" << std::endl;
461  std::cout << "Filled expected readout size ZS with headers: " << readoutSizeZSExpectedMap[maxMasks_] + fedDataSize - readoutSizeNoZSMap[maxMasks_] << " bytes" << std::endl;
462  }
463  readoutSizeNoZSMap_[maxMasks_]->Fill(fedDataSize);
464  readoutSizeZSMap_[maxMasks_]->Fill(readoutSizeZSMap[maxMasks_] + fedDataSize - readoutSizeNoZSMap[maxMasks_]);
465  readoutSizeZSExpectedMap_[maxMasks_]->Fill(readoutSizeZSExpectedMap[maxMasks_] + fedDataSize - readoutSizeNoZSMap[maxMasks_]);
466  for (const auto &id: definedMaskCapIds_) {
467  readoutSizeNoZSMap_[id]->Fill(readoutSizeNoZSMap[id]);
468  readoutSizeZSMap_[id]->Fill(readoutSizeZSMap[id]);
469  readoutSizeZSExpectedMap_[id]->Fill(readoutSizeZSExpectedMap[id]);
470  }
471  }
472 
473  if (evtGood[maxMasks_]) {
475  } else {
478  }
479  for (const auto &id: definedMaskCapIds_) {
480  if (evtGood[id]) {
481  zeroSuppValMap_[id]->Fill(EVTSGOOD);
482  } else {
483  zeroSuppValMap_[id]->Fill(EVTSBAD);
484  errorSummaryNumMap_[id]->Fill(REVTS);
485  }
486  }
487 }
Definition: start.py:1
std::vector< amc::Packet > payload() const
Definition: AMC13Spec.h:80
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)
uint8_t triggerType() const
Event Trigger type identifier.
Definition: FEDHeader.cc:17
edm::EDGetTokenT< FEDRawDataCollection > fedDataToken_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
std::map< unsigned int, MonitorElement * > readoutSizeNoZSMap_
bool check() const
Check that the header is OK.
Definition: FEDHeader.cc:72
L1TMP7ZeroSupp(const edm::ParameterSet &ps)
bool exists(std::string const &parameterName) const
checks if a parameter exists
uint16_t sourceID() const
Identifier of the FED.
Definition: FEDHeader.cc:32
std::string monitorDir_
uint16_t crc() const
Cyclic Redundancy Code of the event fragment including header and trailer.
Definition: FEDTrailer.cc:22
bool check() const
Check that the trailer is OK.
Definition: FEDTrailer.cc:83
uint8_t version() const
Version identifier of the FED data format.
Definition: FEDHeader.cc:37
void analyze(const edm::Event &e, const edm::EventSetup &c) override
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
uint32_t fragmentLength() const
The length of the event fragment counted in 64-bit words including header and trailer.
Definition: FEDTrailer.cc:17
void Fill(long long x)
void bookCapIdHistograms(DQMStore::IBooker &ibooker, const unsigned int &id)
std::map< unsigned int, MonitorElement * > errorSummaryNumMap_
std::vector< unsigned int > definedMaskCapIds_
MonitorElement * capIds_
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
std::map< unsigned int, MonitorElement * > errorSummaryDenMap_
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
std::vector< std::vector< int > > masks_
#define end
Definition: vmac.h:39
static const unsigned int maxMasks_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
bool isValid() const
Definition: HandleBase.h:74
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
uint8_t ttsBits() const
Current value of the Trigger Throttling System bits.
Definition: FEDTrailer.cc:32
unsigned long long uint64_t
Definition: Time.h:15
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)
Definition: AMC13Spec.cc:70
uint8_t evtStatus() const
Event fragment status information.
Definition: FEDTrailer.cc:27
void add(std::string const &label, ParameterSetDescription const &psetDescription)
~L1TMP7ZeroSupp() override
uint16_t bxID() const
The bunch crossing number.
Definition: FEDHeader.cc:27
HLT enums.
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
std::vector< int > fedIds_
ParameterDescriptionBase * addOptionalUntracked(U const &iLabel, T const &value)
uint32_t lvl1ID() const
Level-1 event number generated by the TTC system.
Definition: FEDHeader.cc:22
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void bookHistograms(DQMStore::IBooker &, const edm::Run &, const edm::EventSetup &) override
Definition: AMCSpec.h:8
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)
bool checkOnlyCapIdsWithMasks_
Definition: Run.h:44