CMS 3D CMS Logo

CSCDCCUnpacker.cc
Go to the documentation of this file.
1 
7 //Framework stuff
21 
26 
27 //FEDRawData
30 
31 //Digi stuff
48 
54 
55 #include <iostream>
56 #include <sstream>
57 #include <string>
58 #include <iomanip>
59 #include <cstdio>
60 
62 
64 public:
67 
69  ~CSCDCCUnpacker() override;
70 
71  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
72 
74  void produce(edm::Event& e, const edm::EventSetup& c) override;
75 
77  void visual_raw(int hl, int id, int run, int event, bool fedshort, bool fDump, short unsigned int* buf) const;
78 
79 private:
82 
84  bool useGEMs_;
85 
90 
92  unsigned int errorMask, examinerMask;
95 
100 };
101 
103  // Tracked
104  i_token = consumes<FEDRawDataCollection>(pset.getParameter<edm::InputTag>("InputObjects"));
105  crateToken = esConsumes<CSCCrateMap, CSCCrateMapRcd>();
106  cscmapToken = esConsumes<CSCChamberMap, CSCChamberMapRcd>();
107 
108  useExaminer = pset.getParameter<bool>("UseExaminer");
109  examinerMask = pset.getParameter<unsigned int>("ExaminerMask");
111  useSelectiveUnpacking = pset.getParameter<bool>("UseSelectiveUnpacking");
112  errorMask = pset.getParameter<unsigned int>("ErrorMask");
113  unpackStatusDigis = pset.getParameter<bool>("UnpackStatusDigis");
115  useFormatStatus = pset.getParameter<bool>("UseFormatStatus");
116 
117  useGEMs_ = pset.getParameter<bool>("useGEMs");
118  // Untracked
119 
120  printEventNumber = pset.getUntrackedParameter<bool>("PrintEventNumber", true);
121  debug = pset.getUntrackedParameter<bool>("Debug", false);
122  instantiateDQM = pset.getUntrackedParameter<bool>("runDQM", false);
123 
125  visualFEDInspect = pset.getUntrackedParameter<bool>("VisualFEDInspect", false);
126  visualFEDShort = pset.getUntrackedParameter<bool>("VisualFEDShort", false);
127  formatedEventDump = pset.getUntrackedParameter<bool>("FormatedEventDump", false);
128 
130  SuppressZeroLCT = pset.getUntrackedParameter<bool>("SuppressZeroLCT", true);
131 
132  if (instantiateDQM) {
134  }
135 
136  produces<CSCWireDigiCollection>("MuonCSCWireDigi");
137  produces<CSCStripDigiCollection>("MuonCSCStripDigi");
138  produces<CSCComparatorDigiCollection>("MuonCSCComparatorDigi");
139  produces<CSCALCTDigiCollection>("MuonCSCALCTDigi");
140  produces<CSCCLCTDigiCollection>("MuonCSCCLCTDigi");
141  produces<CSCRPCDigiCollection>("MuonCSCRPCDigi");
142  produces<CSCCorrelatedLCTDigiCollection>("MuonCSCCorrelatedLCTDigi");
143 
144  if (unpackStatusDigis) {
145  produces<CSCCFEBStatusDigiCollection>("MuonCSCCFEBStatusDigi");
146  produces<CSCTMBStatusDigiCollection>("MuonCSCTMBStatusDigi");
147  produces<CSCDMBStatusDigiCollection>("MuonCSCDMBStatusDigi");
148  produces<CSCALCTStatusDigiCollection>("MuonCSCALCTStatusDigi");
149  produces<CSCDDUStatusDigiCollection>("MuonCSCDDUStatusDigi");
150  produces<CSCDCCStatusDigiCollection>("MuonCSCDCCStatusDigi");
151  }
152 
153  if (useFormatStatus) {
154  produces<CSCDCCFormatStatusDigiCollection>("MuonCSCDCCFormatStatusDigi");
155  }
156 
157  if (useGEMs_) {
158  produces<GEMPadDigiClusterCollection>("MuonGEMPadDigiCluster");
159  }
160  //CSCAnodeData::setDebug(debug);
170 }
171 
173  //fill destructor here
174 }
175 
178  desc.add<edm::InputTag>("InputObjects", edm::InputTag("rawDataCollector"))
179  ->setComment("# Define input to the unpacker");
180  desc.add<bool>("UseExaminer", true)
181  ->setComment("# Use CSC examiner to check for corrupt or semi-corrupt data & avoid unpacker crashes");
182  desc.add<unsigned int>("ExaminerMask", 535557110)->setComment("# This mask is needed by the examiner");
183  desc.add<bool>("UseSelectiveUnpacking", true)
184  ->setComment("# Use Examiner to unpack good chambers and skip only bad ones");
185  desc.add<unsigned int>("ErrorMask", 0)->setComment("# This mask simply reduces error reporting");
186  desc.add<bool>("UnpackStatusDigis", false)->setComment("# Unpack general status digis?");
187  desc.add<bool>("UseFormatStatus", true)->setComment("# Unpack FormatStatus digi?");
188  desc.add<bool>("useGEMs", false)->setComment("Unpack GEM trigger data");
189  desc.addUntracked<bool>("Debug", false)->setComment("# Turn on lots of output");
190  desc.addUntracked<bool>("PrintEventNumber", false);
191  desc.addUntracked<bool>("runDQM", false);
192  desc.addUntracked<bool>("VisualFEDInspect", false)->setComment("# Visualization of raw data in corrupted events");
193  desc.addUntracked<bool>("VisualFEDShort", false)->setComment("# Visualization of raw data in corrupted events");
194  desc.addUntracked<bool>("FormatedEventDump", false);
195  desc.addUntracked<bool>("SuppressZeroLCT", true);
196  descriptions.add("muonCSCDCCUnpacker", desc);
197  descriptions.setComment(" This is the generic cfi file for CSC unpacking");
198 }
199 
202  // Do we really have to do this every event???
203  // ... Yes, because framework is more efficient than you are at caching :)
204  // (But if you want to actually DO something specific WHEN the mapping changes, check out ESWatcher)
205  edm::ESHandle<CSCCrateMap> hcrate = c.getHandle(crateToken);
206  const CSCCrateMap* pcrate = hcrate.product();
207 
208  // Need access to CSCChamberMap for chamber<->FED/DDU mapping consistency checks
210  const CSCChamberMap* cscmapping = cscmap.product();
211 
212  if (printEventNumber)
213  ++numOfEvents;
214 
217  e.getByToken(i_token, rawdata);
218 
220  auto wireProduct = std::make_unique<CSCWireDigiCollection>();
221  auto stripProduct = std::make_unique<CSCStripDigiCollection>();
222  auto alctProduct = std::make_unique<CSCALCTDigiCollection>();
223  auto clctProduct = std::make_unique<CSCCLCTDigiCollection>();
224  auto comparatorProduct = std::make_unique<CSCComparatorDigiCollection>();
225  auto rpcProduct = std::make_unique<CSCRPCDigiCollection>();
226  auto corrlctProduct = std::make_unique<CSCCorrelatedLCTDigiCollection>();
227  auto cfebStatusProduct = std::make_unique<CSCCFEBStatusDigiCollection>();
228  auto dmbStatusProduct = std::make_unique<CSCDMBStatusDigiCollection>();
229  auto tmbStatusProduct = std::make_unique<CSCTMBStatusDigiCollection>();
230  auto dduStatusProduct = std::make_unique<CSCDDUStatusDigiCollection>();
231  auto dccStatusProduct = std::make_unique<CSCDCCStatusDigiCollection>();
232  auto alctStatusProduct = std::make_unique<CSCALCTStatusDigiCollection>();
233 
234  auto formatStatusProduct = std::make_unique<CSCDCCFormatStatusDigiCollection>();
235 
236  auto gemProduct = std::make_unique<GEMPadDigiClusterCollection>();
237 
238  // If set selective unpacking mode
239  // hardcoded examiner mask below to check for DCC and DDU level errors will be used first
240  // then examinerMask for CSC level errors will be used during unpacking of each CSC block
241  unsigned long dccBinCheckMask = 0x06080016;
242 
243  // Post-LS1 FED/DDU ID mapping fix
244  const unsigned postLS1_map[] = {841, 842, 843, 844, 845, 846, 847, 848, 849, 831, 832, 833,
245  834, 835, 836, 837, 838, 839, 861, 862, 863, 864, 865, 866,
246  867, 868, 869, 851, 852, 853, 854, 855, 856, 857, 858, 859};
247 
248  // For new CSC readout layout, which wont include DCCs need to loop over DDU FED IDs. DCC IDs are included for backward compatibility with old data
249  std::vector<unsigned int> cscFEDids;
250 
251  for (unsigned int id = FEDNumbering::MINCSCFEDID; id <= FEDNumbering::MAXCSCFEDID; ++id) // loop over DCCs
252  {
253  cscFEDids.push_back(id);
254  }
255 
256  for (unsigned int id = FEDNumbering::MINCSCDDUFEDID; id <= FEDNumbering::MAXCSCDDUFEDID; ++id) // loop over DDUs
257  {
258  cscFEDids.push_back(id);
259  }
260 
261  for (unsigned int i = 0; i < cscFEDids.size(); i++) // loop over all CSC FEDs (DCCs and DDUs)
262  {
263  unsigned int id = cscFEDids[i];
264  bool isDDU_FED = ((id >= FEDNumbering::MINCSCDDUFEDID) && (id <= FEDNumbering::MAXCSCDDUFEDID)) ? true : false;
265 
268 
270  const FEDRawData& fedData = rawdata->FEDData(id);
271  unsigned long length = fedData.size();
272 
273  if (length >= 32)
274  {
275  CSCDCCExaminer* examiner = nullptr;
276  goodEvent = true;
277  if (useExaminer)
278  {
279  // CSCDCCExaminer examiner;
280  examiner = new CSCDCCExaminer();
281  if (examinerMask & 0x40000)
282  examiner->crcCFEB(true);
283  if (examinerMask & 0x8000)
284  examiner->crcTMB(true);
285  if (examinerMask & 0x0400)
286  examiner->crcALCT(true);
287  examiner->setMask(examinerMask);
288 
290  if (isDDU_FED) {
291  if (examiner != nullptr)
292  examiner->modeDDU(true);
293  }
294 
295  const short unsigned int* data = (short unsigned int*)fedData.data();
296 
297  LogTrace("badData") << "Length: " << length / 2;
298  // Event data hex dump
299  /*
300  short unsigned * buf = (short unsigned int *)fedData.data();
301  std::cout <<std::endl<<length/2<<" words of data:"<<std::endl;
302  for (short unsigned int i=0;i<length/2;i++) {
303  printf("%04x %04x %04x %04x\n",buf[i+3],buf[i+2],buf[i+1],buf[i]);
304  i+=3;
305  }
306  */
307 
308  int res = examiner->check(data, long(fedData.size() / 2));
309  if (res < 0) {
310  goodEvent = false;
311  } else {
313  goodEvent = !(examiner->errors() & dccBinCheckMask);
314  else
315  goodEvent = !(examiner->errors() & examinerMask);
316  }
317 
318  /*
319  std::cout << "FED" << id << " " << fedData.size() << " " << goodEvent << " "
320  << std::hex << examiner->errors() << std::dec << " " << status << std::endl;
321  */
322 
323  // Fill Format status digis per FED
324  // Remove examiner->errors() != 0 check if we need to put status digis for every event
325  if (useFormatStatus && (examiner->errors() != 0))
326  // formatStatusProduct->insertDigi(CSCDetId(1,1,1,1,1), CSCDCCFormatStatusDigi(id,examiner,dccBinCheckMask));
327  formatStatusProduct->insertDigi(CSCDetId(1, 1, 1, 1, 1),
329  dccBinCheckMask,
330  examiner->getMask(),
331  examiner->errors(),
332  examiner->errorsDetailedDDU(),
333  examiner->errorsDetailed(),
334  examiner->payloadDetailed(),
335  examiner->statusDetailed()));
336  }
337 
340  if (!goodEvent || formatedEventDump) {
341  short unsigned* buf = (short unsigned int*)fedData.data();
342  visual_raw(length / 2, id, (int)e.id().run(), (int)e.id().event(), visualFEDShort, formatedEventDump, buf);
343  }
344  }
345 
346  if (goodEvent) {
348 
349  CSCDCCExaminer* ptrExaminer = examiner;
351  ptrExaminer = nullptr;
352 
353  std::vector<CSCDDUEventData> fed_Data;
354  std::vector<CSCDDUEventData>* ptr_fedData = &fed_Data;
355 
357  CSCDetId layer(1, 1, 1, 1, 1);
358 
359  if (isDDU_FED) // Use new DDU FED readout mode
360  {
361  CSCDDUEventData single_dduData((short unsigned int*)fedData.data(), ptrExaminer);
362  fed_Data.push_back(single_dduData);
363 
364  // if(instantiateDQM) monitor->process(examiner, &single_dduData);
365 
366  } else // Use old DCC FED readout mode
367  {
368  CSCDCCEventData dccData((short unsigned int*)fedData.data(), ptrExaminer);
369 
370  //std::cout << " DCC Size [UNPK] " << dccData.sizeInWords() << std::endl;
371 
372  if (instantiateDQM)
373  monitor->process(examiner, &dccData);
374 
376  // const std::vector<CSCDDUEventData> & dduData = dccData.dduData();
377  // ptr_fedData = &(dccData.dduData());
378  fed_Data = dccData.dduData();
379 
380  if (unpackStatusDigis) {
382  short unsigned* bufForDcc = (short unsigned int*)fedData.data();
383 
384  //std::cout << "FED Length: " << std::dec << length/2 <<
385  //" Trailer 2: " << std::hex << bufForDcc[length/2-4] << std::endl;
386 
387  dccStatusProduct->insertDigi(layer,
388  CSCDCCStatusDigi(dccData.dccHeader().data(),
389  dccData.dccTrailer().data(),
390  examiner->errors(),
391  bufForDcc[length / 2 - 4]));
392  }
393  }
394 
395  const std::vector<CSCDDUEventData>& dduData = *ptr_fedData;
396 
397  for (unsigned int iDDU = 0; iDDU < dduData.size(); ++iDDU) // loop over DDUs
398  {
401  if (dduData[iDDU].trailer().errorstat() & errorMask) {
402  LogTrace("CSCDCCUnpacker|CSCRawToDigi")
403  << "FED ID" << id << " DDU# " << iDDU << " has serious error - no digis unpacked! " << std::hex
404  << dduData[iDDU].trailer().errorstat();
405  continue; // to next iteration of DDU loop
406  }
407 
408  if (unpackStatusDigis)
409  dduStatusProduct->insertDigi(
410  layer,
411  CSCDDUStatusDigi(dduData[iDDU].header().data(),
412  dduData[iDDU].trailer().data(),
414  dduData[iDDU].trailer0()));
415 
417  const std::vector<CSCEventData>& cscData = dduData[iDDU].cscData();
418 
419  // if (cscData.size() != 0) std::cout << "FED" << id << " DDU Source ID: " << dduData[iDDU].header().source_id() << " firmware version: " << dduData[iDDU].header().format_version() << std::endl;
420 
421  for (unsigned int iCSC = 0; iCSC < cscData.size(); ++iCSC) // loop over CSCs
422  {
424  int vmecrate = cscData[iCSC].dmbHeader()->crateID();
425  int dmb = cscData[iCSC].dmbHeader()->dmbID();
426 
427  int icfeb = 0;
428  int ilayer = 0;
429 
430  if (debug)
431  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << "crate = " << vmecrate << "; dmb = " << dmb;
432 
433  if ((vmecrate >= 1) && (vmecrate <= 60) && (dmb >= 1) && (dmb <= 10) && (dmb != 6)) {
434  layer = pcrate->detId(vmecrate, dmb, icfeb, ilayer);
435  } else {
436  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << " detID input out of range!!! ";
437  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << " skipping chamber vme= " << vmecrate << " dmb= " << dmb;
438  continue; // to next iteration of iCSC loop
439  }
440 
443  if (isDDU_FED) {
444  unsigned int dduid = cscmapping->ddu(layer);
445  if ((dduid >= 1) && (dduid <= 36))
446  dduid = postLS1_map[dduid - 1]; // Fix for Post-LS1 FED/DDU IDs mappings
447  // std::cout << "CSC " << layer << " -> " << id << ":" << dduid << ":" << vmecrate << ":" << dmb ;
448  if (id != dduid) {
449  LogTrace("CSCDDUUnpacker|CSCRawToDigi") << " CSC->FED/DDU mapping inconsistency!!! ";
450  LogTrace("CSCDCCUnpacker|CSCRawToDigi")
451  << "readout FED/DDU ID=" << id << " expected ID=" << dduid << ", skipping chamber " << layer
452  << " vme= " << vmecrate << " dmb= " << dmb;
453  continue;
454  }
455  }
456 
458  int nalct = cscData[iCSC].dmbHeader()->nalct();
459  bool goodALCT = false;
460  //if (nalct&&(cscData[iCSC].dataPresent>>6&0x1)==1) {
461  if (nalct && cscData[iCSC].alctHeader()) {
462  if (cscData[iCSC].alctHeader()->check()) {
463  goodALCT = true;
464  } else {
465  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << "not storing ALCT digis; alct is bad or not present";
466  }
467  } else {
468  if (debug)
469  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << "nALCT==0 !!!";
470  }
471 
473  if (goodALCT) {
474  std::vector<CSCALCTDigi> alctDigis = cscData[iCSC].alctHeader()->ALCTDigis();
475  if (SuppressZeroLCT) {
476  std::vector<CSCALCTDigi> alctDigis_0;
477  for (int unsigned i = 0; i < alctDigis.size(); ++i) {
478  if (alctDigis[i].isValid())
479  alctDigis_0.push_back(alctDigis[i]);
480  }
481  alctProduct->move(std::make_pair(alctDigis_0.begin(), alctDigis_0.end()), layer);
482  } else
483  alctProduct->move(std::make_pair(alctDigis.begin(), alctDigis.end()), layer);
484  }
485 
487  int nclct = cscData[iCSC].dmbHeader()->nclct();
488  bool goodTMB = false;
489  // if (nclct&&(cscData[iCSC].dataPresent>>5&0x1)==1) {
490  if (nclct && cscData[iCSC].tmbData()) {
491  if (cscData[iCSC].tmbHeader()->check()) {
492  if (cscData[iCSC].comparatorData()->check())
493  goodTMB = true;
494  } else {
495  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << "one of TMB checks failed! not storing TMB digis ";
496  }
497  } else {
498  if (debug)
499  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << "nCLCT==0 !!!";
500  }
501 
503  if (goodTMB) {
504  std::vector<CSCCorrelatedLCTDigi> correlatedlctDigis =
505  cscData[iCSC].tmbHeader()->CorrelatedLCTDigis(layer.rawId());
506  if (SuppressZeroLCT) {
507  std::vector<CSCCorrelatedLCTDigi> correlatedlctDigis_0;
508  for (int unsigned i = 0; i < correlatedlctDigis.size(); ++i) {
509  if (correlatedlctDigis[i].isValid())
510  correlatedlctDigis_0.push_back(correlatedlctDigis[i]);
511  }
512  corrlctProduct->move(std::make_pair(correlatedlctDigis_0.begin(), correlatedlctDigis_0.end()), layer);
513  } else
514  corrlctProduct->move(std::make_pair(correlatedlctDigis.begin(), correlatedlctDigis.end()), layer);
515 
516  std::vector<CSCCLCTDigi> clctDigis = cscData[iCSC].tmbHeader()->CLCTDigis(layer.rawId());
517  if (SuppressZeroLCT) {
518  std::vector<CSCCLCTDigi> clctDigis_0;
519  for (int unsigned i = 0; i < clctDigis.size(); ++i) {
520  if (clctDigis[i].isValid())
521  clctDigis_0.push_back(clctDigis[i]);
522  }
523  clctProduct->move(std::make_pair(clctDigis_0.begin(), clctDigis_0.end()), layer);
524  } else
525  clctProduct->move(std::make_pair(clctDigis.begin(), clctDigis.end()), layer);
526 
528  if (cscData[iCSC].tmbData()->checkSize()) {
529  if (cscData[iCSC].tmbData()->hasRPC()) {
530  std::vector<CSCRPCDigi> rpcDigis = cscData[iCSC].tmbData()->rpcData()->digis();
531  rpcProduct->move(std::make_pair(rpcDigis.begin(), rpcDigis.end()), layer);
532  }
533  } else
534  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << " TMBData check size failed!";
535  }
536 
538  if (unpackStatusDigis) {
539  for (icfeb = 0; icfeb < 7; ++icfeb)
540  {
541  if (cscData[iCSC].cfebData(icfeb) != nullptr)
542  cfebStatusProduct->insertDigi(layer, cscData[iCSC].cfebData(icfeb)->statusDigi());
543  }
545  dmbStatusProduct->insertDigi(
546  layer, CSCDMBStatusDigi(cscData[iCSC].dmbHeader()->data(), cscData[iCSC].dmbTrailer()->data()));
547  if (goodTMB)
548  tmbStatusProduct->insertDigi(
549  layer,
550  CSCTMBStatusDigi(cscData[iCSC].tmbHeader()->data(), cscData[iCSC].tmbData()->tmbTrailer()->data()));
551  if (goodALCT)
552  alctStatusProduct->insertDigi(
553  layer, CSCALCTStatusDigi(cscData[iCSC].alctHeader()->data(), cscData[iCSC].alctTrailer()->data()));
554  }
555 
557  for (int ilayer = 1; ilayer <= 6; ++ilayer) {
559  // (You have to be kidding. Line 240 in whose universe?)
560 
561  // Allocate all ME1/1 wire digis to ring 1
562  layer = pcrate->detId(vmecrate, dmb, 0, ilayer);
563  {
564  std::vector<CSCWireDigi> wireDigis = cscData[iCSC].wireDigis(ilayer);
565  wireProduct->move(std::make_pair(wireDigis.begin(), wireDigis.end()), layer);
566  }
567 
568  for (icfeb = 0; icfeb < 7; ++icfeb) {
569  layer = pcrate->detId(vmecrate, dmb, icfeb, ilayer);
570  if (cscData[iCSC].cfebData(icfeb) && cscData[iCSC].cfebData(icfeb)->check()) {
571  std::vector<CSCStripDigi> stripDigis;
572  cscData[iCSC].cfebData(icfeb)->digis(layer.rawId(), stripDigis);
573  stripProduct->move(std::make_pair(stripDigis.begin(), stripDigis.end()), layer);
574  }
575  }
576 
577  if (goodTMB && (cscData[iCSC].tmbHeader() != nullptr)) {
578  int nCFEBs = cscData[iCSC].tmbHeader()->NCFEBs();
579  for (icfeb = 0; icfeb < nCFEBs; ++icfeb) {
580  layer = pcrate->detId(vmecrate, dmb, icfeb, ilayer);
581  std::vector<CSCComparatorDigi> comparatorDigis =
582  cscData[iCSC].comparatorData()->comparatorDigis(layer.rawId(), icfeb);
583  // Set cfeb=0, so that ME1/a and ME1/b comparators go to
584  // ring 1.
585  layer = pcrate->detId(vmecrate, dmb, 0, ilayer);
586  comparatorProduct->move(std::make_pair(comparatorDigis.begin(), comparatorDigis.end()), layer);
587  }
588  } // end of loop over cfebs
589  } // end of loop over layers
590  } // end of loop over chambers
591  } // endof loop over DDUs
592  } // end of good event
593  else {
594  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << "ERROR! Examiner rejected FED #" << id;
595  if (examiner) {
596  for (int i = 0; i < examiner->nERRORS; ++i) {
597  if (((examinerMask & examiner->errors()) >> i) & 0x1)
598  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << examiner->errName(i);
599  }
600  if (debug) {
601  LogTrace("CSCDCCUnpacker|CSCRawToDigi")
602  << " Examiner errors:0x" << std::hex << examiner->errors() << " & 0x" << examinerMask << " = "
603  << (examiner->errors() & examinerMask);
604  }
605  }
606 
607  // dccStatusProduct->insertDigi(CSCDetId(1,1,1,1,1), CSCDCCStatusDigi(examiner->errors()));
608  // if(instantiateDQM) monitor->process(examiner, NULL);
609  }
610  if (examiner != nullptr)
611  delete examiner;
612  } // end of if fed has data
613  } // end of loop over DCCs
614  // put into the event
615  e.put(std::move(wireProduct), "MuonCSCWireDigi");
616  e.put(std::move(stripProduct), "MuonCSCStripDigi");
617  e.put(std::move(alctProduct), "MuonCSCALCTDigi");
618  e.put(std::move(clctProduct), "MuonCSCCLCTDigi");
619  e.put(std::move(comparatorProduct), "MuonCSCComparatorDigi");
620  e.put(std::move(rpcProduct), "MuonCSCRPCDigi");
621  e.put(std::move(corrlctProduct), "MuonCSCCorrelatedLCTDigi");
622 
623  if (useFormatStatus)
624  e.put(std::move(formatStatusProduct), "MuonCSCDCCFormatStatusDigi");
625 
626  if (unpackStatusDigis) {
627  e.put(std::move(cfebStatusProduct), "MuonCSCCFEBStatusDigi");
628  e.put(std::move(dmbStatusProduct), "MuonCSCDMBStatusDigi");
629  e.put(std::move(tmbStatusProduct), "MuonCSCTMBStatusDigi");
630  e.put(std::move(dduStatusProduct), "MuonCSCDDUStatusDigi");
631  e.put(std::move(dccStatusProduct), "MuonCSCDCCStatusDigi");
632  e.put(std::move(alctStatusProduct), "MuonCSCALCTStatusDigi");
633  }
634  if (useGEMs_) {
635  e.put(std::move(gemProduct), "MuonGEMPadDigiCluster");
636  }
637  if (printEventNumber)
638  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << "[CSCDCCUnpacker]: " << numOfEvents << " events processed ";
639 }
640 
642 
644  int hl, int id, int run, int event, bool fedshort, bool fDump, short unsigned int* buf) const {
645  std::cout << std::endl << std::endl << std::endl;
646  std::cout << "Run: " << run << " Event: " << event << std::endl;
647  std::cout << std::endl << std::endl;
648  if (formatedEventDump)
649  std::cout << "FED-" << id << " "
650  << "(scroll down to see summary)" << std::endl;
651  else
652  std::cout << "Problem seems in FED-" << id << " "
653  << "(scroll down to see summary)" << std::endl;
654  std::cout << "********************************************************************************" << std::endl;
655  std::cout << hl << " words of data:" << std::endl;
656 
657  //================================================
658  // FED codes in DCC
659  std::vector<int> dcc_id;
660  int dcc_h1_id = 0;
661  // Current codes
662  for (int i = 750; i < 758; i++)
663  dcc_id.push_back(i);
664  // Codes for upgrade
665  for (int i = 830; i < 838; i++)
666  dcc_id.push_back(i);
667 
668  char dcc_common[] = "DCC-";
669 
670  //================================================
671  // DDU codes per FED
672  std::vector<int> ddu_id;
673  int ddu_h1_12_13 = 0;
674  for (int i = 1; i < 37; i++)
675  ddu_id.push_back(i);
676  // For DDU Headers and tarailers
677  char ddu_common[] = "DDU-";
678  char ddu_header1[] = "Header 1";
679  char ddu_header2[] = "Header 2";
680  char ddu_header3[] = "Header 3";
681  char ddu_trail1[] = "Trailer 1", ddu_trail2[] = "Trailer 2", ddu_trail3[] = "Trailer 3";
682  // For Header 2
683  char ddu_trailer1_bit[] = {'8', '0', '0', '0', 'f', 'f', 'f', 'f', '8', '0', '0', '0', '8', '0', '0', '0'};
684  char ddu_trailer3_bit[] = {'a'};
685  // Corrupted Trailers
686  char ddu_tr1_err_common[] = "Incomplet";
687  //====================================================
688 
689  //DMB
690  char dmb_common[] = "DMB", dmb_header1[] = "Header 1", dmb_header2[] = "Header 2";
691  char dmb_common_crate[] = "crate:", dmb_common_slot[] = "slot:";
692  char dmb_common_l1a[] = "L1A:";
693  char dmb_header1_bit[] = {'9', '9', '9', '9'};
694  char dmb_header2_bit[] = {'a', 'a', 'a', 'a'};
695  char dmb_tr1[] = "Trailer 1", dmb_tr2[] = "Trailer 2";
696  char dmb_tr1_bit[] = {'f', 'f', 'f', 'f'}, dmb_tr2_bit[] = {'e', 'e', 'e', 'e'};
697 
698  //=====================================================
699 
700  // ALCT
701  char alct_common[] = "ALCT", alct_header1[] = "Header 1", alct_header2[] = "Header 2";
702  char alct_common_bxn[] = "BXN:";
703  char alct_common_wcnt2[] = "| Actual word count:";
704  char alct_common_wcnt1[] = "Expected word count:";
705  char alct_header1_bit[] = {'d', 'd', 'd', 'd', 'b', '0', 'a'};
706  char alct_header2_bit[] = {'0', '0', '0', '0'};
707  char alct_tr1[] = "Trailer 1";
708 
709  //======================================================
710 
711  //TMB
712  char tmb_common[] = "TMB", tmb_header1[] = "Header", tmb_tr1[] = "Trailer";
713  char tmb_header1_bit[] = {'d', 'd', 'd', 'd', 'b', '0', 'c'};
714  char tmb_tr1_bit[] = {'d', 'd', 'd', 'd', 'e', '0', 'f'};
715 
716  //======================================================
717 
718  //CFEB
719  char cfeb_common[] = "CFEB", cfeb_tr1[] = "Trailer", cfeb_b[] = "B-word";
720  char cfeb_common_sample[] = "sample:";
721 
722  //======================================================
723 
724  //Auxiliary variables
725 
726  // Bufers
727  int word_lines = hl / 4;
728  char tempbuf[80];
729  char tempbuf1[130];
730  char tempbuf_short[17];
731  char sign1[] = " --->| ";
732 
733  // Counters
734  int word_numbering = 0;
735  int ddu_inst_i = 0, ddu_inst_n = 0, ddu_inst_l1a = 0;
736  int ddu_inst_bxn = 0;
737  int dmb_inst_crate = 0, dmb_inst_slot = 0, dmb_inst_l1a = 0;
738  int cfeb_sample = 0;
739  int alct_inst_l1a = 0;
740  int alct_inst_bxn = 0;
741  int alct_inst_wcnt1 = 0;
742  int alct_inst_wcnt2 = 0;
743  int alct_start = 0;
744  int alct_stop = 0;
745  int tmb_inst_l1a = 0;
746  int tmb_inst_wcnt1 = 0;
747  int tmb_inst_wcnt2 = 0;
748  int tmb_start = 0;
749  int tmb_stop = 0;
750  int dcc_h1_check = 0;
751 
752  //Flags
753  int ddu_h2_found = 0; //DDU Header 2 found
754  int w = 0;
755 
756  //Logic variables
757  const int sz1 = 5;
758  bool dcc_check = false;
759  bool ddu_h2_check[sz1] = {false};
760  bool ddu_h1_check = false;
761  bool dmb_h1_check[sz1] = {false};
762  bool dmb_h2_check[sz1] = {false};
763  bool ddu_h2_h1 = false;
764  bool ddu_tr1_check[sz1] = {false};
765  bool alct_h1_check[sz1] = {false};
766  bool alct_h2_check[sz1] = {false};
767  bool alct_tr1_check[sz1] = {false};
768  bool dmb_tr1_check[sz1] = {false};
769  bool dmb_tr2_check[sz1] = {false};
770  bool tmb_h1_check[sz1] = {false};
771  bool tmb_tr1_check[sz1] = {false};
772  bool cfeb_tr1_check[sz1] = {false};
773  bool cfeb_b_check[sz1] = {false};
774  bool ddu_tr1_bad_check[sz1] = {false};
775  bool extraction = fedshort;
776 
777  //Summary vectors
778  //DDU
779  std::vector<int> ddu_h1_coll;
780  std::vector<int> ddu_h1_n_coll;
781  std::vector<int> ddu_h2_coll;
782  std::vector<int> ddu_h3_coll;
783  std::vector<int> ddu_t1_coll;
784  std::vector<int> ddu_t2_coll;
785  std::vector<int> ddu_t3_coll;
786  std::vector<int> ddu_l1a_coll;
787  std::vector<int> ddu_bxn_coll;
788  //DMB
789  std::vector<int> dmb_h1_coll;
790  std::vector<int> dmb_h2_coll;
791  std::vector<int> dmb_t1_coll;
792  std::vector<int> dmb_t2_coll;
793  std::vector<int> dmb_crate_coll;
794  std::vector<int> dmb_slot_coll;
795  std::vector<int> dmb_l1a_coll;
796  //ALCT
797  std::vector<int> alct_h1_coll;
798  std::vector<int> alct_h2_coll;
799  std::vector<int> alct_t1_coll;
800  std::vector<int> alct_l1a_coll;
801  std::vector<int> alct_bxn_coll;
802  std::vector<int> alct_wcnt1_coll;
803  std::vector<int> alct_wcnt2_coll;
804  std::vector<int> alct_wcnt2_id_coll;
805  //TMB
806  std::vector<int> tmb_h1_coll;
807  std::vector<int> tmb_t1_coll;
808  std::vector<int> tmb_l1a_coll;
809  std::vector<int> tmb_wcnt1_coll;
810  std::vector<int> tmb_wcnt2_coll;
811  //CFEB
812  std::vector<int> cfeb_t1_coll;
813 
814  //========================================================
815 
816  // DCC Header and Ttrailer information
817  char dcc_header1[] = "DCC Header 1";
818  char dcc_header2[] = "DCC Header 2";
819  char dcc_trail1[] = "DCC Trailer 1", dcc_trail1_bit[] = {'e'};
820  char dcc_trail2[] = "DCC Trailer 2", dcc_trail2_bit[] = {'a'};
821  //=========================================================
822 
823  for (int i = 0; i < hl; i++) {
824  ++word_numbering;
825  for (int j = -1; j < 4; j++) {
826  sprintf(tempbuf_short,
827  "%04x%04x%04x%04x",
828  buf[i + 4 * (j - 1) + 3],
829  buf[i + 4 * (j - 1) + 2],
830  buf[i + 4 * (j - 1) + 1],
831  buf[i + 4 * (j - 1)]);
832 
833  // WARNING in 5_0_X for time being
834  ddu_h2_found++;
835  ddu_h2_found--;
836 
837  ddu_h2_check[j] = ((buf[i + 4 * (j - 1) + 1] == 0x8000) && (buf[i + 4 * (j - 1) + 2] == 0x0001) &&
838  (buf[i + 4 * (j - 1) + 3] == 0x8000));
839 
840  ddu_tr1_check[j] = ((tempbuf_short[0] == ddu_trailer1_bit[0]) && (tempbuf_short[1] == ddu_trailer1_bit[1]) &&
841  (tempbuf_short[2] == ddu_trailer1_bit[2]) && (tempbuf_short[3] == ddu_trailer1_bit[3]) &&
842  (tempbuf_short[4] == ddu_trailer1_bit[4]) && (tempbuf_short[5] == ddu_trailer1_bit[5]) &&
843  (tempbuf_short[6] == ddu_trailer1_bit[6]) && (tempbuf_short[7] == ddu_trailer1_bit[7]) &&
844  (tempbuf_short[8] == ddu_trailer1_bit[8]) && (tempbuf_short[9] == ddu_trailer1_bit[9]) &&
845  (tempbuf_short[10] == ddu_trailer1_bit[10]) && (tempbuf_short[11] == ddu_trailer1_bit[11]) &&
846  (tempbuf_short[12] == ddu_trailer1_bit[12]) && (tempbuf_short[13] == ddu_trailer1_bit[13]) &&
847  (tempbuf_short[14] == ddu_trailer1_bit[14]) && (tempbuf_short[15] == ddu_trailer1_bit[15]));
848 
849  dmb_h1_check[j] = ((tempbuf_short[0] == dmb_header1_bit[0]) && (tempbuf_short[4] == dmb_header1_bit[1]) &&
850  (tempbuf_short[8] == dmb_header1_bit[2]) && (tempbuf_short[12] == dmb_header1_bit[3]));
851 
852  dmb_h2_check[j] = ((tempbuf_short[0] == dmb_header2_bit[0]) && (tempbuf_short[4] == dmb_header2_bit[1]) &&
853  (tempbuf_short[8] == dmb_header2_bit[2]) && (tempbuf_short[12] == dmb_header2_bit[3]));
854  alct_h1_check[j] = ((tempbuf_short[0] == alct_header1_bit[0]) && (tempbuf_short[4] == alct_header1_bit[1]) &&
855  (tempbuf_short[8] == alct_header1_bit[2]) && (tempbuf_short[12] == alct_header1_bit[3]) &&
856  (tempbuf_short[13] == alct_header1_bit[4]) && (tempbuf_short[14] == alct_header1_bit[5]) &&
857  (tempbuf_short[15] == alct_header1_bit[6]));
858  alct_h2_check[j] = (((tempbuf_short[0] == alct_header2_bit[0]) && (tempbuf_short[1] == alct_header2_bit[1]) &&
859  (tempbuf_short[2] == alct_header2_bit[2]) && (tempbuf_short[3] == alct_header2_bit[3])) ||
860  ((tempbuf_short[4] == alct_header2_bit[0]) && (tempbuf_short[5] == alct_header2_bit[1]) &&
861  (tempbuf_short[6] == alct_header2_bit[2]) && (tempbuf_short[7] == alct_header2_bit[3])) ||
862  ((tempbuf_short[8] == alct_header2_bit[0]) && (tempbuf_short[9] == alct_header2_bit[1]) &&
863  (tempbuf_short[10] == alct_header2_bit[2]) && (tempbuf_short[11] == alct_header2_bit[3])) ||
864  ((tempbuf_short[12] == alct_header2_bit[0]) && (tempbuf_short[13] == alct_header2_bit[1]) &&
865  (tempbuf_short[14] == alct_header2_bit[2]) && (tempbuf_short[15] == alct_header2_bit[3]))
866  //(tempbuf_short[4]==alct_header2_bit[4])&&(tempbuf_short[5]==alct_header2_bit[5])
867  );
868  // ALCT Trailers
869  alct_tr1_check[j] =
870  (((buf[i + 4 * (j - 1)] & 0xFFFF) == 0xDE0D) && ((buf[i + 4 * (j - 1) + 1] & 0xF800) == 0xD000) &&
871  ((buf[i + 4 * (j - 1) + 2] & 0xF800) == 0xD000) && ((buf[i + 4 * (j - 1) + 3] & 0xF000) == 0xD000));
872  // DMB Trailers
873  dmb_tr1_check[j] = ((tempbuf_short[0] == dmb_tr1_bit[0]) && (tempbuf_short[4] == dmb_tr1_bit[1]) &&
874  (tempbuf_short[8] == dmb_tr1_bit[2]) && (tempbuf_short[12] == dmb_tr1_bit[3]));
875  dmb_tr2_check[j] = ((tempbuf_short[0] == dmb_tr2_bit[0]) && (tempbuf_short[4] == dmb_tr2_bit[1]) &&
876  (tempbuf_short[8] == dmb_tr2_bit[2]) && (tempbuf_short[12] == dmb_tr2_bit[3]));
877  // TMB
878  tmb_h1_check[j] = ((tempbuf_short[0] == tmb_header1_bit[0]) && (tempbuf_short[4] == tmb_header1_bit[1]) &&
879  (tempbuf_short[8] == tmb_header1_bit[2]) && (tempbuf_short[12] == tmb_header1_bit[3]) &&
880  (tempbuf_short[13] == tmb_header1_bit[4]) && (tempbuf_short[14] == tmb_header1_bit[5]) &&
881  (tempbuf_short[15] == tmb_header1_bit[6]));
882  tmb_tr1_check[j] = ((tempbuf_short[0] == tmb_tr1_bit[0]) && (tempbuf_short[4] == tmb_tr1_bit[1]) &&
883  (tempbuf_short[8] == tmb_tr1_bit[2]) && (tempbuf_short[12] == tmb_tr1_bit[3]) &&
884  (tempbuf_short[13] == tmb_tr1_bit[4]) && (tempbuf_short[14] == tmb_tr1_bit[5]) &&
885  (tempbuf_short[15] == tmb_tr1_bit[6]));
886  // CFEB
887  cfeb_tr1_check[j] =
888  (((buf[i + 4 * (j - 1) + 1] & 0xF000) == 0x7000) && ((buf[i + 4 * (j - 1) + 2] & 0xF000) == 0x7000) &&
889  ((buf[i + 4 * (j - 1) + 1] != 0x7FFF) || (buf[i + 4 * (j - 1) + 2] != 0x7FFF)) &&
890  ((buf[i + 4 * (j - 1) + 3] == 0x7FFF) || ((buf[i + 4 * (j - 1) + 3] & buf[i + 4 * (j - 1)]) == 0x0 &&
891  (buf[i + 4 * (j - 1) + 3] + buf[i + 4 * (j - 1)] == 0x7FFF))));
892  cfeb_b_check[j] =
893  (((buf[i + 4 * (j - 1) + 3] & 0xF000) == 0xB000) && ((buf[i + 4 * (j - 1) + 2] & 0xF000) == 0xB000) &&
894  ((buf[i + 4 * (j - 1) + 1] & 0xF000) == 0xB000) && ((buf[i + 4 * (j - 1)] = 3 & 0xF000) == 0xB000));
895  // DDU Trailers with errors
896  ddu_tr1_bad_check[j] =
897  ((tempbuf_short[0] != ddu_trailer1_bit[0]) &&
898  //(tempbuf_short[1]!=ddu_trailer1_bit[1])&&(tempbuf_short[2]!=ddu_trailer1_bit[2])&&
899  //(tempbuf_short[3]==ddu_trailer1_bit[3])&&
900  (tempbuf_short[4] != ddu_trailer1_bit[4]) &&
901  //(tempbuf_short[5]==ddu_trailer1_bit[5])&&
902  //(tempbuf_short[6]==ddu_trailer1_bit[6])&&(tempbuf_short[7]==ddu_trailer1_bit[7])&&
903  (tempbuf_short[8] == ddu_trailer1_bit[8]) && (tempbuf_short[9] == ddu_trailer1_bit[9]) &&
904  (tempbuf_short[10] == ddu_trailer1_bit[10]) && (tempbuf_short[11] == ddu_trailer1_bit[11]) &&
905  (tempbuf_short[12] == ddu_trailer1_bit[12]) && (tempbuf_short[13] == ddu_trailer1_bit[13]) &&
906  (tempbuf_short[14] == ddu_trailer1_bit[14]) && (tempbuf_short[15] == ddu_trailer1_bit[15]));
907  }
908 
909  // DDU Header 2 next to Header 1
910  ddu_h2_h1 = ddu_h2_check[2];
911 
912  sprintf(tempbuf_short, "%04x%04x%04x%04x", buf[i + 3], buf[i + 2], buf[i + 1], buf[i]);
913 
914  // Looking for DDU Header 1
915  ddu_h1_12_13 = (buf[i] >> 8);
916  for (int kk = 0; kk < 36; kk++) {
917  if (((buf[i + 3] & 0xF000) == 0x5000) && (ddu_h1_12_13 == ddu_id[kk]) && ddu_h2_h1) {
918  ddu_h1_coll.push_back(word_numbering);
919  ddu_h1_n_coll.push_back(ddu_id[kk]);
920  ddu_inst_l1a = ((buf[i + 2] & 0xFFFF) + ((buf[i + 3] & 0x00FF) << 16));
921  ddu_l1a_coll.push_back(ddu_inst_l1a);
922  ddu_inst_bxn = (buf[i + 1] & 0xFFF0) >> 4;
923  ddu_bxn_coll.push_back(ddu_inst_bxn);
924  sprintf(tempbuf1,
925  "%6i %04x %04x %04x %04x%s%s%i %s%s %s %i %s %i",
926  word_numbering,
927  buf[i + 3],
928  buf[i + 2],
929  buf[i + 1],
930  buf[i],
931  sign1,
932  ddu_common,
933  ddu_id[kk],
934  ddu_header1,
935  sign1,
936  dmb_common_l1a,
937  ddu_inst_l1a,
938  alct_common_bxn,
939  ddu_inst_bxn);
940  std::cout << tempbuf1 << std::endl;
941  w = 0;
942  ddu_h1_check = true;
943  cfeb_sample = 0;
944  }
945  }
946 
947  // Looking for DCC Header 1
948  dcc_h1_id = (((buf[i + 1] << 12) & 0xF000) >> 4) + (buf[i] >> 8);
949  for (int dcci = 0; dcci < 16; dcci++) {
950  if ((dcc_id[dcci] == dcc_h1_id) && (((buf[i + 3] & 0xF000) == 0x5000) && (!ddu_h1_check))) {
951  sprintf(tempbuf1,
952  "%6i %04x %04x %04x %04x%s%s%i %s",
953  word_numbering,
954  buf[i + 3],
955  buf[i + 2],
956  buf[i + 1],
957  buf[i],
958  sign1,
959  dcc_common,
960  dcc_h1_id,
961  dcc_header1);
962  dcc_h1_check = word_numbering;
963  w = 0;
964  dcc_check = true;
965  std::cout << tempbuf1 << std::endl;
966  }
967  }
968 
969  // Looking for DCC Header 2 and trailers
970  if (((word_numbering - 1) == dcc_h1_check) && ((buf[i + 3] & 0xFF00) == 0xD900)) {
971  sprintf(tempbuf1,
972  "%6i %04x %04x %04x %04x%s%s",
973  word_numbering,
974  buf[i + 3],
975  buf[i + 2],
976  buf[i + 1],
977  buf[i],
978  sign1,
979  dcc_header2);
980  std::cout << tempbuf1 << std::endl;
981  w = 0;
982  } else if ((word_numbering == word_lines - 1) && (tempbuf_short[0] == dcc_trail1_bit[0])) {
983  sprintf(tempbuf1,
984  "%6i %04x %04x %04x %04x%s%s",
985  word_numbering,
986  buf[i + 3],
987  buf[i + 2],
988  buf[i + 1],
989  buf[i],
990  sign1,
991  dcc_trail1);
992  std::cout << tempbuf1 << std::endl;
993  w = 0;
994  } else if ((word_numbering == word_lines) && (tempbuf_short[0] == dcc_trail2_bit[0])) {
995  sprintf(tempbuf1,
996  "%6i %04x %04x %04x %04x%s%s",
997  word_numbering,
998  buf[i + 3],
999  buf[i + 2],
1000  buf[i + 1],
1001  buf[i],
1002  sign1,
1003  dcc_trail2);
1004  std::cout << tempbuf1 << std::endl;
1005  w = 0;
1006  }
1007 
1008  // DDU Header 2
1009  else if (ddu_h2_check[1]) {
1010  ddu_inst_i = ddu_h1_n_coll.size(); //ddu_inst_n=ddu_h1_n_coll[0];
1011  if (ddu_inst_i > 0) {
1012  ddu_inst_n = ddu_h1_n_coll[ddu_inst_i - 1];
1013  }
1014  sprintf(tempbuf1,
1015  "%6i %04x %04x %04x %04x%s%s%i %s",
1016  word_numbering,
1017  buf[i + 3],
1018  buf[i + 2],
1019  buf[i + 1],
1020  buf[i],
1021  sign1,
1022  ddu_common,
1023  ddu_inst_n,
1024  ddu_header2);
1025  ddu_h2_coll.push_back(word_numbering);
1026  std::cout << tempbuf1 << std::endl;
1027  w = 0;
1028  ddu_h2_found = 1;
1029  }
1030 
1031  // DDU Header 3 (either between DDU Header 2 DMB Header or DDU Header 2 DDU Trailer1)
1032  else if ((ddu_h2_check[0] && dmb_h1_check[2]) || (ddu_h2_check[0] && ddu_tr1_check[2])) {
1033  ddu_inst_i = ddu_h1_n_coll.size();
1034  if (ddu_inst_i > 0) {
1035  ddu_inst_n = ddu_h1_n_coll[ddu_inst_i - 1];
1036  }
1037  sprintf(tempbuf1,
1038  "%6i %04x %04x %04x %04x%s%s%i %s",
1039  word_numbering,
1040  buf[i + 3],
1041  buf[i + 2],
1042  buf[i + 1],
1043  buf[i],
1044  sign1,
1045  ddu_common,
1046  ddu_inst_n,
1047  ddu_header3);
1048  ddu_h3_coll.push_back(word_numbering);
1049  std::cout << tempbuf1 << std::endl;
1050  w = 0;
1051  ddu_h2_found = 0;
1052  }
1053 
1054  // DMB Header 1,2
1055 
1056  else if (dmb_h1_check[1]) {
1057  dmb_inst_crate = 0;
1058  dmb_inst_slot = 0;
1059  dmb_inst_l1a = ((buf[i] & 0x0FFF) + ((buf[i + 1] & 0xFFF) << 12));
1060  dmb_l1a_coll.push_back(dmb_inst_l1a);
1061  if (dmb_h2_check[2]) {
1062  dmb_inst_crate = ((buf[i + 4 + 1] >> 4) & 0xFF);
1063  dmb_inst_slot = (buf[i + 4 + 1] & 0xF);
1064  dmb_crate_coll.push_back(dmb_inst_crate);
1065  dmb_slot_coll.push_back(dmb_inst_slot);
1066  }
1067  sprintf(tempbuf1,
1068  "%6i %04x %04x %04x %04x%s%s %s%s%s %i %s %i %s %i",
1069  word_numbering,
1070  buf[i + 3],
1071  buf[i + 2],
1072  buf[i + 1],
1073  buf[i],
1074  sign1,
1075  dmb_common,
1076  dmb_header1,
1077  sign1,
1078  dmb_common_crate,
1079  dmb_inst_crate,
1080  dmb_common_slot,
1081  dmb_inst_slot,
1082  dmb_common_l1a,
1083  dmb_inst_l1a);
1084  dmb_h1_coll.push_back(word_numbering);
1085  std::cout << tempbuf1 << std::endl;
1086  w = 0;
1087  ddu_h2_found = 1;
1088  }
1089 
1090  else if (dmb_h2_check[1]) {
1091  dmb_inst_crate = ((buf[i + 1] >> 4) & 0xFF);
1092  dmb_inst_slot = (buf[i + 1] & 0xF);
1093  dmb_h2_coll.push_back(word_numbering);
1094  if (dmb_h1_check[0])
1095  dmb_inst_l1a = ((buf[i - 4] & 0x0FFF) + ((buf[i - 4 + 1] & 0xFFF) << 12));
1096  sprintf(tempbuf1,
1097  "%6i %04x %04x %04x %04x%s%s %s%s%s %i %s %i %s %i",
1098  word_numbering,
1099  buf[i + 3],
1100  buf[i + 2],
1101  buf[i + 1],
1102  buf[i],
1103  sign1,
1104  dmb_common,
1105  dmb_header2,
1106  sign1,
1107  dmb_common_crate,
1108  dmb_inst_crate,
1109  dmb_common_slot,
1110  dmb_inst_slot,
1111  dmb_common_l1a,
1112  dmb_inst_l1a);
1113  std::cout << tempbuf1 << std::endl;
1114  w = 0;
1115  ddu_h2_found = 1;
1116  }
1117 
1118  //DDU Trailer 1
1119 
1120  else if (ddu_tr1_check[1]) {
1121  ddu_inst_i = ddu_h1_n_coll.size();
1122  if (ddu_inst_i > 0) {
1123  ddu_inst_n = ddu_h1_n_coll[ddu_inst_i - 1];
1124  }
1125  //ddu_inst_n=ddu_h1_n_coll[ddu_inst_i-1];
1126  sprintf(tempbuf1,
1127  "%6i %04x %04x %04x %04x%s%s%i %s",
1128  word_numbering,
1129  buf[i + 3],
1130  buf[i + 2],
1131  buf[i + 1],
1132  buf[i],
1133  sign1,
1134  ddu_common,
1135  ddu_inst_n,
1136  ddu_trail1);
1137  ddu_t1_coll.push_back(word_numbering);
1138  std::cout << tempbuf1 << std::endl;
1139  w = 0;
1140  }
1141 
1143  else if (alct_h1_check[1]) {
1144  alct_start = word_numbering;
1145  alct_inst_l1a = (buf[i + 2] & 0x0FFF);
1146  alct_l1a_coll.push_back(alct_inst_l1a);
1147  sprintf(tempbuf1,
1148  "%6i %04x %04x %04x %04x%s%s %s%s %s %i",
1149  word_numbering,
1150  buf[i + 3],
1151  buf[i + 2],
1152  buf[i + 1],
1153  buf[i],
1154  sign1,
1155  alct_common,
1156  alct_header1,
1157  sign1,
1158  dmb_common_l1a,
1159  alct_inst_l1a);
1160  alct_h1_coll.push_back(word_numbering);
1161  std::cout << tempbuf1 << std::endl;
1162  w = 0;
1163  }
1164 
1165  else if ((alct_h1_check[0]) && (alct_h2_check[2])) {
1166  alct_inst_bxn = (buf[i] & 0x0FFF);
1167  alct_bxn_coll.push_back(alct_inst_bxn);
1168  sprintf(tempbuf1,
1169  "%6i %04x %04x %04x %04x%s%s %s%s%s %i",
1170  word_numbering,
1171  buf[i + 3],
1172  buf[i + 2],
1173  buf[i + 1],
1174  buf[i],
1175  sign1,
1176  alct_common,
1177  alct_header2,
1178  sign1,
1179  alct_common_bxn,
1180  alct_inst_bxn);
1181  alct_h2_coll.push_back(word_numbering);
1182  std::cout << tempbuf1 << std::endl;
1183  w = 0;
1184  }
1185 
1186  //ALCT Trailer 1
1187  else if (alct_tr1_check[1]) {
1188  alct_stop = word_numbering;
1189  if ((alct_start != 0) && (alct_stop != 0) && (alct_stop > alct_start)) {
1190  alct_inst_wcnt2 = 4 * (alct_stop - alct_start + 1);
1191  alct_wcnt2_coll.push_back(alct_inst_wcnt2);
1192  alct_wcnt2_id_coll.push_back(alct_start);
1193  }
1194  alct_inst_wcnt1 = (buf[i + 3] & 0x7FF);
1195  alct_wcnt1_coll.push_back(alct_inst_wcnt1);
1196  sprintf(tempbuf1,
1197  "%6i %04x %04x %04x %04x%s%s %s%s%s %i %s %i",
1198  word_numbering,
1199  buf[i + 3],
1200  buf[i + 2],
1201  buf[i + 1],
1202  buf[i],
1203  sign1,
1204  alct_common,
1205  alct_tr1,
1206  sign1,
1207  alct_common_wcnt1,
1208  alct_inst_wcnt1,
1209  alct_common_wcnt2,
1210  alct_inst_wcnt2);
1211  alct_t1_coll.push_back(word_numbering);
1212  std::cout << tempbuf1 << std::endl;
1213  w = 0;
1214  alct_inst_wcnt2 = 0;
1215  }
1216 
1217  //DDU Trailer 3
1218 
1219  // else if ((ddu_tr1_check[-1])&&(tempbuf_short[0]==ddu_trailer3_bit[0])) { // !!! TO FIX: negative index
1220  else if ((ddu_h2_h1) && (tempbuf_short[0] == ddu_trailer3_bit[0])) {
1221  //&&(tempbuf_short[0]==ddu_trailer3_bit[0])){
1222  ddu_inst_i = ddu_h1_n_coll.size();
1223  if (ddu_inst_i > 0) {
1224  ddu_inst_n = ddu_h1_n_coll[ddu_inst_i - 1];
1225  }
1226  //ddu_inst_n=ddu_h1_n_coll[ddu_inst_i-1];
1227  sprintf(tempbuf1,
1228  "%6i %04x %04x %04x %04x%s%s%i %s",
1229  word_numbering,
1230  buf[i + 3],
1231  buf[i + 2],
1232  buf[i + 1],
1233  buf[i],
1234  sign1,
1235  ddu_common,
1236  ddu_inst_n,
1237  ddu_trail3);
1238  ddu_t3_coll.push_back(word_numbering);
1239  std::cout << tempbuf1 << std::endl;
1240  w = 0;
1241  }
1242  //DDU Trailer 2
1243  else if ((ddu_tr1_check[0]) && (tempbuf_short[0] != ddu_trailer3_bit[0])) {
1244  //&&(tempbuf_short[0]==ddu_trailer3_bit[0])){
1245  ddu_inst_i = ddu_h1_n_coll.size();
1246  if (ddu_inst_i > 0) {
1247  ddu_inst_n = ddu_h1_n_coll[ddu_inst_i - 1];
1248  }
1249  //ddu_inst_n=ddu_h1_n_coll[ddu_inst_i-1];
1250  sprintf(tempbuf1,
1251  "%6i %04x %04x %04x %04x%s%s%i %s",
1252  word_numbering,
1253  buf[i + 3],
1254  buf[i + 2],
1255  buf[i + 1],
1256  buf[i],
1257  sign1,
1258  ddu_common,
1259  ddu_inst_n,
1260  ddu_trail2);
1261  ddu_t2_coll.push_back(word_numbering);
1262  std::cout << tempbuf1 << std::endl;
1263  w = 0;
1264  }
1265 
1266  //DMB Trailer 1,2
1267  else if (dmb_tr1_check[1]) {
1268  sprintf(tempbuf1,
1269  "%6i %04x %04x %04x %04x%s%s %s",
1270  word_numbering,
1271  buf[i + 3],
1272  buf[i + 2],
1273  buf[i + 1],
1274  buf[i],
1275  sign1,
1276  dmb_common,
1277  dmb_tr1);
1278  dmb_t1_coll.push_back(word_numbering);
1279  std::cout << tempbuf1 << std::endl;
1280  w = 0;
1281  cfeb_sample = 0;
1282  }
1283 
1284  else if (dmb_tr2_check[1]) {
1285  sprintf(tempbuf1,
1286  "%6i %04x %04x %04x %04x%s%s %s",
1287  word_numbering,
1288  buf[i + 3],
1289  buf[i + 2],
1290  buf[i + 1],
1291  buf[i],
1292  sign1,
1293  dmb_common,
1294  dmb_tr2);
1295  dmb_t2_coll.push_back(word_numbering);
1296  std::cout << tempbuf1 << std::endl;
1297  w = 0;
1298  }
1299  // TMB
1300  else if (tmb_h1_check[1]) {
1301  tmb_start = word_numbering;
1302  tmb_inst_l1a = (buf[i + 2] & 0x000F);
1303  tmb_l1a_coll.push_back(tmb_inst_l1a);
1304  sprintf(tempbuf1,
1305  "%6i %04x %04x %04x %04x%s%s %s%s%s %i",
1306  word_numbering,
1307  buf[i + 3],
1308  buf[i + 2],
1309  buf[i + 1],
1310  buf[i],
1311  sign1,
1312  tmb_common,
1313  tmb_header1,
1314  sign1,
1315  dmb_common_l1a,
1316  tmb_inst_l1a);
1317  tmb_h1_coll.push_back(word_numbering);
1318  std::cout << tempbuf1 << std::endl;
1319  w = 0;
1320  } else if (tmb_tr1_check[1]) {
1321  tmb_stop = word_numbering;
1322  if ((tmb_start != 0) && (tmb_stop != 0) && (tmb_stop > tmb_start)) {
1323  tmb_inst_wcnt2 = 4 * (tmb_stop - tmb_start + 1);
1324  tmb_wcnt2_coll.push_back(tmb_inst_wcnt2);
1325  }
1326  tmb_inst_wcnt1 = (buf[i + 3] & 0x7FF);
1327  tmb_wcnt1_coll.push_back(tmb_inst_wcnt1);
1328  sprintf(tempbuf1,
1329  "%6i %04x %04x %04x %04x%s%s %s%s%s %i %s %i",
1330  word_numbering,
1331  buf[i + 3],
1332  buf[i + 2],
1333  buf[i + 1],
1334  buf[i],
1335  sign1,
1336  tmb_common,
1337  tmb_tr1,
1338  sign1,
1339  alct_common_wcnt1,
1340  tmb_inst_wcnt1,
1341  alct_common_wcnt2,
1342  tmb_inst_wcnt2);
1343  tmb_t1_coll.push_back(word_numbering);
1344  std::cout << tempbuf1 << std::endl;
1345  w = 0;
1346  tmb_inst_wcnt2 = 0;
1347  }
1348  // CFEB
1349  else if (cfeb_tr1_check[1]) {
1350  ++cfeb_sample;
1351  sprintf(tempbuf1,
1352  "%6i %04x %04x %04x %04x%s%s %s%s %s %i",
1353  word_numbering,
1354  buf[i + 3],
1355  buf[i + 2],
1356  buf[i + 1],
1357  buf[i],
1358  sign1,
1359  cfeb_common,
1360  cfeb_tr1,
1361  sign1,
1362  cfeb_common_sample,
1363  cfeb_sample);
1364  cfeb_t1_coll.push_back(word_numbering);
1365  std::cout << tempbuf1 << std::endl;
1366  w = 0;
1367  } else if (cfeb_b_check[1]) {
1368  sprintf(tempbuf1,
1369  "%6i %04x %04x %04x %04x%s%s %s",
1370  word_numbering,
1371  buf[i + 3],
1372  buf[i + 2],
1373  buf[i + 1],
1374  buf[i],
1375  sign1,
1376  cfeb_common,
1377  cfeb_b);
1378  std::cout << tempbuf1 << std::endl;
1379  w = 0;
1380  }
1381 
1382  //ERRORS ddu_tr1_bad_check
1383 
1384  else if (ddu_tr1_bad_check[1]) {
1385  ddu_inst_i = ddu_h1_n_coll.size();
1386  ddu_inst_n = ddu_h1_n_coll[ddu_inst_i - 1];
1387  sprintf(tempbuf1,
1388  "%6i %04x %04x %04x %04x%s%s%i %s %s",
1389  word_numbering,
1390  buf[i + 3],
1391  buf[i + 2],
1392  buf[i + 1],
1393  buf[i],
1394  sign1,
1395  ddu_common,
1396  ddu_inst_n,
1397  ddu_trail1,
1398  ddu_tr1_err_common);
1399  std::cout << tempbuf1 << std::endl;
1400  w = 0;
1401  }
1402 
1403  else if (extraction && (!ddu_h1_check) && (!dcc_check)) {
1404  if (w < 3) {
1405  sprintf(tempbuf, "%6i %04x %04x %04x %04x", word_numbering, buf[i + 3], buf[i + 2], buf[i + 1], buf[i]);
1406  std::cout << tempbuf << std::endl;
1407  w++;
1408  }
1409  if (w == 3) {
1410  std::cout << "..................................................." << std::endl;
1411  w++;
1412  }
1413  }
1414 
1415  else if ((!ddu_h1_check) && (!dcc_check)) {
1416  sprintf(tempbuf, "%6i %04x %04x %04x %04x", word_numbering, buf[i + 3], buf[i + 2], buf[i + 1], buf[i]);
1417  std::cout << tempbuf << std::endl;
1418  }
1419 
1420  i += 3;
1421  ddu_h1_check = false;
1422  dcc_check = false;
1423  }
1424  //char sign[30]; //WARNING 5_0_X
1425  std::cout << "********************************************************************************" << std::endl
1426  << std::endl;
1427  if (fedshort)
1428  std::cout << "For complete output turn off VisualFEDShort in muonCSCDigis configuration file." << std::endl;
1429  std::cout << "********************************************************************************" << std::endl
1430  << std::endl;
1431  std::cout << std::endl << std::endl;
1432  std::cout << " Summary " << std::endl;
1433  std::cout << std::endl << std::endl;
1434  std::cout << ddu_h1_coll.size() << " " << ddu_common << " " << ddu_header1 << " "
1435  << "found" << std::endl;
1436  /*
1437  std::cout << ddu_h1_coll.size() << " " << ddu_h1_n_coll.size() << " " << ddu_l1a_coll.size() <<
1438  " " << ddu_bxn_coll.size() << std::endl;
1439  */
1440  for (unsigned int k = 0; k < ddu_h1_coll.size(); ++k) {
1441  /*
1442  sprintf(sign,"%s%6i%5s %s%i %s %i %s %i","Line: ",
1443  ddu_h1_coll[k],sign1,ddu_common,ddu_h1_n_coll[k],dmb_common_l1a,ddu_l1a_coll[k],
1444  alct_common_bxn,ddu_bxn_coll[k]);
1445  */
1446  std::cout << "Line: "
1447  << " " << ddu_h1_coll[k] << " " << sign1 << " " << ddu_common << " " << ddu_h1_n_coll[k] << " "
1448  << dmb_common_l1a << " " << ddu_l1a_coll[k] << " " << alct_common_bxn << " " << ddu_bxn_coll[k]
1449  << std::endl;
1450  }
1451 
1452  std::cout << std::endl << std::endl;
1453  std::cout << "||||||||||||||||||||" << std::endl;
1454  std::cout << std::endl << std::endl;
1455  std::cout << ddu_h2_coll.size() << " " << ddu_common << " " << ddu_header2 << " "
1456  << "found" << std::endl;
1457  for (unsigned int k = 0; k < ddu_h2_coll.size(); ++k)
1458  std::cout << "Line: " << ddu_h2_coll[k] << std::endl;
1459  std::cout << std::endl << std::endl;
1460  std::cout << "||||||||||||||||||||" << std::endl;
1461  std::cout << std::endl << std::endl;
1462  std::cout << ddu_h3_coll.size() << " " << ddu_common << " " << ddu_header3 << " "
1463  << "found" << std::endl;
1464  for (unsigned int k = 0; k < ddu_h3_coll.size(); ++k)
1465  std::cout << "Line: " << ddu_h3_coll[k] << std::endl;
1466  std::cout << std::endl << std::endl;
1467  std::cout << "||||||||||||||||||||" << std::endl;
1468  std::cout << std::endl << std::endl;
1469  std::cout << ddu_t1_coll.size() << " " << ddu_common << " " << ddu_trail1 << " "
1470  << "found" << std::endl;
1471  for (unsigned int k = 0; k < ddu_t1_coll.size(); ++k)
1472  std::cout << "Line: " << ddu_t1_coll[k] << std::endl;
1473  std::cout << std::endl << std::endl;
1474  std::cout << "||||||||||||||||||||" << std::endl;
1475  std::cout << std::endl << std::endl;
1476  std::cout << ddu_t2_coll.size() << " " << ddu_common << " " << ddu_trail2 << " "
1477  << "found" << std::endl;
1478  for (unsigned int k = 0; k < ddu_t2_coll.size(); ++k)
1479  std::cout << "Line: " << ddu_t2_coll[k] << std::endl;
1480  std::cout << std::endl << std::endl;
1481  std::cout << "||||||||||||||||||||" << std::endl;
1482  std::cout << std::endl << std::endl;
1483  std::cout << ddu_t3_coll.size() << " " << ddu_common << " " << ddu_trail3 << " "
1484  << "found" << std::endl;
1485  for (unsigned int k = 0; k < ddu_t3_coll.size(); ++k)
1486  std::cout << "Line: " << ddu_t3_coll[k] << std::endl;
1487  std::cout << std::endl << std::endl;
1488  std::cout << "||||||||||||||||||||" << std::endl;
1489  std::cout << std::endl << std::endl;
1490  std::cout << dmb_h1_coll.size() << " " << dmb_common << " " << dmb_header1 << " "
1491  << "found" << std::endl;
1492 
1493  for (unsigned int k = 0; k < dmb_h1_coll.size(); ++k) {
1494  /*
1495  sprintf(sign,"%s%6i%5s %s %s %i %s %i %s %i","Line: ",
1496  dmb_h1_coll[k],sign1,dmb_common,dmb_common_crate,dmb_crate_coll[k],dmb_common_slot,
1497  dmb_slot_coll[k],dmb_common_l1a,dmb_l1a_coll[k]);
1498  */
1499  std::cout << "Line: "
1500  << " " << dmb_h1_coll[k] << " " << sign1 << dmb_common << " " << dmb_common_crate << " "
1501  << dmb_crate_coll[k] << " " << dmb_common_slot << " " << dmb_slot_coll[k] << " " << dmb_common_l1a << " "
1502  << dmb_l1a_coll[k] << std::endl;
1503  }
1504  std::cout << std::endl << std::endl;
1505  std::cout << "||||||||||||||||||||" << std::endl;
1506  std::cout << std::endl << std::endl;
1507  std::cout << dmb_h2_coll.size() << " " << dmb_common << " " << dmb_header2 << " "
1508  << "found" << std::endl;
1509  for (unsigned int k = 0; k < dmb_h2_coll.size(); ++k)
1510  std::cout << "Line: " << dmb_h2_coll[k] << std::endl;
1511  std::cout << std::endl << std::endl;
1512  std::cout << "||||||||||||||||||||" << std::endl;
1513  std::cout << std::endl << std::endl;
1514  std::cout << dmb_t1_coll.size() << " " << dmb_common << " " << dmb_tr1 << " "
1515  << "found" << std::endl;
1516  for (unsigned int k = 0; k < dmb_t1_coll.size(); ++k)
1517  std::cout << "Line: " << dmb_t1_coll[k] << std::endl;
1518  std::cout << std::endl << std::endl;
1519  std::cout << "||||||||||||||||||||" << std::endl;
1520  std::cout << std::endl << std::endl;
1521  std::cout << dmb_t2_coll.size() << " " << dmb_common << " " << dmb_tr2 << " "
1522  << "found" << std::endl;
1523  for (unsigned int k = 0; k < dmb_t2_coll.size(); ++k)
1524  std::cout << "Line: " << dmb_t2_coll[k] << std::endl;
1525  std::cout << std::endl << std::endl;
1526  std::cout << "||||||||||||||||||||" << std::endl;
1527  std::cout << std::endl << std::endl;
1528  std::cout << alct_h1_coll.size() << " " << alct_common << " " << alct_header1 << " "
1529  << "found" << std::endl;
1530  for (unsigned int k = 0; k < alct_h1_coll.size(); ++k) {
1531  /*
1532  sprintf(sign,"%s%6i%5s %s %s %i","Line: ",
1533  alct_h1_coll[k],sign1,alct_common,
1534  dmb_common_l1a,alct_l1a_coll[k]);
1535  std::cout << sign << std::endl;
1536  */
1537  std::cout << "Line: "
1538  << " " << alct_h1_coll[k] << " " << sign1 << " " << alct_common << " " << dmb_common_l1a << " "
1539  << alct_l1a_coll[k] << std::endl;
1540  }
1541 
1542  std::cout << std::endl << std::endl;
1543  std::cout << "||||||||||||||||||||" << std::endl;
1544  std::cout << std::endl << std::endl;
1545  std::cout << alct_h2_coll.size() << " " << alct_common << " " << alct_header2 << " "
1546  << "found" << std::endl;
1547  for (unsigned int k = 0; k < alct_h2_coll.size(); ++k) {
1548  /*
1549  sprintf(sign,"%s%6i%5s %s %s %i","Line: ",
1550  alct_h1_coll[k],sign1,alct_common,
1551  alct_common_bxn,alct_bxn_coll[k]);
1552  std::cout << sign << std::endl;
1553  */
1554  std::cout << "Line: "
1555  << " " << alct_h1_coll[k] << " " << sign1 << " " << alct_common << " " << alct_common_bxn << " "
1556  << alct_bxn_coll[k] << std::endl;
1557  }
1558 
1559  std::cout << std::endl << std::endl;
1560  std::cout << "||||||||||||||||||||" << std::endl;
1561  std::cout << std::endl << std::endl;
1562  std::cout << alct_t1_coll.size() << " " << alct_common << " " << alct_tr1 << " "
1563  << "found" << std::endl;
1564  for (unsigned int k = 0; k < alct_t1_coll.size(); ++k) {
1565  /*
1566  sprintf(sign,"%s%6i%5s %s %s %i %s %i","Line: ",
1567  alct_t1_coll[k],sign1,alct_common,
1568  alct_common_wcnt1,alct_wcnt1_coll[k],alct_common_wcnt2,alct_wcnt2_coll[k]);
1569  std::cout << sign << std::endl;
1570  */
1571  std::cout << "Line: "
1572  << " " << alct_t1_coll[k] << " " << sign1 << " " << alct_common << " " << alct_common_wcnt1 << " "
1573  << alct_wcnt1_coll[k] << " " << alct_common_wcnt2 << " ";
1574  if (!alct_wcnt2_coll.empty()) {
1575  std::cout << alct_wcnt2_coll[k] << std::endl;
1576  } else {
1577  std::cout << "Undefined (ALCT Header is not found) " << std::endl;
1578  }
1579  }
1580 
1581  std::cout << std::endl << std::endl;
1582  std::cout << "||||||||||||||||||||" << std::endl;
1583  std::cout << std::endl << std::endl;
1584  std::cout << tmb_h1_coll.size() << " " << tmb_common << " " << tmb_header1 << " "
1585  << "found" << std::endl;
1586  for (unsigned int k = 0; k < tmb_h1_coll.size(); ++k) {
1587  /*
1588  sprintf(sign,"%s%6i%5s %s %s %i","Line: ",
1589  tmb_h1_coll[k],sign1,tmb_common,
1590  dmb_common_l1a,tmb_l1a_coll[k]);
1591  std::cout << sign << std::endl;
1592  */
1593  std::cout << "Line: "
1594  << " " << tmb_h1_coll[k] << " " << sign1 << " " << tmb_common << " " << dmb_common_l1a << " "
1595  << tmb_l1a_coll[k] << std::endl;
1596  }
1597 
1598  std::cout << std::endl << std::endl;
1599  std::cout << "||||||||||||||||||||" << std::endl;
1600  std::cout << std::endl << std::endl;
1601  std::cout << tmb_t1_coll.size() << " " << tmb_common << " " << tmb_tr1 << " "
1602  << "found" << std::endl;
1603  for (unsigned int k = 0; k < tmb_t1_coll.size(); ++k) {
1604  /*
1605  sprintf(sign,"%s%6i%5s %s %s %i %s %i","Line: ",
1606  tmb_t1_coll[k],sign1,tmb_common,
1607  alct_common_wcnt1,tmb_wcnt1_coll[k],alct_common_wcnt2,tmb_wcnt2_coll[k]);
1608  std::cout << sign << std::endl;
1609  */
1610  std::cout << "Line: "
1611  << " " << tmb_t1_coll[k] << " " << sign1 << " " << tmb_common << " " << alct_common_wcnt1 << " "
1612  << tmb_wcnt1_coll[k] << " " << alct_common_wcnt2 << " " << tmb_wcnt2_coll[k] << std::endl;
1613  }
1614 
1615  std::cout << std::endl << std::endl;
1616  std::cout << "||||||||||||||||||||" << std::endl;
1617  std::cout << std::endl << std::endl;
1618  std::cout << cfeb_t1_coll.size() << " " << cfeb_common << " " << cfeb_tr1 << " "
1619  << "found" << std::endl;
1620  for (unsigned int k = 0; k < cfeb_t1_coll.size(); ++k)
1621  std::cout << "Line: " << cfeb_t1_coll[k] << std::endl;
1622  std::cout << "********************************************************************************" << std::endl;
1623 }
1624 
ConfigurationDescriptions.h
FEDNumbering.h
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
Handle.h
CSCCorrelatedLCTDigiCollection.h
mps_fire.i
i
Definition: mps_fire.py:428
CSCDCCUnpacker::useExaminer
bool useExaminer
Definition: CSCDCCUnpacker.cc:80
MessageLogger.h
CSCEventData.h
CSCDCCUnpacker::instantiateDQM
bool instantiateDQM
Definition: CSCDCCUnpacker.cc:93
CSCCrateMapRcd.h
CSCDCCUnpacker::crateToken
edm::ESGetToken< CSCCrateMap, CSCCrateMapRcd > crateToken
Definition: CSCDCCUnpacker.cc:98
CSCRPCData::setDebug
static void setDebug(bool debugValue)
Definition: CSCRPCData.h:26
CSCDCCUnpacker::produce
void produce(edm::Event &e, const edm::EventSetup &c) override
Produce digis out of raw data.
Definition: CSCDCCUnpacker.cc:200
CSCDDUEventData::setErrorMask
static void setErrorMask(unsigned int value)
Definition: CSCDDUEventData.h:30
CSCDCCExaminer::errors
ExaminerStatusType errors(void) const
Definition: CSCDCCExaminer.h:169
ESHandle.h
CSCEventData::setDebug
static void setDebug(const bool value)
Definition: CSCEventData.h:45
CSCChamberMapRcd.h
edm::EDGetTokenT< FEDRawDataCollection >
CSCTMBStatusDigi
Definition: CSCTMBStatusDigi.h:15
CSCDCCUnpacker::~CSCDCCUnpacker
~CSCDCCUnpacker() override
Destructor.
Definition: CSCDCCUnpacker.cc:172
CSCDCCExaminer::nERRORS
const uint16_t nERRORS
Definition: CSCDCCExaminer.h:17
CSCDCCEventData
01/20/05 A.Tumanov
Definition: CSCDCCEventData.h:13
gather_cfg.cout
cout
Definition: gather_cfg.py:144
CSCTMBData::setDebug
static void setDebug(const bool value)
Definition: CSCTMBData.h:34
CSCCFEBData.h
CSCDCCUnpacker::formatedEventDump
bool formatedEventDump
Definition: CSCDCCUnpacker.cc:87
CSCDCCUnpacker::unpackStatusDigis
bool unpackStatusDigis
Definition: CSCDCCUnpacker.cc:80
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89353
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
CSCALCTHeader::setDebug
static void setDebug(bool value)
to access data by via status digis
Definition: CSCALCTHeader.h:30
FEDNumbering::MAXCSCFEDID
Definition: FEDNumbering.h:52
EDProducer.h
cscmap
Definition: CSCMap.h:8
CSCChamberMap::ddu
int ddu(const CSCDetId &) const
ddu id for given DetId
Definition: CSCChamberMap.cc:36
CSCMonitorInterface::process
virtual void process(CSCDCCExaminer *examiner, CSCDCCEventData *dccData)=0
CSCDCCUnpacker::visualFEDInspect
bool visualFEDInspect
Visualization of raw data.
Definition: CSCDCCUnpacker.cc:87
CSCDCCUnpacker::cscmapToken
edm::ESGetToken< CSCChamberMap, CSCChamberMapRcd > cscmapToken
Definition: CSCDCCUnpacker.cc:99
CSCDDUEventData::setDebug
static void setDebug(bool value)
Definition: CSCDDUEventData.h:29
CSCDCCExaminer::modeDDU
void modeDDU(bool enable)
Definition: CSCDCCExaminer.cc:53
FEDNumbering::MAXCSCDDUFEDID
Definition: FEDNumbering.h:90
edm::Handle
Definition: AssociativeIterator.h:50
ESGetToken.h
FEDRawData::data
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:24
FEDRawData
Definition: FEDRawData.h:19
GEMPadDigiClusterCollection.h
MakerMacros.h
RPCNoise_example.check
check
Definition: RPCNoise_example.py:71
CSCRPCDigiCollection.h
CSCTMBData.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
CSCDCCFormatStatusDigi
CSC Format Status Object.
Definition: CSCDCCFormatStatusDigi.h:160
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
CSCDCCUnpacker::visual_raw
void visual_raw(int hl, int id, int run, int event, bool fedshort, bool fDump, short unsigned int *buf) const
Visualization of raw data in FED-less events (Robert Harr and Alexander Sakharov)
Definition: CSCDCCUnpacker.cc:643
CSCCFEBStatusDigiCollection.h
Service.h
w
const double w
Definition: UKUtility.cc:23
CSCDCCExaminer::errorsDetailed
std::map< CSCIdType, ExaminerStatusType > errorsDetailed(void) const
Definition: CSCDCCExaminer.h:301
CSCDCCStatusDigiCollection.h
CSCDCCEventData.h
CSCComparatorData::setDebug
static void setDebug(const bool value)
Definition: CSCComparatorData.h:31
edm::ESHandle
Definition: DTSurvey.h:22
CSCDCCUnpacker::examinerMask
unsigned int examinerMask
Definition: CSCDCCUnpacker.cc:92
GetRecoTauVFromDQM_MC_cff.kk
kk
Definition: GetRecoTauVFromDQM_MC_cff.py:84
dqmdumpme.k
k
Definition: dqmdumpme.py:60
ParameterSetDescription.h
CSCDCCUnpacker
Definition: CSCDCCUnpacker.cc:63
CSCDCCStatusDigi
Definition: CSCDCCStatusDigi.h:15
FEDRawDataCollection::FEDData
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
Definition: FEDRawDataCollection.cc:19
CSCDCCExaminer::getMask
ExaminerMaskType getMask() const
Definition: CSCDCCExaminer.h:167
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
CSCALCTStatusDigi
Definition: CSCALCTStatusDigi.h:15
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
CSCDCCExaminer::setMask
void setMask(ExaminerMaskType mask)
Definition: CSCDCCExaminer.h:166
CSCChamberMap.h
edm::ConfigurationDescriptions::setComment
void setComment(std::string const &value)
Definition: ConfigurationDescriptions.cc:48
CSCDetId
Definition: CSCDetId.h:26
CSCDDUStatusDigi
Definition: CSCDDUStatusDigi.h:15
CSCDCCExaminer::check
int32_t check(const uint16_t *&buffer, int32_t length)
Definition: CSCDCCExaminer.cc:263
CSCChamberMap
Definition: CSCChamberMap.h:11
CSCDCCExaminer
Definition: CSCDCCExaminer.h:15
edm::Service
Definition: Service.h:30
createfilelist.int
int
Definition: createfilelist.py:10
CSCDCCUnpacker::debug
bool debug
Definition: CSCDCCUnpacker.cc:80
CSCDCCUnpacker::numOfEvents
int numOfEvents
Definition: CSCDCCUnpacker.cc:91
FEDRawDataCollection.h
CSCDCCUnpacker::visualFEDShort
bool visualFEDShort
Definition: CSCDCCUnpacker.cc:87
edm::stream::EDProducer
Definition: EDProducer.h:38
CSCStripDigiCollection.h
edm::EventSetup
Definition: EventSetup.h:57
FEDNumbering::MINCSCFEDID
Definition: FEDNumbering.h:51
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
res
Definition: Electron.h:6
visDQMUpload.buf
buf
Definition: visDQMUpload.py:154
edm::ESGetToken< CSCCrateMap, CSCCrateMapRcd >
FEDRawData::size
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:45
InputTag.h
CSCMonitorInterface.h
CSCMonitorInterface
Definition: CSCMonitorInterface.h:16
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
CSCDCCUnpacker::useGEMs_
bool useGEMs_
option to unpack GEM cluster data
Definition: CSCDCCUnpacker.cc:84
eostools.move
def move(src, dest)
Definition: eostools.py:511
CSCDCCUnpacker::goodEvent
bool goodEvent
Definition: CSCDCCUnpacker.cc:80
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
writedatasetfile.run
run
Definition: writedatasetfile.py:27
CSCDDUEventData
Definition: CSCDDUEventData.h:19
CSCDCCExaminer::payloadDetailed
std::map< CSCIdType, ExaminerStatusType > payloadDetailed(void) const
Definition: CSCDCCExaminer.h:303
CSCDCCUnpacker::i_token
edm::EDGetTokenT< FEDRawDataCollection > i_token
Token for consumes interface & access to data.
Definition: CSCDCCUnpacker.cc:97
CSCDCCExaminer::crcTMB
void crcTMB(bool enable)
Definition: CSCDCCExaminer.cc:37
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
CSCALCTStatusDigiCollection.h
CSCDCCExaminer::crcALCT
void crcALCT(bool enable)
Definition: CSCDCCExaminer.cc:29
CSCDCCUnpacker::monitor
CSCMonitorInterface * monitor
Definition: CSCDCCUnpacker.cc:94
CSCCrateMap::detId
CSCDetId detId(int vme, int dmb, int cfeb, int layer=0) const
Definition: CSCCrateMap.cc:9
EventSetup.h
FEDNumbering::MINCSCDDUFEDID
Definition: FEDNumbering.h:89
CSCTMBStatusDigiCollection.h
CSCDMBStatusDigiCollection.h
CSCComparatorDigiCollection.h
CSCDCCUnpacker::useFormatStatus
bool useFormatStatus
Definition: CSCDCCUnpacker.cc:81
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
CSCCrateMap
Definition: CSCCrateMap.h:11
CSCDCCUnpacker::SuppressZeroLCT
bool SuppressZeroLCT
Suppress zeros LCTs.
Definition: CSCDCCUnpacker.cc:89
RecoTauValidation_cfi.header
header
Definition: RecoTauValidation_cfi.py:292
CSCWireDigiCollection.h
CSCDCCExaminer::statusDetailed
std::map< CSCIdType, ExaminerStatusType > statusDetailed(void) const
Definition: CSCDCCExaminer.h:304
CSCDCCExaminer::crcCFEB
void crcCFEB(bool enable)
Definition: CSCDCCExaminer.cc:45
CSCDCCUnpacker::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: CSCDCCUnpacker.cc:176
CSCALCTDigiCollection.h
ConsumesCollector.h
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:224
ParameterSet.h
CSCCLCTDigiCollection.h
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
event
Definition: event.py:1
CSCDDUStatusDigiCollection.h
edm::Event
Definition: Event.h:73
CSCDMBStatusDigi
Definition: CSCDMBStatusDigi.h:15
CSCDCCExaminer::errorsDetailedDDU
std::map< DDUIdType, ExaminerStatusType > errorsDetailedDDU(void) const
Definition: CSCDCCExaminer.h:299
CSCDCCUnpacker::CSCDCCUnpacker
CSCDCCUnpacker(const edm::ParameterSet &pset)
Constructor.
Definition: CSCDCCUnpacker.cc:102
CSCDCCEventData::setDebug
static void setDebug(bool value)
Definition: CSCDCCEventData.h:22
CSCDCCExaminer::errName
const char * errName(int num) const
Definition: CSCDCCExaminer.h:172
edm::InputTag
Definition: InputTag.h:15
CSCDCCUnpacker::errorMask
unsigned int errorMask
Definition: CSCDCCUnpacker.cc:92
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
CSCTMBHeader::setDebug
static void setDebug(const bool value)
Definition: CSCTMBHeader.h:84
CSCDCCUnpacker::printEventNumber
bool printEventNumber
Definition: CSCDCCUnpacker.cc:80
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
CSCDCCUnpacker::useSelectiveUnpacking
bool useSelectiveUnpacking
Definition: CSCDCCUnpacker.cc:81
CSCCrateMap.h
CSCDCCFormatStatusDigiCollection.h