CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalRawDataMonitor.cc
Go to the documentation of this file.
1 
7 
8 
10  Online_ = ps.getUntrackedParameter<bool>("online");
11  mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns");
12  enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup");
13  debug_ = ps.getUntrackedParameter<int>("debug",0);
14  prefixME_ = ps.getUntrackedParameter<std::string>("subSystemFolder", "Hcal/"); // Hcal
15  if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!="/")
16  prefixME_.append("/");
17  subdir_ = ps.getUntrackedParameter<std::string>("TaskFolder", "RawDataMonitor_Hcal/"); // RawDataMonitor_Hcal
18  if (subdir_.size()>0 && subdir_.substr(subdir_.size()-1,subdir_.size())!="/")
19  subdir_.append("/");
20  subdir_=prefixME_+subdir_;
21  AllowedCalibTypes_ = ps.getUntrackedParameter<std::vector<int> > ("AllowedCalibTypes");
22  skipOutOfOrderLS_ = ps.getUntrackedParameter<bool>("skipOutOfOrderLS",true);
23  NLumiBlocks_ = ps.getUntrackedParameter<int>("NLumiBlocks",-1);
24  makeDiagnostics_ = ps.getUntrackedParameter<bool>("makeDiagnostics",false);
25 
26  FEDRawDataCollection_ = ps.getUntrackedParameter<edm::InputTag>("FEDRawDataCollection");
28 
29  excludeHORing2_ = ps.getUntrackedParameter<bool>("excludeHORing2",false);
30 
31  //inputLabelReport_ = ps.getUntrackedParameter<edm::InputTag>("UnpackerReport");
32 
33  // Initialize an array of MonitorElements
35  meChann_DataIntegrityCheck_[1] =meCh_DataIntegrityFED01_;
36  meChann_DataIntegrityCheck_[2] =meCh_DataIntegrityFED02_;
37  meChann_DataIntegrityCheck_[3] =meCh_DataIntegrityFED03_;
38  meChann_DataIntegrityCheck_[4] =meCh_DataIntegrityFED04_;
39  meChann_DataIntegrityCheck_[5] =meCh_DataIntegrityFED05_;
40  meChann_DataIntegrityCheck_[6] =meCh_DataIntegrityFED06_;
41  meChann_DataIntegrityCheck_[7] =meCh_DataIntegrityFED07_;
42  meChann_DataIntegrityCheck_[8] =meCh_DataIntegrityFED08_;
43  meChann_DataIntegrityCheck_[9] =meCh_DataIntegrityFED09_;
44  meChann_DataIntegrityCheck_[10]=meCh_DataIntegrityFED10_;
45  meChann_DataIntegrityCheck_[11]=meCh_DataIntegrityFED11_;
46  meChann_DataIntegrityCheck_[12]=meCh_DataIntegrityFED12_;
47  meChann_DataIntegrityCheck_[13]=meCh_DataIntegrityFED13_;
48  meChann_DataIntegrityCheck_[14]=meCh_DataIntegrityFED14_;
49  meChann_DataIntegrityCheck_[15]=meCh_DataIntegrityFED15_;
50  meChann_DataIntegrityCheck_[16]=meCh_DataIntegrityFED16_;
51  meChann_DataIntegrityCheck_[17]=meCh_DataIntegrityFED17_;
52  meChann_DataIntegrityCheck_[18]=meCh_DataIntegrityFED18_;
53  meChann_DataIntegrityCheck_[19]=meCh_DataIntegrityFED19_;
54  meChann_DataIntegrityCheck_[20]=meCh_DataIntegrityFED20_;
55  meChann_DataIntegrityCheck_[21]=meCh_DataIntegrityFED21_;
56  meChann_DataIntegrityCheck_[22]=meCh_DataIntegrityFED22_;
57  meChann_DataIntegrityCheck_[23]=meCh_DataIntegrityFED23_;
58  meChann_DataIntegrityCheck_[24]=meCh_DataIntegrityFED24_;
59  meChann_DataIntegrityCheck_[25]=meCh_DataIntegrityFED25_;
60  meChann_DataIntegrityCheck_[26]=meCh_DataIntegrityFED26_;
61  meChann_DataIntegrityCheck_[27]=meCh_DataIntegrityFED27_;
62  meChann_DataIntegrityCheck_[28]=meCh_DataIntegrityFED28_;
63  meChann_DataIntegrityCheck_[29]=meCh_DataIntegrityFED29_;
64  meChann_DataIntegrityCheck_[30]=meCh_DataIntegrityFED30_;
65  meChann_DataIntegrityCheck_[31]=meCh_DataIntegrityFED31_;
66 
67  // register for data access
68  tok_raw_ = consumes<FEDRawDataCollection>(FEDRawDataCollection_);
69  tok_unpack_ = consumes<HcalUnpackerReport>(digiLabel_);
70 
71  this->reset();
72 } // HcalRawDataMonitor::HcalRawDataMonitor()
73 
74 // destructor
76 
77 // reset
79 {
80 
81  for (int f=0; f<NUMDCCS; f++) {
82  for (int s=0; s<15; s++) {
83  UScount[f][s]=0;}}
84 
85  for (int x=0; x<THREE_FED; x++)
86  for (int y=0; y<THREE_SPG; y++)
88 
89  for (int x=0; x<THREE_FED; x++)
90  for (int y=0; y<THREE_SPG; y++)
92 
93  for (int x=0; x<TWO___FED; x++)
94  for (int y=0; y<TWO__SPGT; y++)
96 
97  for (int x=0; x<TWO___FED; x++)
98  for (int y=0; y<THREE_SPG; y++)
99  DataFlowInd_[x][y]=0;
100 
101  for (int f=0; f<NUMDCCS; f++)
102  for (int x=0; x< TWO_CHANN; x++)
103  for (int y=0; y<TWO__SPGT; y++)
105 
106  for (int i=0; i<(NUMDCCS * NUMSPIGS * HTRCHANMAX); i++)
108 
109  for (int d=0; d<DEPTHBINS; d++) {
110  for (int eta=0; eta<ETABINS; eta++) {
111  for (int phi=0; phi<PHIBINS; phi++){
112  uniqcounter[eta][phi][d] = 0.0;
113  problemcount[eta][phi][d] = 0.0;
114  problemfound[eta][phi][d] = false;
115  }
116  }
117  }
118 
119  // Properly initialze bylumi counters.
120  NumBadHB=0;
121  NumBadHE=0;
122  NumBadHO=0;
123  NumBadHF=0;
124  NumBadHFLUMI=0;
125  NumBadHO0=0;
126  NumBadHO12=0;
127 
128 } // HcalRawDataMonitor::HcalRawDataMonitor()
129 
130 // BeginRun
134  c.get<HcalDbRecord>().get( pSetup );
135 
136  readoutMap_=pSetup->getHcalMapping();
137  DetId detid_;
138  HcalDetId hcaldetid_;
139 
140  // Build a map of readout hardware unit to calorimeter channel
141  std::vector <HcalElectronicsId> AllElIds = readoutMap_->allElectronicsIdPrecision();
142  uint32_t itsdcc =0;
143  uint32_t itsspigot =0;
144  uint32_t itshtrchan=0;
145 
146  // by looping over all precision (non-trigger) items.
147  for (std::vector <HcalElectronicsId>::iterator eid = AllElIds.begin();
148  eid != AllElIds.end();
149  eid++) {
150 
151  //Get the HcalDetId from the HcalElectronicsId
152  detid_ = readoutMap_->lookup(*eid);
153  // NULL if illegal; ignore
154  if (!detid_.null()) {
155  if (detid_.det()!=4) continue; //not Hcal
156  if (detid_.subdetId()!=HcalBarrel &&
157  detid_.subdetId()!=HcalEndcap &&
158  detid_.subdetId()!=HcalOuter &&
159  detid_.subdetId()!=HcalForward) continue;
160 
161  itsdcc =(uint32_t) eid->dccid();
162  itsspigot =(uint32_t) eid->spigot();
163  itshtrchan=(uint32_t) eid->htrChanId();
164  hcaldetid_ = HcalDetId(detid_);
165  stashHDI(hashup(itsdcc,itsspigot,itshtrchan),
166  hcaldetid_);
167  } // if (!detid_.null())
168  }
169 }
170 
171 // Begin LumiBlock
173  const edm::EventSetup& c) {
174  if (LumiInOrder(lumiSeg.luminosityBlock())==false) return;
176  //zeroCounters(); // zero hot cell counters at the start of each luminosity block
178  return;
179 }
180 // Setup
182  // Call base class setup
184 
185  /******* Set up all histograms ********/
186  if (debug_>1)
187  std::cout <<"<HcalRawDataMonitor::beginRun> Setting up histograms"<<std::endl;
188 
190  ProblemsVsLB=ib.bookProfile("RAW_Problems_HCAL_vs_LS",
191  "Total HCAL RAW Problems vs lumi section",
192  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,10000);
193 
194  ProblemsVsLB_HB=ib.bookProfile("Total_RAW_Problems_HB_vs_LS",
195  "Total HB RAW Problems vs lumi section",
196  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,3000);
197  ProblemsVsLB_HE=ib.bookProfile("Total_RAW_Problems_HE_vs_LS",
198  "Total HE RAW Problems vs lumi section",
199  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,3000);
200  ProblemsVsLB_HO=ib.bookProfile("Total_RAW_Problems_HO_vs_LS",
201  "Total HO RAW Problems vs lumi section",
202  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,3000);
203  ProblemsVsLB_HF=ib.bookProfile("Total_RAW_Problems_HF_vs_LS",
204  "Total HF RAW Problems vs lumi section",
205  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,2000);
206  ProblemsVsLB_HBHEHF=ib.bookProfile("Total_RAW_Problems_HBHEHF_vs_LS",
207  "Total HBHEHF RAW Problems vs lumi section",
208  NLumiBlocks_,0.5,NLumiBlocks_+0.5,100,0,2000);
209 
210  ProblemsVsLB->getTProfile()->SetMarkerStyle(20);
211  ProblemsVsLB_HB->getTProfile()->SetMarkerStyle(20);
212  ProblemsVsLB_HE->getTProfile()->SetMarkerStyle(20);
213  ProblemsVsLB_HO->getTProfile()->SetMarkerStyle(20);
214  ProblemsVsLB_HF->getTProfile()->SetMarkerStyle(20);
215  ProblemsVsLB_HBHEHF->getTProfile()->SetMarkerStyle(20);
216  MonitorElement* excludeHO2=ib.bookInt("ExcludeHOring2");
217  // Fill with 0 if ring is not to be excluded; fill with 1 if it is to be excluded
218  if (excludeHO2) excludeHO2->Fill(excludeHORing2_==true ? 1 : 0);
219 
220 
221  // Already done in base class:
222  //ib.setCurrentFolder(subdir_);
223  //meIevt_ = ib.bookInt("EventsProcessed");
224  //if (meIevt_) meIevt_->Fill(-1);
225  //meLevt_ = ib.bookInt("EventsProcessed_currentLS");
226  //if (meLevt_) meLevt_->Fill(-1);
227  //meTevt_ = ib.bookInt("EventsProcessed_All");
228  //if (meTevt_) meTevt_->Fill(-1);
229  //meTevtHist_=ib.book1D("EventsProcessed_AllHists","Counter of Events Processed By This Task",1,0.5,1.5);
230  //if (meTevtHist_) meTevtHist_->Reset();
231 
233 
234  ib.setCurrentFolder(subdir_ + "Corruption");
235  type = "01 Common Data Format violations";
236  meCDFErrorFound_ = ib.book2D(type,type,32,699.5,731.5,9,0.5,9.5);
237  meCDFErrorFound_->setAxisTitle("HCAL FED ID", 1);
238  meCDFErrorFound_->setBinLabel(1, "Hdr1BitUnset", 2);
239  meCDFErrorFound_->setBinLabel(2, "FmtNumChange", 2);
240  meCDFErrorFound_->setBinLabel(3, "BOE not '0x5'", 2);
241  meCDFErrorFound_->setBinLabel(4, "Hdr2Bit Set", 2);
242  meCDFErrorFound_->setBinLabel(5, "Hdr1 36-55", 2);
243  meCDFErrorFound_->setBinLabel(6, "BOE not 0", 2);
244  meCDFErrorFound_->setBinLabel(7, "Trlr1Bit Set", 2);
245  meCDFErrorFound_->setBinLabel(8, "Size Error", 2);
246  meCDFErrorFound_->setBinLabel(9, "TrailerBad", 2);
247 
248  type = "02 DCC Event Format violation";
249  meDCCEventFormatError_ = ib.book2D(type,type,32,699.5,731.5,6,0.5,6.5);
250  meDCCEventFormatError_->setAxisTitle("HCAL FED ID", 1);
251  meDCCEventFormatError_->setBinLabel(1, "FmtVers Changed", 2);
252  meDCCEventFormatError_->setBinLabel(2, "StrayBits Changed", 2);
253  meDCCEventFormatError_->setBinLabel(3, "HTRStatusPad", 2);
254  meDCCEventFormatError_->setBinLabel(4, "32bitPadErr", 2);
255  meDCCEventFormatError_->setBinLabel(5, "Number Mismatch Bit Miscalc", 2);
256  meDCCEventFormatError_->setBinLabel(6, "Low 8 HTR Status Bits Miscopy", 2);
257 
258  type = "04 HTR BCN when OrN Diff";
259  meBCNwhenOrNDiff_ = ib.book1D(type,type,3564,-0.5,3563.5);
261  meBCNwhenOrNDiff_->setAxisTitle("# of Entries",2);
262 
263  type = "03 OrN NonZero Difference HTR - DCC";
264  meOrNCheck_ = ib.book1D(type,type,65,-32.5,32.5);
265  meOrNCheck_->setAxisTitle("htr OrN - dcc OrN",1);
266 
267  type = "03 OrN Inconsistent - HTR vs DCC";
268  meOrNSynch_= ib.book2D(type,type,32,700,732, 15,0,15);
269  meOrNSynch_->setAxisTitle("FED #",1);
270  meOrNSynch_->setAxisTitle("Spigot #",2);
271 
272  type = "05 BCN NonZero Difference HTR - DCC";
273  meBCNCheck_ = ib.book1D(type,type,501,-250.5,250.5);
274  meBCNCheck_->setAxisTitle("htr BCN - dcc BCN",1);
275 
276  type = "05 BCN Inconsistent - HTR vs DCC";
277  meBCNSynch_= ib.book2D(type,type,32,700,732, 15,0,15);
278  meBCNSynch_->setAxisTitle("FED #",1);
279  meBCNSynch_->setAxisTitle("Slot #",2);
280 
281  type = "06 EvN NonZero Difference HTR - DCC";
282  meEvtNCheck_ = ib.book1D(type,type,601,-300.5,300.5);
283  meEvtNCheck_->setAxisTitle("htr Evt # - dcc Evt #",1);
284 
285  type = "06 EvN Inconsistent - HTR vs DCC";
286  meEvtNumberSynch_= ib.book2D(type,type,32,700,732, 15,0,15);
287  meEvtNumberSynch_->setAxisTitle("FED #",1);
288  meEvtNumberSynch_->setAxisTitle("Slot #",2);
289 
290  // ----------------
291  // | E!P | UE | TR |
292  // ----| ND | OV | ID |
293  // | T | CRC | ST | ODD|
294  // --------------------
295  type="07 LRB Data Corruption Indicators";
298  THREE_SPG,0,THREE_SPG);
299  label_xFEDs (meLRBDataCorruptionIndicators_, 4); // 3 bins + 1 margin per ch.
300  label_ySpigots(meLRBDataCorruptionIndicators_, 4); // 3 bins + 1 margin each spgt
301 
302  // ----------------
303  // | CT | BE | |
304  // | HM | 15 | WW | (Wrong Wordcount)
305  // | TM | CK | IW | (Illegal Wordcount)
306  // ----------------
307  type="08 Half-HTR Data Corruption Indicators";
310  THREE_SPG,0,THREE_SPG);
311  label_xFEDs (meHalfHTRDataCorruptionIndicators_, 4); // 3 bins + 1 margin per ch.
312  label_ySpigots(meHalfHTRDataCorruptionIndicators_, 4); // 3 bins + 1 margin each spgt
313 
314  // ------------
315  // | !DV | Er |
316  // | NTS | Cap |
317  // ------------
318  type = "09 Channel Integrity Summarized by Spigot";
321  TWO__SPGT,0,TWO__SPGT);
322  label_xFEDs (meChannSumm_DataIntegrityCheck_, 3); // 2 bins + 1 margin per ch.
323  label_ySpigots(meChannSumm_DataIntegrityCheck_, 3); // 2 bins + 1 margin per spgt
324 
325  ib.setCurrentFolder(subdir_ + "Corruption/Channel Data Integrity");
326  char label[256];
327  for (int f=0; f<NUMDCCS; f++){
328  snprintf(label, 256, "FED %03d Channel Integrity", f+700);
329  meChann_DataIntegrityCheck_[f] = ib.book2D(label,label,
331  TWO__SPGT,0,TWO__SPGT);
332  label_xChanns (meChann_DataIntegrityCheck_[f], 3); // 2 bins + 1 margin per ch.
333  label_ySpigots(meChann_DataIntegrityCheck_[f], 3); // 2 bins + 1 margin per spgt
334  ;}
335 
336  ib.setCurrentFolder(subdir_ + "Data Flow");
337  type="DCC Event Counts";
338  mefedEntries_ = ib.book1D(type,type,32,699.5,731.5);
339 
340  type = "BCN from DCCs";
341  medccBCN_ = ib.book1D(type,type,3564,-0.5,3563.5);
342  medccBCN_->setAxisTitle("BCN",1);
343  medccBCN_->setAxisTitle("# of Entries",2);
344 
345  type = "BCN from HTRs";
346  meBCN_ = ib.book1D(type,type,3564,-0.5,3563.5);
347  meBCN_->setAxisTitle("BCN",1);
348  meBCN_->setAxisTitle("# of Entries",2);
349 
350  type = "DCC Data Block Size Distribution";
351  meFEDRawDataSizes_=ib.book1D(type,type,1200,-0.5,12000.5);
352  meFEDRawDataSizes_->setAxisTitle("# of bytes",1);
353  meFEDRawDataSizes_->setAxisTitle("# of Data Blocks",2);
354 
355  type = "DCC Data Block Size Profile";
356  meEvFragSize_ = ib.bookProfile(type,type,32,699.5,731.5,100,-1000.0,12000.0,"");
357  type = "DCC Data Block Size Each FED";
358  meEvFragSize2_ = ib.book2D(type,type,64,699.5,731.5, 240,0,12000);
359 
360  // ------------
361  // | OW | OFW | "Two Caps HTR; Three Caps FED."
362  // | BZ | BSY |
363  // | EE | RL |
364  // ----------------
365  // | CE | (corrected error, Hamming code)
366  // ------
367  type = "01 Data Flow Indicators";
368  meDataFlowInd_= ib.book2D(type,type,
370  THREE_SPG,0,THREE_SPG);
371  label_xFEDs (meDataFlowInd_, 3); // 2 bins + 1 margin per ch.
372  label_ySpigots(meDataFlowInd_, 4); // 3 bins + 1 margin each spgt
373 
374  ib.setCurrentFolder(subdir_ + "Diagnostics");
375 
376  type = "DCC Firmware Version";
377  meDCCVersion_ = ib.bookProfile(type,type, 32, 699.5, 731.5, 256, -0.5, 255.5);
378  meDCCVersion_ ->setAxisTitle("FED ID", 1);
379 
380  type = "HTR Status Word HBHE";
381  HTR_StatusWd_HBHE = ib.book1D(type,type,16,-0.5,15.5);
383 
384  type = "HTR Status Word HF";
385  HTR_StatusWd_HF = ib.book1D(type,type,16,-0.5,15.5);
387 
388  type = "HTR Status Word HO";
389  HTR_StatusWd_HO = ib.book1D(type,type,16,-0.5,15.5);
391 
392  int maxbits = 16;//Look at all 16 bits of the Error Words
393  type = "HTR Status Word by Crate";
394  meStatusWdCrate_ = ib.book2D(type,type,18,-0.5,17.5,maxbits,-0.5,maxbits-0.5);
395  meStatusWdCrate_ -> setAxisTitle("Crate #",1);
397 
398  type = "Unpacking - HcalHTRData check failures";
399  meInvHTRData_= ib.book2D(type,type,16,-0.5,15.5,32,699.5,731.5);
400  meInvHTRData_->setAxisTitle("Spigot #",1);
401  meInvHTRData_->setAxisTitle("DCC #",2);
402 
403  type = "HTR Fiber Orbit Message BCN";
404  meFibBCN_ = ib.book1D(type,type,3564,-0.5,3563.5);
405  meFibBCN_->setAxisTitle("BCN of Fib Orb Msg",1);
406 
407  type = "HTR Status Word - Crate 0";
408  meCrate0HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
409  meCrate0HTRStatus_ ->setAxisTitle("Slot #",1);
411 
412  type = "HTR Status Word - Crate 1";
413  meCrate1HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
414  meCrate1HTRStatus_ ->setAxisTitle("Slot #",1);
416 
417  type = "HTR Status Word - Crate 2";
418  meCrate2HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
419  meCrate2HTRStatus_ ->setAxisTitle("Slot #",1);
421 
422  type = "HTR Status Word - Crate 3";
423  meCrate3HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
424  meCrate3HTRStatus_ ->setAxisTitle("Slot #",1);
426 
427  type = "HTR Status Word - Crate 4";
428  meCrate4HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
429  meCrate4HTRStatus_ ->setAxisTitle("Slot #",1);
431 
432  type = "HTR Status Word - Crate 5";
433  meCrate5HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
434  meCrate5HTRStatus_ ->setAxisTitle("Slot #",1);
436 
437  type = "HTR Status Word - Crate 6";
438  meCrate6HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
439  meCrate6HTRStatus_ ->setAxisTitle("Slot #",1);
441 
442  type = "HTR Status Word - Crate 7";
443  meCrate7HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
444  meCrate7HTRStatus_ ->setAxisTitle("Slot #",1);
446 
447  type = "HTR Status Word - Crate 9";
448  meCrate9HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
449  meCrate9HTRStatus_ ->setAxisTitle("Slot #",1);
451 
452  type = "HTR Status Word - Crate 10";
453  meCrate10HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
454  meCrate10HTRStatus_ ->setAxisTitle("Slot #",1);
456 
457  type = "HTR Status Word - Crate 11";
458  meCrate11HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
459  meCrate11HTRStatus_ ->setAxisTitle("Slot #",1);
461 
462  type = "HTR Status Word - Crate 12";
463  meCrate12HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
464  meCrate12HTRStatus_ ->setAxisTitle("Slot #",1);
466 
467  type = "HTR Status Word - Crate 13";
468  meCrate13HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
469  meCrate13HTRStatus_ ->setAxisTitle("Slot #",1);
471 
472  type = "HTR Status Word - Crate 14";
473  meCrate14HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
474  meCrate14HTRStatus_ ->setAxisTitle("Slot #",1);
476 
477  type = "HTR Status Word - Crate 15";
478  meCrate15HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
479  meCrate15HTRStatus_ ->setAxisTitle("Slot #",1);
481 
482  type = "HTR Status Word - Crate 17";
483  meCrate17HTRStatus_ = ib.book2D(type,type,40,-0.25,19.75,maxbits,-0.5,maxbits-0.5);
484  meCrate17HTRStatus_ ->setAxisTitle("Slot #",1);
486 
487  type = "HTR UnSuppressed Event Fractions";
488  meUSFractSpigs_ = ib.book1D(type,type,481,0,481);
489  for(int f=0; f<NUMDCCS; f++) {
490  snprintf(label, 256, "FED 7%02d", f);
492  for(int s=1; s<HcalDCCHeader::SPIGOT_COUNT; s++) {
493  snprintf(label, 256, "sp%02d", s);
494  meUSFractSpigs_->setBinLabel(1+(HcalDCCHeader::SPIGOT_COUNT*f)+s, label);}}
495 
496  // Firmware version
497  type = "HTR Firmware Version";
498  // Maybe change to Profile histo eventually
499  //meHTRFWVersion_ = ib.bookProfile(type,type,18,-0.5,17.5,245,10.0,255.0,"");
500  meHTRFWVersion_ = ib.book2D(type,type ,18,-0.5,17.5,180,75.5,255.5);
501  meHTRFWVersion_->setAxisTitle("Crate #",1);
502  meHTRFWVersion_->setAxisTitle("HTR Firmware Version",2);
503 
504  type = "HTR Fiber 1 Orbit Message BCNs";
505  meFib1OrbMsgBCN_= ib.book2D(type,type,40,-0.25,19.75,18,-0.5,17.5);
506  type = "HTR Fiber 2 Orbit Message BCNs";
507  meFib2OrbMsgBCN_= ib.book2D(type,type,40,-0.25,19.75,18,-0.5,17.5);
508  type = "HTR Fiber 3 Orbit Message BCNs";
509  meFib3OrbMsgBCN_= ib.book2D(type,type,40,-0.25,19.75,18,-0.5,17.5);
510  type = "HTR Fiber 4 Orbit Message BCNs";
511  meFib4OrbMsgBCN_= ib.book2D(type,type,40,-0.25,19.75,18,-0.5,17.5);
512  type = "HTR Fiber 5 Orbit Message BCNs";
513  meFib5OrbMsgBCN_= ib.book2D(type,type,40,-0.25,19.75,18,-0.5,17.5);
514  type = "HTR Fiber 6 Orbit Message BCNs";
515  meFib6OrbMsgBCN_= ib.book2D(type,type,40,-0.25,19.75,18,-0.5,17.5);
516  type = "HTR Fiber 7 Orbit Message BCNs";
517  meFib7OrbMsgBCN_= ib.book2D(type,type,40,-0.25,19.75,18,-0.5,17.5);
518  type = "HTR Fiber 8 Orbit Message BCNs";
519  meFib8OrbMsgBCN_= ib.book2D(type,type,40,-0.25,19.75,18,-0.5,17.5);
520 
521 }
522 
523 // Analyze
525 {
527  if (!IsAllowedCalibType()) return;
528  if (LumiInOrder(e.luminosityBlock())==false) return;
529 
530 // HcalBaseDQMonitor::analyze(e,s); // base class increments ievt_, etc. counters
531 
532  // try to get die Data
534  if (!(e.getByToken(tok_raw_,rawraw)))
535  // if (!(e.getByType(rawraw)))
536  {
537  edm::LogWarning("HcalRawDataMonitor")<<" raw data with label "<<FEDRawDataCollection_ <<" not available";
538  return;
539  }
541  if (!(e.getByToken(tok_unpack_,report)))
542  {
543  edm::LogWarning("HcalRawDataMonitor")<<" Unpacker Report "<<digiLabel_<<" not available";
544  return;
545  }
546 
547  // all objects grabbed; event is good
548  if (debug_>1) std::cout <<"\t<HcalRawDataMonitor::analyze> Processing good event! event # = "<<ievt_<<std::endl;
549 
550  // Raw Data collection was grabbed successfully; process the Event
551  processEvent(*rawraw, *report);
552 
553  //Loop over all cells, tallying problem counts before resetting
554  //Extract the subdetector region given the location
555  for (int d=0; d<DEPTHBINS; d++) {
556  for (int eta=0; eta<ETABINS; eta++) {
557  int ieta=CalcIeta(eta,d+1);
558  if (ieta==-9999) continue;
559  for (int phi=0; phi<PHIBINS; phi++){
560  if (problemcount[eta][phi][d]) {
561  // std::cout<<" "<<eta<<","<<phi<<","<<d<<" count:"<<problemcount[eta][phi][d]<<std::endl;
562  HcalSubdetector subdet=HcalEmpty;
563  if (isHB(eta,d+1))subdet=HcalBarrel;
564  else if (isHE(eta,d+1)) subdet=HcalEndcap;
565  else if (isHF(eta,d+1)) subdet=HcalForward;
566  else if (isHO(eta,d+1)) subdet=HcalOuter;
567  if (subdet!=HcalEmpty){
568  if (subdet==HcalBarrel) {if(uniqcounter[eta][phi][d]<1) NumBadHB+= problemcount[eta][phi][d]; uniqcounter[eta][phi][d]++; }
569  else if (subdet==HcalEndcap) {if(uniqcounter[eta][phi][d]<1) NumBadHE+= problemcount[eta][phi][d]; uniqcounter[eta][phi][d]++; }
571  else if (subdet==HcalOuter)
572  {
573  if(uniqcounter[eta][phi][d]<1)
574  NumBadHO += problemcount[eta][phi][d];
575  uniqcounter[eta][phi][d]++;
576  if (abs(ieta)<5) NumBadHO0+= problemcount[eta][phi][d];
577  else NumBadHO12+= problemcount[eta][phi][d];
578  }
579  else if (subdet==HcalForward)
580  {
581  if(uniqcounter[eta][phi][d]<1)
583  uniqcounter[eta][phi][d]++;
584  if (d==1 && (abs(ieta)==33 || abs(ieta)==34))
586  else if (d==2 && (abs(ieta)==35 || abs(ieta)==36))
588  }
589  }
590  problemcount[eta][phi][d]=0;
591  }
592  }
593  }
594  }
595 }
596 
598  const HcalUnpackerReport& report){
599  // Fill event counters (underflow bins of histograms)
603  for (int f=0; f<NUMDCCS; f++)
606 
607  // Loop over all FEDs reporting the event, unpacking if good.
609  const FEDRawData& fed = rawraw.FEDData(i);
610  if (fed.size()<12) continue; //At least the size of headers and trailers of a DCC.
611  unpack(fed); //Interpret data, fill histograms, everything.
612  }
613 
614  //increment problemcount[] where problemfound[], and clear problemfound[]
615  for (int x=0; x<ETABINS; x++)
616  for (int y=0; y<PHIBINS; y++)
617  for (int z=0; z<DEPTHBINS; z++)
618  if (problemfound[x][y][z]) {
619  problemcount[x][y][z]++;
620  problemfound[x][y][z]=false;
621  }
622  return;
623 } //void HcalRawDataMonitor::processEvent()
624 
625 // Process one FED's worth (one DCC's worth) of the event data.
627 
628  // get the DCC header & trailer (or bail out)
629  const HcalDCCHeader* dccHeader= reinterpret_cast<const HcalDCCHeader*>(raw.data());
630  if(!dccHeader) return;
631  const unsigned char* trailer_ptr = reinterpret_cast<const unsigned char*> (raw.data()+raw.size()-sizeof(uint64_t));
632  FEDTrailer trailer = FEDTrailer(trailer_ptr);
633 
634  // FED id declared in the header
635  int dccid=dccHeader->getSourceId();
636  //Force 0<= dcc_ <= 31
637  int dcc_=std::max(0,dccid-700);
638  dcc_ = std::min(dcc_,31);
639  if(debug_>1) std::cout << "DCC " << dccid << std::endl;
640  const uint64_t* dccfw= reinterpret_cast<const uint64_t*> (raw.data()+(sizeof(uint64_t)*2)); //64-bit DAQ word number 2 (from 0)
641  int dcc_fw = ( ((*dccfw)>>(6*8))&0x00000000000000FF ); //Shift right 6 bytes, get that low byte.
642  meDCCVersion_ -> Fill(dccid,dcc_fw);
643 
644  //Before all else, how much data are we dealing with here?
645  const uint64_t* lastDataWord = reinterpret_cast<const uint64_t*> ( raw.data()+(raw.size())-(1*sizeof(uint64_t)) );
646  int EvFragLength = static_cast<int> (*lastDataWord>>(4*8)) & 0x0000000000FFFFFF ; //Shift right 4 bytes, get low 3 bytes.
647  meFEDRawDataSizes_->Fill(EvFragLength*8); //# 64-bit DAQ words *8 = # bytes.
648  meEvFragSize_ ->Fill(dccid, EvFragLength*8); //# 64-bit DAQ words *8 = # bytes.
649  meEvFragSize2_ ->Fill(dccid, EvFragLength*8); //# 64-bit DAQ words *8 = # bytes.
650 
651  //Orbit, BunchCount, and Event Numbers
652  unsigned long dccEvtNum = dccHeader->getDCCEventNumber();
653  int dccBCN = dccHeader->getBunchId();
654  //Mask down to 5 bits, since only used for comparison to HTR's five bit number...
655  unsigned int dccOrN = (unsigned int) (dccHeader->getOrbitNumber() & 0x0000001F);
656  medccBCN_ -> Fill(dccBCN);
657 
659  bool CDFProbThisDCC = false;
660  /* 1 */ //There should always be a second CDF header word indicated.
661  if (!dccHeader->thereIsASecondCDFHeaderWord()
662  //TESTME_HCALRAWDATA//
663  //|| ((dccid==702)&&(tevt_%2==0))
664  ) {
665  meCDFErrorFound_->Fill(dccid, 1);
666  CDFProbThisDCC = true;
667  }
668  /* 2 */ //Make sure a reference CDF Version value has been recorded for this dccid
669  CDFvers_it = CDFversionNumber_list.find(dccid);
670  if (CDFvers_it == CDFversionNumber_list.end()) {
671  CDFversionNumber_list.insert(std::pair<int,short>
672  (dccid,dccHeader->getCDFversionNumber() ) );
673  CDFvers_it = CDFversionNumber_list.find(dccid);
674  } // then check against it.
675  if (dccHeader->getCDFversionNumber()!= CDFvers_it->second) {
676  meCDFErrorFound_->Fill(dccid,2);
677  CDFProbThisDCC = true;
678  }
679  /* 3 */ //There should always be a '5' in CDF Header word 0, bits [63:60]
680  if (dccHeader->BOEshouldBe5Always()!=5) {
681  meCDFErrorFound_->Fill(dccid, 3);
682  CDFProbThisDCC = true;
683  }
684  /* 4 */ //There should never be a third CDF Header word indicated.
685  if (dccHeader->thereIsAThirdCDFHeaderWord()) {
686  meCDFErrorFound_->Fill(dccid, 4);
687  CDFProbThisDCC = true;
688  }
689  /* 5 */ //Make sure a reference value of Reserved Bits has been recorded for this dccid
692  CDFReservedBits_list.insert(std::pair<int,short>
693  (dccid,dccHeader->getSlink64ReservedBits() & 0x0000FFFF ) );
695  } // then check against it.
696  if (((int) dccHeader->getSlink64ReservedBits() & 0x0000FFFF ) != CDFReservedBits_it->second) {
697  meCDFErrorFound_->Fill(dccid,5);
698  //CDFProbThisDCC = true;
699  }
700  /* 6 */ //There should always be 0x0 in CDF Header word 1, bits [63:60]
701  if (dccHeader->BOEshouldBeZeroAlways() !=0) {
702  meCDFErrorFound_->Fill(dccid, 6);
703  CDFProbThisDCC = true;
704  }
705  /* 7 */ //There should only be one trailer
706  if (trailer.moreTrailers()) {
707  meCDFErrorFound_->Fill(dccid, 7);
708  CDFProbThisDCC = true;
709  }
710  // if trailer.
711  /* 8 */ //CDF Trailer [55:30] should be the # 64-bit words in the EvFragment
712  if ((uint64_t) raw.size() != ( (uint64_t) trailer.lenght()*sizeof(uint64_t)) ) //The function name is a typo! Awesome.
713  {
714  meCDFErrorFound_->Fill(dccid, 8);
715  CDFProbThisDCC = true;
716  }
717  /* 9 */ //There is a rudimentary sanity check built into the FEDTrailer class
718  if (!trailer.check()) {
719  meCDFErrorFound_->Fill(dccid, 9);
720  CDFProbThisDCC = true;
721  }
722  if (CDFProbThisDCC) {
723  //Set the problem flag for the ieta, iphi of any channel in this DCC
724  mapDCCproblem(dcc_);
725  if (debug_>0) std::cout <<"CDFProbThisDCC"<<std::endl;
726  }
727 
728  mefedEntries_->Fill(dccid);
729 
730  CDFProbThisDCC = false; // reset for the next go-round.
731 
732  char CRC_err;
733  for(int i=0; i<HcalDCCHeader::SPIGOT_COUNT; i++) {
734  CRC_err = ((dccHeader->getSpigotSummary(i) >> 10) & 0x00000001);
735  if (CRC_err) {
736  mapDCCproblem(dcc_);
737  //Set the problem flag for the ieta, iphi of any channel in this DCC
738  if (debug_>0) std::cout <<"HTR Problem: CRC_err"<<std::endl;
739  }
740  }
741 
742  // The DCC TTS state at event-sending time
743  char TTS_state = (char)trailer.ttsBits();
744  // The DCC TTS state at time L1A received (event enqueued to be built)
745  char L1AtimeTTS_state=(char) dccHeader->getAcceptTimeTTS();
746  if (TTS_state==L1AtimeTTS_state) ;//party
747 
749  /* 1 */ //Make sure a reference value of the DCC Event Format version has been noted for this dcc.
750  DCCEvtFormat_it = DCCEvtFormat_list.find(dccid);
751  if (DCCEvtFormat_it == DCCEvtFormat_list.end()) {
752  DCCEvtFormat_list.insert(std::pair<int,short>
753  (dccid,dccHeader->getDCCDataFormatVersion() ) );
754  DCCEvtFormat_it = DCCEvtFormat_list.find(dccid);
755  } // then check against it.
756  if (dccHeader->getDCCDataFormatVersion()!= DCCEvtFormat_it->second) {
757  meDCCEventFormatError_->Fill(dccid,1);
758  mapDCCproblem(dcc_);
759  if (debug_>0)std::cout <<"DCC Error Type 1"<<std::endl;
760  }
761  /* 2 */ //Check for ones where there should always be zeros
762  if (false) //dccHeader->getByte1Zeroes() || dccHeader->getByte3Zeroes() || dccHeader->getByte567Zeroes())
763  {
764  meDCCEventFormatError_->Fill(dccid,2);
765  mapDCCproblem(dcc_);
766  if (debug_>0)std::cout <<"DCC Error Type 2"<<std::endl;
767  }
768  /* 3 */ //Check that there are zeros following the HTR Status words.
769  int SpigotPad = HcalDCCHeader::SPIGOT_COUNT;
770  if ( (((uint64_t) dccHeader->getSpigotSummary(SpigotPad) )
771  | ((uint64_t) dccHeader->getSpigotSummary(SpigotPad+1))
772  | ((uint64_t) dccHeader->getSpigotSummary(SpigotPad+2))) != 0){
773  meDCCEventFormatError_->Fill(dccid,3);
774  mapDCCproblem(dcc_);
775  if (debug_>0)std::cout <<"DCC Error Type 3"<<std::endl;
776  }
777  /* 4 */ //Check that there are zeros following the HTR Payloads, if needed.
778  int nHTR32BitWords=0;
779  // add up all the declared HTR Payload lengths
780  for(int i=0; i<HcalDCCHeader::SPIGOT_COUNT; i++) {
781  nHTR32BitWords += dccHeader->getSpigotDataLength(i); }
782  // if it's an odd number, check for the padding zeroes
783  if (( nHTR32BitWords % 2) == 1) {
784  uint64_t* lastDataWord = (uint64_t*) ( raw.data()+raw.size()-(2*sizeof(uint64_t)) );
785  if ((*lastDataWord>>32) != 0x00000000){
786  meDCCEventFormatError_->Fill(dccid, 4);
787  mapDCCproblem(dcc_);
788  if (debug_>0)std::cout <<"DCC Error Type 4"<<std::endl;
789  }
790  }
791 
792  //unsigned char HTRErrorList=0;
793  //for(int j=0; j<HcalDCCHeader::SPIGOT_COUNT; j++) {
794  // HTRErrorList=dccHeader->getSpigotErrorBits(j);
795  //}
796 
797  // These will be used in FED-vs-spigot 2D Histograms
798  const int fed3offset = 1 + (4*dcc_); //3 bins, plus one of margin, each DCC
799  const int fed2offset = 1 + (3*dcc_); //2 bins, plus one of margin, each DCC
800  if (TTS_state & 0x8) /*RDY*/
801  ;
802  if (TTS_state & 0x2) /*SYN*/
803  {
804  mapDCCproblem(dcc_);
805  if (debug_>0)std::cout <<"TTS_state Error:sync"<<std::endl;
806  }
807  //Histogram per-Spigot bits from the DCC Header
808  int WholeErrorList=0;
809  for(int spigot=0; spigot<HcalDCCHeader::SPIGOT_COUNT; spigot++) {
810  if (!( dccHeader->getSpigotEnabled((unsigned int) spigot)) )
811  continue; //skip when not enabled
812  // This will be used in FED-vs-spigot 2D Histograms
813  const int spg3offset = 1 + (4*spigot); //3 bins, plus one of margin, each spigot
814 
815  if (TTS_state & 0x4) /*BSY*/
816  ++DataFlowInd_[fed2offset+1][spg3offset+1];
817  if (TTS_state & 0x1) /*OFW*/
818  ++DataFlowInd_[fed2offset+1][spg3offset+2];
819 
820  WholeErrorList=dccHeader->getLRBErrorBits((unsigned int) spigot);
821  if (WholeErrorList!=0) {
822  if ((WholeErrorList>>0)&0x01) //HammingCode Corrected -- Not data corruption!
823  DataFlowInd_[fed2offset-1][spg3offset-1]++;
824  if (((WholeErrorList>>1)&0x01)!=0) {//HammingCode Uncorrected Error
825  LRBDataCorruptionIndicators_[fed3offset+1][spg3offset+2]++;
826  mapHTRproblem(dcc_,spigot);
827  }
828  if (((WholeErrorList>>2)&0x01)!=0) {//Truncated data coming into LRB
829  LRBDataCorruptionIndicators_[fed3offset+2][spg3offset+2]++;
830  mapHTRproblem(dcc_,spigot);
831  }
832  if (((WholeErrorList>>3)&0x01)!=0) {//FIFO Overflow
833  LRBDataCorruptionIndicators_[fed3offset+1][spg3offset+1]++;
834  mapHTRproblem(dcc_,spigot);
835  }
836  if (((WholeErrorList>>4)&0x01)!=0) {//ID (EvN Mismatch), htr payload metadeta
837  LRBDataCorruptionIndicators_[fed3offset+2][spg3offset+1]++;
838  mapHTRproblem(dcc_,spigot);
839  }
840  if (((WholeErrorList>>5)&0x01)!=0) {//STatus: hdr/data/trlr error
841  LRBDataCorruptionIndicators_[fed3offset+1][spg3offset+0]++;
842  mapHTRproblem(dcc_,spigot);
843  }
844  if (((WholeErrorList>>6)&0x01)!=0) {//ODD 16-bit word count from HTR
845  LRBDataCorruptionIndicators_[fed3offset+2][spg3offset+0]++;
846  mapHTRproblem(dcc_,spigot);
847  }
848  }
849  if (!dccHeader->getSpigotPresent((unsigned int) spigot)){
850  LRBDataCorruptionIndicators_[fed3offset+0][spg3offset+2]++; //Enabled, but data not present!
851  mapHTRproblem(dcc_,spigot);
852  if (debug_>0)std::cout <<"HTR Problem: Spigot Not Present"<<std::endl;
853  } else {
854  if ( dccHeader->getSpigotDataTruncated((unsigned int) spigot)) {
855  LRBDataCorruptionIndicators_[fed3offset-1][spg3offset+0]++; // EventBuilder truncated babbling LRB
856  mapHTRproblem(dcc_,spigot);
857  if (debug_>0)std::cout <<"HTR Problem: Spigot Data Truncated"<<std::endl;
858  }
859  if ( dccHeader->getSpigotCRCError((unsigned int) spigot)) {
860  LRBDataCorruptionIndicators_[fed3offset+0][spg3offset+0]++;
861  mapHTRproblem(dcc_,spigot);
862  }
863  } //else spigot marked "Present"
864  if (dccHeader->getSpigotDataLength(spigot) <(unsigned long)4) {
865  LRBDataCorruptionIndicators_[fed3offset+0][spg3offset+1]++; //Lost HTR Data for sure.
866  mapHTRproblem(dcc_,spigot);
867  if (debug_>0)std::cout <<"HTR Problem: Spigot Data Length too small"<<std::endl;
868  }
869  }
870 
871  // Walk through the HTR data...
872  HcalHTRData htr;
873  for (int spigot=0; spigot<HcalDCCHeader::SPIGOT_COUNT; spigot++) {
874  const int spg3offset = 1 + (4*spigot); //3 bins, plus one of margin, each spigot
875  const int spg2offset = 1 + (3*spigot); //3 bins, plus one of margin, each spigot
876  if (!dccHeader->getSpigotPresent(spigot)) continue;
877 
878  // Load the given decoder with the pointer and length from this spigot.
879  // i.e. initialize htr, within dcc raw data size.
880  dccHeader->getSpigotData(spigot,htr, raw.size());
881  const unsigned short* HTRraw = htr.getRawData();
882 
883  // check min length, correct wordcount, empty event, or total length if histo event.
884  if (!htr.check()) {
885  meInvHTRData_ -> Fill(spigot,dccid);
886  mapHTRproblem(dcc_,spigot);
887  if (debug_>0)std::cout <<"HTR Problem: HTR check fails"<<std::endl;
888  }
889 
890  unsigned short HTRwdcount = htr.getRawLength();
891 
892  // Size checks for internal consistency
893  // getNTP(), get NDD() seems to be mismatched with format. Manually:
894  int NTP = ((htr.getExtHdr6() >> 8) & 0x00FF);
895  int NDAQ = (HTRraw[htr.getRawLength() - 4] & 0x7FF);
896 
897  if ( ! ((HTRwdcount != 8) ||
898  (HTRwdcount != 12 + NTP + NDAQ) ||
899  (HTRwdcount != 20 + NTP + NDAQ) )) {
900  ++HalfHTRDataCorruptionIndicators_[fed3offset+2][spg3offset+0];
901  mapHTRproblem(dcc_,spigot);
902  if (debug_>0)std::cout <<"HTR Problem: NTP+NDAQ size consistency check fails"<<std::endl;
903  //incompatible Sizes declared. Skip it.
904  continue; }
905  bool EE = ((dccHeader->getSpigotErrorBits(spigot) >> 2) & 0x01);
906  if (EE) {
907  if (HTRwdcount != 8) { //incompatible Sizes declared. Skip it.
908  ++HalfHTRDataCorruptionIndicators_[fed3offset+2][spg3offset+1];
909  if (debug_>0)std::cout <<"HTR Problem: HTRwdcount !=8"<<std::endl;
910  }
911  DataFlowInd_[fed2offset+0][spg3offset+0]++;
912  continue;}
913  else{ //For non-EE, both CompactMode and !CompactMode
914  bool CM = (htr.getExtHdr7() >> 14)&0x0001;
915  int paddingsize = ((NDAQ+NTP)%2); //Extra padding to make HTRwdcount even
916  if (( CM && ( (HTRwdcount-NDAQ-NTP-paddingsize) != 12) )
917  ||
918  (!CM && ( (HTRwdcount-NDAQ-NTP-paddingsize) != 20) ) ) { //incompatible Sizes declared. Skip it.
919  ++HalfHTRDataCorruptionIndicators_[fed3offset+2][spg3offset+1];
920  mapHTRproblem(dcc_,spigot);
921  continue;} }
922 
923  if (htr.isHistogramEvent()) continue;
924 
925  //We trust the data now. Finish with the check against DCCHeader
926  unsigned int htrOrN = htr.getOrbitNumber();
927  unsigned int htrBCN = htr.getBunchNumber();
928  unsigned int htrEvtN = htr.getL1ANumber();
929  meBCN_->Fill(htrBCN); //The only periodic number for whole events.
930 
931  if (( (htrOrN == dccOrN ) &&
932  (htrBCN == (unsigned int) dccBCN) )
933  != (dccHeader->getBxMismatchWithDCC(spigot)) ){
934  meDCCEventFormatError_->Fill(dccid,5);
935  mapHTRproblem(dcc_,spigot);
936  if (debug_>0)std::cout <<"Orbit or BCN HTR/DCC mismatch"<<std::endl;
937  }
938  if ( (htrEvtN == dccEvtNum) !=
939  dccHeader->getSpigotValid(spigot) ) {
940  meDCCEventFormatError_->Fill(dccid,5);
941  mapHTRproblem(dcc_,spigot);
942  if (debug_>0)std::cout <<"DCC invalid spigot"<<std::endl;
943  }
944  int cratenum = htr.readoutVMECrateId();
945  float slotnum = htr.htrSlot() + 0.5*htr.htrTopBottom();
946  if (debug_ > 0) HTRPrint(htr,debug_);
947  unsigned int htrFWVer = htr.getFirmwareRevision() & 0xFF;
948  meHTRFWVersion_->Fill(cratenum,htrFWVer);
949 
951  int EvtNdiff = htrEvtN - dccEvtNum;
952  if (EvtNdiff!=0) {
953  meEvtNumberSynch_->Fill(dccid,spigot);
954  mapHTRproblem(dcc_,spigot);
955  meEvtNCheck_->Fill(EvtNdiff);
956  if (debug_ == 1)std::cout << "++++ Evt # out of sync, ref, this HTR: "<< dccEvtNum << " "<<htrEvtN <<std::endl;
957  }
958 
960  int BCNdiff = htrBCN-dccBCN;
961  if ((BCNdiff!=0)
962  //TESTME_HCALRAWDATA//
963  //|| ((dccid==727) && (spigot==8) && (dccEvtNum%3==0))
964  ){
965  meBCNSynch_->Fill(dccid,spigot);
966  mapHTRproblem(dcc_,spigot);
967  meBCNCheck_->Fill(BCNdiff);
968  if (debug_==1)std::cout << "++++ BCN # out of sync, ref, this HTR: "<< dccBCN << " "<<htrBCN <<std::endl;
969  }
970 
972  int OrNdiff = htrOrN-dccOrN;
973  if (OrNdiff!=0) {
974  meOrNSynch_->Fill(dccid,spigot);
975  mapHTRproblem(dcc_,spigot);
976  meOrNCheck_->Fill(OrNdiff);
977  meBCNwhenOrNDiff_->Fill(htrBCN); // Are there special BCN where OrN mismatched occur? Let's see.
978  if (debug_==1)std::cout << "++++ OrN # out of sync, ref, this HTR: "<< dccOrN << " "<<htrOrN <<std::endl;
979  }
980 
981  bool htrUnSuppressed=(HTRraw[6]>>15 & 0x0001);
982  if (htrUnSuppressed) {
983  UScount[dcc_][spigot]++;
984  int here=1+(HcalDCCHeader::SPIGOT_COUNT*(dcc_))+spigot;
985  meUSFractSpigs_->Fill(here,
986  ((double)UScount[dcc_][spigot]));}
987 
988  MonitorElement* tmpErr = 0;
989  HcalDetId HDI = hashedHcalDetId_[hashup(dcc_,spigot)];
990  if (HDI != HcalDetId::Undefined) {
991  switch (HDI.subdetId()) {
992  case (HcalBarrel): {
993  tmpErr = HTR_StatusWd_HBHE;
994  } break;
995  case (HcalEndcap): {
996  tmpErr = HTR_StatusWd_HBHE;
997  } break;
998  case (HcalOuter): {
999  tmpErr = HTR_StatusWd_HO;
1000  } break;
1001  case (HcalForward): {
1002  tmpErr = HTR_StatusWd_HF;
1003  } break;
1004  default: break;
1005  }
1006  }
1007 
1008  int errWord = htr.getErrorsWord() & 0xFFFF;
1009  if ( (((dccHeader->getSpigotSummary( spigot))>>24)&0x00FF)
1010  != (errWord&0x00FF) ){
1011  meDCCEventFormatError_->Fill(dccid,6);//Low 8 bits miscopied into DCCHeader
1012  mapHTRproblem(dcc_,spigot);
1013  if (debug_>0)std::cout <<"DCC spigot summary error or HTR error word"<<std::endl;
1014  //What other problems may lurk? Spooky.
1015  }
1016  if(tmpErr!=NULL){
1017  for(int i=0; i<16; i++){
1018  int errbit = errWord&(0x01<<i);
1019  // Bit 15 should always be 1; consider it an error if it isn't.
1020  if (i==15) errbit = errbit - 0x8000;
1021  if (errbit !=0) {
1022  tmpErr->Fill(i);
1023  //Only certain bits indicate corrupted data:
1024  switch (i) {
1025  case (14): //CT (obsolete Calibration Trigger scheme used)
1026  HalfHTRDataCorruptionIndicators_[fed3offset+0][spg3offset+2]++;
1027  mapHTRproblem(dcc_,spigot);
1028  if (debug_>0)std::cout <<"HTR Problem: Case 14"<<std::endl;
1029  break;
1030  case (13): //HM
1031  HalfHTRDataCorruptionIndicators_[fed3offset+0][spg3offset+1]++;
1032  mapHTRproblem(dcc_,spigot);
1033  if (debug_>0)std::cout <<"HTR Problem: Case 13"<<std::endl;
1034  break;
1035  case (12): //TM
1036  HalfHTRDataCorruptionIndicators_[fed3offset+0][spg3offset+0]++;
1037  mapHTRproblem(dcc_,spigot);
1038  if (debug_>0)std::cout <<"HTR Problem: Case 12"<<std::endl;
1039  break;
1040  case ( 8): //BE
1041  HalfHTRDataCorruptionIndicators_[fed3offset+1][spg3offset+2]++;
1042  mapHTRproblem(dcc_,spigot);
1043  if (debug_>0)std::cout <<"HTR Problem: Case 8"<<std::endl;
1044  break;
1045  case (15): //b15
1046  HalfHTRDataCorruptionIndicators_[fed3offset+1][spg3offset+1]++;
1047  mapHTRproblem(dcc_,spigot);
1048  break;
1049  case ( 7): //CK
1050  HalfHTRDataCorruptionIndicators_[fed3offset+1][spg3offset+0]++;
1051  mapHTRproblem(dcc_,spigot);
1052  if (debug_>0)std::cout <<"HTR Problem: Case 7"<<std::endl;
1053  break;
1054  //\\case ( 5): //LW removed 2010.02.16
1055  //\\ HalfHTRDataCorruptionIndicators_[fed3offset+2][spg3offset+2]++;
1056  //\\ //Sometimes set spuriously at startup, per-fiber, .: Leniency: 8
1057  //\\ if (HalfHTRDataCorruptionIndicators_[fed3offset+2][spg3offset+2] > 8) {
1058  //\\ if (debug_>0)std::cout <<"HTR Problem: Case 5"<<std::endl;
1059  //\\ break;
1060  //\\ }
1061  case ( 3): //L1 (previous L1A violated trigger rules)
1062  DataFlowInd_[fed2offset+1][spg3offset+0]++; break;
1063  case ( 1): //BZ
1064  DataFlowInd_[fed2offset+0][spg3offset+1]++; break;
1065  case ( 0): //OW
1066  DataFlowInd_[fed2offset+0][spg3offset+2]++;
1067  default: break;
1068  }
1069  meStatusWdCrate_->Fill(cratenum,i);
1070  if (cratenum == 0) meCrate0HTRStatus_ -> Fill(slotnum,i);
1071  else if (cratenum == 1) meCrate1HTRStatus_ -> Fill(slotnum,i);
1072  else if (cratenum == 2) meCrate2HTRStatus_ -> Fill(slotnum,i);
1073  else if (cratenum == 3) meCrate3HTRStatus_ -> Fill(slotnum,i);
1074  else if (cratenum == 4) meCrate4HTRStatus_ -> Fill(slotnum,i);
1075  else if (cratenum == 5) meCrate5HTRStatus_ -> Fill(slotnum,i);
1076  else if (cratenum == 6) meCrate6HTRStatus_ -> Fill(slotnum,i);
1077  else if (cratenum == 7) meCrate7HTRStatus_ -> Fill(slotnum,i);
1078  else if (cratenum == 9) meCrate9HTRStatus_ -> Fill(slotnum,i);
1079  else if (cratenum ==10)meCrate10HTRStatus_ -> Fill(slotnum,i);
1080  else if (cratenum ==11)meCrate11HTRStatus_ -> Fill(slotnum,i);
1081  else if (cratenum ==12)meCrate12HTRStatus_ -> Fill(slotnum,i);
1082  else if (cratenum ==13)meCrate13HTRStatus_ -> Fill(slotnum,i);
1083  else if (cratenum ==14)meCrate14HTRStatus_ -> Fill(slotnum,i);
1084  else if (cratenum ==15)meCrate15HTRStatus_ -> Fill(slotnum,i);
1085  else if (cratenum ==17)meCrate17HTRStatus_ -> Fill(slotnum,i);
1086  }
1087  }
1088  }
1089 
1090  // Fish out Front-End Errors from the precision channels
1091  const short unsigned int* daq_first, *daq_last, *tp_first, *tp_last;
1092  const HcalQIESample* qie_begin, *qie_end, *qie_work;
1093 
1094  // get pointers
1095  htr.dataPointers(&daq_first,&daq_last,&tp_first,&tp_last);
1096  qie_begin=(HcalQIESample*)daq_first;
1097  qie_end=(HcalQIESample*)(daq_last+1); // one beyond last..
1098 
1099  //TESTME_HCALRAWDATA//if (dccid==715 && spigot==5 && tevt_%3==0)
1100  //TESTME_HCALRAWDATA// Chann_DataIntegrityCheck_[dcc_][16][spg2offset]++;
1101 
1103  if (htr.getFormatVersion() < 6 ) { //HcalHTRData::FORMAT_VERSION_COMPACT_DATA is 6
1104 
1105  int lastcapid=-1;
1106  int samplecounter=-1;
1107  int htrchan=-1; // Valid: [1,24]
1108  int chn2offset=0;
1109  int NTS = htr.getNDD(); //number time slices, in precision channels
1110 
1111  ChannSumm_DataIntegrityCheck_ [fed2offset-1][spg2offset+0]=-NTS;//For normalization by client - NB! negative!
1112  // Run over DAQ words for this spigot
1113  for (qie_work=qie_begin; qie_work!=qie_end; qie_work++) {
1114  if (qie_work->raw()==0xFFFF) // filler word
1115  continue;
1116  //Beginning a channel's samples?
1117  if (( 1 + ( 3* (qie_work->fiber()-1) ) + qie_work->fiberChan() ) != htrchan) { //new channel starting
1118  // A fiber [1..8] carries three fiber channels, each is [0..2]. Make htrchan [1..24]
1119  htrchan= (3* (qie_work->fiber()-1) ) + qie_work->fiberChan();
1120  chn2offset = (htrchan*3)+1;
1121  --ChannSumm_DataIntegrityCheck_ [fed2offset-1][spg2offset-1];//event tally -- NB! negative!
1122  --Chann_DataIntegrityCheck_[dcc_][chn2offset-1][spg2offset-1];//event tally -- NB! negative!
1123  if (samplecounter !=-1) { //Wrap up the previous channel if there is one
1124  //Check the previous digi for number of timeslices
1125  if (((samplecounter != NTS) &&
1126  (samplecounter != 1) )
1127  //||
1128  //((htrchan==5) && (spigot==5) && (dcc_==5))
1129  )
1130  { //Wrong DigiSize
1131  ++ChannSumm_DataIntegrityCheck_ [fed2offset+0][spg2offset+0];
1132  ++Chann_DataIntegrityCheck_[dcc_][chn2offset+0][spg2offset+0];
1133  mapChannproblem(dcc_,spigot,htrchan);
1134  if (debug_)std::cout <<"mapChannelProblem: Wrong Digi Size"<<std::endl;
1135  }
1136  }
1137  //set up for this new channel
1138  lastcapid=qie_work->capid();
1139  samplecounter=1;} // fi (qie_work->fiberAndChan() != lastfibchan)
1140  else { //precision samples not the first timeslice
1141  int hope = lastcapid +1;// What capid would we hope for here?
1142  if (hope==4) hope = 0; // What capid would we hope for here?
1143  if (qie_work->capid() != hope){
1144  ++ChannSumm_DataIntegrityCheck_ [fed2offset+1][spg2offset+0];
1145  ++Chann_DataIntegrityCheck_[dcc_][chn2offset+1][spg2offset+0];
1146  mapChannproblem(dcc_,spigot,htrchan);
1147  if (debug_)std::cout <<"mapChannelProblem: Wrong Cap ID"<<std::endl;
1148  }
1149  lastcapid=qie_work->capid();
1150  samplecounter++;}
1151  //For every sample, whether the first of the channel or not, !DV, Er
1152  if (!(qie_work->dv())){
1153  ++ChannSumm_DataIntegrityCheck_ [fed2offset+0][spg2offset+1];
1154  ++Chann_DataIntegrityCheck_[dcc_][chn2offset+0][spg2offset+1];
1155  }
1156  if (qie_work->er()) { // FEE - Front End Error
1157  ++ChannSumm_DataIntegrityCheck_ [fed2offset+1][spg2offset+1];
1158  ++Chann_DataIntegrityCheck_[dcc_][chn2offset+1][spg2offset+1];
1159  mapChannproblem(dcc_,spigot,htrchan);
1160  if (debug_)std::cout <<"mapChannelProblem: FE Error"<<std::endl;
1161  }
1162  } // for (qie_work = qie_begin;...) end loop over all timesamples in this spigot
1163  //Wrap up the last channel
1164  //Check the last digi for number of timeslices
1165  if ((samplecounter != NTS) &&
1166  (samplecounter != 1) &&
1167  (samplecounter !=-1) ) { //Wrong DigiSize (unexpected num. timesamples)
1168  ++ChannSumm_DataIntegrityCheck_ [fed2offset+0][spg2offset+0];
1169  ++Chann_DataIntegrityCheck_[dcc_][chn2offset+0][spg2offset+0];
1170  mapChannproblem(dcc_,spigot,htrchan);
1171  if (debug_)std::cout <<"mapChannelProblem: Wrong Digi Size (last digi)"<<std::endl;
1172  }
1173  } else { // this is the branch for unpacking the compact data format with per-channel headers
1174  const unsigned short* ptr_header=daq_first;
1175  const unsigned short* ptr_end=daq_last+1;
1176  int flavor, error_flags, capid0, channelid;
1177  // int samplecounter=-1; // for a digisize check
1178  int htrchan=-1; // Valid: [1,24]
1179  int chn2offset=0;
1180  int NTS = htr.getNDD(); //number time slices, in precision channels
1181  int Nchan = 3; // 3 channels per fiber
1182  while (ptr_header!=ptr_end) {
1183  if (*ptr_header==0xFFFF) { // impossible filler word
1184  ptr_header++;
1185  continue;
1186  }
1187  error_flags = capid0 = channelid = 0;
1188  // unpack the header word
1189  bool isheader=HcalHTRData::unpack_per_channel_header(*ptr_header,flavor,error_flags,capid0,channelid);
1190  if (!isheader) {
1191  ptr_header++;
1192  continue;
1193  }
1194  // A fiber [1..8] carries three fiber channels, each is [0..2]. Make htrchan [1..24]
1195  int fiber = 1 + ((channelid & 0x1C) >> 2); //Mask and shift to get bits [2:4]
1196  int chan = channelid & 0x3; //bits [0:1]
1197  htrchan = ((fiber -1) * Nchan) + chan + 1; //ta-dah! I really wish everything counted from zero...
1198  chn2offset = ((htrchan-1)*3)+1; //For placing the errors on the histogram. Also very tidy. Sorry.
1199  //debug// if (error_flags) std::cout<<fiber<<","<<chan<<" = "<<htrchan<<" @"<<chn2offset<<std::endl;
1200  ChannSumm_DataIntegrityCheck_ [fed2offset-1][spg2offset-1] -= NTS;//event tally -- NB: negative!
1201  Chann_DataIntegrityCheck_[dcc_][chn2offset-1][spg2offset-1] -= NTS;//event tally -- NB: negative!
1202  if (error_flags & 2) { //a CapId violation (non correct rotation)
1203  ++ChannSumm_DataIntegrityCheck_ [fed2offset+1][spg2offset+0];
1204  ++Chann_DataIntegrityCheck_[dcc_][chn2offset+1][spg2offset+0];
1205  mapChannproblem(dcc_,spigot,htrchan);
1206  }
1207  if (error_flags & 1) { //an asserted Link-Error (Er)
1208  ++ChannSumm_DataIntegrityCheck_ [fed2offset+1][spg2offset+1];
1209  ++Chann_DataIntegrityCheck_[dcc_][chn2offset+1][spg2offset+1];
1210  mapChannproblem(dcc_,spigot,htrchan);
1211  }
1212 
1213  for (ptr_header++;
1214  ptr_header!=ptr_end && !HcalHTRData::is_channel_header(*ptr_header);
1215  ptr_header++);
1216  }
1217  }
1218  unsigned int fib1BCN = htr.getFib1OrbMsgBCN();
1219  unsigned int fib2BCN = htr.getFib2OrbMsgBCN();
1220  unsigned int fib3BCN = htr.getFib3OrbMsgBCN();
1221  unsigned int fib4BCN = htr.getFib4OrbMsgBCN();
1222  unsigned int fib5BCN = htr.getFib5OrbMsgBCN();
1223  unsigned int fib6BCN = htr.getFib6OrbMsgBCN();
1224  unsigned int fib7BCN = htr.getFib7OrbMsgBCN();
1225  unsigned int fib8BCN = htr.getFib8OrbMsgBCN();
1226  meFibBCN_->Fill(fib1BCN);
1227  meFibBCN_->Fill(fib2BCN);
1228  meFibBCN_->Fill(fib3BCN);
1229  meFibBCN_->Fill(fib4BCN);
1230  meFibBCN_->Fill(fib5BCN);
1231  meFibBCN_->Fill(fib6BCN);
1232  meFibBCN_->Fill(fib7BCN);
1233  meFibBCN_->Fill(fib8BCN);
1234  // Disable for now?
1235  meFib1OrbMsgBCN_->Fill(slotnum, cratenum, fib1BCN);
1236  meFib2OrbMsgBCN_->Fill(slotnum, cratenum, fib2BCN);
1237  meFib3OrbMsgBCN_->Fill(slotnum, cratenum, fib3BCN);
1238  meFib4OrbMsgBCN_->Fill(slotnum, cratenum, fib4BCN);
1239  meFib5OrbMsgBCN_->Fill(slotnum, cratenum, fib5BCN);
1240  meFib6OrbMsgBCN_->Fill(slotnum, cratenum, fib6BCN);
1241  meFib7OrbMsgBCN_->Fill(slotnum, cratenum, fib7BCN);
1242  meFib8OrbMsgBCN_->Fill(slotnum, cratenum, fib8BCN);
1243 
1244  } // loop over spigots
1245  return;
1246 } // loop over DCCs void HcalRawDataMonitor::unpack(
1247 
1248 
1249 // End LumiBlock
1251  const edm::EventSetup& c){
1252 
1253 
1260 
1261  // Reset current LS histogram, if it exists
1262  if (ProblemsCurrentLB)
1264  if (ProblemsCurrentLB)
1265  {
1266 
1267  ProblemsCurrentLB->setBinContent(0,0, levt_); // underflow bin contains number of events
1275 
1276  }
1277 
1278  for (int d=0; d<DEPTHBINS; d++) {
1279  for (int eta=0; eta<ETABINS; eta++) {
1280  for (int phi=0; phi<PHIBINS; phi++){
1281  uniqcounter[eta][phi][d] = 0.0;
1282  }
1283  }
1284  }
1285 
1286  UpdateMEs();
1287 }
1288 // EndRun -- Anything to do here?
1290 
1291 // EndJob
1293  if (debug_>0) std::cout <<"HcalRawDataMonitor::endJob()"<<std::endl;
1294  if (enableCleanup_) cleanup(); // when do we force cleanup?
1295 }
1296 
1297 //No size checking; better have enough y-axis bins!
1299  char label[32];
1300  for (int spig=0; spig<HcalDCCHeader::SPIGOT_COUNT; spig++) {
1301  snprintf(label, 32, "Spgt %02d", spig);
1302  me_ptr->setBinLabel((2+(spig*ybins)), label, 2); //margin of 1 at low value
1303  }
1304 }
1305 
1306 //No size checking; better have enough x-axis bins!
1308  char label[32];
1309  for (int ch=0; ch<HcalHTRData::CHANNELS_PER_SPIGOT; ch++) {
1310  snprintf(label, 32, "Ch %02d", ch+1);
1311  me_ptr->setBinLabel((2+(ch*xbins)), label, 1); //margin of 3 at low value
1312  }
1313 }
1314 
1315 //No size checking; better have enough x-axis bins!
1317  char label[32];
1318  for (int thfed=0; thfed<NUMDCCS; thfed++) {
1319  snprintf(label, 32, "%03d", thfed+700);
1320  me_ptr->setBinLabel((2+(thfed*xbins)), label, 1); //margin of 1 at low value
1321  }
1322 }
1323 
1324 void HcalRawDataMonitor::labelHTRBits(MonitorElement* mePlot,unsigned int axisType) {
1325 
1326  if (axisType !=1 && axisType != 2) return;
1327 
1328  mePlot -> setBinLabel(1,"Overflow Warn",axisType);
1329  mePlot -> setBinLabel(2,"Buffer Busy",axisType);
1330  mePlot -> setBinLabel(3,"Empty Event",axisType);
1331  mePlot -> setBinLabel(4,"Rejected L1A",axisType);
1332  mePlot -> setBinLabel(5,"Invalid Stream",axisType);
1333  mePlot -> setBinLabel(6,"Latency Warn",axisType);
1334  mePlot -> setBinLabel(7,"OptDat Err",axisType);
1335  mePlot -> setBinLabel(8,"Clock Err",axisType);
1336  mePlot -> setBinLabel(9,"Bunch Err",axisType);
1337  mePlot -> setBinLabel(10,"b9",axisType);
1338  mePlot -> setBinLabel(11,"b10",axisType);
1339  mePlot -> setBinLabel(12,"b11",axisType);
1340  mePlot -> setBinLabel(13,"Test Mode",axisType);
1341  mePlot -> setBinLabel(14,"Histo Mode",axisType);
1342  mePlot -> setBinLabel(15,"Calib Trig",axisType);
1343  mePlot -> setBinLabel(16,"Bit15 Err",axisType);
1344 
1345  return;
1346 }
1347 
1348 void HcalRawDataMonitor::stashHDI(int thehash, HcalDetId thehcaldetid) {
1349  //Let's not allow indexing off the array...
1350  if ((thehash<0)||(thehash>(NUMDCCS*NUMSPIGS*HTRCHANMAX)))return;
1351  //...but still do the job requested.
1352  hashedHcalDetId_[thehash] = thehcaldetid;
1353 }
1354 
1355 //Debugging output for single half-HTRs (single spigot)
1356 //-->Class member debug_ usually passed for prtlvl argument.<--
1357 void HcalRawDataMonitor::HTRPrint(const HcalHTRData& htr,int prtlvl){
1358  if (prtlvl == 1){
1359  int cratenum = htr.readoutVMECrateId();
1360  float slotnum = htr.htrSlot() + 0.5*htr.htrTopBottom();
1361  printf("Crate,Slot,ErrWord,Evt#,BCN: %3i %4.1f %6X %7i %4X \n", cratenum,slotnum,htr.getErrorsWord(),htr.getL1ANumber(),htr.getBunchNumber());
1362  // printf(" DLLunlk,TTCrdy:%2i %2i \n",htr.getDLLunlock(),htr.getTTCready());
1363  }
1364  // This one needs new version of HcalHTRData.h to activate
1365  else if (prtlvl == 2){
1366  int cratenum = htr.readoutVMECrateId();
1367  float slotnum = htr.htrSlot() + 0.5*htr.htrTopBottom();
1368  printf("Crate, Slot:%3i %4.1f \n", cratenum,slotnum);
1369  // printf(" Ext Hdr: %4X %4X %4X %4X %4X %4X %4X %4X \n",htr.getExtHdr1(),htr.getExtHdr2(),htr.getExtHdr3(),htr.getExtHdr4(),htr.getExtHdr5(),htr.getExtHdr6(),htr.getExtHdr7(),htr.getExtHdr8());
1370  }
1371 
1372  else if (prtlvl == 3){
1373  int cratenum = htr.readoutVMECrateId();
1374  float slotnum = htr.htrSlot() + 0.5*htr.htrTopBottom();
1375  printf("Crate, Slot:%3i %4.1f", cratenum,slotnum);
1376  printf(" FibOrbMsgBCNs: %4X %4X %4X %4X %4X %4X %4X %4X \n",htr.getFib1OrbMsgBCN(),htr.getFib2OrbMsgBCN(),htr.getFib3OrbMsgBCN(),htr.getFib4OrbMsgBCN(),htr.getFib5OrbMsgBCN(),htr.getFib6OrbMsgBCN(),htr.getFib7OrbMsgBCN(),htr.getFib8OrbMsgBCN());
1377  }
1378 
1379  return;
1380 }
1381 
1382 
1384  tevt_=0;
1385  if (meTevtHist_) tevt_= (int)meTevtHist_->getBinContent(1);
1386  NumBadHB=0;
1387  NumBadHE=0;
1388  NumBadHO=0;
1389  NumBadHF=0;
1390  NumBadHFLUMI=0;
1391  NumBadHO0=0;
1392  NumBadHO12=0;
1393 
1394 
1396  for (int x=0; x<THREE_FED; x++)
1397  for (int y=0; y<THREE_SPG; y++)
1400 
1402  for (int x=0; x<THREE_FED; x++)
1403  for (int y=0; y<THREE_SPG; y++)
1406 
1408  for (int x=0; x<TWO___FED; x++)
1409  for (int y=0; y<TWO__SPGT; y++)
1412 
1413  for (int f=0; f<NUMDCCS; f++){
1415  for (int x=0; x<TWO_CHANN; x++)
1416  for (int y=0; y<TWO__SPGT; y++)
1417  if (Chann_DataIntegrityCheck_[f][x][y])
1419  }
1420 
1422  for (int x=0; x<TWO___FED; x++)
1423  for (int y=0; y<THREE_SPG; y++)
1424  if (DataFlowInd_[x][y])
1426 } //UpdateMEs
1427 
1428 //Increment the NumBad counter for this LS, for this Hcal subdet
1430 // if (subdet==HcalBarrel) ++NumBadHB;
1431 // else if (subdet==HcalEndcap) ++NumBadHE;
1432 // else if (subdet==HcalOuter)
1433 // {
1434 // ++NumBadHO;
1435 // if (abs(ieta)<5) ++NumBadHO0;
1436 // else ++NumBadHO12;
1437 // }
1438 // else if (subdet==HcalForward)
1439 // {
1440 // ++NumBadHF;
1441 // if (depth==1 && (abs(ieta)==33 || abs(ieta)==34))
1442 // ++NumBadHFLUMI;
1443 // else if (depth==2 && (abs(ieta)==35 || abs(ieta)==36))
1444 // ++NumBadHFLUMI;
1445 // }
1446 }
1447 
1449  int myeta = 0;
1450  int myphi =-1;
1451  int mydepth = 0;
1452  HcalDetId HDI;
1453  //Light up all affected cells.
1454  for (int i=hashup(dcc);
1455  i<hashup(dcc)+(NUMSPIGS*HTRCHANMAX);
1456  i++) {
1457  HDI = hashedHcalDetId_[i];
1458  if (HDI==HcalDetId::Undefined)
1459  continue;
1460  mydepth = HDI.depth();
1461  myphi = HDI.iphi();
1462  myeta = CalcEtaBin(HDI.subdet(),
1463  HDI.ieta(),
1464  mydepth);
1465  //Protect against indexing off array
1466  if (myeta>=0 && myeta<85 &&
1467  (myphi-1)>=0 && (myphi-1)<72 &&
1468  (mydepth-1)>=0 && (mydepth-1)<4){
1469  problemfound[myeta][myphi-1][mydepth-1] = true;
1470 
1471  //exlcude the decommissioned HO ring2, except SiPMs
1472  if(mydepth==4 && excludeHORing2_==true)
1473  if (abs(HDI.ieta())>=11 && abs(HDI.ieta())<=15 && !isSiPM(HDI.ieta(),HDI.iphi(),mydepth))
1474  problemfound[myeta][myphi-1][mydepth-1] = false;
1475 
1476  if (debug_>0)
1477  std::cout<<" mapDCCproblem found error! "<<HDI.subdet()<<"("<<HDI.ieta()<<", "<<HDI.iphi()<<", "<<HDI.depth()<<")"<<std::endl;
1478  }
1479  }
1480 }
1481 void HcalRawDataMonitor::mapHTRproblem(int dcc, int spigot) {
1482  int myeta = 0;
1483  int myphi =-1;
1484  int mydepth = 0;
1485  HcalDetId HDI;
1486  //Light up all affected cells.
1487  for (int i=hashup(dcc,spigot);
1488  i<hashup(dcc,spigot)+(HTRCHANMAX); //nice, linear hash....
1489  i++) {
1490  HDI = hashedHcalDetId_[i];
1491  if (HDI==HcalDetId::Undefined) {
1492  continue;
1493  }
1494  mydepth = HDI.depth();
1495  myphi = HDI.iphi();
1496  myeta = CalcEtaBin(HDI.subdet(),
1497  HDI.ieta(),
1498  mydepth);
1499  //Protect against indexing off array
1500  if (myeta>=0 && myeta<85 &&
1501  (myphi-1)>=0 && (myphi-1)<72 &&
1502  (mydepth-1)>=0 && (mydepth-1)<4){
1503  problemfound[myeta][myphi-1][mydepth-1] = true;
1504 
1505  //exlcude the decommissioned HO ring2, except SiPMs
1506  if(mydepth==4 && excludeHORing2_==true)
1507  if (abs(HDI.ieta())>=11 && abs(HDI.ieta())<=15 && !isSiPM(HDI.ieta(),HDI.iphi(),mydepth))
1508  problemfound[myeta][myphi-1][mydepth-1] = false;
1509 
1510  if (debug_>0)
1511  std::cout<<" mapDCCproblem found error! "<<HDI.subdet()<<"("<<HDI.ieta()<<", "<<HDI.iphi()<<", "<<HDI.depth()<<")"<<std::endl;
1512  }
1513 
1514  }
1515 } // void HcalRawDataMonitor::mapHTRproblem(...)
1516 
1517 void HcalRawDataMonitor::mapChannproblem(int dcc, int spigot, int htrchan) {
1518  int myeta = 0;
1519  int myphi =-1;
1520  int mydepth = 0;
1521  HcalDetId HDI;
1522  //Light up the affected cell.
1523  int i=hashup(dcc,spigot,htrchan);
1524  HDI = HashToHDI(i);
1525  if (HDI==HcalDetId::Undefined) {
1526  return; // Do nothing at all, instead.
1527  }
1528  mydepth = HDI.depth();
1529  myphi = HDI.iphi();
1530  myeta = CalcEtaBin(HDI.subdet(),
1531  HDI.ieta(),
1532  mydepth);
1533  //Protect against indexing off array
1534  if (myeta>=0 && myeta<85 &&
1535  (myphi-1)>=0 && (myphi-1)<72 &&
1536  (mydepth-1)>=0 && (mydepth-1)<4){
1537  problemfound[myeta][myphi-1][mydepth-1] = true;
1538 
1539  //exlcude the decommissioned HO ring2, except SiPMs
1540  if(mydepth==4 && excludeHORing2_==true)
1541  if (abs(HDI.ieta())>=11 && abs(HDI.ieta())<=15 && !isSiPM(HDI.ieta(),HDI.iphi(),mydepth))
1542  problemfound[myeta][myphi-1][mydepth-1] = false;
1543 
1544  if (debug_>0)
1545  std::cout<<" mapDCCproblem found error! "<<HDI.subdet()<<"("<<HDI.ieta()<<", "<<HDI.iphi()<<", "<<HDI.depth()<<")"<<std::endl;
1546  }
1547 } // void HcalRawDataMonitor::mapChannproblem(...)
1548 
1549 
MonitorElement * meCh_DataIntegrityFED04_
bool isHO(int etabin, int depth)
void setup(DQMStore::IBooker &)
type
Definition: HCALResponse.h:21
MonitorElement * meCh_DataIntegrityFED27_
unsigned int getFib6OrbMsgBCN() const
Definition: HcalHTRData.h:202
static const HcalDetId Undefined
Definition: HcalDetId.h:80
T getUntrackedParameter(std::string const &, T const &) const
MonitorElement * meUSFractSpigs_
MonitorElement * meCh_DataIntegrityFED23_
int i
Definition: DBlmapReader.cc:9
MonitorElement * meBCN_
bool LumiInOrder(int lumisec)
int getSpigotSummary(int nspigot) const
Definition: HcalDCCHeader.h:82
MonitorElement * meCDFErrorFound_
int getNDD() const
Get the number of daq data samples per channel when not zero-suppressed.
Definition: HcalHTRData.cc:388
unsigned int getFib1OrbMsgBCN() const
Get the BCN of the Fiber Orbit Messages.
Definition: HcalHTRData.h:183
MonitorElement * meCrate7HTRStatus_
void label_xFEDs(MonitorElement *me_ptr, int xbins)
void setBinContent(int binx, double content)
set content of bin (1-D)
MonitorElement * meCrate4HTRStatus_
bool check()
Definition: FEDTrailer.cc:64
unsigned int getSlink64ReservedBits() const
Definition: HcalDCCHeader.h:48
MonitorElement * ProblemsCurrentLB
float HalfHTRDataCorruptionIndicators_[(1+((3+1)*32))][(1+((3+1)*15))]
void beginLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
unsigned char getSpigotErrorBits(unsigned int nspigot) const
Access the HTR error bits (decoding tbd)
MonitorElement * meCh_DataIntegrityFED25_
MonitorElement * meCh_DataIntegrityFED13_
int ib
Definition: cuy.py:660
std::vector< HcalElectronicsId > allElectronicsIdPrecision() const
unsigned int getSpigotDataLength(int nspigot) const
Definition: HcalDCCHeader.h:96
void whosebad(int subdet)
uint16_t raw() const
get the raw word
Definition: HcalQIESample.h:20
bool problemfound[85][72][4]
HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:49
bool check() const
Check for a good event Requires a minimum length, matching wordcount and length, not an empty event...
Definition: HcalHTRData.cc:62
virtual void analyze(const edm::Event &e, const edm::EventSetup &c)
const double xbins[]
MonitorElement * meEvtNumberSynch_
#define TWO_CHANN
MonitorElement * meCrate3HTRStatus_
unsigned int htrTopBottom() const
HcalElectronicsId-style HTR top/bottom (1=top/0=bottom)
Definition: HcalHTRData.cc:342
MonitorElement * meCh_DataIntegrityFED02_
MonitorElement * meCh_DataIntegrityFED05_
MonitorElement * meFib5OrbMsgBCN_
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:157
float ChannSumm_DataIntegrityCheck_[(1+((2+1)*32))][(1+((2+1)*15))]
#define THREE_FED
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:462
MonitorElement * meCh_DataIntegrityFED09_
int getAcceptTimeTTS() const
Definition: HcalDCCHeader.h:58
#define HTRCHANMAX
MonitorElement * ProblemsVsLB_HF
int fiberChan() const
get the fiber channel number
Definition: HcalQIESample.h:34
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
MonitorElement * meBCNCheck_
#define NUMDCCS
std::vector< int > AllowedCalibTypes_
MonitorElement * meCrate17HTRStatus_
bool getSpigotCRCError(unsigned int nspigot) const
Read the &quot;CRC-Mismatch&quot; bit for this spigot.
MonitorElement * meChannSumm_DataIntegrityCheck_
void stashHDI(int thehash, HcalDetId thehcaldetid)
virtual void cleanup(void)
virtual void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &)
MonitorElement * bookInt(Args &&...args)
Definition: DQMStore.h:103
void processEvent(const FEDRawDataCollection &rawraw, const HcalUnpackerReport &report)
bool moreTrailers()
Definition: FEDTrailer.cc:37
MonitorElement * meCrate13HTRStatus_
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
bool dv() const
is the Data Valid bit set?
Definition: HcalQIESample.h:28
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:62
std::map< int, short > CDFversionNumber_list
MonitorElement * meOrNCheck_
unsigned int getExtHdr6() const
Definition: HcalHTRData.h:227
#define NULL
Definition: scimark2.h:8
unsigned int getFib8OrbMsgBCN() const
Definition: HcalHTRData.h:210
MonitorElement * meCrate2HTRStatus_
std::map< int, short > CDFReservedBits_list
void label_xChanns(MonitorElement *me_ptr, int xbins)
void update(void)
Mark the object updated.
MonitorElement * meBCNSynch_
bool isHE(int etabin, int depth)
static const int CHANNELS_PER_SPIGOT
Definition: HcalHTRData.h:18
bool thereIsAThirdCDFHeaderWord() const
Definition: HcalDCCHeader.h:44
static bool unpack_per_channel_header(unsigned short, int &flav, int &error_flags, int &capid0, int &channelid)
Unpack a per-channel header word (compact format)
Definition: HcalHTRData.cc:433
MonitorElement * meCrate14HTRStatus_
int getSpigotData(int nspigot, HcalHTRData &decodeTool, int validSize) const
MonitorElement * meCh_DataIntegrityFED03_
void analyze(const edm::Event &e, const edm::EventSetup &c)
unsigned char getLRBErrorBits(unsigned int nspigot) const
Access the Link Receiver Board error bits (decoding tbd)
#define NUMSPIGS
unsigned int getOrbitNumber() const
Get the HTR orbit number.
Definition: HcalHTRData.cc:324
void labelHTRBits(MonitorElement *mePlot, unsigned int axisType)
int getFormatVersion() const
Get the version number of this event.
Definition: HcalHTRData.h:33
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
MonitorElement * meCrate15HTRStatus_
uint64_t problemcount[85][72][4]
MonitorElement * meDataFlowInd_
void Fill(long long x)
MonitorElement * meCh_DataIntegrityFED14_
std::map< int, short >::iterator CDFReservedBits_it
LuminosityBlockNumber_t luminosityBlock() const
#define DEPTHBINS
tuple report
Definition: zeeHLT_cff.py:9
tuple d
Definition: ztail.py:151
unsigned int getOrbitNumber() const
Definition: HcalDCCHeader.h:46
#define TWO__SPGT
int getBunchId() const
Definition: HcalDCCHeader.h:34
bool isSiPM(int ieta, int iphi, int depth)
unsigned int htrSlot() const
HcalElectronicsId-style HTR slot.
Definition: HcalHTRData.cc:338
int depth() const
get the tower depth
Definition: HcalDetId.cc:106
MonitorElement * meCrate6HTRStatus_
MonitorElement * meTevtHist_
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
edm::InputTag FEDRawDataCollection_
int CalcIeta(int subdet, int eta, int depth)
MonitorElement * meCh_DataIntegrityFED24_
std::map< int, short >::iterator DCCEvtFormat_it
edm::EDGetTokenT< FEDRawDataCollection > tok_raw_
static bool is_channel_header(unsigned short value)
check top bit to see if this is a compact format channel header word
Definition: HcalHTRData.h:90
MonitorElement * meCh_DataIntegrityFED06_
bool getBxMismatchWithDCC(unsigned int nspigot) const
Read the &quot;BxID FAILS TO MATCH WITH DCC&quot; bit for this spigot.
HcalDetId hashedHcalDetId_[32 *15 *24]
unsigned int getFib7OrbMsgBCN() const
Definition: HcalHTRData.h:206
MonitorElement * ProblemsVsLB_HBHEHF
const HcalElectronicsMap * readoutMap_
MonitorElement * ProblemsVsLB_HB
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
MonitorElement * HTR_StatusWd_HO
MonitorElement * meCrate5HTRStatus_
void unpack(const FEDRawData &raw)
MonitorElement * meCrate0HTRStatus_
const int getRawLength() const
Get the length of the raw data.
Definition: HcalHTRData.h:39
int ieta() const
get the cell ieta
Definition: HcalDetId.h:56
virtual void beginLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
HcalSubdetector
Definition: HcalAssistant.h:31
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
MonitorElement * meOrNSynch_
void endRun(const edm::Run &run, const edm::EventSetup &c)
double f[11][100]
void label_ySpigots(MonitorElement *me_ptr, int ybins)
int fiber() const
get the fiber number
Definition: HcalQIESample.h:32
bool getSpigotPresent(unsigned int nspigot) const
Read the &quot;PRESENT&quot; bit for this spigot.
MonitorElement * meCh_DataIntegrityFED11_
MonitorElement * meCrate12HTRStatus_
uint64_t uniqcounter[85][72][4]
std::map< int, short >::iterator CDFvers_it
MonitorElement * meCh_DataIntegrityFED17_
T min(T a, T b)
Definition: MathUtil.h:58
bool isHB(int etabin, int depth)
MonitorElement * meFibBCN_
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
uint64_t UScount[32][15]
MonitorElement * meDCCEventFormatError_
MonitorElement * meCh_DataIntegrityFED30_
MonitorElement * medccBCN_
MonitorElement * meCh_DataIntegrityFED12_
unsigned int getFib3OrbMsgBCN() const
Definition: HcalHTRData.h:190
float Chann_DataIntegrityCheck_[32][(1+((2+1)*24))][(1+((2+1)*15))]
#define TWO___FED
MonitorElement * HTR_StatusWd_HBHE
bool getSpigotEnabled(unsigned int nspigot) const
Read the &quot;ENABLED&quot; bit for this spigot.
Definition: HcalDCCHeader.h:99
MonitorElement * meCh_DataIntegrityFED10_
MonitorElement * meFib4OrbMsgBCN_
int ttsBits()
Current value of the Trigger Throttling System bitsAQ).
Definition: FEDTrailer.cc:32
MonitorElement * meInvHTRData_
int getSourceId() const
Definition: HcalDCCHeader.h:32
MonitorElement * meCh_DataIntegrityFED19_
int iphi() const
get the cell iphi
Definition: HcalDetId.cc:101
void mapHTRproblem(int dcc, int spigot)
Definition: DetId.h:18
MonitorElement * meEvtNCheck_
MonitorElement * meBCNwhenOrNDiff_
bool isHF(int etabin, int depth)
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:273
MonitorElement * meFib1OrbMsgBCN_
void HTRPrint(const HcalHTRData &htr, int prtlvl)
unsigned long long uint64_t
Definition: Time.h:15
MonitorElement * meCrate11HTRStatus_
int capid() const
get the Capacitor id
Definition: HcalQIESample.h:26
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
MonitorElement * meFib8OrbMsgBCN_
unsigned int getFib5OrbMsgBCN() const
Definition: HcalHTRData.h:198
const unsigned short * getRawData() const
Get a pointer to the raw data.
Definition: HcalHTRData.h:36
int lenght()
The length of the event fragment counted in 64-bit words including header and trailer.
Definition: FEDTrailer.cc:17
MonitorElement * meLRBDataCorruptionIndicators_
void dataPointers(const unsigned short **daq_first, const unsigned short **daq_last, const unsigned short **tp_first, const unsigned short **tp_last) const
Obtain the starting and ending pointers for external unpacking of the data.
Definition: HcalHTRData.cc:153
MonitorElement * meCh_DataIntegrityFED08_
edm::EDGetTokenT< HcalUnpackerReport > tok_unpack_
unsigned int getErrorsWord() const
Get the errors word.
Definition: HcalHTRData.h:157
MonitorElement * meCh_DataIntegrityFED29_
MonitorElement * meCh_DataIntegrityFED00_
const T & get() const
Definition: EventSetup.h:56
#define ETABINS
bool null() const
is this a null id ?
Definition: DetId.h:45
MonitorElement * meCh_DataIntegrityFED26_
MonitorElement * meCrate1HTRStatus_
unsigned int getExtHdr7() const
Definition: HcalHTRData.h:229
MonitorElement * meStatusWdCrate_
MonitorElement * meFib7OrbMsgBCN_
MonitorElement * ProblemsVsLB_HE
float LRBDataCorruptionIndicators_[(1+((3+1)*32))][(1+((3+1)*15))]
short BOEshouldBeZeroAlways() const
Definition: HcalDCCHeader.h:50
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c)
void mapChannproblem(int dcc, int spigot, int htrchan)
int CalcEtaBin(int subdet, int ieta, int depth)
unsigned int readoutVMECrateId() const
HcalElectronicsId-style VME crate number.
Definition: HcalHTRData.cc:346
bool getSpigotValid(unsigned int nspigot) const
Read the &quot;VALID&quot; bit for this spigot; TTC EvN matched HTR EvN.
MonitorElement * meCh_DataIntegrityFED16_
#define THREE_SPG
unsigned int getFib4OrbMsgBCN() const
Definition: HcalHTRData.h:194
MonitorElement * meCh_DataIntegrityFED07_
static const int SPIGOT_COUNT
Definition: HcalDCCHeader.h:19
double getBinContent(int binx) const
get content of bin (1-D)
MonitorElement * meEvFragSize_
MonitorElement * HTR_StatusWd_HF
MonitorElement * meCh_DataIntegrityFED28_
#define update(a, b)
TProfile * getTProfile(void) const
unsigned int getBunchNumber() const
Get the HTR bunch number.
Definition: HcalHTRData.h:115
unsigned int getFib2OrbMsgBCN() const
Definition: HcalHTRData.h:186
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
MonitorElement * meFib2OrbMsgBCN_
#define PHIBINS
MonitorElement * meEvFragSize2_
bool getSpigotDataTruncated(unsigned int nspigot) const
Read the &quot;TRUNCATED&quot; bit for this spigot; LRB truncated data (took too long)
float DataFlowInd_[(1+((2+1)*32))][(1+((3+1)*15))]
tuple cout
Definition: gather_cfg.py:145
short getCDFversionNumber() const
Definition: HcalDCCHeader.h:30
short getDCCDataFormatVersion() const
Definition: HcalDCCHeader.h:57
MonitorElement * meDCCVersion_
MonitorElement * meCh_DataIntegrityFED20_
std::map< int, short > DCCEvtFormat_list
MonitorElement * ProblemsVsLB_HO
MonitorElement * meCrate10HTRStatus_
unsigned int getFirmwareRevision() const
Get the HTR firmware version.
Definition: HcalHTRData.cc:406
MonitorElement * ProblemsVsLB
MonitorElement * meHTRFWVersion_
MonitorElement * meFEDRawDataSizes_
unsigned short BOEshouldBe5Always() const
Definition: HcalDCCHeader.h:40
MonitorElement * meCh_DataIntegrityFED01_
MonitorElement * mefedEntries_
MonitorElement * meCh_DataIntegrityFED15_
Detector det() const
get the detector field from this detid
Definition: DetId.h:35
unsigned int getL1ANumber() const
Get the HTR event number.
Definition: HcalHTRData.h:111
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
MonitorElement * meCh_DataIntegrityFED31_
bool thereIsASecondCDFHeaderWord() const
Definition: HcalDCCHeader.h:28
HcalDetId HashToHDI(int thehash)
void Reset(void)
reset ME (ie. contents, errors, etc)
virtual void setup(DQMStore::IBooker &)
unsigned long getDCCEventNumber() const
Definition: HcalDCCHeader.h:36
MonitorElement * meHalfHTRDataCorruptionIndicators_
edm::InputTag digiLabel_
int hashup(uint32_t d=0, uint32_t s=0, uint32_t c=1)
MonitorElement * meFib3OrbMsgBCN_
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
MonitorElement * meChann_DataIntegrityCheck_[32]
bool er() const
is the error bit set?
Definition: HcalQIESample.h:30
MonitorElement * meCh_DataIntegrityFED21_
MonitorElement * meFib6OrbMsgBCN_
bool isHistogramEvent() const
Is this event a histogram event? (do not call standard unpack in this case!!!!!)
Definition: HcalHTRData.cc:385
Definition: Run.h:43
MonitorElement * meCh_DataIntegrityFED18_
void bookHistograms(DQMStore::IBooker &ib, const edm::Run &run, const edm::EventSetup &c)
MonitorElement * meCrate9HTRStatus_
MonitorElement * meCh_DataIntegrityFED22_