CMS 3D CMS Logo

CSCDQM_EventProcessor_processCSC.cc
Go to the documentation of this file.
1 /*
2  * =====================================================================================
3  *
4  * Filename: EventProcessor_processCSC.cc
5  *
6  * Description: Process Chamber
7  *
8  * Version: 1.0
9  * Created: 10/03/2008 11:58:11 PM
10  * Revision: none
11  * Compiler: gcc
12  *
13  * Author: Valdas Rapsevicius, valdas.rapsevicius@cern.ch
14  * Company: CERN, CH
15  *
16  * =====================================================================================
17  */
18 
19 #include "CSCDQM_EventProcessor.h"
20 
21 
22 
23 namespace cscdqm {
24 
25  template<typename T> inline CSCCFEBDataWord const * const
26  timeSample( T const & data, int nCFEB,int nSample,int nLayer, int nStrip) {
27  return data.cfebData(nCFEB)->timeSlice(nSample)->timeSample(nLayer,nStrip,data.cfebData(nCFEB)->isDCFEB());
28  }
29 
30  template<typename T> inline CSCCFEBTimeSlice const * const
31  timeSlice( T const & data, int nCFEB, int nSample) { return data.cfebData(nCFEB)->timeSlice(nSample);}
32 
33 
34 
43  void EventProcessor::setEmuEventDisplayBit(MonitorObject*& mo, const unsigned int x, const unsigned int y, const unsigned int bit) {
44  if (mo && x) {
46  int bitset = (int) mo->GetBinContent(x, y);
47  bitset |= 1 << bit;
48  mo->SetBinContent(x, y, bitset);
49  }
50  }
51 
52 
58 
59  // Reseting EMU level Event displays
60  MonitorObject* mo = nullptr;
62  mo->getTH1Lock()->Reset("");
63  }
64 
66  mo->getTH1Lock()->Reset("");
67  }
68 
70  mo->getTH1Lock()->Reset("");
71  }
72 
74 
75  }
76  }
77 
83  void EventProcessor::processCSC(const CSCEventData& data, const int dduID, const CSCDCCExaminer& binChecker) {
84 
85  config->incNUnpackedCSC();
86 
87  int FEBunpacked = 0;
88  int alct_unpacked = 0;
89  int tmb_unpacked = 0;
90  int cfeb_unpacked = 0;
91 
92  int alct_keywg = -1;
93  int clct_kewdistrip = -1;
94 
95  bool L1A_out_of_sync = false;
96 
97  int nCFEBs = 5;
98 
99  MonitorObject* mo = nullptr;
100 
103  const CSCDMBHeader* dmbHeader = data.dmbHeader();
104  const CSCDMBTrailer* dmbTrailer = data.dmbTrailer();
105  if (!dmbHeader && !dmbTrailer) {
106  LOG_ERROR << "Can not unpack DMB Header or/and Trailer";
107  return;
108  }
109 
111 
112 
114  unsigned int crateID = 0xFF;
115  unsigned int dmbID = 0xF;
116  unsigned int chamberID = 0xFFF;
117 
118  crateID = dmbHeader->crateID();
119  dmbID = dmbHeader->dmbID();
120  chamberID = (((crateID) << 4) + dmbID) & 0xFFF;
121 
122  const std::string cscTag = CSCHistoDef::getPath(crateID, dmbID);
123 
124 
125  unsigned long errors = binChecker.errorsForChamber(chamberID);
126  if ((errors & config->getBINCHECK_MASK()) > 0 ) {
127  LOG_WARN << "Format Errors " << cscTag << ": 0x" << std::hex << errors << " Skipped CSC Unpacking";
128  return;
129  }
130 
131  unsigned int cscType = 0;
132  unsigned int cscPosition = 0;
133  if (!getCSCFromMap(crateID, dmbID, cscType, cscPosition )) return;
134 
135 
136  CSCDetId cid;
137  if (!config->fnGetCSCDetId(crateID, dmbID, cid)) {
138  return;
139  }
140 
141  // Check if ME11 with PostLS1 readout (7 DCFEBs)
142  if ((cscType == 8 || cscType == 9) && theFormatVersion == 2013) nCFEBs = 7;
143 
144  // Check if in standby!
145  if (summary.isChamberStandby(cid)) {
146  return;
147  }
148 
149  double DMBEvents = 0.0;
150  DMBEvents = config->getChamberCounterValue(DMB_EVENTS, crateID, dmbID);
151 
152  // Get Event display plot number and next plot object
153  uint32_t evDisplNo = config->getChamberCounterValue(EVENT_DISPLAY_PLOT, crateID, dmbID);
154  evDisplNo += 1;
155  if (evDisplNo >= 5) {
156  config->setChamberCounterValue(EVENT_DISPLAY_PLOT, crateID, dmbID, 0);
157  } else {
158  config->setChamberCounterValue(EVENT_DISPLAY_PLOT, crateID, dmbID, evDisplNo);
159  }
160  MonitorObject* mo_EventDisplay = nullptr;
161  if (getCSCHisto(h::CSC_EVENT_DISPLAY_NOXX, crateID, dmbID, evDisplNo, mo_EventDisplay)) {
162  mo_EventDisplay->getTH1Lock()->Reset("");
163  }
164 
165  // Receiving EMU Event displays
166  MonitorObject *mo_Emu_EventDisplay_Anode = nullptr, *mo_Emu_EventDisplay_Cathode = nullptr, *mo_Emu_EventDisplay_XY = nullptr;
167  getEMUHisto(h::EMU_EVENT_DISPLAY_ANODE, mo_Emu_EventDisplay_Anode);
168  getEMUHisto(h::EMU_EVENT_DISPLAY_CATHODE, mo_Emu_EventDisplay_Cathode);
169  getEMUHisto(h::EMU_EVENT_DISPLAY_XY, mo_Emu_EventDisplay_XY);
170 
171  // Global chamber index
172  uint32_t glChamberIndex = 0;
173 
174  if (mo_EventDisplay) {
175  mo_EventDisplay->SetBinContent(1, 1, cid.endcap());
176  mo_EventDisplay->SetBinContent(1, 2, cid.station());
177  mo_EventDisplay->SetBinContent(1, 3, cid.ring());
178  mo_EventDisplay->SetBinContent(1, 4, cscPosition);
179  mo_EventDisplay->SetBinContent(1, 5, crateID);
180  mo_EventDisplay->SetBinContent(1, 6, dmbID);
181  mo_EventDisplay->SetBinContent(1, 7, dmbHeader->l1a24());
182  if (mo_Emu_EventDisplay_Anode || mo_Emu_EventDisplay_Cathode || mo_Emu_EventDisplay_XY) {
183  glChamberIndex = summary.getDetector().GlobalChamberIndex(cid.endcap(), cid.station(), cid.ring(), cscPosition);
184  }
185  }
186 
187  config->copyChamberCounterValue(DMB_EVENTS, DMB_TRIGGERS, crateID, dmbID);
188 
189  if (cscPosition && getEMUHisto(h::EMU_CSC_UNPACKED, mo)){
190  mo->Fill(cscPosition, cscType);
191  }
192 
194  float DMBEff = float(DMBEvents) / float(config->getNEvents());
195  if(DMBEff > 1.0) {
196  LOG_ERROR << cscTag << " has efficiency " << DMBEff << " which is greater than 1";
197  }
198 
202  int dmbHeaderL1A = dmbHeader->l1a24()%64;
204  int dmb_ddu_l1a_diff = (int)(dmbHeaderL1A-(int)(L1ANumber%64));
205  if (dmb_ddu_l1a_diff != 0) L1A_out_of_sync = true;
206 
209  if (getCSCHisto(h::CSC_DMB_L1A_DISTRIB, crateID, dmbID, mo)) mo->Fill(dmbHeaderL1A);
210 
211  if (getCSCHisto(h::CSC_DMB_DDU_L1A_DIFF, crateID, dmbID, mo)) {
212  if(dmb_ddu_l1a_diff < -32) {
213  mo->Fill(dmb_ddu_l1a_diff + 64);
214  } else {
215  if(dmb_ddu_l1a_diff >= 32) mo->Fill(dmb_ddu_l1a_diff - 64);
216  else mo->Fill(dmb_ddu_l1a_diff);
217  }
218  mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
219  }
220 
221  if (getCSCHisto(h::CSC_DMB_L1A_VS_DDU_L1A, crateID, dmbID, mo)) mo->Fill((int)(L1ANumber & 0xFF), (int)dmbHeaderL1A);
222 
224  int dmbHeaderBXN = 0;
225  int dmb_ddu_bxn_diff = 0;
226 
231  dmbHeaderBXN = dmbHeader->bxn12();
235  dmb_ddu_bxn_diff = dmbHeaderBXN%64-BXN%64;
237  if (getCSCHisto(h::CSC_DMB_BXN_DISTRIB, crateID, dmbID, mo)) mo->Fill((int)(dmbHeader->bxn12()));
238 
239  if (getCSCHisto(h::CSC_DMB_DDU_BXN_DIFF, crateID, dmbID, mo)) {
240  if(dmb_ddu_bxn_diff < -32) mo->Fill(dmb_ddu_bxn_diff + 64);
241  else {
242  if(dmb_ddu_bxn_diff >= 32) mo->Fill(dmb_ddu_bxn_diff - 64);
243  else mo->Fill(dmb_ddu_bxn_diff);
244  }
245  mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
246  }
247 
249  if (getCSCHisto(h::CSC_DMB_BXN_VS_DDU_BXN, crateID, dmbID, mo)) mo->Fill(((int)(BXN)) % 256, ((int)dmbHeaderBXN) % 256);
250 
252  int cfeb_dav = 0;
253  int cfeb_dav_num = 0;
254  int cfeb_movlp = 0;
255  int dmb_cfeb_sync = 0;
256 
257  cfeb_dav = (int)dmbHeader->cfebAvailable();
258  for (int i = 0; i < nCFEBs; i++) cfeb_dav_num += (cfeb_dav >> i) & 0x1;
259  cfeb_movlp = (int)dmbHeader->cfebMovlp();
260  dmb_cfeb_sync = (int)dmbHeader->dmbCfebSync();
261 
262  if (getCSCHisto(h::CSC_DMB_CFEB_DAV, crateID, dmbID, mo)) {
263  for (int i = 0; i < nCFEBs; i++) {
264  int cfeb_present = (cfeb_dav >> i) & 0x1;
265  if (cfeb_present) {
266  mo->Fill(i);
267  }
268  }
269  }
270 
271  if (getCSCHisto(h::CSC_DMB_CFEB_DAV_MULTIPLICITY, crateID, dmbID, mo)) mo->Fill(cfeb_dav_num);
272  if (getCSCHisto(h::CSC_DMB_CFEB_MOVLP, crateID, dmbID, mo)) mo->Fill(cfeb_movlp);
273  if (getCSCHisto(h::CSC_DMB_CFEB_SYNC, crateID, dmbID, mo)) mo->Fill(dmb_cfeb_sync);
274 
275  if (getEMUHisto(h::EMU_DMB_UNPACKED, mo)) {
276  mo->Fill(crateID, dmbID);
278  }
279 
281  if (getCSCHisto(h::CSC_DMB_CFEB_ACTIVE, crateID, dmbID, mo)) mo->Fill(dmbHeader->cfebActive()); //KK
282 
286  if (getCSCHisto(h::CSC_DMB_L1_PIPE, crateID, dmbID, mo)) mo->Fill(dmbTrailer->dmb_l1pipe());
287 
289  if (getCSCHisto(h::CSC_DMB_FIFO_STATS, crateID, dmbID, mo)) {
290  if (dmbTrailer->tmb_empty() == 1) mo->Fill(1.0, 0.0); //KK
291  if (dmbTrailer->tmb_half() == 0) mo->Fill(1.0, 1.0);
292  if (dmbTrailer->tmb_full() == 1) mo->Fill(1.0, 2.0); //KK
293  if (dmbTrailer->alct_empty() == 1) mo->Fill(0.0, 0.0);
294  if (dmbTrailer->alct_half() == 0) mo->Fill(0.0, 1.0);
295  if (dmbTrailer->alct_full() == 1) mo->Fill(0.0, 2.0); //KK 0->1
296  for (int i = 0; i < nCFEBs; i++) {
297  if ((int)((dmbTrailer->cfeb_empty()>>i)&0x1) == 1) mo->Fill(i + 2, 0.0);
298  if ((int)((dmbTrailer->cfeb_half()>>i)&0x1) == 0) mo->Fill(i + 2, 1);
299  if ((int)((dmbTrailer->cfeb_full()>>i)&0x1) == 1) {
300  mo->Fill(i + 2, 2);
301  }
302  }
303  mo->SetEntries((int)DMBEvents);
304  }
305 
307  if (getCSCHisto(h::CSC_DMB_FEB_TIMEOUTS, crateID, dmbID, mo)) {
308  if ((dmbTrailer->tmb_starttimeout() == 0) && (dmbTrailer->alct_starttimeout() == 0) && (dmbTrailer->cfeb_starttimeout() == 0) && (dmbTrailer->cfeb_endtimeout() == 0)) {
309  mo->Fill(0.0);
310  }else{
311  if (dmbTrailer->alct_starttimeout()) mo->Fill(1);
312  if (dmbTrailer->tmb_starttimeout()) mo->Fill(2);
313  if (dmbTrailer->alct_endtimeout()) mo->Fill(8); // KK
314  if (dmbTrailer->tmb_endtimeout()) mo->Fill(9); // KK
315  }
316  for (int i = 0; i < nCFEBs; i++) {
317  if ((dmbTrailer->cfeb_starttimeout() >> i) & 0x1) {
318  mo->Fill(i + 3);
319  }
320  if ((dmbTrailer->cfeb_endtimeout() >> i) & 0x1) {
321  mo->Fill(i + 10); // KK 8->10
322  }
323  }
324  mo->SetEntries((int)DMBEvents);
325  }
326 
328  int alct_dav = dmbHeader->nalct();
329  int tmb_dav = dmbHeader->nclct();
330  int cfeb_dav2 = 0;
331  for (int i = 0; i < nCFEBs; i++) cfeb_dav2 = cfeb_dav2 + (int)((dmbHeader->cfebAvailable() >> i) & 0x1);
332 
335  if ((alct_dav > 0) && (getCSCHisto(h::CSC_DMB_FEB_DAV_RATE, crateID, dmbID, mo))) {
336  mo->Fill(0.0);
337  float alct_dav_number = mo->GetBinContent(1);
338  if (getCSCHisto(h::CSC_DMB_FEB_DAV_EFFICIENCY, crateID, dmbID, mo)) {
339  mo->SetBinContent(1, ((float)alct_dav_number / (float)(DMBEvents) * 100.0));
340  mo->SetEntries((int)DMBEvents);
341  }
342  }
343 
344  if ((tmb_dav > 0) && (getCSCHisto(h::CSC_DMB_FEB_DAV_RATE, crateID, dmbID, mo))) {
345  mo->Fill(1.0);
346  float tmb_dav_number = mo->GetBinContent(2);
347  if (getCSCHisto(h::CSC_DMB_FEB_DAV_EFFICIENCY, crateID, dmbID, mo)) {
348  mo->SetBinContent(2, ((float)tmb_dav_number / (float)(DMBEvents) * 100.0));
349  mo->SetEntries((int)DMBEvents);
350  }
351  }
352 
353  if ((cfeb_dav2 > 0) && (getCSCHisto(h::CSC_DMB_FEB_DAV_RATE, crateID, dmbID, mo))) {
354  mo->Fill(2.0);
355  float cfeb_dav2_number = mo->GetBinContent(3);
356  if (getCSCHisto(h::CSC_DMB_FEB_DAV_EFFICIENCY, crateID, dmbID, mo)) {
357  mo->SetBinContent(3, ((float)cfeb_dav2_number / (float)(DMBEvents) * 100.0));
358  mo->SetEntries((int)DMBEvents);
359  }
360  }
361 
362  float feb_combination_dav = -1.0;
364  if (getCSCHisto(h::CSC_DMB_FEB_COMBINATIONS_DAV_RATE, crateID, dmbID, mo)) {
365  if(alct_dav == 0 && tmb_dav == 0 && cfeb_dav2 == 0) feb_combination_dav = 0.0; // Nothing
366  if(alct_dav > 0 && tmb_dav == 0 && cfeb_dav2 == 0) feb_combination_dav = 1.0; // ALCT Only
367  if(alct_dav == 0 && tmb_dav > 0 && cfeb_dav2 == 0) feb_combination_dav = 2.0; // TMB Only
368  if(alct_dav == 0 && tmb_dav == 0 && cfeb_dav2 > 0) feb_combination_dav = 3.0; // CFEB Only
369  if(alct_dav == 0 && tmb_dav > 0 && cfeb_dav2 > 0) feb_combination_dav = 4.0; // TMB+CFEB
370  if(alct_dav > 0 && tmb_dav > 0 && cfeb_dav2 == 0) feb_combination_dav = 5.0; // ALCT+TMB
371  if(alct_dav > 0 && tmb_dav == 0 && cfeb_dav2 > 0) feb_combination_dav = 6.0; // ALCT+CFEB
372  if(alct_dav > 0 && tmb_dav > 0 && cfeb_dav2 > 0) feb_combination_dav = 7.0; // ALCT+TMB+CFEB
373  mo->Fill(feb_combination_dav);
374  float feb_combination_dav_number = mo->GetBinContent((int)(feb_combination_dav + 1.0));
375  if (getCSCHisto(h::CSC_DMB_FEB_COMBINATIONS_DAV_EFFICIENCY, crateID, dmbID, mo)) {
376  mo->SetBinContent((int)(feb_combination_dav + 1.0), ((float)feb_combination_dav_number / (float)(DMBEvents) * 100.0));
377  mo->SetEntries((int)DMBEvents);
378  }
379  }
380 
382  if (data.nalct()) {
383 
384 
385  const CSCALCTHeader* alctHeader = data.alctHeader();
386  int fwVersion = alctHeader->alctFirmwareVersion();
387  const CSCALCTTrailer* alctTrailer = data.alctTrailer();
388  const CSCAnodeData* alctData = data.alctData();
389 
390  if (alctHeader && alctTrailer) {
391 
392  std::vector<CSCALCTDigi> alctsDatasTmp = alctHeader->ALCTDigis();
393  std::vector<CSCALCTDigi> alctsDatas;
394 
395  for (uint32_t lct = 0; lct < alctsDatasTmp.size(); lct++) {
396  if (alctsDatasTmp[lct].isValid()) alctsDatas.push_back(alctsDatasTmp[lct]);
397  }
398 
399  FEBunpacked = FEBunpacked + 1;
400  alct_unpacked = 1;
401 
403  if (getCSCHisto(h::CSC_CSC_RATE, crateID, dmbID, mo)) {
404  mo->Fill(2);
405  uint32_t ALCTEvent = (uint32_t)mo->GetBinContent(3);
406  config->setChamberCounterValue(ALCT_TRIGGERS, crateID, dmbID, ALCTEvent);
407  if (getCSCHisto(h::CSC_CSC_EFFICIENCY, crateID, dmbID, mo)){
408  if(config->getNEvents() > 0) {
411  mo->SetBinContent(1, ((float)ALCTEvent / (float)(DMBEvents) * 100.0));
413  mo->SetEntries((int)DMBEvents);
414  }
415  }
416  }
417 
418  if ((alct_dav >0) && (getCSCHisto(h::CSC_DMB_FEB_UNPACKED_VS_DAV, crateID, dmbID, mo))) {
419  mo->Fill(0.0, 0.0);
420  }
421 
424  if (getCSCHisto(h::CSC_ALCT_L1A, crateID, dmbID, mo)) mo->Fill((int)(alctHeader->L1Acc()));
425 
427  if (getCSCHisto(h::CSC_ALCT_DMB_L1A_DIFF, crateID, dmbID, mo)) {
429  int alct_dmb_l1a_diff = (int)(alctHeader->L1Acc() % 64 - dmbHeader->l1a24() % 64);
430  if (alct_dmb_l1a_diff != 0) L1A_out_of_sync = true;
431  if(alct_dmb_l1a_diff < -32) mo->Fill(alct_dmb_l1a_diff + 64);
432  else {
433  if(alct_dmb_l1a_diff >= 32) mo->Fill(alct_dmb_l1a_diff - 64);
434  else mo->Fill(alct_dmb_l1a_diff);
435  }
436  mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
437  }
438 
440  if (getCSCHisto(h::CSC_DMB_L1A_VS_ALCT_L1A, crateID, dmbID, mo)) mo->Fill(alctHeader->L1Acc() % 256, dmbHeader->l1a24()%256);
441 
444  if (getCSCHisto(h::CSC_ALCT_DMB_BXN_DIFF, crateID, dmbID, mo)) {
445  int alct_dmb_bxn_diff = (int)(alctHeader->BXNCount()-dmbHeader->bxn12());
446  if (alct_dmb_bxn_diff > 0) alct_dmb_bxn_diff -= 3564;
447  alct_dmb_bxn_diff %= 32;
448  mo->Fill(alct_dmb_bxn_diff);
449  mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
450  }
451 
452  if (getCSCHisto(h::CSC_ALCT_BXN, crateID, dmbID, mo)) mo->Fill(alctHeader->BXNCount());
453 
455  if (getCSCHisto(h::CSC_ALCT_BXN_VS_DMB_BXN, crateID, dmbID, mo)) mo->Fill((int)((alctHeader->BXNCount()) % 256), (int)(dmbHeader->bxn12()) % 256);
456 
457  if (getCSCHisto(h::CSC_ALCT_NUMBER_RATE, crateID, dmbID, mo)) {
458  mo->Fill(alctsDatas.size());
459  int nALCT = (int)mo->GetBinContent((int)(alctsDatas.size() + 1));
460  if (getCSCHisto(h::CSC_ALCT_NUMBER_EFFICIENCY, crateID, dmbID, mo))
461  mo->SetBinContent((int)(alctsDatas.size() + 1), (float)(nALCT) / (float)(DMBEvents) * 100.0);
462  }
463 
464  if (getCSCHisto(h::CSC_ALCT_WORD_COUNT, crateID, dmbID, mo)) mo->Fill((int)(alctTrailer->wordCount()));
465 
468  if (alctsDatas.size() == 2) {
469  if (getCSCHisto(h::CSC_ALCT1_VS_ALCT0_KEYWG, crateID, dmbID, mo))
470  mo->Fill(alctsDatas[0].getKeyWG(),alctsDatas[1].getKeyWG());
471  }
472 
473  MonitorObject* mo_CSC_ALCT0_BXN_mean = nullptr;
474  getEMUHisto(h::EMU_CSC_ALCT0_BXN_MEAN, mo_CSC_ALCT0_BXN_mean);
475 
476  MonitorObject* mo_CSC_ALCT0_BXN_rms = nullptr;
477  getEMUHisto(h::EMU_CSC_ALCT0_BXN_RMS, mo_CSC_ALCT0_BXN_rms);
478 
479  MonitorObject* mo_CSC_Plus_endcap_ALCT0_dTime = nullptr;
480  getEMUHisto(h::EMU_CSC_ALCT0_ENDCAP_PLUS_DTIME, mo_CSC_Plus_endcap_ALCT0_dTime);
481 
482  MonitorObject* mo_CSC_Minus_endcap_ALCT0_dTime = nullptr;
483  getEMUHisto(h::EMU_CSC_ALCT0_ENDCAP_MINUS_DTIME, mo_CSC_Minus_endcap_ALCT0_dTime);
484 
485  for (uint32_t lct = 0; lct < alctsDatas.size(); lct++) {
486 
488  if (lct >= 2) continue;
489 
490  if (getCSCHisto(h::CSC_ALCTXX_KEYWG, crateID, dmbID, lct, mo)) {
491  mo->Fill(alctsDatas[lct].getKeyWG());
492  }
493 
494  if(lct == 0) alct_keywg = alctsDatas[lct].getKeyWG();
495 
496  int alct_dtime = 0;
497  if (fwVersion == 2007) {
498  alct_dtime = alctsDatas[lct].getBX();
499  } else {
500  // Older 2006 Format
501  alct_dtime = (int) (alctsDatas[lct].getBX() - (alctHeader->BXNCount()&0x1F));
502  }
503 
504  // == Those two summary histos need to be outside of per-chamber CSC_ALCTXX_DTIME histo check.
505  // Otherwise will be empty in Offline DQM
506  if (lct == 0) {
507  if (cid.endcap() == 1) {
508  if (mo_CSC_Plus_endcap_ALCT0_dTime) mo_CSC_Plus_endcap_ALCT0_dTime->Fill(alct_dtime);
509  }
510  if (cid.endcap() == 2) {
511  if (mo_CSC_Minus_endcap_ALCT0_dTime) mo_CSC_Minus_endcap_ALCT0_dTime->Fill(alct_dtime);
512  }
513  }
514 
515  if (getCSCHisto(h::CSC_ALCTXX_DTIME, crateID, dmbID, lct, mo)) {
516 
517  if(alct_dtime < -16) {
518  mo->Fill(alct_dtime + 32);
519  } else {
520  if(alct_dtime >= 16) mo->Fill(alct_dtime - 32);
521  else mo->Fill(alct_dtime);
522  }
523 
524  mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
525 
526  double dTime_mean = mo->getTH1()->GetMean();
527  double dTime_rms = mo->getTH1()->GetRMS();
528 
529  // == For ALCT0 Fill Summary dTime Histograms
530  if (lct == 0) {
531  /* -- Moved outside of CSC histo check
532  if (cid.endcap() == 1) {
533  if (mo_CSC_Plus_endcap_ALCT0_dTime) mo_CSC_Plus_endcap_ALCT0_dTime->Fill(alct_dtime);
534  }
535  if (cid.endcap() == 2) {
536  if (mo_CSC_Minus_endcap_ALCT0_dTime) mo_CSC_Minus_endcap_ALCT0_dTime->Fill(alct_dtime);
537  }
538  */
539  if (cscPosition && mo_CSC_ALCT0_BXN_mean) {
540  mo_CSC_ALCT0_BXN_mean->SetBinContent(cscPosition, cscType + 1, dTime_mean);
541  }
542  if (cscPosition && mo_CSC_ALCT0_BXN_rms) {
543  mo_CSC_ALCT0_BXN_rms->SetBinContent(cscPosition, cscType + 1, dTime_rms);
544  }
545  }
546  }
547 
548 
549  if (getCSCHisto(h::CSC_ALCTXX_DTIME_VS_KEYWG, crateID, dmbID, lct, mo)) {
550  if(alct_dtime < -16) {
551  mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime + 32);
552  } else {
553  if(alct_dtime >= 16) mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime - 32);
554  else mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime);
555  }
556  }
557 
558  if (getCSCHisto(h::CSC_ALCTXX_DTIME_PROFILE, crateID, dmbID, lct, mo)) {
559  if(alct_dtime < -16) {
560  mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime + 32);
561  } else {
562  if (alct_dtime >= 16) mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime - 32);
563  else mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime);
564  }
565  }
566 
567  int alct_bxn = alctsDatas[lct].getBX();
568  if (fwVersion == 2007) {
569  alct_bxn = (alct_bxn + alctHeader->BXNCount())&0x1F;
570  }
571 
572  if (getCSCHisto(h::CSC_ALCTXX_BXN, crateID, dmbID, lct, mo)) mo->Fill(alct_bxn);
573 
574  if (getCSCHisto(h::CSC_ALCTXX_QUALITY, crateID, dmbID, lct, mo)) mo->Fill(alctsDatas[lct].getKeyWG(), alctsDatas[lct].getQuality());
575 
576  if (mo_EventDisplay) {
577  mo_EventDisplay->SetBinContent(2, alctsDatas[lct].getKeyWG(), alct_bxn + 1 );
578  mo_EventDisplay->SetBinContent(3, alctsDatas[lct].getKeyWG(), alctsDatas[lct].getQuality());
579  }
580 
581  if (getCSCHisto(h::CSC_ALCTXX_QUALITY_DISTR, crateID, dmbID, lct, mo)) {
582  mo->Fill(alctsDatas[lct].getQuality());
583  if (lct == 0) {
584  MonitorObject* mo1 = nullptr;
585  if (cscPosition && getEMUHisto(h::EMU_CSC_ALCT0_QUALITY, mo1)) {
586  mo1->SetBinContent(cscPosition, cscType + 1, mo->getTH1()->GetMean());
587  }
588  }
589  }
590 
591  if (getCSCHisto(h::CSC_ALCTXX_QUALITY_PROFILE, crateID, dmbID, lct, mo)) mo->Fill(alctsDatas[lct].getKeyWG(), alctsDatas[lct].getQuality());
592 
593  if (getCSCHisto(h::CSC_ALCTXX_PATTERN, crateID, dmbID, lct, mo)) {
594  int pattern = (alctsDatas[lct].getAccelerator() << 1) + alctsDatas[lct].getCollisionB();
595  int keywg = alctsDatas[lct].getKeyWG();
596  mo->Fill(keywg, pattern );
597  }
598 
599  if (getCSCHisto(h::CSC_ALCTXX_PATTERN_DISTR, crateID, dmbID, lct, mo)) {
600  int pattern = (alctsDatas[lct].getAccelerator()<<1) + alctsDatas[lct].getCollisionB();
601  mo->Fill(pattern);
602  }
603 
604  }
605 
606  int NumberOfLayersWithHitsInALCT = 0;
607  int NumberOfWireGroupsWithHitsInALCT = 0;
608 
609  if (alctData) {
610 
611  MonitorObject* mo_AFEB_RawHits_TimeBins = nullptr;
612  getCSCHisto(h::CSC_CFEB_AFEB_RAWHITS_TIMEBINS, crateID, dmbID, mo_AFEB_RawHits_TimeBins);
613 
614  MonitorObject* mo_CSC_Plus_endcap_AFEB_RawHits_Time = nullptr;
615  getEMUHisto(h::EMU_CSC_AFEB_ENDCAP_PLUS_RAWHITS_TIME, mo_CSC_Plus_endcap_AFEB_RawHits_Time);
616 
617  MonitorObject* mo_CSC_Minus_endcap_AFEB_RawHits_Time = nullptr;
618  getEMUHisto(h::EMU_CSC_AFEB_ENDCAP_MINUS_RAWHITS_TIME, mo_CSC_Minus_endcap_AFEB_RawHits_Time);
619 
620  MonitorObject* mo_CSC_AFEB_RawHits_Time_mean = nullptr;
621  getEMUHisto(h::EMU_CSC_AFEB_RAWHITS_TIME_MEAN, mo_CSC_AFEB_RawHits_Time_mean);
622 
623  MonitorObject* mo_CSC_AFEB_RawHits_Time_rms = nullptr;
624  getEMUHisto(h::EMU_CSC_AFEB_RAWHITS_TIME_RMS, mo_CSC_AFEB_RawHits_Time_rms);
625 
626  for (int nLayer = 1; nLayer <= 6; nLayer++) {
627 
628  int wg_previous = -1;
629  int tbin_previous = -1;
630  bool CheckLayerALCT = true;
631 
632  std::vector<CSCWireDigi> wireDigis = alctData->wireDigis(nLayer);
633  for (std::vector<CSCWireDigi>::iterator wireDigisItr = wireDigis.begin(); wireDigisItr != wireDigis.end(); ++wireDigisItr) {
634 
635  int wg = wireDigisItr->getWireGroup();
637  std::vector<int> tbins = wireDigisItr->getTimeBinsOn();
638  int tbin = wireDigisItr->getTimeBin();
639 
640  if (mo_EventDisplay) {
641  mo_EventDisplay->SetBinContent(nLayer + 3, wg - 1, tbin + 1);
642  setEmuEventDisplayBit(mo_Emu_EventDisplay_Anode, glChamberIndex, wg - 1, nLayer - 1);
643  setEmuEventDisplayBit(mo_Emu_EventDisplay_XY, glChamberIndex, wg - 1, nLayer - 1);
644  }
645 
646  if (CheckLayerALCT) {
647  NumberOfLayersWithHitsInALCT = NumberOfLayersWithHitsInALCT + 1;
648  CheckLayerALCT = false;
649  }
650 
651  for (uint32_t n = 0; n < tbins.size(); n++) {
652 
653  tbin = tbins[n];
654  if(wg != wg_previous || (tbin != tbin_previous + 1 && tbin != tbin_previous - 1) ) {
655 
656  if (getCSCHisto(h::CSC_ALCTTIME_LYXX, crateID, dmbID, nLayer, mo)) mo->Fill(wg - 1, tbin);
657 
658  if (getCSCHisto(h::CSC_ALCTTIME_LYXX_PROFILE, crateID, dmbID, nLayer, mo)) mo->Fill(wg - 1, tbin);
659 
660  if (mo_AFEB_RawHits_TimeBins) mo_AFEB_RawHits_TimeBins->Fill(tbin);
661 
662  if (cid.endcap() == 1) {
663  if (mo_CSC_Plus_endcap_AFEB_RawHits_Time) mo_CSC_Plus_endcap_AFEB_RawHits_Time->Fill(tbin);
664  }
665  if (cid.endcap() == 2) {
666  if (mo_CSC_Minus_endcap_AFEB_RawHits_Time) mo_CSC_Minus_endcap_AFEB_RawHits_Time->Fill(tbin);
667  }
668 
669  if (getCSCHisto(h::CSC_ALCT_LYXX_RATE, crateID, dmbID, nLayer, mo)) {
670  mo->Fill(wg - 1);
671  int number_wg = (int)(mo->GetBinContent(wg));
672  Double_t Number_of_entries_ALCT = mo->GetEntries();
673  if (getCSCHisto(h::CSC_ALCT_LYXX_EFFICIENCY, crateID, dmbID, nLayer, mo)) {
674  mo->SetBinContent(wg, ((float) number_wg));
675  if((Double_t)(DMBEvents) > 0.0) {
676  mo->SetNormFactor(100.0*Number_of_entries_ALCT/(Double_t)(DMBEvents));
677  } else {
678  mo->SetNormFactor(100.0);
679  }
680  mo->SetEntries((int)DMBEvents);
681  }
682  }
683  }
684  if(wg != wg_previous) {
685  NumberOfWireGroupsWithHitsInALCT = NumberOfWireGroupsWithHitsInALCT + 1;
686  }
687 
688  wg_previous = wg;
689  tbin_previous = tbin;
690  }
691  }
692 
693  // Fill Summary Anode Raw Hits Timing Plots
694  if (mo_AFEB_RawHits_TimeBins) {
695 
696  double rawhits_time_mean = mo_AFEB_RawHits_TimeBins->getTH1()->GetMean();
697  double rawhits_time_rms = mo_AFEB_RawHits_TimeBins->getTH1()->GetRMS();
698 
699  if ( cscPosition && mo_CSC_AFEB_RawHits_Time_mean) {
700  mo_CSC_AFEB_RawHits_Time_mean->SetBinContent(cscPosition, cscType + 1, rawhits_time_mean);
701  }
702 
703  if ( cscPosition && mo_CSC_AFEB_RawHits_Time_rms) {
704  mo_CSC_AFEB_RawHits_Time_rms->SetBinContent(cscPosition, cscType + 1, rawhits_time_rms);
705  }
706 
707  }
708 
709  }
710 
711  } else {
712  LOG_ERROR << cscTag << " Can not unpack Anode Data";
713  }
714 
715  if (getCSCHisto(h::CSC_ALCT_NUMBER_OF_LAYERS_WITH_HITS, crateID, dmbID, mo)) {
716  mo->Fill(NumberOfLayersWithHitsInALCT);
717  MonitorObject* mo1 = nullptr;
718  if ( cscPosition && getEMUHisto(h::EMU_CSC_ALCT_PLANES_WITH_HITS, mo1)) {
719  mo1->SetBinContent(cscPosition, cscType + 1, mo->getTH1()->GetMean());
720  }
721  }
722 
723  if (getCSCHisto(h::CSC_ALCT_NUMBER_OF_WIREGROUPS_WITH_HITS, crateID, dmbID, mo)) mo->Fill(NumberOfWireGroupsWithHitsInALCT);
724 
725  } else {
726  LOG_ERROR << cscTag << " Can not unpack ALCT Header or/and Trailer";
727  }
728  } else {
731  if (getCSCHisto(h::CSC_ALCT_NUMBER_RATE, crateID, dmbID, mo)) {
732  mo->Fill(0);
733  int nALCT = (int)mo->GetBinContent(1);
734  if (getCSCHisto(h::CSC_ALCT_NUMBER_EFFICIENCY, crateID, dmbID, mo))
735  mo->SetBinContent(1, (float)(nALCT) / (float)(DMBEvents) * 100.0);
736  }
737 
738  if ((alct_dav > 0) && (getCSCHisto(h::CSC_DMB_FEB_UNPACKED_VS_DAV, crateID, dmbID, mo))) {
739  mo->Fill(0.0, 1.0);
740  }
741  }
742 
744  if(data.nclct() && data.nalct()) {
745 
746  CSCALCTHeader* alctHeader = data.alctHeader();
747 
748  if (alctHeader) {
749  std::vector<CSCALCTDigi> alctsDatasTmp = alctHeader->ALCTDigis();
750  std::vector<CSCALCTDigi> alctsDatas;
751 
752  for (uint32_t lct = 0; lct < alctsDatasTmp.size(); lct++) {
753  if (alctsDatasTmp[lct].isValid())
754  alctsDatas.push_back(alctsDatasTmp[lct]);
755  }
756 
757  CSCTMBData* tmbData = data.tmbData();
758  if (tmbData) {
759  CSCTMBHeader* tmbHeader = tmbData->tmbHeader();
760  if (tmbHeader) {
762  if (getCSCHisto(h::CSC_TMB_BXN_VS_ALCT_BXN, crateID, dmbID, mo))
763  mo->Fill( ((int)(alctHeader->BXNCount())) % 256, ((int)(tmbHeader->BXNCount())) % 256 );
764 
765  if (getCSCHisto(h::CSC_TMB_ALCT_BXN_DIFF, crateID, dmbID, mo)) {
766  int clct_alct_bxn_diff = (int)(alctHeader->BXNCount() - tmbHeader->BXNCount());
767  if(clct_alct_bxn_diff < -2048) mo->Fill(clct_alct_bxn_diff + 4096);
768  else {
769  if(clct_alct_bxn_diff > 2048) mo->Fill(clct_alct_bxn_diff - 4096);
770  else mo->Fill(clct_alct_bxn_diff);
771  }
772  mo->SetAxisRange(0.1, 1.1*(1.0+mo->GetBinContent(mo->GetMaximumBin())), "Y");
773  }
774 
775  if (getCSCHisto(h::CSC_TMB_L1A_VS_ALCT_L1A, crateID, dmbID, mo))
776  mo->Fill((int)(alctHeader->L1Acc()%256),(int)(tmbHeader->L1ANumber()%256));
777 
778  if (getCSCHisto(h::CSC_TMB_ALCT_L1A_DIFF, crateID, dmbID, mo)) {
779  int clct_alct_l1a_diff = (int)(tmbHeader->L1ANumber() - alctHeader->L1Acc());
780  if(clct_alct_l1a_diff < -2048) mo->Fill(clct_alct_l1a_diff + 4096);
781  else {
782  if(clct_alct_l1a_diff > 2048) mo->Fill(clct_alct_l1a_diff - 4096);
783  else mo->Fill(clct_alct_l1a_diff);
784  }
785  mo->SetAxisRange(0.1, 1.1*(1.0+mo->GetBinContent(mo->GetMaximumBin())), "Y");
786  }
787  } else {
788  LOG_ERROR << cscTag << " Can not unpack TMB Header";
789  }
790 
791  } else {
792  LOG_ERROR << cscTag << " Can not unpack TMB Data";
793  }
794  } else {
795  LOG_ERROR << cscTag << " Can not unpack ALCT Header";
796  }
797  }
798 
800  if (data.nclct()) {
801 
804  CSCTMBData* tmbData = data.tmbData();
805  if (tmbData) {
806 
807 
808  CSCTMBHeader* tmbHeader = tmbData->tmbHeader();
809  CSCTMBTrailer* tmbTrailer = tmbData->tmbTrailer();
810 
811  if (tmbHeader && tmbTrailer) {
812 
813  CSCCLCTData* clctData = data.clctData();
814 
815  std::vector<CSCCLCTDigi> clctsDatasTmp = tmbHeader->CLCTDigis(cid.rawId());
816  std::vector<CSCCLCTDigi> clctsDatas;
817 
818  for (uint32_t lct = 0; lct < clctsDatasTmp.size(); lct++) {
819  if (clctsDatasTmp[lct].isValid()) clctsDatas.push_back(clctsDatasTmp[lct]);
820  }
821 
822  FEBunpacked = FEBunpacked +1;
823  tmb_unpacked = 1;
824 
825  if (getCSCHisto(h::CSC_ALCT_MATCH_TIME, crateID, dmbID, mo)) {
826 
827  mo->Fill(tmbHeader->ALCTMatchTime());
828  double alct_match_mean = mo->getTH1()->GetMean();
829  double alct_match_rms = mo->getTH1()->GetRMS();
830  MonitorObject* mo1 = nullptr;
831 
832  if (cid.endcap() == 1) {
833  if (cscPosition && getEMUHisto(h::EMU_CSC_ENDCAP_PLUS_ALCT_CLCT_MATCH_TIME, mo1)) {
834  mo1->Fill(tmbHeader->ALCTMatchTime());
835  }
836  }
837 
838  if (cid.endcap() == 2) {
840  mo1->Fill(tmbHeader->ALCTMatchTime());
841  }
842  }
843 
844  if (cscPosition && getEMUHisto(h::EMU_CSC_ALCT_CLCT_MATCH_MEAN, mo1)) {
845  mo1->SetBinContent(cscPosition, cscType + 1, alct_match_mean);
846  }
847 
848  if (cscPosition && getEMUHisto(h::EMU_CSC_ALCT_CLCT_MATCH_RMS, mo1)) {
849  mo1->SetBinContent(cscPosition, cscType + 1, alct_match_rms);
850  }
851 
852  }
853 
854  if (getCSCHisto(h::CSC_LCT_MATCH_STATUS, crateID, dmbID, mo)) {
855  if (tmbHeader->CLCTOnly()) mo->Fill(0.0,0.0);
856  if (tmbHeader->ALCTOnly()) mo->Fill(0.0,1.0);
857  if (tmbHeader->TMBMatch()) mo->Fill(0.0,2.0);
858  }
859 
860  if (getCSCHisto(h::CSC_LCT0_MATCH_BXN_DIFFERENCE, crateID, dmbID, mo)) mo->Fill(tmbHeader->Bxn0Diff());
861  if (getCSCHisto(h::CSC_LCT1_MATCH_BXN_DIFFERENCE, crateID, dmbID, mo)) mo->Fill(tmbHeader->Bxn1Diff());
862 
863  if ((tmb_dav > 0) && (getCSCHisto(h::CSC_DMB_FEB_UNPACKED_VS_DAV, crateID, dmbID, mo))) {
864  mo->Fill(1.0, 0.0);
865  }
866 
868  if (getCSCHisto(h::CSC_CSC_RATE, crateID, dmbID, mo)) {
869  mo->Fill(3);
870  uint32_t CLCTEvent = (uint32_t)mo->GetBinContent(4);
871  config->setChamberCounterValue(CLCT_TRIGGERS, crateID, dmbID, CLCTEvent);
872  if (getCSCHisto(h::CSC_CSC_EFFICIENCY, crateID, dmbID, mo)) {
873  if(config->getNEvents() > 0) {
874  mo->SetBinContent(2,((float)CLCTEvent/(float)(DMBEvents)*100.0));
875  mo->SetEntries(DMBEvents);
876  }
877  }
878  }
879 
880  if (getCSCHisto(h::CSC_CLCT_L1A, crateID, dmbID, mo)) mo->Fill(tmbHeader->L1ANumber());
881 
883  if (getCSCHisto(h::CSC_CLCT_DMB_L1A_DIFF, crateID, dmbID, mo)) {
884  int clct_dmb_l1a_diff = (int)((tmbHeader->L1ANumber() % 64)-dmbHeader->l1a24() % 64);
885  if (clct_dmb_l1a_diff != 0) L1A_out_of_sync = true;
886  if(clct_dmb_l1a_diff < -32) mo->Fill(clct_dmb_l1a_diff + 64);
887  else {
888  if(clct_dmb_l1a_diff >= 32) mo->Fill(clct_dmb_l1a_diff - 64);
889  else mo->Fill(clct_dmb_l1a_diff);
890  }
891  mo->SetAxisRange(0.1, 1.1*(1.0+mo->GetBinContent(mo->GetMaximumBin())), "Y");
892  }
893 
895  if (getCSCHisto(h::CSC_DMB_L1A_VS_CLCT_L1A, crateID, dmbID, mo)) mo->Fill(tmbHeader->L1ANumber()%256,dmbHeader->l1a24()%256);
896 
897  if (getCSCHisto(h::CSC_CLCT_DMB_BXN_DIFF, crateID, dmbID, mo)) {
898  int clct_dmb_bxn_diff = (int)(tmbHeader->BXNCount()%64-dmbHeader->bxn12()%64);
899  if(clct_dmb_bxn_diff < -32) mo->Fill(clct_dmb_bxn_diff + 64);
900  else {
901  if(clct_dmb_bxn_diff >= 32) mo->Fill(clct_dmb_bxn_diff - 64);
902  else mo->Fill(clct_dmb_bxn_diff);
903  }
904  mo->SetAxisRange(0.1, 1.1*(1.0+mo->GetBinContent(mo->GetMaximumBin())), "Y");
905  }
906 
907  if (getCSCHisto(h::CSC_CLCT_BXN, crateID, dmbID, mo)) mo->Fill((int)(tmbHeader->BXNCount()));
908 
910  if (getCSCHisto(h::CSC_CLCT_BXN_VS_DMB_BXN, crateID, dmbID, mo)) mo->Fill(tmbHeader->BXNCount()%256,dmbHeader->bxn12()%256);
911 
912  if (getCSCHisto(h::CSC_CLCT_NUMBER_RATE, crateID, dmbID, mo)) {
913  mo->Fill(clctsDatas.size());
914  int nCLCT = (int)mo->GetBinContent((int)(clctsDatas.size()+1));
915  if (getCSCHisto(h::CSC_CLCT_NUMBER, crateID, dmbID, mo)) mo->SetBinContent((int)(clctsDatas.size() + 1), (float)(nCLCT) / (float)(DMBEvents) * 100.0);
916  }
917 
918  if (clctsDatas.size() == 1) {
919  if (getCSCHisto(h::CSC_CLCT0_CLSSIFICATION, crateID, dmbID, mo)) {
920  if (clctsDatas[0].getStripType()) mo->Fill(0.0);
921  else mo->Fill(1.0);
922  }
923  }
924 
925  if (clctsDatas.size() == 2) {
926  if (getCSCHisto(h::CSC_CLCT1_VS_CLCT0_KEY_STRIP, crateID, dmbID, mo))
927  mo->Fill(clctsDatas[0].getKeyStrip(),clctsDatas[1].getKeyStrip());
928  if (getCSCHisto(h::CSC_CLCT0_CLCT1_CLSSIFICATION, crateID, dmbID, mo)) {
929  if ( clctsDatas[0].getStripType() && clctsDatas[1].getStripType()) mo->Fill(0.0);
930  if ( clctsDatas[0].getStripType() && !clctsDatas[1].getStripType()) mo->Fill(1.0);
931  if (!clctsDatas[0].getStripType() && clctsDatas[1].getStripType()) mo->Fill(2.0);
932  if (!clctsDatas[0].getStripType() && !clctsDatas[1].getStripType()) mo->Fill(3.0);
933  }
934  }
935 
936  if (getCSCHisto(h::CSC_TMB_WORD_COUNT, crateID, dmbID, mo)) mo->Fill((int)(tmbTrailer->wordCount()));
939  MonitorObject* mo_CSC_Plus_endcap_CLCT0_dTime = nullptr;
940  getEMUHisto(h::EMU_CSC_ENDCAP_PLUS_CLCT0_DTIME, mo_CSC_Plus_endcap_CLCT0_dTime);
941 
942  MonitorObject* mo_CSC_Minus_endcap_CLCT0_dTime = nullptr;
943  getEMUHisto(h::EMU_CSC_ENDCAP_MINUS_CLCT0_DTIME, mo_CSC_Minus_endcap_CLCT0_dTime);
944 
945  MonitorObject* mo_CSC_CLCT0_BXN_mean = nullptr;
946  getEMUHisto(h::EMU_CSC_CLCT0_BXN_MEAN, mo_CSC_CLCT0_BXN_mean);
947 
948  MonitorObject* mo_CSC_CLCT0_BXN_rms = nullptr;
949  getEMUHisto(h::EMU_CSC_CLCT0_BXN_RMS, mo_CSC_CLCT0_BXN_rms);
950 
951  for (uint32_t lct = 0; lct < clctsDatas.size(); lct++) {
952 
953  if (getCSCHisto(h::CSC_CLCTXX_BXN, crateID, dmbID, lct, mo)) mo->Fill(clctsDatas[lct].getFullBX()%64);
954 
955  int clct_dtime = clctsDatas[lct].getFullBX() - tmbHeader->BXNCount();
956  if (clct_dtime > 0) {
957  clct_dtime -= 3564;
958  }
959 
960  int dTime = clct_dtime;
961 
962  if (lct == 0) {
963  if (cid.endcap() == 1) {
964  if (mo_CSC_Plus_endcap_CLCT0_dTime) mo_CSC_Plus_endcap_CLCT0_dTime->Fill(dTime);
965  }
966  if (cid.endcap() == 2) {
967  if (mo_CSC_Minus_endcap_CLCT0_dTime) mo_CSC_Minus_endcap_CLCT0_dTime->Fill(dTime);
968  }
969  }
970 
971  if (getCSCHisto(h::CSC_CLCTXX_DTIME, crateID, dmbID, lct, mo)) {
972  /*
973  int dTime = clct_dtime;
974  if (clct_dtime < -16) {
975  dTime = clct_dtime + 32;
976  } else {
977  if (clct_dtime > 16) dTime = clct_dtime - 32;
978  }
979  */
980 
981  mo->Fill(dTime);
982  mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
983 
984  double dTime_mean = mo->getTH1()->GetMean();
985  double dTime_rms = mo->getTH1()->GetRMS();
986 
987  // == For CLCT0 Fill Summary dTime Histograms
988  if (lct == 0) {
989  /* -- Moved
990  if (cid.endcap() == 1) {
991  if (mo_CSC_Plus_endcap_CLCT0_dTime) mo_CSC_Plus_endcap_CLCT0_dTime->Fill(dTime);
992  }
993  if (cid.endcap() == 2) {
994  if (mo_CSC_Minus_endcap_CLCT0_dTime) mo_CSC_Minus_endcap_CLCT0_dTime->Fill(dTime);
995  }
996  */
997  if (cscPosition && mo_CSC_CLCT0_BXN_mean) {
998  mo_CSC_CLCT0_BXN_mean->SetBinContent(cscPosition, cscType + 1, dTime_mean);
999  }
1000  if (cscPosition && mo_CSC_CLCT0_BXN_rms) {
1001  mo_CSC_CLCT0_BXN_rms->SetBinContent(cscPosition, cscType + 1, dTime_rms);
1002  }
1003  }
1004 
1005  }
1006 
1009  LOG_DEBUG << "LCT:" << lct << " Type:" << clctsDatas[lct].getStripType() << " Strip:" << clctsDatas[lct].getKeyStrip();
1010 
1011  if (clctsDatas[lct].getStripType()) { // HalfStrip Type
1012 
1013  if (getCSCHisto(h::CSC_CLCTXX_KEYHALFSTRIP, crateID, dmbID, lct, mo))
1014  mo->Fill(clctsDatas[lct].getKeyStrip());
1015 
1016  if (getCSCHisto(h::CSC_CLCTXX_DTIME_VS_HALF_STRIP, crateID, dmbID, lct, mo)) {
1017  mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
1018  /*
1019  if (clct_dtime < -16) {
1020  mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime + 32);
1021  } else {
1022  if (clct_dtime > 16) mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime - 32);
1023  else mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
1024  }
1025  */
1026  }
1027 
1028  if (getCSCHisto(h::CSC_CLCTXX_DTIME_PROFILE, crateID, dmbID, lct, mo)) {
1029  mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
1030  /*
1031  if (clct_dtime < -16) {
1032  mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime + 32);
1033  } else {
1034  if (clct_dtime > 16) mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime - 32);
1035  else mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
1036  }
1037  */
1038  }
1039 
1040  if (getCSCHisto(h::CSC_CLCTXX_HALF_STRIP_PATTERN, crateID, dmbID, lct, mo)) {
1041 
1042  int pattern_clct = clctsDatas[lct].getPattern();
1046  double tbin = -1;
1047 
1048  switch (pattern_clct) {
1049  case 0: tbin=0.; break;
1050  case 1: tbin=1.; break;
1051  case 2: tbin=2.; break;
1052  case 3: tbin=10.; break;
1053  case 4: tbin=3.; break;
1054  case 5: tbin=9.; break;
1055  case 6: tbin=4.; break;
1056  case 7: tbin=8.; break;
1057  case 8: tbin=5.; break;
1058  case 9: tbin=7.; break;
1059  case 10: tbin=6.; break;
1060  }
1061 
1062  if (tbin >= 0) mo->Fill(clctsDatas[lct].getKeyStrip(), tbin);
1063 
1064  MonitorObject* mo1 = nullptr;
1065  if (getCSCHisto(h::CSC_CLCT_HALF_STRIP_PATTERN_DISTR, crateID, dmbID, lct, mo1)) mo1->Fill(tbin);
1066 
1067  }
1068 
1069  if (getCSCHisto(h::CSC_CLCTXX_HALF_STRIP_QUALITY, crateID, dmbID, lct, mo))
1070  mo->Fill((int)(clctsDatas[lct].getKeyStrip()),(int)(clctsDatas[lct].getQuality()));
1071 
1072  if (mo_EventDisplay) {
1073  mo_EventDisplay->SetBinContent(10, clctsDatas[lct].getKeyStrip(), clct_dtime);
1074  mo_EventDisplay->SetBinContent(11, clctsDatas[lct].getKeyStrip(), clctsDatas[lct].getQuality());
1075  }
1076 
1077  if (getCSCHisto(h::CSC_CLCTXX_HALF_STRIP_QUALITY_DISTR, crateID, dmbID, lct, mo)) {
1078  mo->Fill((int)(clctsDatas[lct].getQuality()));
1079  if (lct == 0) {
1080  MonitorObject* mo1 = nullptr;
1081  if (cscPosition && getEMUHisto(h::EMU_CSC_CLCT0_QUALITY, mo1)) {
1082  mo1->SetBinContent(cscPosition, cscType + 1, mo->getTH1()->GetMean());
1083  }
1084  }
1085  }
1086 
1087  if (getCSCHisto(h::CSC_CLCTXX_HALF_STRIP_QUALITY_PROFILE, crateID, dmbID, lct, mo))
1088  mo->Fill((int)(clctsDatas[lct].getKeyStrip()), (int)(clctsDatas[lct].getQuality()));
1089 
1090  } else { // DiStrip Type
1091 
1092  LOG_INFO << "Entering block!";
1093 
1094  if (getCSCHisto(h::CSC_CLCTXX_KEYDISTRIP, crateID, dmbID, lct, mo)) mo->Fill(clctsDatas[lct].getKeyStrip());
1095  else LOG_ERROR << "Not found h::CSC_CLCTXX_KEYDISTRIP = " << h::CSC_CLCTXX_KEYDISTRIP;
1096 
1097  if(lct == 0) clct_kewdistrip = clctsDatas[lct].getKeyStrip();
1098 
1099  if (getCSCHisto(h::CSC_CLCTXX_DTIME_VS_DISTRIP, crateID, dmbID, lct, mo)) {
1100  mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
1101  /*
1102  if(clct_dtime < -16) mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime + 32);
1103  else {
1104  if(clct_dtime > 16) mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime - 32);
1105  else mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
1106  }
1107  */
1108  }
1109 
1110  if (getCSCHisto(h::CSC_CLCTXX_DISTRIP_PATTERN, crateID, dmbID, lct, mo)) {
1111  int pattern_clct = (int)((clctsDatas[lct].getPattern() >> 1) & 0x3);
1114  if(pattern_clct == 1) mo->Fill(clctsDatas[lct].getKeyStrip(), 7.0);
1115  if(pattern_clct == 3) mo->Fill(clctsDatas[lct].getKeyStrip(), 6.0);
1116  if(pattern_clct == 5) mo->Fill(clctsDatas[lct].getKeyStrip(), 5.0);
1117  if(pattern_clct == 7) mo->Fill(clctsDatas[lct].getKeyStrip(), 4.0);
1118  if(pattern_clct == 6) mo->Fill(clctsDatas[lct].getKeyStrip(), 3.0);
1119  if(pattern_clct == 4) mo->Fill(clctsDatas[lct].getKeyStrip(), 2.0);
1120  if(pattern_clct == 2) mo->Fill(clctsDatas[lct].getKeyStrip(), 1.0);
1121  if(pattern_clct == 0) mo->Fill(clctsDatas[lct].getKeyStrip(), 0.0);
1122  }
1123 
1124  if (getCSCHisto(h::CSC_CLCTXX_DISTRIP_QUALITY, crateID, dmbID, lct, mo))
1125  mo->Fill((int)(clctsDatas[lct].getKeyStrip()),(int)(clctsDatas[lct].getQuality()));
1126 
1127  if (getCSCHisto(h::CSC_CLCTXX_DISTRIP_QUALITY_PROFILE, crateID, dmbID, lct, mo))
1128  mo->Fill((int)(clctsDatas[lct].getKeyStrip()), (int)(clctsDatas[lct].getQuality()));
1129  }
1130  }
1131 
1132  // int N_CFEBs = 5;
1133  int N_CFEBs=tmbHeader->NCFEBs();
1134 
1135  int NumberOfLayersWithHitsInCLCT = 0;
1136  int NumberOfHalfStripsWithHitsInCLCT = 0;
1137 
1138  if (clctData && clctData->check()) {
1139 
1140  MonitorObject* mo_CFEB_Comparators_TimeSamples = nullptr;
1141  getCSCHisto(h::CSC_CFEB_COMPARATORS_TIMESAMPLES, crateID, dmbID, mo_CFEB_Comparators_TimeSamples);
1142 
1143  MonitorObject* mo_CSC_Plus_endcap_CFEB_Comparators_Time = nullptr;
1144  getEMUHisto(h::EMU_CSC_ENDCAP_PLUS_CFEB_COMPARATORS_TIME, mo_CSC_Plus_endcap_CFEB_Comparators_Time);
1145 
1146  MonitorObject* mo_CSC_Minus_endcap_CFEB_Comparators_Time = nullptr;
1147  getEMUHisto(h::EMU_CSC_ENDCAP_MINUS_CFEB_COMPARATORS_TIME, mo_CSC_Minus_endcap_CFEB_Comparators_Time);
1148 
1149  MonitorObject* mo_CSC_CFEB_Comparators_Time_mean = nullptr;
1150  getEMUHisto(h::EMU_CSC_CFEB_COMPARATORS_TIME_MEAN, mo_CSC_CFEB_Comparators_Time_mean);
1151 
1152  MonitorObject* mo_CSC_CFEB_Comparators_Time_rms = nullptr;
1153  getEMUHisto(h::EMU_CSC_CFEB_COMPARATORS_TIME_RMS, mo_CSC_CFEB_Comparators_Time_rms);
1154 
1155  for(int nCFEB = 0; nCFEB < N_CFEBs; ++nCFEB) {
1156  for (int nLayer = 1; nLayer <= 6; nLayer++) {
1157 
1158  int hstrip_previous = -1;
1159  int tbin_clct_previous = -1;
1160  bool CheckLayerCLCT = true;
1161 
1162  std::vector<CSCComparatorDigi> compOutData = clctData->comparatorDigis(nLayer, nCFEB);
1163 
1164  for (std::vector<CSCComparatorDigi>::iterator compOutDataItr = compOutData.begin(); compOutDataItr != compOutData.end(); ++compOutDataItr) {
1166  int hstrip = 2 * (compOutDataItr->getStrip() - 1) + compOutDataItr->getComparator();
1167  std::vector<int> tbins_clct = compOutDataItr->getTimeBinsOn();
1168  int tbin_clct = (int)compOutDataItr->getTimeBin();
1169 
1170  if (mo_EventDisplay) {
1171  mo_EventDisplay->SetBinContent(nLayer + 11, hstrip, tbin_clct + 1);
1172  setEmuEventDisplayBit(mo_Emu_EventDisplay_Anode, glChamberIndex, 160 + hstrip, nLayer - 1);
1173  setEmuEventDisplayBit(mo_Emu_EventDisplay_XY, glChamberIndex, 160 + hstrip, nLayer - 1);
1174  }
1175 
1176  if(CheckLayerCLCT) {
1177  NumberOfLayersWithHitsInCLCT = NumberOfLayersWithHitsInCLCT + 1;
1178  CheckLayerCLCT = false;
1179  }
1180 
1181  for (uint32_t n=0; n < tbins_clct.size(); n++) {
1182  tbin_clct = tbins_clct[n];
1183  if(hstrip != hstrip_previous || (tbin_clct != tbin_clct_previous + 1 && tbin_clct != tbin_clct_previous - 1) ) {
1184 
1185  if (getCSCHisto(h::CSC_CLCTTIME_LYXX, crateID, dmbID, nLayer, mo)) mo->Fill(hstrip, tbin_clct);
1186 
1187  if (mo_CFEB_Comparators_TimeSamples) mo_CFEB_Comparators_TimeSamples->Fill(tbin_clct);
1188 
1189  if (cid.endcap() == 1) {
1190  if (mo_CSC_Plus_endcap_CFEB_Comparators_Time) mo_CSC_Plus_endcap_CFEB_Comparators_Time->Fill(tbin_clct);
1191  }
1192 
1193  if (cid.endcap() == 2) {
1194  if (mo_CSC_Minus_endcap_CFEB_Comparators_Time) mo_CSC_Minus_endcap_CFEB_Comparators_Time->Fill(tbin_clct);
1195  }
1196 
1197  if (getCSCHisto(h::CSC_CLCTTIME_LYXX_PROFILE, crateID, dmbID, nLayer, mo)) mo->Fill(hstrip, tbin_clct);
1198 
1199  if (getCSCHisto(h::CSC_CLCT_LYXX_RATE, crateID, dmbID, nLayer, mo)) {
1200 
1201  mo->Fill(hstrip);
1202 
1203  double number_hstrip = mo->GetBinContent(hstrip+1);
1204  double Number_of_entries_CLCT = mo->GetEntries();
1205 
1206  if (getCSCHisto(h::CSC_CLCT_LYXX_EFFICIENCY, crateID, dmbID, nLayer, mo)) {
1207  mo->SetBinContent(hstrip + 1, number_hstrip);
1208  if(DMBEvents > 0) {
1209  double norm = (100.0 * Number_of_entries_CLCT) / ((double)(DMBEvents));
1211  mo->SetNormFactor(norm);
1212  } else {
1213  mo->SetNormFactor(100.0);
1214  }
1215  mo->SetEntries(DMBEvents);
1216  }
1217  }
1218  }
1219 
1220  if(hstrip != hstrip_previous) {
1221  NumberOfHalfStripsWithHitsInCLCT = NumberOfHalfStripsWithHitsInCLCT + 1;
1222  }
1223  hstrip_previous = hstrip;
1224  tbin_clct_previous = tbin_clct;
1225  }
1226  }
1227  }
1228  }
1229 
1230  if (mo_CFEB_Comparators_TimeSamples) {
1231 
1232  double comps_time_mean = mo_CFEB_Comparators_TimeSamples->getTH1()->GetMean();
1233  double comps_time_rms = mo_CFEB_Comparators_TimeSamples->getTH1()->GetRMS();
1234 
1235  if (cscPosition && mo_CSC_CFEB_Comparators_Time_mean) {
1236  mo_CSC_CFEB_Comparators_Time_mean->SetBinContent(cscPosition, cscType + 1, comps_time_mean);
1237  }
1238  if (cscPosition && mo_CSC_CFEB_Comparators_Time_rms) {
1239  mo_CSC_CFEB_Comparators_Time_rms->SetBinContent(cscPosition, cscType + 1, comps_time_rms);
1240  }
1241 
1242  }
1243 
1244  } else {
1245  LOG_ERROR << cscTag << " Can not unpack CLCT Data";
1246  }
1247 
1248  if (getCSCHisto(h::CSC_CLCT_NUMBER_OF_LAYERS_WITH_HITS, crateID, dmbID, mo)) {
1249  mo->Fill(NumberOfLayersWithHitsInCLCT);
1250  MonitorObject* mo1 = nullptr;
1251  if (cscPosition && getEMUHisto(h::EMU_CSC_CLCT_PLANES_WITH_HITS, mo1)) {
1252  mo1->SetBinContent(cscPosition, cscType + 1, mo->getTH1()->GetMean());
1253  }
1254  }
1255 
1257  mo->Fill(NumberOfHalfStripsWithHitsInCLCT);
1258  } else {
1259  LOG_ERROR << cscTag << " Can not unpack TMB Header or/and Trailer";
1260  }
1261  } else {
1262  LOG_ERROR << cscTag << " Can not unpack TMB Data";
1263  }
1264 
1265  } else {
1268  if (getCSCHisto(h::CSC_CLCT_NUMBER_RATE, crateID, dmbID, mo)) {
1269  mo->Fill(0);
1270  int nCLCT = (int)mo->GetBinContent(1);
1271  if (getCSCHisto(h::CSC_CLCT_NUMBER, crateID, dmbID, mo)) mo->SetBinContent(1, (float)(nCLCT) / (float)(DMBEvents) * 100.0);
1272  }
1273  if ((tmb_dav > 0) && (getCSCHisto(h::CSC_DMB_FEB_UNPACKED_VS_DAV, crateID, dmbID, mo))) {
1274  mo->Fill(1.0, 1.0);
1275  }
1276  }
1277 
1279  int NumberOfUnpackedCFEBs = 0;
1280  const int N_CFEBs = nCFEBs, N_Samples = 16, N_Layers = 6, N_Strips = 16, nStrips = nCFEBs * N_Strips;
1281  int ADC = 0, OutOffRange, Threshold = 30;
1283 // CSCCFEBData * cfebData[N_CFEBs];
1284 // CSCCFEBTimeSlice * timeSlice[N_CFEBs][16];
1285 // CSCCFEBDataWord * timeSample[N_CFEBs][16][6][16];
1286  int Pedestal[N_CFEBs][6][16]; memset(Pedestal, 0, sizeof(Pedestal));
1287  #ifdef __clang__
1288  std::vector<std::array<std::array<std::pair<int,int>, 6>, 16>> CellPeak(N_CFEBs);
1289  std::fill(CellPeak.begin(), CellPeak.end(), std::array<std::array<std::pair<int,int>, 6>, 16>{});
1290  #else
1291  std::pair<int,int> CellPeak[N_CFEBs][6][16];
1292  memset(CellPeak, 0, sizeof(CellPeak));
1293  #endif
1294 // float PedestalError[N_CFEBs][6][16];
1295 // CSCCFEBSCAControllerWord scaControllerWord[5][16][6];
1296  bool CheckCFEB = true;
1298  float Clus_Sum_Charge;
1299  int TrigTime, L1APhase, UnpackedTrigTime, LCTPhase, SCA_BLK, NmbTimeSamples;
1301  int FreeCells, LCT_Pipe_Empty, LCT_Pipe_Full, LCT_Pipe_Count, L1_Pipe_Empty, L1_Pipe_Full, Buffer_Count;
1304  bool CheckThresholdStripInTheLayer[6][nStrips];
1305  for(int i=0; i<6; i++) {
1306  for(int j = 0; j < nStrips; j++) CheckThresholdStripInTheLayer[i][j] = true;
1307  }
1308 
1309  bool CheckOutOffRangeStripInTheLayer[6][nStrips];
1310  for(int i=0; i<6; i++) {
1311  for(int j=0; j<nStrips; j++) CheckOutOffRangeStripInTheLayer[i][j] = true;
1312  }
1313 
1315  float cscdata[N_CFEBs * 16][N_Samples][N_Layers];
1317  int SCABlockData[N_CFEBs * 16][N_Samples][N_Layers];
1318  memset(cscdata, 0, sizeof(cscdata));
1320  memset(SCABlockData, 0, sizeof(SCABlockData));
1323  char hbuf[255];
1324  memset(hbuf, 0, sizeof(hbuf));
1325 
1326  MonitorObject* mo_CFEB_SCA_CellPeak_Time = nullptr;
1327  getCSCHisto(h::CSC_CFEB_SCA_CELLPEAK_TIME, crateID, dmbID, mo_CFEB_SCA_CellPeak_Time);
1328 
1329  MonitorObject* mo_CSC_Plus_endcap_CFEB_SCA_CellPeak_Time = nullptr;
1330  getEMUHisto(h::EMU_CSC_PLUS_ENDCAP_CFEB_SCA_CELLPEAK_TIME, mo_CSC_Plus_endcap_CFEB_SCA_CellPeak_Time);
1331 
1332  MonitorObject* mo_CSC_Minus_endcap_CFEB_SCA_CellPeak_Time = nullptr;
1333  getEMUHisto(h::EMU_CSC_MINUS_ENDCAP_CFEB_SCA_CELLPEAK_TIME, mo_CSC_Minus_endcap_CFEB_SCA_CellPeak_Time);
1334 
1335  MonitorObject* mo_CSC_CFEB_SCA_CellPeak_Time_mean = nullptr;
1336  getEMUHisto(h::EMU_CSC_CFEB_SCA_CELLPEAK_TIME_MEAN, mo_CSC_CFEB_SCA_CellPeak_Time_mean);
1337 
1338  MonitorObject* mo_CSC_CFEB_SCA_CellPeak_Time_rms = nullptr;
1339  getEMUHisto(h::EMU_CSC_CFEB_SCA_CELLPEAK_TIME_RMS, mo_CSC_CFEB_SCA_CellPeak_Time_rms);
1340 
1341  for(int nCFEB = 0; nCFEB < N_CFEBs; ++nCFEB) {
1342 
1343 // cfebData[nCFEB] = data.cfebData(nCFEB);
1344  if (data.cfebData(nCFEB) !=nullptr) {
1345  if (!data.cfebData(nCFEB)->check()) continue;
1346 
1348  FEBunpacked = FEBunpacked +1; // Increment number of unpacked FED
1349  NumberOfUnpackedCFEBs = NumberOfUnpackedCFEBs + 1; // Increment number of unpaked CFEB
1350  cfeb_unpacked = 1;
1351  if(CheckCFEB == true){
1352  if (getCSCHisto(h::CSC_CSC_RATE, crateID, dmbID, mo)) {
1353  mo->Fill(4);
1354  uint32_t CFEBEvent = (uint32_t)mo->GetBinContent(5);
1355  config->setChamberCounterValue(CFEB_TRIGGERS, crateID, dmbID, CFEBEvent);
1356  if (getCSCHisto(h::CSC_CSC_EFFICIENCY, crateID, dmbID, mo)) {
1357  if(config->getNEvents() > 0) {
1358  mo->SetBinContent(3, ((float)CFEBEvent/(float)(DMBEvents)*100.0));
1359  mo->SetEntries((int)DMBEvents);
1360  }
1361  }
1362  }
1363 
1364  if ((cfeb_dav2 > 0) && (getCSCHisto(h::CSC_DMB_FEB_UNPACKED_VS_DAV, crateID, dmbID, mo))) {
1365  mo->Fill(2.0, 0.0);
1366  }
1367  CheckCFEB = false;
1368  }
1370  NmbTimeSamples= (data.cfebData(nCFEB))->nTimeSamples();
1376  MonitorObject* mo_CFEB_SCA_Block_Occupancy = nullptr;
1377  getCSCHisto(h::CSC_CFEBXX_SCA_BLOCK_OCCUPANCY, crateID, dmbID, nCFEB + 1, mo_CFEB_SCA_Block_Occupancy);
1378  MonitorObject* mo_CFEB_Free_SCA_Cells = nullptr;
1379  getCSCHisto(h::CSC_CFEBXX_FREE_SCA_CELLS, crateID, dmbID, nCFEB + 1, mo_CFEB_Free_SCA_Cells);
1380  MonitorObject* mo_CFEB_SCA_Blocks_Locked_by_LCTs = nullptr;
1381  getCSCHisto(h::CSC_CFEBXX_SCA_BLOCKS_LOCKED_BY_LCTS, crateID, dmbID, nCFEB + 1, mo_CFEB_SCA_Blocks_Locked_by_LCTs);
1382  MonitorObject* mo_CFEB_SCA_Blocks_Locked_by_LCTxL1 = nullptr;
1383  getCSCHisto(h::CSC_CFEBXX_SCA_BLOCKS_LOCKED_BY_LCTXL1, crateID, dmbID, nCFEB + 1, mo_CFEB_SCA_Blocks_Locked_by_LCTxL1);
1384  MonitorObject* mo_CFEB_DMB_L1A_diff = nullptr;
1385  getCSCHisto(h::CSC_CFEBXX_DMB_L1A_DIFF, crateID, dmbID, nCFEB + 1, mo_CFEB_DMB_L1A_diff);
1386 
1389  for(int nLayer = 1; nLayer <= N_Layers; ++nLayer) {
1391  MonitorObject * mo_CFEB_Out_Off_Range_Strips = nullptr;
1392  getCSCHisto(h::CSC_CFEB_OUT_OFF_RANGE_STRIPS_LYXX, crateID, dmbID, nLayer, mo_CFEB_Out_Off_Range_Strips);
1393  MonitorObject * mo_CFEB_Active_Samples_vs_Strip = nullptr;
1394  getCSCHisto(h::CSC_CFEB_ACTIVE_SAMPLES_VS_STRIP_LYXX, crateID, dmbID, nLayer, mo_CFEB_Active_Samples_vs_Strip);
1395  MonitorObject * mo_CFEB_Active_Samples_vs_Strip_Profile = nullptr;
1396  getCSCHisto(h::CSC_CFEB_ACTIVE_SAMPLES_VS_STRIP_LYXX_PROFILE, crateID, dmbID, nLayer, mo_CFEB_Active_Samples_vs_Strip_Profile);
1397  MonitorObject * mo_CFEB_ActiveStrips = nullptr;
1398  getCSCHisto(h::CSC_CFEB_ACTIVESTRIPS_LYXX, crateID, dmbID, nLayer, mo_CFEB_ActiveStrips);
1399  MonitorObject * mo_CFEB_SCA_Cell_Peak = nullptr;
1400  getCSCHisto(h::CSC_CFEB_SCA_CELL_PEAK_LY_XX, crateID, dmbID, nLayer, mo_CFEB_SCA_Cell_Peak);
1401 
1402  MonitorObject * mo_CFEB_Pedestal_withEMV_Sample = nullptr;
1403  getCSCHisto(h::CSC_CFEB_PEDESTAL_WITHEMV_SAMPLE_01_LYXX, crateID, dmbID, nLayer, mo_CFEB_Pedestal_withEMV_Sample);
1404  MonitorObject * mo_CFEB_Pedestal_withRMS_Sample = nullptr;
1405  getCSCHisto(h::CSC_CFEB_PEDESTAL_WITHRMS_SAMPLE_01_LYXX, crateID, dmbID, nLayer, mo_CFEB_Pedestal_withRMS_Sample);
1406  MonitorObject * mo_CFEB_PedestalRMS_Sample = nullptr;
1407  getCSCHisto(h::CSC_CFEB_PEDESTALRMS_SAMPLE_01_LYXX, crateID, dmbID, nLayer, mo_CFEB_PedestalRMS_Sample);
1408 
1409  for(int nSample = 0; nSample < NmbTimeSamples; ++nSample) {
1410 // timeSlice[nCFEB][nSample] = (CSCCFEBTimeSlice * )((cfebData[nCFEB])->timeSlice(nSample));
1411  if (timeSlice(data, nCFEB, nSample) == nullptr) {
1412  LOG_WARN << "CFEB" << nCFEB << " nSample: " << nSample << " - B-Word";
1413  continue;
1414  }
1415 
1416  if (mo_CFEB_DMB_L1A_diff && !fCloseL1As ) {
1418  int cfeb_dmb_l1a_diff = (int)((timeSlice(data, nCFEB, nSample)->get_L1A_number())-dmbHeader->l1a24()%64);
1419  if (cfeb_dmb_l1a_diff != 0) {
1420  L1A_out_of_sync = true;
1421  }
1422  if(cfeb_dmb_l1a_diff < -32) mo->Fill(cfeb_dmb_l1a_diff + 64);
1423  else {
1424  if(cfeb_dmb_l1a_diff >= 32) mo->Fill(cfeb_dmb_l1a_diff - 64);
1425  else mo_CFEB_DMB_L1A_diff->Fill(cfeb_dmb_l1a_diff);
1426  }
1427  mo_CFEB_DMB_L1A_diff->SetAxisRange(0.1, 1.1*(1.0+mo_CFEB_DMB_L1A_diff->GetBinContent(mo_CFEB_DMB_L1A_diff->GetMaximumBin())), "Y");
1428  }
1429 
1432 // scaControllerWord[nCFEB][nSample][nLayer-1] = timeSlice(cfebData, nCFEB, nSample)->scaControllerWord(nLayer);
1433 
1434  TrigTime = (int)(timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).trig_time);
1436  FreeCells = timeSlice(data, nCFEB, nSample)->get_n_free_sca_blocks();
1437  LCT_Pipe_Empty = timeSlice(data, nCFEB, nSample)->get_lctpipe_empty();
1438  LCT_Pipe_Full = timeSlice(data, nCFEB, nSample)->get_lctpipe_full();
1439  LCT_Pipe_Count = timeSlice(data, nCFEB, nSample)->get_lctpipe_count();
1440  L1_Pipe_Empty = timeSlice(data, nCFEB, nSample)->get_l1pipe_empty();
1441  L1_Pipe_Full = timeSlice(data, nCFEB, nSample)->get_l1pipe_full();
1443  Buffer_Count = timeSlice(data, nCFEB, nSample)->get_buffer_count();
1444 
1445  SCA_BLK = (int)(timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).sca_blk);
1449  for(int nStrip = 0; nStrip < N_Strips; ++nStrip) {
1450  SCABlockData[nCFEB*16+nStrip][nSample][nLayer-1] = SCA_BLK;
1452  }
1457  if (mo_CFEB_SCA_Block_Occupancy) mo_CFEB_SCA_Block_Occupancy->Fill(SCA_BLK);
1458 
1461  if (mo_CFEB_Free_SCA_Cells) {
1462  if (timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).sca_full == 1) mo_CFEB_Free_SCA_Cells->Fill(-1);
1463  mo_CFEB_Free_SCA_Cells->Fill(FreeCells);
1464  }
1465 
1468  if (mo_CFEB_SCA_Blocks_Locked_by_LCTs) {
1469  if (LCT_Pipe_Empty == 1) mo_CFEB_SCA_Blocks_Locked_by_LCTs->Fill(-0.5);
1470  if (LCT_Pipe_Full == 1) mo_CFEB_SCA_Blocks_Locked_by_LCTs->Fill(16.5);
1471  mo_CFEB_SCA_Blocks_Locked_by_LCTs->Fill(LCT_Pipe_Count);
1472  }
1473 
1476  if (mo_CFEB_SCA_Blocks_Locked_by_LCTxL1) {
1477  if (L1_Pipe_Empty == 1) mo_CFEB_SCA_Blocks_Locked_by_LCTxL1->Fill(-0.5);
1478  if (L1_Pipe_Full == 1) mo_CFEB_SCA_Blocks_Locked_by_LCTxL1->Fill(31.5);
1479  mo_CFEB_SCA_Blocks_Locked_by_LCTxL1->Fill(Buffer_Count);
1480  }
1481 
1484  if(nSample == 0 && nLayer == 1) {
1485  TrigTime = (int)(timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).trig_time);
1486  int k = 1;
1487  while (((TrigTime >> (k-1)) & 0x1) != 1 && k <= 8) {
1488  k = k + 1;
1489  }
1490  L1APhase = (int)((timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).l1a_phase) & 0x1);
1491  UnpackedTrigTime = ((k << 1) & 0xE) + L1APhase;
1492 
1493  if (getCSCHisto(h::CSC_CFEBXX_L1A_SYNC_TIME, crateID, dmbID, nCFEB + 1, mo))
1494  mo->Fill((int)UnpackedTrigTime);
1495  LCTPhase = (int)((timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).lct_phase)&0x1);
1496 
1497  if (getCSCHisto(h::CSC_CFEBXX_LCT_PHASE_VS_L1A_PHASE, crateID, dmbID, nCFEB + 1, mo))
1498  mo->Fill(LCTPhase, L1APhase);
1499 
1502  if (getCSCHisto(h::CSC_CFEBXX_L1A_SYNC_TIME_VS_DMB, crateID, dmbID, nCFEB + 1, mo))
1503  mo->Fill((int)(dmbHeader->dmbCfebSync()), (int)UnpackedTrigTime);
1504 
1505  if (getCSCHisto(h::CSC_CFEBXX_L1A_SYNC_TIME_DMB_DIFF, crateID, dmbID, nCFEB + 1, mo)) {
1506  int cfeb_dmb_L1A_sync_time = (int)(dmbHeader->dmbCfebSync()) - (int)UnpackedTrigTime;
1507  if(cfeb_dmb_L1A_sync_time < -8) mo->Fill(cfeb_dmb_L1A_sync_time+16);
1508  else {
1509  if(cfeb_dmb_L1A_sync_time >= 8) mo->Fill(cfeb_dmb_L1A_sync_time-16);
1510  else mo->Fill(cfeb_dmb_L1A_sync_time);
1511  }
1512  mo->SetAxisRange(0.1, 1.1*(1.0+mo->GetBinContent(mo->GetMaximumBin())), "Y");
1513  }
1514 
1515  }
1516 
1517 
1518  for(int nStrip = 1; nStrip <= N_Strips; ++nStrip) {
1519 // timeSample[nCFEB][nSample][nLayer - 1][nStrip - 1]=(data.cfebData(nCFEB)->timeSlice(nSample))->timeSample(nLayer,nStrip,data.cfebData(nCFEB)->isDCFEB());
1520  ADC = (int) ((timeSample(data, nCFEB, nSample, nLayer, nStrip)->adcCounts) & 0xFFF);
1522  OutOffRange = (int) ((timeSample(data, nCFEB, nSample, nLayer, nStrip)->adcOverflow) & 0x1);
1523 
1524  if(nSample == 0) { // nSample == 0
1525  CellPeak[nCFEB][nLayer-1][nStrip-1] = std::make_pair(nSample,ADC);
1526  Pedestal[nCFEB][nLayer-1][nStrip-1] = ADC;
1528  }
1529 
1530  if(OutOffRange == 1 && CheckOutOffRangeStripInTheLayer[nLayer - 1][nCFEB * 16 + nStrip - 1] == true) {
1532  if ( mo_CFEB_Out_Off_Range_Strips)
1533  mo_CFEB_Out_Off_Range_Strips->Fill((int)(nCFEB * 16 + nStrip - 1));
1534  CheckOutOffRangeStripInTheLayer[nLayer - 1][nCFEB * 16 + nStrip - 1] = false;
1535  }
1536  if(ADC - Pedestal[nCFEB][nLayer - 1][nStrip - 1] > Threshold && OutOffRange != 1) {
1538  if (mo_CFEB_Active_Samples_vs_Strip)
1539  mo_CFEB_Active_Samples_vs_Strip->Fill((int)(nCFEB * 16 + nStrip - 1), nSample);
1540 
1542  if (mo_CFEB_Active_Samples_vs_Strip_Profile)
1543  mo_CFEB_Active_Samples_vs_Strip_Profile->Fill((int)(nCFEB * 16 + nStrip - 1), nSample);
1544 
1545  if(CheckThresholdStripInTheLayer[nLayer - 1][nCFEB * 16 + nStrip - 1] == true) {
1547  if (mo_CFEB_ActiveStrips)
1548  mo_CFEB_ActiveStrips->Fill((int)(nCFEB * 16 + nStrip));
1549  CheckThresholdStripInTheLayer[nLayer - 1][nCFEB * 16 + nStrip - 1] = false;
1550  }
1552  if(ADC - Pedestal[nCFEB][nLayer - 1][nStrip - 1] > Threshold) {
1554  cscdata[nCFEB * 16 + nStrip - 1][nSample][nLayer - 1] = ADC - Pedestal[nCFEB][nLayer - 1][nStrip - 1];
1555  }
1557  if(ADC > CellPeak[nCFEB][nLayer - 1][nStrip - 1].second) {
1558  CellPeak[nCFEB][nLayer - 1][nStrip - 1].first = nSample;
1559  CellPeak[nCFEB][nLayer - 1][nStrip - 1].second = ADC;
1560  }
1561  }
1564  if(nSample == 1) {
1565  int channel_threshold = 40;
1566  if (std::abs(ADC - Pedestal[nCFEB][nLayer - 1][nStrip - 1]) < channel_threshold) {
1568  if (mo_CFEB_Pedestal_withEMV_Sample)
1569  mo_CFEB_Pedestal_withEMV_Sample->Fill((int)(nCFEB * 16 + nStrip - 1), Pedestal[nCFEB][nLayer - 1][nStrip - 1]);
1570 
1572  if (mo_CFEB_Pedestal_withRMS_Sample) {
1573  mo_CFEB_Pedestal_withRMS_Sample->Fill((int)(nCFEB * 16 + nStrip - 1), Pedestal[nCFEB][nLayer - 1][nStrip - 1]);
1574 // PedestalError[nCFEB][nLayer - 1][nStrip - 1] = mo_CFEB_Pedestal_withRMS_Sample->GetBinError(nCFEB * 16 + nStrip);
1575 
1577  if (mo_CFEB_PedestalRMS_Sample) {
1578  mo_CFEB_PedestalRMS_Sample->SetBinContent(nCFEB * 16 + nStrip - 1, mo_CFEB_Pedestal_withRMS_Sample->GetBinError(nCFEB * 16 + nStrip));
1579  mo_CFEB_PedestalRMS_Sample->SetBinError(nCFEB * 16 + nStrip - 1, 0.00000000001);
1580  }
1581  }
1582  }
1583  Pedestal[nCFEB][nLayer-1][nStrip-1] += ADC;
1584  Pedestal[nCFEB][nLayer-1][nStrip-1] /= 2;
1585  }
1587  }
1588  }
1589 
1590  for(int nStrip = 1; nStrip <= N_Strips; ++nStrip) {
1591  if (mo_CFEB_SCA_Cell_Peak && CellPeak[nCFEB][nLayer - 1][nStrip - 1].first) {
1592  mo_CFEB_SCA_Cell_Peak->Fill((int)(nCFEB * 16 + nStrip - 1), CellPeak[nCFEB][nLayer - 1][nStrip - 1].first);
1593  if (mo_CFEB_SCA_CellPeak_Time) {
1594  mo_CFEB_SCA_CellPeak_Time->Fill(CellPeak[nCFEB][nLayer - 1][nStrip - 1].first);
1595  }
1596 
1597  if (mo_EventDisplay) {
1598  int peak_sample = CellPeak[nCFEB][nLayer-1][nStrip-1].first;
1599  int peak_adc = CellPeak[nCFEB][nLayer-1][nStrip-1].second;
1600  int pedestal = Pedestal[nCFEB][nLayer-1][nStrip-1];
1601  int peak_sca_charge = peak_adc - pedestal;
1602 
1603  if (peak_adc - pedestal > Threshold) {
1604  if (peak_sample >=1) {
1605  peak_sca_charge += ((timeSample(data, nCFEB, peak_sample-1, nLayer, nStrip)->adcCounts)&0xFFF)-pedestal;
1606  }
1607  if (peak_sample < NmbTimeSamples-1) {
1608  peak_sca_charge += ((timeSample(data, nCFEB, peak_sample+1, nLayer, nStrip)->adcCounts)&0xFFF)-pedestal;
1609  }
1610  mo_EventDisplay->SetBinContent(nLayer + 17, nCFEB * 16 + nStrip - 1, peak_sca_charge);
1611  setEmuEventDisplayBit(mo_Emu_EventDisplay_Cathode, glChamberIndex, nCFEB * 16 + nStrip - 1, nLayer - 1);
1612  }
1613  }
1614 
1615  if (cid.endcap() == 1) {
1616  if (mo_CSC_Plus_endcap_CFEB_SCA_CellPeak_Time)
1617  mo_CSC_Plus_endcap_CFEB_SCA_CellPeak_Time->Fill(CellPeak[nCFEB][nLayer - 1][nStrip - 1].first);
1618  }
1619  if (cid.endcap() == 2) {
1620  if (mo_CSC_Minus_endcap_CFEB_SCA_CellPeak_Time)
1621  mo_CSC_Minus_endcap_CFEB_SCA_CellPeak_Time->Fill(CellPeak[nCFEB][nLayer - 1][nStrip - 1].first);
1622  }
1623  }
1624  }
1625 
1626  }
1627  }
1628 
1629  }
1630 
1631  // Fill Summary CFEB Raw Hits Timing Plots
1632  if (mo_CFEB_SCA_CellPeak_Time) {
1633  double cellpeak_time_mean = mo_CFEB_SCA_CellPeak_Time->getTH1()->GetMean();
1634  double cellpeak_time_rms = mo_CFEB_SCA_CellPeak_Time->getTH1()->GetRMS();
1635  if (cscPosition && mo_CSC_CFEB_SCA_CellPeak_Time_mean) {
1636  mo_CSC_CFEB_SCA_CellPeak_Time_mean->SetBinContent(cscPosition, cscType + 1, cellpeak_time_mean);
1637  }
1638  if (cscPosition && mo_CSC_CFEB_SCA_CellPeak_Time_rms) {
1639  mo_CSC_CFEB_SCA_CellPeak_Time_rms->SetBinContent(cscPosition, cscType + 1 ,cellpeak_time_rms);
1640  }
1641  }
1642 
1645  const int a = N_CFEBs * N_Strips;
1646  const int b = a * N_Samples;
1647  float Cathodes[b * N_Layers];
1648  for(int i = 0; i < N_Layers; ++i) {
1649  const int b1 = i * b;
1650  for(int j = 0; j < a; ++j) {
1651  const int b2 = b1 + j;
1652  for(int k = 0; k < N_Samples; ++k) {
1653  Cathodes[b2 + a * k] = cscdata[j][k][i];
1654  }
1655  }
1656  }
1657 
1658  std::vector<StripCluster> Clus;
1659  Clus.clear();
1660  StripClusterFinder ClusterFinder(N_Layers, N_Samples, N_CFEBs, N_Strips);
1661 
1662  for(int nLayer = 1; nLayer <= N_Layers; ++nLayer) {
1663 
1666  ClusterFinder.DoAction(nLayer - 1, Cathodes);
1667  Clus = ClusterFinder.getClusters();
1668 
1671  if (getCSCHisto(h::CSC_CFEB_NUMBER_OF_CLUSTERS_LY_XX, crateID, dmbID, nLayer, mo)) {
1672  // Allways true because Clus.size() = unsigned
1673  // if (Clus.size() >= 0)
1674  mo->Fill(Clus.size());
1675  }
1676 
1677  for(uint32_t u = 0; u < Clus.size(); u++){
1678 
1679  Clus_Sum_Charge = 0.0;
1680 
1681  for(uint32_t k = 0;k < Clus[u].ClusterPulseMapHeight.size(); k++) {
1682 
1685  for(int n = Clus[u].LFTBNDTime; n < Clus[u].IRTBNDTime; n++) {
1686  Clus_Sum_Charge = Clus_Sum_Charge + Clus[u].ClusterPulseMapHeight[k].height_[n];
1687  }
1688 
1689  }
1690 
1692  if (getCSCHisto(h::CSC_CFEB_CLUSTERS_CHARGE_LY_XX, crateID, dmbID, nLayer, mo)) {
1693  mo->Fill(Clus_Sum_Charge);
1694  }
1695 
1697  if (getCSCHisto(h::CSC_CFEB_WIDTH_OF_CLUSTERS_LY_XX, crateID, dmbID, nLayer, mo)) {
1698  mo->Fill(Clus[u].IRTBNDStrip - Clus[u].LFTBNDStrip + 1);
1699  }
1700 
1702  if (getCSCHisto(h::CSC_CFEB_CLUSTER_DURATION_LY_XX, crateID, dmbID, nLayer, mo)) {
1703  mo->Fill(Clus[u].IRTBNDTime - Clus[u].LFTBNDTime + 1);
1704  }
1705 
1706  }
1707 
1708  Clus.clear();
1709 
1711  }
1712 
1716  if (getCSCHisto(h::CSC_DMB_FEB_COMBINATIONS_UNPACKED_VS_DAV, crateID, dmbID, mo)) {
1717  float feb_combination_unpacked = -1.0;
1718  if(alct_unpacked == 0 && tmb_unpacked == 0 && cfeb_unpacked == 0) feb_combination_unpacked = 0.0;
1719  if(alct_unpacked > 0 && tmb_unpacked == 0 && cfeb_unpacked == 0) feb_combination_unpacked = 1.0;
1720  if(alct_unpacked == 0 && tmb_unpacked > 0 && cfeb_unpacked == 0) feb_combination_unpacked = 2.0;
1721  if(alct_unpacked == 0 && tmb_unpacked == 0 && cfeb_unpacked > 0) feb_combination_unpacked = 3.0;
1722  if(alct_unpacked > 0 && tmb_unpacked > 0 && cfeb_unpacked == 0) feb_combination_unpacked = 4.0;
1723  if(alct_unpacked > 0 && tmb_unpacked == 0 && cfeb_unpacked > 0) feb_combination_unpacked = 5.0;
1724  if(alct_unpacked == 0 && tmb_unpacked > 0 && cfeb_unpacked > 0) feb_combination_unpacked = 6.0;
1725  if(alct_unpacked > 0 && tmb_unpacked > 0 && cfeb_unpacked > 0) feb_combination_unpacked = 7.0;
1726  mo->Fill(feb_combination_dav, feb_combination_unpacked);
1727  }
1728 
1729  if((clct_kewdistrip > -1 && alct_keywg > -1) && (getCSCHisto(h::CSC_CLCT0_KEYDISTRIP_VS_ALCT0_KEYWIREGROUP, crateID, dmbID, mo))) {
1730  mo->Fill(alct_keywg, clct_kewdistrip);
1731  }
1732 
1733  if (L1A_out_of_sync && cscPosition && getEMUHisto(h::EMU_CSC_L1A_OUT_OF_SYNC, mo)){
1734  mo->Fill(cscPosition, cscType);
1735  }
1736 
1737  if (L1A_out_of_sync && getEMUHisto(h::EMU_DMB_L1A_OUT_OF_SYNC, mo)){
1738  mo->Fill(crateID, dmbID);
1739  }
1740 
1741  }
1742 
1743 }
uint16_t BXNCount() const
Definition: CSCTMBHeader.h:42
unsigned tmb_half() const
Definition: CSCDMBTrailer.h:50
CSCTMBTrailer * tmbTrailer()
Definition: CSCTMBData.h:53
const bool getCSCFromMap(const unsigned int &crateId, const unsigned int &dmbId, unsigned int &cscType, unsigned int &cscPosition) const
Get CSC type and position from crate and dmb identifiers.
int wordCount() const
int nclct() const
the number of CLCTs
Definition: CSCEventData.h:79
unsigned cfeb_empty() const
Definition: CSCDMBTrailer.h:47
unsigned l1a24() const
Definition: CSCDMBHeader.h:45
virtual void SetAxisRange(const double from, const double to, const std::string &axis)=0
unsigned nclct() const
Definition: CSCDMBHeader.h:48
std::vector< StripCluster > getClusters()
virtual void SetEntries(const double value)=0
unsigned alct_full() const
Definition: CSCDMBTrailer.h:53
#define LOG_INFO
Definition: CSCDQM_Logger.h:43
bool isChamberStandby(unsigned int side, unsigned int station, unsigned int ring, unsigned int chamber) const
Check if chamber is in standby?
unsigned short adcOverflow
unsigned tmb_empty() const
Definition: CSCDMBTrailer.h:46
unsigned cfebActive() const
Definition: CSCDMBHeader.h:39
unsigned cfeb_endtimeout() const
Definition: CSCDMBTrailer.h:36
const CSCDMBTrailer * dmbTrailer() const
DMB trailer.
Definition: CSCEventData.h:104
virtual void Fill(float x)=0
Monitoring Object interface used to cover Root object and provide common interface to EventProcessor ...
uint16_t CLCTOnly() const
Definition: CSCTMBHeader.h:48
uint16_t L1ANumber() const
Definition: CSCTMBHeader.h:65
unsigned get_l1pipe_full() const
virtual const double GetBinError(const int bin)=0
virtual const double GetEntries()=0
uint16_t Bxn1Diff() const
Definition: CSCTMBHeader.h:61
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:50
Object used to find Strip Clusters.
ExaminerStatusType errorsForChamber(CSCIdType chamber) const
unsigned nalct() const
Definition: CSCDMBHeader.h:47
void processCSC(const CSCEventData &data, const int dduID, const CSCDCCExaminer &binChecker)
Process Chamber Data and fill MOs.
Definition: config.py:1
unsigned cfebMovlp() const
Definition: CSCDMBHeader.h:49
void setEmuEventDisplayBit(MonitorObject *&mo, const unsigned int x, const unsigned int y, const unsigned int bit)
Set a single bit in the 3D Histogram (aka EMU level event display). Checks if mo and x != null...
CSCAnodeData * alctData() const
user must check if nalct > 0
virtual const int GetMaximumBin()=0
virtual void SetNormFactor(const double factor=1)=0
virtual const TH1 * getTH1(void) const =0
CSCALCTHeader * alctHeader() const
user must check if nalct > 0
const std::string getPath() const override
Get path part of the histogram (used only for DDUs and CSCs)
bool check() const
makes sure each time slice has a trailer
Definition: CSCCFEBData.cc:319
CSCCFEBSCAControllerWord scaControllerWord(int layer) const
unpacked from the controller words for each channel in the layer
int nalct() const
the flag for existence of ALCT data
Definition: CSCEventData.h:76
int wordCount() const
uint16_t NCFEBs() const
Definition: CSCTMBHeader.h:82
const bool getCSCHisto(const HistoId &histo, const HwId &crateID, const HwId &dmbSlot, MonitorObject *&me)
Get CSC (Chamber) Level Monitoring Object.
unsigned get_buffer_count() const
int endcap() const
Definition: CSCDetId.h:93
U second(std::pair< T, U > const &p)
uint16_t getFormatVersion() const
Definition: CSCEventData.h:129
CSCCLCTData * clctData() const
user must check if nclct > 0
CSCALCTTrailer * alctTrailer() const
user must check if nalct > 0
unsigned cfeb_starttimeout() const
Definition: CSCDMBTrailer.h:40
virtual TH1 * getTH1Lock(void)=0
unsigned get_lctpipe_empty() const
unsigned tmb_starttimeout() const
Definition: CSCDMBTrailer.h:39
virtual void SetBinContent(const int binX, const double value)=0
CSCTMBData * tmbData() const
user must check in nclct > 0
uint16_t ALCTOnly() const
Definition: CSCTMBHeader.h:51
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned alct_starttimeout() const
Definition: CSCDMBTrailer.h:38
uint16_t Bxn0Diff() const
Definition: CSCTMBHeader.h:58
unsigned tmb_full() const
Definition: CSCDMBTrailer.h:54
CSCDetId chamberID(const CSCDetId &cscDetId)
takes layer ID, converts to chamber ID, switching ME1A to ME11
Definition: CSCDigiToRaw.cc:30
const Detector getDetector() const
unsigned bxn12() const
Definition: CSCDMBHeader.h:43
unsigned alct_half() const
Definition: CSCDMBTrailer.h:49
uint16_t ALCTMatchTime() const
Definition: CSCTMBHeader.h:45
std::vector< CSCComparatorDigi > comparatorDigis(int layer)
layers count from one
Definition: CSCCLCTData.cc:206
unsigned get_n_free_sca_blocks() const
void DoAction(int layerId, float *cathodes)
int k[5][pyjets_maxn]
unsigned cfeb_half() const
Definition: CSCDMBTrailer.h:51
unsigned get_l1pipe_empty() const
std::vector< CSCALCTDigi > ALCTDigis() const
int ring() const
Definition: CSCDetId.h:75
unsigned cfeb_full() const
Definition: CSCDMBTrailer.h:55
unsigned crateID() const
Definition: CSCDMBHeader.h:40
std::vector< CSCCLCTDigi > CLCTDigis(uint32_t idlayer)
returns CLCT digis
Definition: CSCTMBHeader.h:98
unsigned short int alctFirmwareVersion() const
virtual void SetBinError(const int bin, const double error)=0
unsigned short int L1Acc() const
Definition: CSCALCTHeader.h:98
std::vector< CSCWireDigi > wireDigis(int layer) const
input layer is from 1 to 6
Definition: CSCAnodeData.h:24
double b
Definition: hdecay.h:120
bool check() const
Definition: CSCCLCTData.cc:359
CSCCFEBTimeSlice const *const timeSlice(T const &data, int nCFEB, int nSample)
#define LOG_WARN
Definition: CSCDQM_Logger.h:42
unsigned dmbID() const
Definition: CSCDMBHeader.h:41
CSCTMBHeader * tmbHeader()
Definition: CSCTMBData.h:42
virtual double GetBinContent(const int binX)=0
const CSCCFEBData * cfebData(unsigned icfeb) const
unpacked in long mode: has overflow and error bits decoded
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
uint16_t TMBMatch() const
Definition: CSCTMBHeader.h:54
CSCCFEBDataWord const *const timeSample(T const &data, int nCFEB, int nSample, int nLayer, int nStrip)
double a
Definition: hdecay.h:121
void resetEmuEventDisplays()
Reset Emu level EventDisplay histograms once per event.
bool fCloseL1As
Data Format version (2005, 2013)
unsigned tmb_endtimeout() const
Definition: CSCDMBTrailer.h:35
int station() const
Definition: CSCDetId.h:86
unsigned int GlobalChamberIndex(unsigned int side, unsigned int station, unsigned int ring, unsigned int chamber) const
Return global chamber index on his geometric location.
Definition: errors.py:1
uint16_t theFormatVersion
Total Number of TMBs per event from DMB DAV.
unsigned short adcCounts
struct ADC ADC
unsigned alct_endtimeout() const
Definition: CSCDMBTrailer.h:34
const bool getEMUHisto(const HistoId &histo, MonitorObject *&me)
Get EMU (Top Level) Monitoring Object.
unsigned short int BXNCount() const
Definition: CSCALCTHeader.h:61
long double T
unsigned alct_empty() const
Definition: CSCDMBTrailer.h:45
const CSCDMBHeader * dmbHeader() const
the DAQ motherboard header. A good place for event and chamber info
Definition: CSCEventData.h:82
unsigned dmbCfebSync() const
Definition: CSCDMBHeader.h:50
unsigned get_lctpipe_count() const
bool cfebAvailable(unsigned icfeb)
Definition: CSCDMBHeader.h:24
#define LOG_ERROR
Definition: CSCDQM_Logger.h:41
unsigned dmb_l1pipe() const
Definition: CSCDMBTrailer.h:43
unsigned get_lctpipe_full() const