CMS 3D CMS Logo

EcalSelectiveReadoutValidation.cc
Go to the documentation of this file.
1 /*
2  * \file EcalSelectiveReadoutValidation.cc
3  *
4  *
5  */
6 
8 
10 
17 
25 
27 
28 using namespace cms;
29 using namespace edm;
30 using namespace std;
31 
32 const double EcalSelectiveReadoutValidation::rad2deg = 45. / atan(1.);
33 
34 const int EcalSelectiveReadoutValidation::nDccRus_[nDccs_] = {
35  //EE- DCCs:
36  // 1 2 3 4 5 6 7 8 9
37  34,
38  32,
39  33,
40  33,
41  32,
42  34,
43  33,
44  34,
45  33,
46  //EB- DCCs:
47  // 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
48  68,
49  68,
50  68,
51  68,
52  68,
53  68,
54  68,
55  68,
56  68,
57  68,
58  68,
59  68,
60  68,
61  68,
62  68,
63  68,
64  68,
65  68,
66  //EB+ DCCs:
67  // 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
68  68,
69  68,
70  68,
71  68,
72  68,
73  68,
74  68,
75  68,
76  68,
77  68,
78  68,
79  68,
80  68,
81  68,
82  68,
83  68,
84  68,
85  68,
86  //EE+ DCCs:
87  // 46 47 48 49 50 51 52 53 54
88  32,
89  33,
90  33,
91  32,
92  34,
93  33,
94  34,
95  33,
96  34};
97 
99  : geoToken(esConsumes()),
100  ecalmapping(esConsumes<edm::Transition::BeginRun>()),
101  hTriggerTowerMap(esConsumes<edm::Transition::BeginRun>()),
102  physHandle(esConsumes()),
103  lutGrpHandle(esConsumes()),
104  lutMapHandle(esConsumes()),
105  collNotFoundWarn_(ps.getUntrackedParameter<bool>("warnIfCollectionNotFound", true)),
106  ebDigis_(ps.getParameter<edm::InputTag>("EbDigiCollection"), false, collNotFoundWarn_),
107  eeDigis_(ps.getParameter<edm::InputTag>("EeDigiCollection"), false, collNotFoundWarn_),
108  ebNoZsDigis_(ps.getParameter<edm::InputTag>("EbUnsuppressedDigiCollection"), false, false /*collNotFoundWarn_*/),
109  eeNoZsDigis_(ps.getParameter<edm::InputTag>("EeUnsuppressedDigiCollection"), false, false /*collNotFoundWarn_*/),
110  ebSrFlags_(ps.getParameter<edm::InputTag>("EbSrFlagCollection"), false, collNotFoundWarn_),
111  eeSrFlags_(ps.getParameter<edm::InputTag>("EeSrFlagCollection"), false, collNotFoundWarn_),
112  ebComputedSrFlags_(
113  ps.getParameter<edm::InputTag>("EbSrFlagFromTTCollection"), false, false /*collNotFoundWarn_*/),
114  eeComputedSrFlags_(
115  ps.getParameter<edm::InputTag>("EeSrFlagFromTTCollection"), false, false /*collNotFoundWarn_*/),
116  ebSimHits_(ps.getParameter<edm::InputTag>("EbSimHitCollection"), false, false /*collNotFoundWarn_*/),
117  eeSimHits_(ps.getParameter<edm::InputTag>("EeSimHitCollection"), false, false /*collNotFoundWarn_*/),
118  tps_(ps.getParameter<edm::InputTag>("TrigPrimCollection"), false, collNotFoundWarn_),
119  ebRecHits_(ps.getParameter<edm::InputTag>("EbRecHitCollection"), false, false /*collNotFoundWarn_*/),
120  eeRecHits_(ps.getParameter<edm::InputTag>("EeRecHitCollection"), false, false /*collNotFoundWarn_*/),
121  fedRaw_(ps.getParameter<edm::InputTag>("FEDRawCollection"), false, false /*collNotFoundWarn_*/),
122  tmax(0),
123  tmin(numeric_limits<int64_t>::max()),
124  l1aOfTmin(0),
125  l1aOfTmax(0),
126  triggerTowerMap_(nullptr),
127  localReco_(ps.getParameter<bool>("LocalReco")),
128  weights_(ps.getParameter<vector<double> >("weights")),
129  tpInGeV_(ps.getParameter<bool>("tpInGeV")),
130  firstFIRSample_(ps.getParameter<int>("ecalDccZs1stSample")),
131  useEventRate_(ps.getParameter<bool>("useEventRate")),
132  logErrForDccs_(nDccs_, false),
133  ievt_(0),
134  allHists_(false),
135  histDir_(ps.getParameter<string>("histDir")),
136  withEeSimHit_(false),
137  withEbSimHit_(false) {
139  ebDigis_.setToken(collector);
140  eeDigis_.setToken(collector);
141  ebNoZsDigis_.setToken(collector);
142  eeNoZsDigis_.setToken(collector);
143  ebSrFlags_.setToken(collector);
144  eeSrFlags_.setToken(collector);
145  ebComputedSrFlags_.setToken(collector);
146  eeComputedSrFlags_.setToken(collector);
147  ebSimHits_.setToken(collector);
148  eeSimHits_.setToken(collector);
149  tps_.setToken(collector);
150  ebRecHits_.setToken(collector);
151  eeRecHits_.setToken(collector);
152  fedRaw_.setToken(collector);
153 
154  double ebZsThr = ps.getParameter<double>("ebZsThrADCCount");
155  double eeZsThr = ps.getParameter<double>("eeZsThrADCCount");
156 
157  ebZsThr_ = lround(ebZsThr * 4);
158  eeZsThr_ = lround(eeZsThr * 4);
159 
160  //File to log SRP algorithem inconsistency
161  srpAlgoErrorLogFileName_ = ps.getUntrackedParameter<string>("srpAlgoErrorLogFile", "");
163 
164  //File to log SRP decision application inconsistency
165  srApplicationErrorLogFileName_ = ps.getUntrackedParameter<string>("srApplicationErrorLogFile", "");
167 
168  //FIR ZS weights
169  configFirWeights(ps.getParameter<vector<double> >("dccWeights"));
170 
171  // DQM ROOT output
172  outputFile_ = ps.getUntrackedParameter<string>("outputFile", "");
173 
174  if (!outputFile_.empty()) {
175  LogInfo("OutputInfo") << " Ecal Digi Task histograms will be saved to '" << outputFile_.c_str() << "'";
176  } else {
177  LogInfo("OutputInfo") << " Ecal Digi Task histograms will NOT be saved";
178  }
179 
180  // verbosity switch
181  verbose_ = ps.getUntrackedParameter<bool>("verbose", false);
182 
183  // get hold of back-end interface
184 
185  vector<string> hists(ps.getUntrackedParameter<vector<string> >("histograms", vector<string>(1, "all")));
186 
187  for (vector<string>::iterator it = hists.begin(); it != hists.end(); ++it)
188  histList_.insert(*it);
189  if (histList_.find("all") != histList_.end())
190  allHists_ = true;
191 }
192 
194  const int32_t bx = event.bunchCrossing();
195  if (bx < 1 || bx > 3564)
196  return;
197 
198  int64_t t = event.bunchCrossing() + (event.orbitNumber() - 1) * 3564;
199 
200  if (t < tmin) {
201  tmin = t;
202  l1aOfTmin = event.id().event();
203  }
204 
205  if (t > tmax) {
206  tmax = t;
207  l1aOfTmax = event.id().event();
208  }
209 }
210 
212  LogDebug("EcalSrValid") << __FILE__ << ":" << __LINE__ << ": "
213  << "Tmax = " << tmax << " x 25ns; Tmin = " << tmin << " x 25ns; L1A(Tmax) = " << l1aOfTmax
214  << "; L1A(Tmin) = " << l1aOfTmin << "\n";
215  return (double)(l1aOfTmax - l1aOfTmin) / ((tmax - tmin) * 25e-9);
216 }
217 
220 
221  //retrieves event products:
223 
224  withEeSimHit_ = (!eeSimHits_->empty());
225  withEbSimHit_ = (!ebSimHits_->empty());
226 
227  if (ievt_ < 10) {
228  edm::LogInfo("EcalSrValid") << "Size of TP collection: " << tps_->size() << std::endl
229  << "Size of EB SRF collection read from data: " << ebSrFlags_->size() << std::endl
230  << "Size of EB SRF collection computed from data TTFs: " << ebComputedSrFlags_->size()
231  << std::endl
232  << "Size of EE SRF collection read from data: " << eeSrFlags_->size() << std::endl
233  << "Size of EE SRF collection computed from data TTFs: " << eeComputedSrFlags_->size()
234  << std::endl;
235  }
236 
237  if (ievt_ == 0) {
238  selectFedsForLog(); //note: must be called after readAllCollection
239  }
240 
241  //computes Et sum trigger tower crystals:
243 
244  //Data Volume
246 
247  //EB digis
248  //must be called after analyzeDataVolume because it uses
249  //isRuComplete_ array that this method fills
250  analyzeEB(event, es);
251 
252  //EE digis
253  //must be called after analyzeDataVolume because it uses
254  //isRuComplete_ array that this method fills
255  analyzeEE(event, es);
256 
260 
264 
268 
269  //TP
270  analyzeTP(event, es);
271 
272  if (!ebComputedSrFlags_->empty()) {
274  }
275  if (!eeComputedSrFlags_->empty()) {
277  }
278  nDroppedFRO_ = 0;
279  nIncompleteFRO_ = 0;
280  nCompleteZS_ = 0;
286  ++ievt_;
287 }
288 
290  bool eventError = false;
291  nEeZsErrors_ = 0;
292  nEeZsErrorsType1_ = 0;
293 
294  for (int iZ0 = 0; iZ0 < nEndcaps; ++iZ0) {
295  for (int iX0 = 0; iX0 < nEeX; ++iX0) {
296  for (int iY0 = 0; iY0 < nEeY; ++iY0) {
297  eeEnergies[iZ0][iX0][iY0].noZsRecE = -numeric_limits<double>::max();
298  eeEnergies[iZ0][iX0][iY0].recE = -numeric_limits<double>::max();
299  eeEnergies[iZ0][iX0][iY0].simE = 0; //must be set to zero.
300  eeEnergies[iZ0][iX0][iY0].simHit = 0;
301  eeEnergies[iZ0][iX0][iY0].gain12 = false;
302  }
303  }
304  }
305 
306  // gets the endcap geometry:
307  auto geoHandle = es.getHandle(geoToken);
308  const CaloSubdetectorGeometry* geometry_p = (*geoHandle).getSubdetectorGeometry(DetId::Ecal, EcalEndcap);
309  //CaloSubdetectorGeometry const& geometry = *geometry_p;
310 
311  //EE unsupressed digis:
312  for (unsigned int digis = 0; digis < eeNoZsDigis_->size(); ++digis) {
313  EEDataFrame frame = (*eeNoZsDigis_)[digis];
314  int iX0 = iXY2cIndex(frame.id().ix());
315  int iY0 = iXY2cIndex(frame.id().iy());
316  int iZ0 = frame.id().zside() > 0 ? 1 : 0;
317 
318  if (iX0 < 0 || iX0 >= nEeX) {
319  edm::LogError("EcalSrValid") << "iX0 (= " << iX0 << ") is out of range ("
320  << "[0," << nEeX - 1 << "]\n";
321  }
322  if (iY0 < 0 || iY0 >= nEeY) {
323  edm::LogError("EcalSrValid") << "iY0 (= " << iY0 << ") is out of range ("
324  << "[0," << nEeY - 1 << "]\n";
325  }
326  // cout << "EE no ZS energy computation..." ;
327  eeEnergies[iZ0][iX0][iY0].noZsRecE = frame2Energy(frame);
328 
329  eeEnergies[iZ0][iX0][iY0].gain12 = true;
330  for (int i = 0; i < frame.size(); ++i) {
331  const int gain12Code = 0x1;
332  if (frame[i].gainId() != gain12Code)
333  eeEnergies[iZ0][iX0][iY0].gain12 = false;
334  }
335 
336  const GlobalPoint xtalPos = geometry_p->getGeometry(frame.id())->getPosition();
337 
338  eeEnergies[iZ0][iX0][iY0].phi = rad2deg * ((double)xtalPos.phi());
339  eeEnergies[iZ0][iX0][iY0].eta = xtalPos.eta();
340  }
341 
342  //EE rec hits:
343  if (!localReco_) {
344  for (RecHitCollection::const_iterator it = eeRecHits_->begin(); it != eeRecHits_->end(); ++it) {
345  const RecHit& hit = *it;
346  int iX0 = iXY2cIndex(static_cast<const EEDetId&>(hit.id()).ix());
347  int iY0 = iXY2cIndex(static_cast<const EEDetId&>(hit.id()).iy());
348  int iZ0 = static_cast<const EEDetId&>(hit.id()).zside() > 0 ? 1 : 0;
349 
350  if (iX0 < 0 || iX0 >= nEeX) {
351  LogError("EcalSrValid") << "iX0 (= " << iX0 << ") is out of range ("
352  << "[0," << nEeX - 1 << "]\n";
353  }
354  if (iY0 < 0 || iY0 >= nEeY) {
355  LogError("EcalSrValid") << "iY0 (= " << iY0 << ") is out of range ("
356  << "[0," << nEeY - 1 << "]\n";
357  }
358  // cout << "EE no ZS energy computation..." ;
359  eeEnergies[iZ0][iX0][iY0].recE = hit.energy();
360  }
361  }
362 
363  //EE sim hits:
364  for (vector<PCaloHit>::const_iterator it = eeSimHits_->begin(); it != eeSimHits_->end(); ++it) {
365  const PCaloHit& simHit = *it;
366  EEDetId detId(simHit.id());
367  int iX = detId.ix();
368  int iX0 = iXY2cIndex(iX);
369  int iY = detId.iy();
370  int iY0 = iXY2cIndex(iY);
371  int iZ0 = detId.zside() > 0 ? 1 : 0;
372  eeEnergies[iZ0][iX0][iY0].simE += simHit.energy();
373  ++eeEnergies[iZ0][iX0][iY0].simHit;
374  }
375 
376  bool EEcrystalShot[nEeX][nEeY][2];
377  pair<int, int> EExtalCoor[nEeX][nEeY][2];
378 
379  for (int iEeZ = 0; iEeZ < 2; ++iEeZ) {
380  for (int iEeX = 0; iEeX < nEeX; ++iEeX) {
381  for (int iEeY = 0; iEeY < nEeY; ++iEeY) {
382  EEcrystalShot[iEeX][iEeY][iEeZ] = false;
383  EExtalCoor[iEeX][iEeY][iEeZ] = make_pair(0, 0);
384  }
385  }
386  }
387 
388  //EE suppressed digis
389  for (EEDigiCollection::const_iterator it = eeDigis_->begin(); it != eeDigis_->end(); ++it) {
390  const EEDataFrame& frame = *it;
391  int iX0 = iXY2cIndex(static_cast<const EEDetId&>(frame.id()).ix());
392  int iY0 = iXY2cIndex(static_cast<const EEDetId&>(frame.id()).iy());
393  int iZ0 = static_cast<const EEDetId&>(frame.id()).zside() > 0 ? 1 : 0;
394  if (iX0 < 0 || iX0 >= nEeX) {
395  LogError("EcalSrValid") << "iX0 (= " << iX0 << ") is out of range ("
396  << "[0," << nEeX - 1 << "]\n";
397  }
398  if (iY0 < 0 || iY0 >= nEeY) {
399  LogError("EcalSrValid") << "iY0 (= " << iY0 << ") is out of range ("
400  << "[0," << nEeY - 1 << "]\n";
401  }
402 
403  if (!EEcrystalShot[iX0][iY0][iZ0]) {
404  EEcrystalShot[iX0][iY0][iZ0] = true;
405  EExtalCoor[iX0][iY0][iZ0] = make_pair(xtalGraphX(frame.id()), xtalGraphY(frame.id()));
406  } else {
407  cout << "Error: several digi for same crystal!";
408  abort();
409  }
410 
411  if (localReco_) {
412  eeEnergies[iZ0][iX0][iY0].recE = frame2Energy(frame);
413  }
414 
415  eeEnergies[iZ0][iX0][iY0].gain12 = true;
416  for (int i = 0; i < frame.size(); ++i) {
417  const int gain12Code = 0x1;
418  if (frame[i].gainId() != gain12Code) {
419  eeEnergies[iZ0][iX0][iY0].gain12 = false;
420  }
421  }
422 
424 
425  bool highInterest = false;
426 
427  if (srf == eeSrFlags_->end())
428  continue;
429 
430  if (srf != eeSrFlags_->end()) {
431  highInterest = ((srf->value() & ~EcalSrFlag::SRF_FORCED_MASK) == EcalSrFlag::SRF_FULL);
432  }
433 
434  if (highInterest) {
436  } else {
437  int v = dccZsFIR(frame, firWeights_, firstFIRSample_, nullptr);
438  fill(meEeLiZsFir_, v);
439  if (v < eeZsThr_) {
440  eventError = true;
441  ++nEeZsErrors_;
442  pair<int, int> ru = dccCh(frame.id());
443  if (isRuComplete_[ru.first][ru.second - 1])
445  if (nEeZsErrors_ < 3) {
446  srApplicationErrorLog_ << event.id() << ", "
447  << "RU " << frame.id() << ", "
448  << "DCC " << ru.first << " Ch : " << ru.second << ": "
449  << "LI channel under ZS threshold.\n";
450  }
451  if (nEeZsErrors_ == 3) {
452  srApplicationErrorLog_ << event.id() << ": "
453  << "more ZS errors for this event...\n";
454  }
455  }
456  }
457  } //next ZS digi.
458 
459  for (int iEeZ = 0; iEeZ < 2; ++iEeZ) {
460  for (int iEeX = 0; iEeX < nEeX; ++iEeX) {
461  for (int iEeY = 0; iEeY < nEeY; ++iEeY) {
462  fill(meChOcc_,
463  EExtalCoor[iEeX][iEeY][iEeZ].first,
464  EExtalCoor[iEeX][iEeY][iEeZ].second,
465  EEcrystalShot[iEeX][iEeY][iEeZ] ? 1 : 0);
466  }
467  }
468  }
469 
470  for (int iZ0 = 0; iZ0 < nEndcaps; ++iZ0) {
471  for (int iX0 = 0; iX0 < nEeX; ++iX0) {
472  for (int iY0 = 0; iY0 < nEeY; ++iY0) {
473  double recE = eeEnergies[iZ0][iX0][iY0].recE;
474  if (recE == -numeric_limits<double>::max())
475  continue; //not a crystal or ZS
476  fill(meEeRecE_, eeEnergies[iZ0][iX0][iY0].recE);
477 
478  fill(meEeEMean_, ievt_ + 1, eeEnergies[iZ0][iX0][iY0].recE);
479 
480  if (withEeSimHit_) {
481  if (!eeEnergies[iZ0][iX0][iY0].simHit) { //noise only crystal channel
482  fill(meEeNoise_, eeEnergies[iZ0][iX0][iY0].noZsRecE);
483  } else {
484  fill(meEeSimE_, eeEnergies[iZ0][iX0][iY0].simE);
485  fill(meEeRecEHitXtal_, eeEnergies[iZ0][iX0][iY0].recE);
486  }
487  fill(meEeRecVsSimE_, eeEnergies[iZ0][iX0][iY0].simE, eeEnergies[iZ0][iX0][iY0].recE);
488  fill(meEeNoZsRecVsSimE_, eeEnergies[iZ0][iX0][iY0].simE, eeEnergies[iZ0][iX0][iY0].noZsRecE);
489  }
490  }
491  }
492  }
493 
494  int EEZs1RuCount[2][20][20];
495  int EEFullRuCount[2][20][20];
496  int EEForcedRuCount[2][20][20];
497  for (int iZ(0); iZ < 2; iZ++) {
498  for (int iX(0); iX < 20; iX++) {
499  for (int iY(0); iY < 20; iY++) {
500  EEZs1RuCount[iZ][iX][iY] = 0;
501  EEFullRuCount[iZ][iX][iY] = 0;
502  EEForcedRuCount[iZ][iX][iY] = 0;
503  }
504  }
505  }
506 
507  nEeFROCnt_ = 0;
508  char eeSrfMark[2][20][20];
509  bzero(eeSrfMark, sizeof(eeSrfMark));
510  //Filling RU histo
511  for (EESrFlagCollection::const_iterator it = eeSrFlags_->begin(); it != eeSrFlags_->end(); ++it) {
512  const EESrFlag& srf = *it;
513  // srf.id() is EcalScDetId; 1 <= ix <= 20 1 <= iy <= 20
514  int iX = srf.id().ix();
515  int iY = srf.id().iy();
516  int zside = srf.id().zside(); //-1 for EE-, +1 for EE+
517  if (iX < 1 || iY > 100)
518  throw cms::Exception("EcalSelectiveReadoutValidation")
519  << "Found an endcap SRF with an invalid det ID: " << srf.id() << ".\n";
520  ++eeSrfMark[zside > 0 ? 1 : 0][iX - 1][iY - 1];
521  if (eeSrfMark[zside > 0 ? 1 : 0][iX - 1][iY - 1] > 1)
522  throw cms::Exception("EcalSelectiveReadoutValidation") << "Duplicate SRF for supercrystal " << srf.id() << ".\n";
523  int flag = srf.value() & ~EcalSrFlag::SRF_FORCED_MASK;
524  if (flag == EcalSrFlag::SRF_ZS1) {
525  EEZs1RuCount[zside > 0 ? 1 : 0][iX - 1][iY - 1] += 1;
526  }
527 
528  if (flag == EcalSrFlag::SRF_FULL) {
529  EEFullRuCount[zside > 0 ? 1 : 0][iX - 1][iY - 1] += 1;
530  ++nEeFROCnt_;
531  }
532 
533  if (srf.value() & EcalSrFlag::SRF_FORCED_MASK) {
534  EEForcedRuCount[zside > 0 ? 1 : 0][iX - 1][iY - 1] += 1;
535  }
536  }
537  for (int iZ(0); iZ < 2; iZ++) {
538  int xOffset(iZ == 0 ? -40 : 20);
539  for (int iX(0); iX < 20; iX++) {
540  for (int iY(0); iY < 20; iY++) {
541  int GraphX = (iX + 1) + xOffset;
542  int GraphY = (iY + 1);
543  fill(meZs1Ru_, GraphX, GraphY, EEZs1RuCount[iZ][iX][iY]);
544  fill(meFullRoRu_, GraphX, GraphY, EEFullRuCount[iZ][iX][iY]);
545  fill(meForcedRu_, GraphX, GraphY, EEForcedRuCount[iZ][iX][iY]);
546  }
547  }
548  }
549 
550  if (eventError)
551  srApplicationErrorLog_ << event.id() << ": " << nEeZsErrors_
552  << " ZS-flagged EE channels under "
553  "the ZS threshold, whose "
554  << nEeZsErrorsType1_ << " in a complete RU.\n";
555 } //end of analyzeEE
556 
558  bool eventError = false;
559  nEbZsErrors_ = 0;
560  nEbZsErrorsType1_ = 0;
561  vector<pair<int, int> > xtalEtaPhi;
562 
563  xtalEtaPhi.reserve(nEbPhi * nEbEta);
564  for (int iEta0 = 0; iEta0 < nEbEta; ++iEta0) {
565  for (int iPhi0 = 0; iPhi0 < nEbPhi; ++iPhi0) {
567  ebEnergies[iEta0][iPhi0].recE = -numeric_limits<double>::max();
568  ebEnergies[iEta0][iPhi0].simE = 0; //must be zero.
569  ebEnergies[iEta0][iPhi0].simHit = 0;
570  ebEnergies[iEta0][iPhi0].gain12 = false;
571  xtalEtaPhi.push_back(pair<int, int>(iEta0, iPhi0));
572  }
573  }
574 
575  // get the barrel geometry:
576  auto geoHandle = es.getHandle(geoToken);
577  const CaloSubdetectorGeometry* geometry_p = (*geoHandle).getSubdetectorGeometry(DetId::Ecal, EcalBarrel);
578  //CaloSubdetectorGeometry const& geometry = *geometry_p;
579 
580  //EB unsuppressed digis:
581  for (EBDigiCollection::const_iterator it = ebNoZsDigis_->begin(); it != ebNoZsDigis_->end(); ++it) {
582  const EBDataFrame& frame = *it;
583  int iEta0 = iEta2cIndex(static_cast<const EBDetId&>(frame.id()).ieta());
584  int iPhi0 = iPhi2cIndex(static_cast<const EBDetId&>(frame.id()).iphi());
585  if (iEta0 < 0 || iEta0 >= nEbEta) {
586  stringstream s;
587  s << "EcalSelectiveReadoutValidation: "
588  << "iEta0 (= " << iEta0 << ") is out of range ("
589  << "[0," << nEbEta - 1 << "]\n";
590  throw cms::Exception(s.str());
591  }
592  if (iPhi0 < 0 || iPhi0 >= nEbPhi) {
593  stringstream s;
594  s << "EcalSelectiveReadoutValidation: "
595  << "iPhi0 (= " << iPhi0 << ") is out of range ("
596  << "[0," << nEbPhi - 1 << "]\n";
597  throw cms::Exception(s.str());
598  }
599 
600  ebEnergies[iEta0][iPhi0].noZsRecE = frame2Energy(frame);
601  ebEnergies[iEta0][iPhi0].gain12 = true;
602  for (int i = 0; i < frame.size(); ++i) {
603  const int gain12Code = 0x1;
604  if (frame[i].gainId() != gain12Code)
605  ebEnergies[iEta0][iPhi0].gain12 = false;
606  }
607 
608  const GlobalPoint xtalPos = geometry_p->getGeometry(frame.id())->getPosition();
609 
610  ebEnergies[iEta0][iPhi0].phi = rad2deg * ((double)xtalPos.phi());
611  ebEnergies[iEta0][iPhi0].eta = xtalPos.eta();
612  } //next non-zs digi
613 
614  //EB sim hits
615  for (vector<PCaloHit>::const_iterator it = ebSimHits_->begin(); it != ebSimHits_->end(); ++it) {
616  const PCaloHit& simHit = *it;
617  EBDetId detId(simHit.id());
618  int iEta = detId.ieta();
619  int iEta0 = iEta2cIndex(iEta);
620  int iPhi = detId.iphi();
621  int iPhi0 = iPhi2cIndex(iPhi);
622  ebEnergies[iEta0][iPhi0].simE += simHit.energy();
623  ++ebEnergies[iEta0][iPhi0].simHit;
624  }
625 
626  bool crystalShot[nEbEta][nEbPhi];
627  pair<int, int> EBxtalCoor[nEbEta][nEbPhi];
628 
629  for (int iEta0 = 0; iEta0 < nEbEta; ++iEta0) {
630  for (int iPhi0 = 0; iPhi0 < nEbPhi; ++iPhi0) {
631  crystalShot[iEta0][iPhi0] = false;
632  EBxtalCoor[iEta0][iPhi0] = make_pair(0, 0);
633  }
634  }
635 
636  int nEbDigi = 0;
637 
638  for (EBDigiCollection::const_iterator it = ebDigis_->begin(); it != ebDigis_->end(); ++it) {
639  ++nEbDigi;
640  const EBDataFrame& frame = *it;
641  int iEta = static_cast<const EBDetId&>(frame.id()).ieta();
642  int iPhi = static_cast<const EBDetId&>(frame.id()).iphi();
643  int iEta0 = iEta2cIndex(iEta);
644  int iPhi0 = iPhi2cIndex(iPhi);
645  if (iEta0 < 0 || iEta0 >= nEbEta) {
646  throw(cms::Exception("EcalSelectiveReadoutValidation") << "iEta0 (= " << iEta0 << ") is out of range ("
647  << "[0," << nEbEta - 1 << "]");
648  }
649  if (iPhi0 < 0 || iPhi0 >= nEbPhi) {
650  throw(cms::Exception("EcalSelectiveReadoutValidation") << "iPhi0 (= " << iPhi0 << ") is out of range ("
651  << "[0," << nEbPhi - 1 << "]");
652  }
653  assert(iEta0 >= 0 && iEta0 < nEbEta);
654  assert(iPhi0 >= 0 && iPhi0 < nEbPhi);
655  if (!crystalShot[iEta0][iPhi0]) {
656  crystalShot[iEta0][iPhi0] = true;
657  EBxtalCoor[iEta0][iPhi0] = make_pair(xtalGraphX(frame.id()), xtalGraphY(frame.id()));
658  } else {
659  cout << "Error: several digi for same crystal!";
660  abort();
661  }
662  if (localReco_) {
663  ebEnergies[iEta0][iPhi0].recE = frame2Energy(frame);
664  }
665 
666  ebEnergies[iEta0][iPhi0].gain12 = true;
667  for (int i = 0; i < frame.size(); ++i) {
668  const int gain12Code = 0x1;
669  if (frame[i].gainId() != gain12Code) {
670  ebEnergies[iEta0][iPhi0].gain12 = false;
671  }
672  }
673 
675 
676  bool highInterest = false;
677 
678  // if(srf == ebSrFlags_->end()){
679  // throw cms::Exception("EcalSelectiveReadoutValidation")
680  // << __FILE__ << ":" << __LINE__ << ": SR flag not found";
681  //}
682 
683  if (srf != ebSrFlags_->end()) {
684  highInterest = ((srf->value() & ~EcalSrFlag::SRF_FORCED_MASK) == EcalSrFlag::SRF_FULL);
685  }
686 
687  if (highInterest) {
689  } else {
690  int v = dccZsFIR(frame, firWeights_, firstFIRSample_, nullptr);
691  fill(meEbLiZsFir_, v);
692  if (v < ebZsThr_) {
693  eventError = true;
694  ++nEbZsErrors_;
695  pair<int, int> ru = dccCh(frame.id());
696  if (isRuComplete_[ru.first][ru.second - 1])
698  if (nEbZsErrors_ < 3) {
699  srApplicationErrorLog_ << event.id() << ", "
700  << "RU " << frame.id() << ", "
701  << "DCC " << ru.first << " Ch : " << ru.second << ": "
702  << "LI channel under ZS threshold.\n";
703  }
704  if (nEbZsErrors_ == 3) {
705  srApplicationErrorLog_ << event.id() << ": "
706  << "more ZS errors for this event...\n";
707  }
708  }
709  }
710  } //next EB digi
711 
712  for (int iEta0 = 0; iEta0 < nEbEta; ++iEta0) {
713  for (int iPhi0 = 0; iPhi0 < nEbPhi; ++iPhi0)
714  fill(meChOcc_,
715  EBxtalCoor[iEta0][iPhi0].first,
716  EBxtalCoor[iEta0][iPhi0].second,
717  crystalShot[iEta0][iPhi0] ? 1. : 0.);
718  }
719 
720  if (!localReco_) {
721  for (RecHitCollection::const_iterator it = ebRecHits_->begin(); it != ebRecHits_->end(); ++it) {
722  ++nEbDigi;
723  const RecHit& hit = *it;
724  int iEta = static_cast<const EBDetId&>(hit.id()).ieta();
725  int iPhi = static_cast<const EBDetId&>(hit.id()).iphi();
726  int iEta0 = iEta2cIndex(iEta);
727  int iPhi0 = iPhi2cIndex(iPhi);
728  if (iEta0 < 0 || iEta0 >= nEbEta) {
729  LogError("EcalSrValid") << "iEta0 (= " << iEta0 << ") is out of range ("
730  << "[0," << nEbEta - 1 << "]\n";
731  }
732  if (iPhi0 < 0 || iPhi0 >= nEbPhi) {
733  LogError("EcalSrValid") << "iPhi0 (= " << iPhi0 << ") is out of range ("
734  << "[0," << nEbPhi - 1 << "]\n";
735  }
736  ebEnergies[iEta0][iPhi0].recE = hit.energy();
737  }
738  }
739 
740  for (unsigned int i = 0; i < xtalEtaPhi.size(); ++i) {
741  int iEta0 = xtalEtaPhi[i].first;
742  int iPhi0 = xtalEtaPhi[i].second;
743  energiesEb_t& energies = ebEnergies[iEta0][iPhi0];
744 
745  double recE = energies.recE;
746  if (recE != -numeric_limits<double>::max()) { //not zero suppressed
747  fill(meEbRecE_, ebEnergies[iEta0][iPhi0].recE);
748  fill(meEbEMean_, ievt_ + 1, recE);
749  } //not zero suppressed
750 
751  if (withEbSimHit_) {
752  if (!energies.simHit) { //noise only crystal channel
753  fill(meEbNoise_, energies.noZsRecE);
754  } else {
755  fill(meEbSimE_, energies.simE);
756  fill(meEbRecEHitXtal_, energies.recE);
757  }
758  fill(meEbRecVsSimE_, energies.simE, energies.recE);
759  fill(meEbNoZsRecVsSimE_, energies.simE, energies.noZsRecE);
760  }
761  }
762 
763  int EBZs1RuCount[2][17][72];
764  int EBFullRuCount[2][17][72];
765  int EBForcedRuCount[2][17][72];
766  std::pair<int, int> EBtowerCoor[2][17][72];
767  for (int iZ(0); iZ < 2; iZ++) {
768  for (int iEta(0); iEta < 17; iEta++) {
769  for (int iPhi(0); iPhi < 72; iPhi++) {
770  EBZs1RuCount[iZ][iEta][iPhi] = 0;
771  EBFullRuCount[iZ][iEta][iPhi] = 0;
772  EBForcedRuCount[iZ][iEta][iPhi] = 0;
773  }
774  }
775  }
776 
777  //SRF
778  nEbFROCnt_ = 0;
779  char ebSrfMark[2][17][72];
780  bzero(ebSrfMark, sizeof(ebSrfMark));
781  // int idbg = 0;
782  for (EBSrFlagCollection::const_iterator it = ebSrFlags_->begin(); it != ebSrFlags_->end(); ++it) {
783  const EBSrFlag& srf = *it;
784  int iEtaAbs = srf.id().ietaAbs();
785  int iPhi = srf.id().iphi();
786  int iZ = srf.id().zside();
787 
788  // cout << "--> " << ++idbg << iEtaAbs << " " << iPhi << " " << iZ
789  // << " " << srf.id() << "\n";
790 
791  if (iEtaAbs < 1 || iEtaAbs > 17 || iPhi < 1 || iPhi > 72)
792  throw cms::Exception("EcalSelectiveReadoutValidation")
793  << "Found a barrel SRF with an invalid det ID: " << srf.id() << ".\n";
794  ++ebSrfMark[iZ > 0 ? 1 : 0][iEtaAbs - 1][iPhi - 1];
795  if (ebSrfMark[iZ > 0 ? 1 : 0][iEtaAbs - 1][iPhi - 1] > 1)
796  throw cms::Exception("EcalSelectiveReadoutValidation") << "Duplicate SRF for RU " << srf.id() << ".\n";
797 
798  EBtowerCoor[iZ > 0 ? 1 : 0][iEtaAbs - 1][iPhi - 1] = std::pair<int, int>(srf.id().ieta(), srf.id().iphi());
799 
800  int flag = srf.value() & ~EcalSrFlag::SRF_FORCED_MASK;
801  if (flag == EcalSrFlag::SRF_ZS1) {
802  EBZs1RuCount[iZ > 0 ? 1 : 0][iEtaAbs - 1][iPhi - 1] += 1;
803  }
804  if (flag == EcalSrFlag::SRF_FULL) {
805  EBFullRuCount[iZ > 0 ? 1 : 0][iEtaAbs - 1][iPhi - 1] += 1;
806  ++nEbFROCnt_;
807  }
808  if (srf.value() & EcalSrFlag::SRF_FORCED_MASK) {
809  EBForcedRuCount[iZ > 0 ? 1 : 0][iEtaAbs - 1][iPhi - 1] += 1;
810  }
811  }
812  for (int iZ(0); iZ < 2; iZ++) {
813  for (int iEta(0); iEta < 17; iEta++) {
814  for (int iPhi(0); iPhi < 72; iPhi++) {
815  float x(EBtowerCoor[iZ][iEta][iPhi].first);
816  float y(EBtowerCoor[iZ][iEta][iPhi].second);
817  fill(meZs1Ru_, x, y, EBZs1RuCount[iZ][iEta][iPhi]);
818  fill(meFullRoRu_, x, y, EBFullRuCount[iZ][iEta][iPhi]);
819  fill(meForcedRu_, x, y, EBForcedRuCount[iZ][iEta][iPhi]);
820  }
821  }
822  }
823 
824  if (eventError)
825  srApplicationErrorLog_ << event.id() << ": " << nEbZsErrors_
826  << " ZS-flagged EB channels under "
827  "the ZS threshold, whose "
828  << nEbZsErrorsType1_ << " in a complete RU.\n";
829 }
830 
832 
834  // endcap mapping
836 
837  //electronics map
839 
840  initAsciiFile();
841 }
842 
845 }
846 
848  edm::Run const&,
849  edm::EventSetup const&) {
850  ibooker.setCurrentFolder("EcalDigisV/SelectiveReadout");
851 
852  {
853  auto scope = DQMStore::IBooker::UseRunScope(ibooker);
854  meL1aRate_ = bookFloat(ibooker, "l1aRate_");
855  }
856 
857  meDccVol_ = bookProfile(ibooker,
858  "hDccVol", //"EcalDccEventSizeComputed",
859  "ECAL DCC event fragment size;Dcc id; "
860  "<Event size> (kB)",
861  nDccs_,
862  .5,
863  .5 + nDccs_);
864 
865  meDccLiVol_ = bookProfile(ibooker,
866  "hDccLiVol",
867  "LI channel payload per DCC;Dcc id; "
868  "<Event size> (kB)",
869  nDccs_,
870  .5,
871  .5 + nDccs_);
872 
873  meDccHiVol_ = bookProfile(ibooker,
874  "hDccHiVol",
875  "HI channel payload per DCC;Dcc id; "
876  "<Event size> (kB)",
877  nDccs_,
878  .5,
879  .5 + nDccs_);
880 
881  meDccVolFromData_ = bookProfile(ibooker,
882  "hDccVolFromData", //"EcalDccEventSize",
883  "ECAL DCC event fragment size;Dcc id; "
884  "<Event size> (kB)",
885  nDccs_,
886  .5,
887  .5 + nDccs_);
888 
889  meVolBLI_ = book1D(ibooker,
890  "hVolBLI", // "EBLowInterestPayload",
891  "ECAL Barrel low interest crystal data payload;"
892  "Event size (kB);Nevts",
893  100,
894  0.,
895  200.);
896 
897  meVolELI_ = book1D(ibooker,
898  "hVolELI", //"EELowInterestPayload",
899  "Endcap low interest crystal data payload;"
900  "Event size (kB);Nevts",
901  100,
902  0.,
903  200.);
904 
905  meVolLI_ = book1D(ibooker,
906  "hVolLI", //"EcalLowInterestPayload",
907  "ECAL low interest crystal data payload;"
908  "Event size (kB);Nevts",
909  100,
910  0.,
911  200.);
912 
913  meVolBHI_ = book1D(ibooker,
914  "hVolBHI", //"EBHighInterestPayload",
915  "Barrel high interest crystal data payload;"
916  "Event size (kB);Nevts",
917  100,
918  0.,
919  200.);
920 
921  meVolEHI_ = book1D(ibooker,
922  "hVolEHI", //"EEHighInterestPayload",
923  "Endcap high interest crystal data payload;"
924  "Event size (kB);Nevts",
925  100,
926  0.,
927  200.);
928 
929  meVolHI_ = book1D(ibooker,
930  "hVolHI", //"EcalHighInterestPayload",
931  "ECAL high interest crystal data payload;"
932  "Event size (kB);Nevts",
933  100,
934  0.,
935  200.);
936 
937  meVolB_ = book1D(ibooker,
938  "hVolB", //"EBEventSize",
939  "Barrel data volume;Event size (kB);Nevts",
940  100,
941  0.,
942  200.);
943 
944  meVolE_ = book1D(ibooker,
945  "hVolE", //"EEEventSize",
946  "Endcap data volume;Event size (kB);Nevts",
947  100,
948  0.,
949  200.);
950 
951  meVol_ = book1D(ibooker,
952  "hVol", //"EcalEventSize",
953  "ECAL data volume;Event size (kB);Nevts",
954  100,
955  0.,
956  200.);
957 
958  meChOcc_ = bookProfile2D(ibooker,
959  "h2ChOcc", //"EcalChannelOccupancy",
960  "ECAL crystal channel occupancy after zero suppression;"
961  "iX -200 / iEta / iX + 100;"
962  "iY / iPhi (starting from -10^{o}!);"
963  "Event count rate",
964  401,
965  -200.5,
966  200.5,
967  360,
968  .5,
969  360.5);
970 
971  //TP
972  string tpUnit;
973  if (tpInGeV_)
974  tpUnit = string("GeV");
975  else
976  tpUnit = string("TP hw unit");
977  string title;
978  title = string("Trigger primitive TT E_{T};E_{T} ") + tpUnit + string(";Event Count");
979  meTp_ = bookProfile(ibooker,
980  "hTp", //"EcalTriggerPrimitiveEt",
981  title,
982  (tpInGeV_ ? 100 : 40),
983  0.,
984  (tpInGeV_ ? 10. : 40.));
985 
986  meTtf_ = bookProfile(ibooker,
987  "hTtf", //"EcalTriggerTowerFlag",
988  "Trigger primitive TT flag;Flag number;Event count",
989  8,
990  -.5,
991  7.5);
992 
993  title = string("Trigger tower flag vs TP;E_{T}(TT) (") + tpUnit + string(");Flag number");
994  meTtfVsTp_ = book2D(ibooker, "h2TtfVsTp", title, 100, 0., (tpInGeV_ ? 10. : 40.), 8, -.5, 7.5);
995 
996  meTtfVsEtSum_ = book2D(ibooker,
997  "h2TtfVsEtSum",
998  "Trigger tower flag vs #sumE_{T};"
999  "E_{T}(TT) (GeV);"
1000  "TTF",
1001  100,
1002  0.,
1003  10.,
1004  8,
1005  -.5,
1006  7.5);
1007  title = string(
1008  "Trigger primitive Et (TP) vs #sumE_{T};"
1009  "E_{T} (sum) (GeV);"
1010  "E_{T} (TP) (") +
1011  tpUnit + string(")");
1012 
1013  meTpVsEtSum_ = book2D(ibooker, "h2TpVsEtSum", title, 100, 0., 10., 100, 0., (tpInGeV_ ? 10. : 40.));
1014 
1015  title = string(
1016  "Trigger primitive E_{T};"
1017  "iEta;"
1018  "iPhi;"
1019  "E_{T} (TP) (") +
1020  tpUnit + string(")");
1021  meTpMap_ = bookProfile2D(ibooker, "h2Tp", title, 57, -28.5, 28.5, 72, .5, 72.5);
1022 
1023  //SRF
1024  meFullRoRu_ = book2D(ibooker,
1025  "h2FRORu", //"EcalFullReadoutSRFlagMap",
1026  "Full Read-out readout unit;"
1027  "iX - 40 / iEta / iX + 20;"
1028  "iY / iPhi (iPhi = 1 at phi = 0 rad);"
1029  "Event count",
1030  80,
1031  -39.5,
1032  40.5,
1033  72,
1034  .5,
1035  72.5);
1036 
1037  meFullRoCnt_ = book1D(ibooker,
1038  "hFROCnt",
1039  "Number of Full-readout-flagged readout units;"
1040  "FRO RU count;Event count",
1041  300,
1042  -.5,
1043  299.5);
1044 
1045  meEbFullRoCnt_ = book1D(ibooker,
1046  "hEbFROCnt",
1047  "Number of EB Full-readout-flagged readout units;"
1048  "FRO RU count;Event count",
1049  200,
1050  -.5,
1051  199.5);
1052 
1053  meEeFullRoCnt_ = book1D(ibooker,
1054  "hEeFROCnt",
1055  "Number of EE Full-readout-flagged readout units;"
1056  "FRO RU count;Event count",
1057  200,
1058  -.5,
1059  199.5);
1060 
1061  meZs1Ru_ = book2D(ibooker,
1062  "h2Zs1Ru", //"EbZeroSupp1SRFlagMap",
1063  "Readout unit with ZS-thr-1 flag;"
1064  "iX - 40 / iEta / iX + 20;"
1065  "iY0 / iPhi0 (iPhi = 1 at phi = 0 rad);"
1066  "Event count",
1067  80,
1068  -39.5,
1069  40.5,
1070  72,
1071  .5,
1072  72.5);
1073 
1074  meForcedRu_ = book2D(ibooker,
1075  "h2ForcedRu", //"EcalReadoutUnitForcedBitMap",
1076  "ECAL readout unit with forced bit of SR flag on;"
1077  "iX - 40 / iEta / iX + 20;"
1078  "iY / iPhi (iPhi = 1 at phi = 0 rad);"
1079  "Event count",
1080  80,
1081  -39.5,
1082  40.5,
1083  72,
1084  .5,
1085  72.5);
1086 
1087  meLiTtf_ = bookProfile2D(ibooker,
1088  "h2LiTtf", //"EcalLowInterestTriggerTowerFlagMap",
1089  "Low interest trigger tower flags;"
1090  "iEta;"
1091  "iPhi;"
1092  "Event count",
1093  57,
1094  -28.5,
1095  28.5,
1096  72,
1097  .5,
1098  72.5);
1099 
1100  meMiTtf_ = bookProfile2D(ibooker,
1101  "h2MiTtf", //"EcalMidInterestTriggerTowerFlagMap",
1102  "Mid interest trigger tower flags;"
1103  "iEta;"
1104  "iPhi;"
1105  "Event count",
1106  57,
1107  -28.5,
1108  28.5,
1109  72,
1110  .5,
1111  72.5);
1112 
1113  meHiTtf_ = bookProfile2D(ibooker,
1114  "h2HiTtf", //"EcalHighInterestTriggerTowerFlagMap",
1115  "High interest trigger tower flags;"
1116  "iEta;"
1117  "iPhi;"
1118  "Event count",
1119  57,
1120  -28.5,
1121  28.5,
1122  72,
1123  .5,
1124  72.5);
1125 
1126  meForcedTtf_ = book2D(ibooker,
1127  "h2ForcedTtf", //"EcalTtfForcedBitMap",
1128  "Trigger tower flags with forced bit set;"
1129  "iEta;"
1130  "iPhi;"
1131  "Event count",
1132  57,
1133  -28.5,
1134  28.5,
1135  72,
1136  .5,
1137  72.5);
1138 
1139  const float ebMinNoise = -1.;
1140  const float ebMaxNoise = 1.;
1141 
1142  const float eeMinNoise = -1.;
1143  const float eeMaxNoise = 1.;
1144 
1145  const float ebMinE = ebMinNoise;
1146  const float ebMaxE = ebMaxNoise;
1147 
1148  const float eeMinE = eeMinNoise;
1149  const float eeMaxE = eeMaxNoise;
1150 
1151  const int evtMax = 500;
1152 
1153  meEbRecE_ = book1D(ibooker, "hEbRecE", "Crystal reconstructed energy;E (GeV);Event count", 100, ebMinE, ebMaxE);
1154 
1155  meEbEMean_ = bookProfile(ibooker, "hEbEMean", "EE <E_hit>;event #;<E_hit> (GeV)", evtMax, .5, evtMax + .5);
1156 
1157  meEbNoise_ = book1D(ibooker,
1158  "hEbNoise",
1159  "Crystal noise "
1160  "(rec E of crystal without deposited energy)"
1161  ";Rec E (GeV);Event count",
1162  100,
1163  ebMinNoise,
1164  ebMaxNoise);
1165 
1166  meEbLiZsFir_ = book1D(ibooker,
1167  "zsEbLiFIRemu",
1168  "Emulated ouput of ZS FIR filter for EB "
1169  "low interest crystals;"
1170  "ADC count*4;"
1171  "Event count",
1172  60,
1173  -30,
1174  30);
1175 
1176  meEbHiZsFir_ = book1D(ibooker,
1177  "zsEbHiFIRemu",
1178  "Emulated ouput of ZS FIR filter for EB "
1179  "high interest crystals;"
1180  "ADC count*4;"
1181  "Event count",
1182  60,
1183  -30,
1184  30);
1185 
1186  //TODO: Fill this histogram...
1187  // meEbIncompleteRUZsFir_ = book1D(ibooker, "zsEbIncompleteRUFIRemu",
1188  // "Emulated ouput of ZS FIR filter for EB "
1189  // "incomplete FRO-flagged RU;"
1190  // "ADC count*4;"
1191  // "Event count",
1192  // 60, -30, 30);
1193 
1194  meEbSimE_ = book1D(ibooker, "hEbSimE", "EB hit crystal simulated energy", 100, ebMinE, ebMaxE);
1195 
1196  meEbRecEHitXtal_ = book1D(ibooker, "hEbRecEHitXtal", "EB rec energy of hit crystals", 100, ebMinE, ebMaxE);
1197 
1198  meEbRecVsSimE_ = book2D(ibooker,
1199  "hEbRecVsSimE",
1200  "Crystal simulated vs reconstructed energy;"
1201  "Esim (GeV);Erec GeV);Event count",
1202  100,
1203  ebMinE,
1204  ebMaxE,
1205  100,
1206  ebMinE,
1207  ebMaxE);
1208 
1209  meEbNoZsRecVsSimE_ = book2D(ibooker,
1210  "hEbNoZsRecVsSimE",
1211  "Crystal no-zs simulated vs reconstructed "
1212  "energy;"
1213  "Esim (GeV);Erec GeV);Event count",
1214  100,
1215  ebMinE,
1216  ebMaxE,
1217  100,
1218  ebMinE,
1219  ebMaxE);
1220 
1221  meEeRecE_ = book1D(ibooker,
1222  "hEeRecE",
1223  "EE crystal reconstructed energy;E (GeV);"
1224  "Event count",
1225  100,
1226  eeMinE,
1227  eeMaxE);
1228 
1229  meEeEMean_ = bookProfile(ibooker, "hEeEMean", "<E_{EE hit}>;event;<E_{hit}> (GeV)", evtMax, .5, evtMax + .5);
1230 
1231  meEeNoise_ = book1D(ibooker,
1232  "hEeNoise",
1233  "EE crystal noise "
1234  "(rec E of crystal without deposited energy);"
1235  "E (GeV);Event count",
1236  200,
1237  eeMinNoise,
1238  eeMaxNoise);
1239 
1240  meEeLiZsFir_ = book1D(ibooker,
1241  "zsEeLiFIRemu",
1242  "Emulated ouput of ZS FIR filter for EE "
1243  "low interest crystals;"
1244  "ADC count*4;"
1245  "Event count",
1246  60,
1247  -30,
1248  30);
1249 
1250  meEeHiZsFir_ = book1D(ibooker,
1251  "zsEeHiFIRemu",
1252  "Emulated ouput of ZS FIR filter for EE "
1253  "high interest crystals;"
1254  "ADC count*4;"
1255  "Event count",
1256  60,
1257  -30,
1258  30);
1259 
1260  //TODO: Fill this histogram...
1261  // meEeIncompleteRUZsFir_ = book1D(ibooker, "zsEeIncompleteRUFIRemu",
1262  // "Emulated ouput of ZS FIR filter for EE "
1263  // "incomplete FRO-flagged RU;"
1264  // "ADC count*4;"
1265  // "Event count",
1266  // 60, -30, 30);
1267 
1268  meEeSimE_ = book1D(ibooker, "hEeSimE", "EE hit crystal simulated energy", 100, eeMinE, eeMaxE);
1269 
1270  meEeRecEHitXtal_ = book1D(ibooker, "hEeRecEHitXtal", "EE rec energy of hit crystals", 100, eeMinE, eeMaxE);
1271 
1272  meEeRecVsSimE_ = book2D(ibooker,
1273  "hEeRecVsSimE",
1274  "EE crystal simulated vs reconstructed energy;"
1275  "Esim (GeV);Erec GeV);Event count",
1276  100,
1277  eeMinE,
1278  eeMaxE,
1279  100,
1280  eeMinE,
1281  eeMaxE);
1282 
1283  meEeNoZsRecVsSimE_ = book2D(ibooker,
1284  "hEeNoZsRecVsSimE",
1285  "EE crystal no-zs simulated vs "
1286  "reconstructed "
1287  "energy;Esim (GeV);Erec GeV);Event count",
1288  100,
1289  eeMinE,
1290  eeMaxE,
1291  100,
1292  eeMinE,
1293  eeMaxE);
1294 
1295  meSRFlagsConsistency_ = book2D(ibooker,
1296  "hSRAlgoErrorMap",
1297  "TTFlags and SR Flags mismatch;"
1298  "iX - 40 / iEta / iX + 20;"
1299  "iY / iPhi (iPhi = 1 at phi = 0 rad);"
1300  "Event count",
1301  80,
1302  -39.5,
1303  40.5,
1304  72,
1305  .5,
1306  72.5);
1307 
1308  //Readout Units histos (interest/Ncrystals)
1309  meIncompleteFROMap_ = book2D(ibooker,
1310  "hIncompleteFROMap",
1311  "Incomplete full-readout-flagged readout units;"
1312  "iX - 40 / iEta / iX + 20;"
1313  "iY / iPhi (iPhi = 1 at phi = 0 rad);"
1314  "Event count",
1315  80,
1316  -39.5,
1317  40.5,
1318  72,
1319  .5,
1320  72.5);
1321 
1322  meIncompleteFROCnt_ = book1D(ibooker,
1323  "hIncompleteFROCnt",
1324  "Number of incomplete full-readout-flagged "
1325  "readout units;"
1326  "Number of RUs;Event count;",
1327  200,
1328  -.5,
1329  199.5);
1330 
1332  "hIncompleteFRORateMap",
1333  "Incomplete full-readout-flagged readout units;"
1334  "iX - 40 / iEta / iX + 20;"
1335  "iY / iPhi (iPhi = 1 at phi = 0 rad);"
1336  "Incomplete error rate",
1337  80,
1338  -39.5,
1339  40.5,
1340  72,
1341  .5,
1342  72.5);
1343 
1344  meDroppedFROMap_ = book2D(ibooker,
1345  "hDroppedFROMap",
1346  "Dropped full-readout-flagged readout units;"
1347  "iX - 40 / iEta / iX + 20;"
1348  "iY / iPhi (iPhi = 1 at phi = 0 rad);"
1349  "Event count",
1350  80,
1351  -39.5,
1352  40.5,
1353  72,
1354  .5,
1355  72.5);
1356 
1357  meDroppedFROCnt_ = book1D(ibooker,
1358  "hDroppedFROCnt",
1359  "Number of dropped full-readout-flagged "
1360  "RU count;RU count;Event count",
1361  200,
1362  -.5,
1363  199.5);
1364 
1365  meCompleteZSCnt_ = book1D(ibooker,
1366  "hCompleteZsCnt",
1367  "Number of zero-suppressed-flagged RU fully "
1368  "readout;"
1369  "RU count;Event count",
1370  200,
1371  -.5,
1372  199.5);
1373 
1374  stringstream buf;
1375  buf << "Number of LI EB channels below the " << ebZsThr_ / 4.
1376  << " ADC count ZS threshold;"
1377  "Channel count;Event count",
1378  meEbZsErrCnt_ = book1D(ibooker, "hEbZsErrCnt", buf.str(), 200, -.5, 199.5);
1379 
1380  buf.str("");
1381  buf << "Number of LI EE channels below the " << eeZsThr_ / 4.
1382  << " ADC count ZS theshold;"
1383  "Channel count;Event count",
1384  meEeZsErrCnt_ = book1D(ibooker, "hEeZsErrCnt", buf.str(), 200, -.5, 199.5);
1385 
1386  meZsErrCnt_ = book1D(ibooker,
1387  "hZsErrCnt",
1388  "Number of LI channels below the ZS threshold;"
1389  "Channel count;Event count",
1390  200,
1391  -.5,
1392  199.5);
1393 
1394  meEbZsErrType1Cnt_ = book1D(ibooker,
1395  "hEbZsErrType1Cnt",
1396  "Number of EB channels below the ZS "
1397  "threshold in a LI but fully readout RU;"
1398  "Channel count;Event count;",
1399  200,
1400  -.5,
1401  199.5);
1402 
1403  meEeZsErrType1Cnt_ = book1D(ibooker,
1404  "hEeZsErrType1Cnt",
1405  "Number EE channels below the ZS threshold"
1406  " in a LI but fully readout RU;"
1407  "Channel count;Event count",
1408  200,
1409  -.5,
1410  199.5);
1411 
1412  meZsErrType1Cnt_ = book1D(ibooker,
1413  "hZsErrType1Cnt",
1414  "Number of LI channels below the ZS threshold "
1415  "in a LI but fully readout RU;"
1416  "Channel count;Event count",
1417  200,
1418  -.5,
1419  199.5);
1420 
1422  "hDroppedFRORateMap",
1423  "Dropped full-readout-flagged readout units"
1424  "iX - 40 / iEta / iX + 20;"
1425  "iY / iPhi (iPhi = 1 at phi = 0 rad);"
1426  "Dropping rate",
1427  80,
1428  -39.5,
1429  40.5,
1430  72,
1431  .5,
1432  72.5);
1433 
1434  meCompleteZSMap_ = book2D(ibooker,
1435  "hCompleteZSMap",
1436  "Complete zero-suppressed-flagged readout units;"
1437  "iX - 40 / iEta / iX + 20;"
1438  "iY / iPhi (iPhi = 1 at phi = 0 rad);"
1439  "Event count",
1440  80,
1441  -39.5,
1442  40.5,
1443  72,
1444  .5,
1445  72.5);
1446 
1448  "hCompleteZSRate",
1449  "Complete zero-suppressed-flagged readout units;"
1450  "iX - 40 / iEta / iX + 20;"
1451  "iY / iPhi (iPhi = 1 at phi = 0 rad);"
1452  "Completeness rate",
1453  80,
1454  -39.5,
1455  40.5,
1456  72,
1457  .5,
1458  72.5);
1459 
1460  //print list of available histograms (must be called after
1461  //the bookXX methods):
1463 
1464  //check the histList parameter:
1465  stringstream s;
1466  for (set<string>::iterator it = histList_.begin(); it != histList_.end(); ++it) {
1467  if (*it != string("all") && availableHistList_.find(*it) == availableHistList_.end()) {
1468  s << (s.str().empty() ? "" : ", ") << *it;
1469  }
1470  }
1471  if (!s.str().empty()) {
1472  LogWarning("Configuration") << "Parameter 'histList' contains some unknown histogram(s). "
1473  "Check spelling. Following name were not found: "
1474  << s.str();
1475  }
1476 }
1477 
1479  int TTFlagCount[8];
1480  int LiTTFlagCount[nTtEta][nTtPhi];
1481  int MiTTFlagCount[nTtEta][nTtPhi];
1482  int HiTTFlagCount[nTtEta][nTtPhi];
1483  for (int iTTFlag(0); iTTFlag < 8; iTTFlag++) {
1484  TTFlagCount[iTTFlag] = 0;
1485  }
1486  for (int iTtEta(0); iTtEta < nTtEta; iTtEta++) {
1487  for (int iTtPhi(0); iTtPhi < nTtPhi; iTtPhi++) {
1488  LiTTFlagCount[iTtEta][iTtPhi] = 0;
1489  MiTTFlagCount[iTtEta][iTtPhi] = 0;
1490  HiTTFlagCount[iTtEta][iTtPhi] = 0;
1491  }
1492  }
1493  int tpEtCount[100];
1494  for (int iEt(0); iEt < 100; iEt++) {
1495  tpEtCount[iEt] = 0;
1496  }
1497 
1498  const EcalTPGPhysicsConstMap& physMap = es.getData(physHandle).getMap();
1499 
1500  const EcalTPGGroups::EcalTPGGroupsMap& lutGrpMap = es.getData(lutGrpHandle).getMap();
1501 
1502  const EcalTPGLutIdMap::EcalTPGLutMap& lutMap = es.getData(lutMapHandle).getMap();
1503 
1504  EcalTPGPhysicsConstMapIterator ebItr(physMap.find(DetId(DetId::Ecal, EcalBarrel).rawId()));
1505  double lsb10bitsEB(ebItr == physMap.end() ? 0. : ebItr->second.EtSat / 1024.);
1506  EcalTPGPhysicsConstMapIterator eeItr(physMap.find(DetId(DetId::Ecal, EcalEndcap).rawId()));
1507  double lsb10bitsEE(eeItr == physMap.end() ? 0. : eeItr->second.EtSat / 1024.);
1508 
1509  for (EcalTrigPrimDigiCollection::const_iterator it = tps_->begin(); it != tps_->end(); ++it) {
1510  double tpEt;
1511  if (tpInGeV_) {
1512  EcalTrigTowerDetId const& towerId(it->id());
1513  unsigned int ADC = it->compressedEt();
1514 
1515  double lsb10bits(0.);
1516  if (towerId.subDet() == EcalBarrel)
1517  lsb10bits = lsb10bitsEB;
1518  else if (towerId.subDet() == EcalEndcap)
1519  lsb10bits = lsb10bitsEE;
1520 
1521  int tpg10bits = 0;
1522  EcalTPGGroups::EcalTPGGroupsMapItr itgrp = lutGrpMap.find(towerId.rawId());
1523  uint32_t lutGrp = 999;
1524  if (itgrp != lutGrpMap.end())
1525  lutGrp = itgrp->second;
1526 
1527  EcalTPGLutIdMap::EcalTPGLutMapItr itLut = lutMap.find(lutGrp);
1528  if (itLut != lutMap.end()) {
1529  const unsigned int* lut = (itLut->second).getLut();
1530  for (unsigned int i = 0; i < 1024; i++)
1531  if (ADC == (0xff & lut[i])) {
1532  tpg10bits = i;
1533  break;
1534  }
1535  }
1536 
1537  tpEt = lsb10bits * tpg10bits;
1538  } else {
1539  tpEt = it->compressedEt();
1540  }
1541  int iEta = it->id().ieta();
1542  int iEta0 = iTtEta2cIndex(iEta);
1543  int iPhi = it->id().iphi();
1544  int iPhi0 = iTtPhi2cIndex(iPhi);
1545  double etSum = ttEtSums[iEta0][iPhi0];
1546 
1547  int iE = meTp_->getTProfile()->FindFixBin(tpEt);
1548  if ((iE >= 0) && (iE < 100)) {
1549  ++tpEtCount[iE];
1550  } else {
1551  // FindFixBin might return an overflow bin (outside tpEtCount range).
1552  // To prevent a memory overflow / segfault, these values are ignored.
1553  //std::cout << "EcalSelectiveReadoutValidation: Invalid iE value: " << iE << std::endl;
1554  }
1555 
1556  fill(meTpVsEtSum_, etSum, tpEt);
1557  ++TTFlagCount[it->ttFlag()];
1558  if ((it->ttFlag() & 0x3) == 0) {
1559  LiTTFlagCount[iEta0][iPhi0] += 1;
1560  } else if ((it->ttFlag() & 0x3) == 1) {
1561  MiTTFlagCount[iEta0][iPhi0] += 1;
1562  } else if ((it->ttFlag() & 0x3) == 3) {
1563  HiTTFlagCount[iEta0][iPhi0] += 1;
1564  }
1565  if ((it->ttFlag() & 0x4)) {
1566  fill(meForcedTtf_, iEta, iPhi);
1567  }
1568 
1569  fill(meTtfVsTp_, tpEt, it->ttFlag());
1570  fill(meTtfVsEtSum_, etSum, it->ttFlag());
1571  fill(meTpMap_, iEta, iPhi, tpEt, 1.);
1572  }
1573 
1574  for (int ittflag(0); ittflag < 8; ittflag++) {
1575  fill(meTtf_, ittflag, TTFlagCount[ittflag]);
1576  }
1577  for (int iTtEta(0); iTtEta < nTtEta; iTtEta++) {
1578  for (int iTtPhi(0); iTtPhi < nTtPhi; iTtPhi++) {
1579  fill(meLiTtf_, cIndex2iTtEta(iTtEta), cIndex2iTtPhi(iTtPhi), LiTTFlagCount[iTtEta][iTtPhi]);
1580  fill(meMiTtf_, cIndex2iTtEta(iTtEta), cIndex2iTtPhi(iTtPhi), MiTTFlagCount[iTtEta][iTtPhi]);
1581  fill(meHiTtf_, cIndex2iTtEta(iTtEta), cIndex2iTtPhi(iTtPhi), HiTTFlagCount[iTtEta][iTtPhi]);
1582  }
1583  }
1584  if (tpInGeV_) {
1585  for (int iE(0); iE < 100; iE++) {
1586  fill(meTp_, iE, tpEtCount[iE]);
1587  }
1588  } else {
1589  for (int iE(0); iE < 40; iE++) {
1590  fill(meTp_, iE, tpEtCount[iE]);
1591  }
1592  }
1593 }
1594 
1596  anaDigiInit();
1597 
1598  //Complete RU, i.e. RU actually fully readout
1599  for (int iDcc = minDccId_; iDcc <= maxDccId_; ++iDcc) {
1600  for (int iCh = 1; iCh < nDccRus_[iDcc - minDccId_]; ++iCh) {
1601  isRuComplete_[iDcc - minDccId_][iCh - 1] = (nPerRu_[iDcc - minDccId_][iCh - 1] == getCrystalCount(iDcc, iCh));
1602  }
1603  }
1604 
1605  //Barrel
1606  for (unsigned int digis = 0; digis < ebDigis_->size(); ++digis) {
1607  EBDataFrame ebdf = (*ebDigis_)[digis];
1608  anaDigi(ebdf, *ebSrFlags_);
1609  }
1610 
1611  // Endcap
1612  for (unsigned int digis = 0; digis < eeDigis_->size(); ++digis) {
1613  EEDataFrame eedf = (*eeDigis_)[digis];
1614  anaDigi(eedf, *eeSrFlags_);
1615  }
1616 
1617  //histos
1618  for (unsigned iDcc0 = 0; iDcc0 < nDccs_; ++iDcc0) {
1619  fill(meDccVol_, iDcc0 + 1, getDccEventSize(iDcc0, nPerDcc_[iDcc0]) / kByte_);
1620  fill(meDccLiVol_, iDcc0 + 1, getDccSrDependentPayload(iDcc0, nLiRuPerDcc_[iDcc0], nLiPerDcc_[iDcc0]) / kByte_);
1621  fill(meDccHiVol_, iDcc0 + 1, getDccSrDependentPayload(iDcc0, nHiRuPerDcc_[iDcc0], nHiPerDcc_[iDcc0]) / kByte_);
1622  const FEDRawDataCollection& raw = *fedRaw_;
1623  fill(meDccVolFromData_, iDcc0 + 1, ((double)raw.FEDData(601 + iDcc0).size()) / kByte_);
1624  }
1625 
1626  //low interesest channels:
1627  double a = nEbLI_ * getBytesPerCrystal() / kByte_; //getEbEventSize(nEbLI_)/kByte_;
1628  fill(meVolBLI_, a);
1629  double b = nEeLI_ * getBytesPerCrystal() / kByte_; //getEeEventSize(nEeLI_)/kByte_;
1630  fill(meVolELI_, b);
1631  fill(meVolLI_, a + b);
1632 
1633  //high interest chanels:
1634  a = nEbHI_ * getBytesPerCrystal() / kByte_; //getEbEventSize(nEbHI_)/kByte_;
1635  fill(meVolBHI_, a);
1636  b = nEeHI_ * getBytesPerCrystal() / kByte_; //getEeEventSize(nEeHI_)/kByte_;
1637  fill(meVolEHI_, b);
1638  fill(meVolHI_, a + b);
1639 
1640  //any-interest channels:
1641  a = getEbEventSize(nEb_) / kByte_;
1642  fill(meVolB_, a);
1643  b = getEeEventSize(nEe_) / kByte_;
1644  fill(meVolE_, b);
1645  fill(meVol_, a + b);
1646 }
1647 
1648 template <class T, class U>
1649 void EcalSelectiveReadoutValidation::anaDigi(const T& frame, const U& srFlagColl) {
1650  const DetId& xtalId = frame.id();
1651  typedef typename U::key_type RuDetId;
1652  const RuDetId& ruId = readOutUnitOf(frame.id());
1653  typename U::const_iterator srf = srFlagColl.find(ruId);
1654 
1655  bool highInterest = false;
1656  int flag = 0;
1657 
1658  if (srf != srFlagColl.end()) {
1659  flag = srf->value() & ~EcalSrFlag::SRF_FORCED_MASK;
1660 
1661  highInterest = (flag == EcalSrFlag::SRF_FULL);
1662  }
1663 
1664  bool barrel = (xtalId.subdetId() == EcalBarrel);
1665 
1666  pair<int, int> ch = dccCh(xtalId);
1667 
1668  if (barrel) {
1669  ++nEb_;
1670  if (highInterest) {
1671  ++nEbHI_;
1672  } else { //low interest
1673  ++nEbLI_;
1674  }
1675  int iEta0 = iEta2cIndex(static_cast<const EBDetId&>(xtalId).ieta());
1676  int iPhi0 = iPhi2cIndex(static_cast<const EBDetId&>(xtalId).iphi());
1677  if (!ebRuActive_[iEta0 / ebTtEdge][iPhi0 / ebTtEdge]) {
1678  ++nRuPerDcc_[ch.first - minDccId_];
1679  if (highInterest) {
1680  ++nHiRuPerDcc_[ch.first - minDccId_];
1681  } else {
1682  ++nLiRuPerDcc_[ch.first - minDccId_];
1683  }
1684 
1685  ebRuActive_[iEta0 / ebTtEdge][iPhi0 / ebTtEdge] = true;
1686  }
1687  } else { //endcap
1688  ++nEe_;
1689  if (highInterest) {
1690  ++nEeHI_;
1691  } else { //low interest
1692  ++nEeLI_;
1693  }
1694  int iX0 = iXY2cIndex(static_cast<const EEDetId&>(frame.id()).ix());
1695  int iY0 = iXY2cIndex(static_cast<const EEDetId&>(frame.id()).iy());
1696  int iZ0 = static_cast<const EEDetId&>(frame.id()).zside() > 0 ? 1 : 0;
1697 
1698  if (!eeRuActive_[iZ0][iX0 / scEdge][iY0 / scEdge]) {
1699  ++nRuPerDcc_[ch.first - minDccId_];
1700  if (highInterest) {
1701  ++nHiRuPerDcc_[ch.first - minDccId_];
1702  } else {
1703  ++nLiRuPerDcc_[ch.first - minDccId_];
1704  }
1705 
1706  eeRuActive_[iZ0][iX0 / scEdge][iY0 / scEdge] = true;
1707  }
1708  }
1709 
1710  if (ch.second < 1 || ch.second > 68) {
1711  throw cms::Exception("EcalSelectiveReadoutValidation")
1712  << "Error in DCC channel retrieval for crystal with detId " << xtalId.rawId()
1713  << "DCC channel out of allowed range [1..68]\n";
1714  }
1715  ++nPerDcc_[ch.first - minDccId_];
1716  ++nPerRu_[ch.first - minDccId_][ch.second - 1];
1717  if (highInterest) {
1718  ++nHiPerDcc_[ch.first - minDccId_];
1719  } else { //low interest channel
1720  ++nLiPerDcc_[ch.first - minDccId_];
1721  }
1722 }
1723 
1725  nEb_ = 0;
1726  nEe_ = 0;
1727  nEeLI_ = 0;
1728  nEeHI_ = 0;
1729  nEbLI_ = 0;
1730  nEbHI_ = 0;
1731  bzero(nPerDcc_, sizeof(nPerDcc_));
1732  bzero(nLiPerDcc_, sizeof(nLiPerDcc_));
1733  bzero(nHiPerDcc_, sizeof(nHiPerDcc_));
1734  bzero(nRuPerDcc_, sizeof(nRuPerDcc_));
1735  bzero(ebRuActive_, sizeof(ebRuActive_));
1736  bzero(eeRuActive_, sizeof(eeRuActive_));
1737  bzero(nPerRu_, sizeof(nPerRu_));
1738  bzero(nLiRuPerDcc_, sizeof(nLiRuPerDcc_));
1739  bzero(nHiRuPerDcc_, sizeof(nHiRuPerDcc_));
1740 }
1741 
1743  static std::atomic<bool> firstCall{true};
1744  bool expected = true;
1745  if (firstCall.compare_exchange_strong(expected, false)) {
1746  stringstream buf;
1747  buf << "Weights:";
1748  for (unsigned i = 0; i < weights_.size(); ++i) {
1749  buf << "\t" << weights_[i];
1750  }
1751  edm::LogInfo("EcalSrValid") << buf.str() << "\n";
1752  firstCall = false;
1753  }
1754  double adc2GeV = 0.;
1755 
1756  if (typeid(EBDataFrame) == typeid(frame)) { //barrel APD
1757  adc2GeV = .035;
1758  } else if (typeid(EEDataFrame) == typeid(frame)) { //endcap VPT
1759  adc2GeV = 0.06;
1760  } else {
1761  assert(false);
1762  }
1763 
1764  double acc = 0;
1765 
1766  const int n = min(frame.size(), (int)weights_.size());
1767 
1768  double gainInv[] = {12., 1., 6., 12.};
1769 
1770  for (int i = 0; i < n; ++i) {
1771  acc += weights_[i] * frame[i].adc() * gainInv[frame[i].gainId()] * adc2GeV;
1772  }
1773  return acc;
1774 }
1775 
1776 int EcalSelectiveReadoutValidation::getRuCount(int iDcc0) const { return nRuPerDcc_[iDcc0]; }
1777 
1778 pair<int, int> EcalSelectiveReadoutValidation::dccCh(const DetId& detId) const {
1779  if (detId.det() != DetId::Ecal) {
1780  throw cms::Exception("InvalidParameter") << "Wrong type of DetId passed to the "
1781  "EcalSelectiveReadoutValidation::dccCh(const DetId&). "
1782  "An ECAL DetId was expected.\n";
1783  }
1784 
1785  DetId xtalId;
1786  switch (detId.subdetId()) {
1787  case EcalTriggerTower: //Trigger tower
1788  {
1789  const EcalTrigTowerDetId tt = detId;
1790  //pick up one crystal of the trigger tower: they are however all readout by
1791  //the same DCC channel in the barrel.
1792  //Arithmetic is easier on the "c" indices:
1793  const int iTtPhi0 = iTtPhi2cIndex(tt.iphi());
1794  const int iTtEta0 = iTtEta2cIndex(tt.ieta());
1795  const int oneXtalPhi0 = iTtPhi0 * 5;
1796  const int oneXtalEta0 = (iTtEta0 - nOneEeTtEta) * 5;
1797 
1798  xtalId = EBDetId(cIndex2iEta(oneXtalEta0), cIndex2iPhi(oneXtalPhi0));
1799  } break;
1800  case EcalEndcap:
1801  if (detId.rawId() & 0x8000) { //Supercrystal
1802  return elecMap_->getDCCandSC(EcalScDetId(detId));
1803  } else { //EE crystal
1804  xtalId = detId;
1805  }
1806  break;
1807  case EcalBarrel: //EB crystal
1808  xtalId = detId;
1809  break;
1810  default:
1811  throw cms::Exception("InvalidParameter")
1812  << "Wrong type of DetId passed to the method "
1813  "EcalSelectiveReadoutValidation::dccCh(const DetId&). "
1814  "A valid EcalTriggerTower, EcalBarrel or EcalEndcap DetId was expected. "
1815  "detid = "
1816  << xtalId.rawId() << ".\n";
1817  }
1818 
1819  const EcalElectronicsId& EcalElecId = elecMap_->getElectronicsId(xtalId);
1820 
1821  pair<int, int> result;
1822  result.first = EcalElecId.dccId();
1823 
1824  if (result.first < minDccId_ || result.second > maxDccId_) {
1825  throw cms::Exception("OutOfRange") << "Got an invalid DCC ID, DCCID = " << result.first << " for DetId 0x" << hex
1826  << detId.rawId() << " and 0x" << xtalId.rawId() << dec << "\n";
1827  }
1828 
1829  result.second = EcalElecId.towerId();
1830 
1831  if (result.second < 1 || result.second > 68) {
1832  throw cms::Exception("OutOfRange") << "Got an invalid DCC channel ID, DCC_CH = " << result.second << " for DetId 0x"
1833  << hex << detId.rawId() << " and 0x" << xtalId.rawId() << dec << "\n";
1834  }
1835 
1836  return result;
1837 }
1838 
1840  return triggerTowerMap_->towerOf(xtalId);
1841 }
1842 
1844  const EcalElectronicsId& EcalElecId = elecMap_->getElectronicsId(xtalId);
1845  int iDCC = EcalElecId.dccId();
1846  int iDccChan = EcalElecId.towerId();
1847  const bool ignoreSingle = true;
1848  const vector<EcalScDetId> id = elecMap_->getEcalScDetId(iDCC, iDccChan, ignoreSingle);
1849  return !id.empty() ? id[0] : EcalScDetId();
1850 }
1851 
1853  const EBDigiCollection& ebDigis,
1854  const EEDigiCollection& eeDigis) {
1855  //ecal geometry:
1856  const CaloSubdetectorGeometry* eeGeometry = nullptr;
1857  const CaloSubdetectorGeometry* ebGeometry = nullptr;
1858  if (eeGeometry == nullptr || ebGeometry == nullptr) {
1859  es.getData(geoToken);
1860  auto geoHandle = es.getHandle(geoToken);
1861  eeGeometry = (*geoHandle).getSubdetectorGeometry(DetId::Ecal, EcalEndcap);
1862  ebGeometry = (*geoHandle).getSubdetectorGeometry(DetId::Ecal, EcalBarrel);
1863  }
1864 
1865  //init etSum array:
1866  for (int iEta0 = 0; iEta0 < nTtEta; ++iEta0) {
1867  for (int iPhi0 = 0; iPhi0 < nTtPhi; ++iPhi0) {
1868  ttEtSums[iEta0][iPhi0] = 0.;
1869  }
1870  }
1871 
1872  for (EBDigiCollection::const_iterator it = ebDigis_->begin(); it != ebDigis_->end(); ++it) {
1873  const EBDataFrame& frame = *it;
1875 
1876  const int iTtEta0 = iTtEta2cIndex(ttId.ieta());
1877  const int iTtPhi0 = iTtPhi2cIndex(ttId.iphi());
1878  double theta = ebGeometry->getGeometry(frame.id())->getPosition().theta();
1879  double e = frame2EnergyForTp(frame);
1880  if ((frame2EnergyForTp(frame, -1) < e) && (frame2EnergyForTp(frame, 1) < e)) {
1881  ttEtSums[iTtEta0][iTtPhi0] += e * sin(theta);
1882  }
1883  }
1884 
1885  for (EEDigiCollection::const_iterator it = eeDigis.begin(); it != eeDigis.end(); ++it) {
1886  const EEDataFrame& frame = *it;
1888  const int iTtEta0 = iTtEta2cIndex(ttId.ieta());
1889  const int iTtPhi0 = iTtPhi2cIndex(ttId.iphi());
1890 
1891  double theta = eeGeometry->getGeometry(frame.id())->getPosition().theta();
1892  double e = frame2EnergyForTp(frame);
1893  if ((frame2EnergyForTp(frame, -1) < e) && (frame2EnergyForTp(frame, 1) < e)) {
1894  ttEtSums[iTtEta0][iTtPhi0] += e * sin(theta);
1895  }
1896  }
1897 
1898  //dealing with pseudo-TT in two inner EE eta-ring:
1899  int innerTTEtas[] = {0, 1, 54, 55};
1900  for (unsigned iRing = 0; iRing < sizeof(innerTTEtas) / sizeof(innerTTEtas[0]); ++iRing) {
1901  int iTtEta0 = innerTTEtas[iRing];
1902  //this detector eta-section is divided in only 36 phi bins
1903  //For this eta regions,
1904  //current tower eta numbering scheme is inconsistent. For geometry
1905  //version 133:
1906  //- TT are numbered from 0 to 72 for 36 bins
1907  //- some TT have an even index, some an odd index
1908  //For geometry version 125, there are 72 phi bins.
1909  //The code below should handle both geometry definition.
1910  //If there are 72 input trigger primitives for each inner eta-ring,
1911  //then the average of the trigger primitive of the two pseudo-TT of
1912  //a pair (nEta, nEta+1) is taken as Et of both pseudo TTs.
1913  //If there are only 36 input TTs for each inner eta ring, then half
1914  //of the present primitive of a pseudo TT pair is used as Et of both
1915  //pseudo TTs.
1916 
1917  for (unsigned iTtPhi0 = 0; iTtPhi0 < nTtPhi - 1; iTtPhi0 += 2) {
1918  double et = .5 * (ttEtSums[iTtEta0][iTtPhi0] + ttEtSums[iTtEta0][iTtPhi0 + 1]);
1919  //divides the TT into 2 phi bins in order to match with 72 phi-bins SRP
1920  //scheme or average the Et on the two pseudo TTs if the TT is already
1921  //divided into two trigger primitives.
1922  ttEtSums[iTtEta0][iTtPhi0] = et;
1923  ttEtSums[iTtEta0][iTtPhi0 + 1] = et;
1924  }
1925  }
1926 }
1927 
1928 template <class T>
1930  //we have to start by 0 in order to handle offset=-1
1931  //(however Fenix FIR has AFAK only 5 taps)
1932  double weights[] = {0., -1 / 3., -1 / 3., -1 / 3., 0., 1.};
1933 
1934  double adc2GeV = 0.;
1935  if (typeid(frame) == typeid(EBDataFrame)) {
1936  adc2GeV = 0.035;
1937  } else if (typeid(frame) == typeid(EEDataFrame)) {
1938  adc2GeV = 0.060;
1939  } else { //T is an invalid type!
1940  //TODO: replace message by a cms exception
1941  throw cms::Exception("Severe Error") << __FILE__ << ":" << __LINE__ << ": "
1942  << "this is a bug. Please report it.\n";
1943  }
1944 
1945  double acc = 0;
1946 
1947  const int n = min<int>(frame.size(), sizeof(weights) / sizeof(weights[0]));
1948 
1949  double gainInv[] = {12., 1., 6., 12};
1950 
1951  for (int i = offset; i < n; ++i) {
1952  int iframe = i + offset;
1953  if (iframe >= 0 && iframe < frame.size()) {
1954  acc += weights[i] * frame[iframe].adc() * gainInv[frame[iframe].gainId()] * adc2GeV;
1955  }
1956  }
1957  //cout << "\n";
1958  return acc;
1959 }
1960 
1962  const std::string& name) {
1963  if (!registerHist(name, ""))
1964  return nullptr; //this histo is disabled
1965  MonitorElement* result = ibook.bookFloat(name);
1966  if (result == nullptr) {
1967  throw cms::Exception("DQM") << "Failed to book integer DQM monitor element" << name;
1968  }
1969  return result;
1970 }
1971 
1973  DQMStore::IBooker& ibook, const std::string& name, const std::string& title, int nbins, double xmin, double xmax) {
1974  if (!registerHist(name, title))
1975  return nullptr; //this histo is disabled
1977  if (result == nullptr) {
1978  throw cms::Exception("Histo") << "Failed to book histogram " << name;
1979  }
1980  return result;
1981 }
1982 
1984  const std::string& name,
1985  const std::string& title,
1986  int nxbins,
1987  double xmin,
1988  double xmax,
1989  int nybins,
1990  double ymin,
1991  double ymax) {
1992  if (!registerHist(name, title))
1993  return nullptr; //this histo is disabled
1994  MonitorElement* result = ibook.book2D(name, title, nxbins, xmin, xmax, nybins, ymin, ymax);
1995  if (result == nullptr) {
1996  throw cms::Exception("Histo") << "Failed to book histogram " << name;
1997  }
1998  return result;
1999 }
2000 
2002  DQMStore::IBooker& ibook, const std::string& name, const std::string& title, int nbins, double xmin, double xmax) {
2003  if (!registerHist(name, title))
2004  return nullptr; //this histo is disabled
2005  MonitorElement* result = ibook.bookProfile(name, title, nbins, xmin, xmax, 0, 0, 0);
2006  if (result == nullptr) {
2007  throw cms::Exception("Histo") << "Failed to book histogram " << name;
2008  }
2009  return result;
2010 }
2011 
2013  const std::string& name,
2014  const std::string& title,
2015  int nbinx,
2016  double xmin,
2017  double xmax,
2018  int nbiny,
2019  double ymin,
2020  double ymax,
2021  const char* option) {
2022  if (!registerHist(name, title))
2023  return nullptr; //this histo is disabled
2024  MonitorElement* result = ibook.bookProfile2D(name, title, nbinx, xmin, xmax, nbiny, ymin, ymax, 0, 0, 0, option);
2025  if (result == nullptr) {
2026  throw cms::Exception("Histo") << "Failed to book histogram " << name;
2027  }
2028  return result;
2029 }
2030 
2032  availableHistList_.insert(pair<string, string>(name, title));
2033  return allHists_ || histList_.find(name) != histList_.end();
2034 }
2035 
2037  ebRecHits_.read(event);
2038  eeRecHits_.read(event);
2039  ebDigis_.read(event);
2040  eeDigis_.read(event);
2043  ebSrFlags_.read(event);
2044  eeSrFlags_.read(event);
2045  ebComputedSrFlags_.read(event);
2046  eeComputedSrFlags_.read(event);
2049  tps_.read(event);
2050  fedRaw_.read(event);
2051 }
2052 
2054  LogInfo log("HistoList");
2055  log << "Avalailable histograms (DQM monitor elements): \n";
2056  for (map<string, string>::iterator it = availableHistList_.begin(); it != availableHistList_.end(); ++it) {
2057  log << it->first << ": " << it->second << "\n";
2058  }
2059  log << "\nTo include an histogram add its name in the vstring parameter "
2060  "'histograms' of the EcalSelectiveReadoutValidation module\n";
2061 }
2062 
2063 double EcalSelectiveReadoutValidation::getEbEventSize(double nReadXtals) const {
2064  double ruHeaderPayload = 0.;
2065  const int firstEbDcc0 = nEeDccs / 2;
2066  for (int iDcc0 = firstEbDcc0; iDcc0 < firstEbDcc0 + nEbDccs; ++iDcc0) {
2067  ruHeaderPayload += getRuCount(iDcc0) * 8.;
2068  }
2069 
2070  return getDccOverhead(EB) * nEbDccs + nReadXtals * getBytesPerCrystal() + ruHeaderPayload;
2071 }
2072 
2073 double EcalSelectiveReadoutValidation::getEeEventSize(double nReadXtals) const {
2074  double ruHeaderPayload = 0.;
2075  const unsigned firstEbDcc0 = nEeDccs / 2;
2076  for (unsigned iDcc0 = 0; iDcc0 < nDccs_; ++iDcc0) {
2077  //skip barrel:
2078  if (iDcc0 == firstEbDcc0)
2079  iDcc0 += nEbDccs;
2080  ruHeaderPayload += getRuCount(iDcc0) * 8.;
2081  }
2082  return getDccOverhead(EE) * nEeDccs + nReadXtals * getBytesPerCrystal() + ruHeaderPayload;
2083 }
2084 
2085 //This implementation assumes that int is coded on at least 28-bits,
2086 //which in pratice should be always true.
2088  const std::vector<int>& firWeights,
2089  int firstFIRSample,
2090  bool* saturated) {
2091  const int nFIRTaps = 6;
2092  //FIR filter weights:
2093  const vector<int>& w = firWeights;
2094 
2095  //accumulator used to compute weighted sum of samples
2096  int acc = 0;
2097  bool gain12saturated = false;
2098  const int gain12 = 0x01;
2099  const int lastFIRSample = firstFIRSample + nFIRTaps - 1;
2100  //LogDebug("DccFir") << "DCC FIR operation: ";
2101  int iWeight = 0;
2102  for (int iSample = firstFIRSample - 1; iSample < lastFIRSample; ++iSample, ++iWeight) {
2103  if (iSample >= 0 && iSample < frame.size()) {
2104  EcalMGPASample sample(frame[iSample]);
2105  if (sample.gainId() != gain12)
2106  gain12saturated = true;
2107  LogTrace("DccFir") << (iSample >= firstFIRSample ? "+" : "") << sample.adc() << "*(" << w[iWeight] << ")";
2108  acc += sample.adc() * w[iWeight];
2109  } else {
2110  edm::LogWarning("DccFir") << __FILE__ << ":" << __LINE__
2111  << ": Not enough samples in data frame or 'ecalDccZs1stSample' module "
2112  "parameter is not valid...";
2113  }
2114  }
2115  LogTrace("DccFir") << "\n";
2116  //discards the 8 LSBs
2117  //(shift operator cannot be used on negative numbers because
2118  // the result depends on compilator implementation)
2119  acc = (acc >= 0) ? (acc >> 8) : -(-acc >> 8);
2120  //ZS passed if weighted sum acc above ZS threshold or if
2121  //one sample has a lower gain than gain 12 (that is gain 12 output
2122  //is saturated)
2123 
2124  LogTrace("DccFir") << "acc: " << acc << "\n"
2125  << "saturated: " << (gain12saturated ? "yes" : "no") << "\n";
2126 
2127  if (saturated) {
2128  *saturated = gain12saturated;
2129  }
2130 
2131  return gain12saturated ? numeric_limits<int>::max() : acc;
2132 }
2133 
2134 std::vector<int> EcalSelectiveReadoutValidation::getFIRWeights(const std::vector<double>& normalizedWeights) {
2135  const int nFIRTaps = 6;
2136  vector<int> firWeights(nFIRTaps, 0); //default weight: 0;
2137  const static int maxWeight = 0xEFF; //weights coded on 11+1 signed bits
2138  for (unsigned i = 0; i < min((size_t)nFIRTaps, normalizedWeights.size()); ++i) {
2139  firWeights[i] = lround(normalizedWeights[i] * (1 << 10));
2140  if (abs(firWeights[i]) > maxWeight) { //overflow
2141  firWeights[i] = firWeights[i] < 0 ? -maxWeight : maxWeight;
2142  }
2143  }
2144  return firWeights;
2145 }
2146 
2147 void EcalSelectiveReadoutValidation::configFirWeights(const vector<double>& weightsForZsFIR) {
2148  bool notNormalized = false;
2149  bool notInt = false;
2150  for (unsigned i = 0; i < weightsForZsFIR.size(); ++i) {
2151  if (weightsForZsFIR[i] > 1.)
2152  notNormalized = true;
2153  if ((int)weightsForZsFIR[i] != weightsForZsFIR[i])
2154  notInt = true;
2155  }
2156  if (notInt && notNormalized) {
2157  throw cms::Exception("InvalidParameter") << "weigtsForZsFIR paramater values are not valid: they "
2158  << "must either be integer and uses the hardware representation "
2159  << "of the weights or less or equal than 1 and used the normalized "
2160  << "representation.";
2161  }
2162  LogInfo log("DccFir");
2163  if (notNormalized) {
2164  firWeights_ = vector<int>(weightsForZsFIR.size());
2165  for (unsigned i = 0; i < weightsForZsFIR.size(); ++i) {
2166  firWeights_[i] = (int)weightsForZsFIR[i];
2167  }
2168  } else {
2169  firWeights_ = getFIRWeights(weightsForZsFIR);
2170  }
2171 
2172  log << "Input weights for FIR: ";
2173  for (unsigned i = 0; i < weightsForZsFIR.size(); ++i) {
2174  log << weightsForZsFIR[i] << "\t";
2175  }
2176 
2177  double s2 = 0.;
2178  log << "\nActual FIR weights: ";
2179  for (unsigned i = 0; i < firWeights_.size(); ++i) {
2180  log << firWeights_[i] << "\t";
2181  s2 += firWeights_[i] * firWeights_[i];
2182  }
2183 
2184  s2 = sqrt(s2);
2185  log << "\nNormalized FIR weights after hw representation rounding: ";
2186  for (unsigned i = 0; i < firWeights_.size(); ++i) {
2187  log << firWeights_[i] / (double)(1 << 10) << "\t";
2188  }
2189 
2190  log << "\nFirst FIR sample: " << firstFIRSample_;
2191 }
2192 
2194  if (logSrpAlgoErrors_) {
2196  if (!srpAlgoErrorLog_.good()) {
2197  throw cms::Exception("Output") << "Failed to open the log file '" << srpAlgoErrorLogFileName_
2198  << "' for SRP algorithm result check.\n";
2199  }
2200  }
2201 
2204  if (!srApplicationErrorLog_.good()) {
2205  throw cms::Exception("Output") << "Failed to open the log file '" << srApplicationErrorLogFileName_
2206  << "' for Selective Readout decision application check.\n";
2207  }
2208  }
2209 }
2210 
2211 //Compares two SR flag sorted collections . Both collections
2212 //are sorted by their key (the detid) and following algorithm is based on
2213 //this feature.
2214 template <class T> //T must be either an EBSrFlagCollection or an EESrFlagCollection
2215 void EcalSelectiveReadoutValidation::compareSrfColl(const edm::Event& event, T& srfFromData, T& computedSrf) {
2216  typedef typename T::const_iterator SrFlagCollectionConstIt;
2217  typedef typename T::key_type MyRuDetIdType;
2218  SrFlagCollectionConstIt itSrfFromData = srfFromData.begin();
2219  SrFlagCollectionConstIt itComputedSr = computedSrf.begin();
2220 
2221  while (itSrfFromData != srfFromData.end() || itComputedSr != computedSrf.end()) {
2222  MyRuDetIdType inconsistentRu = 0;
2223  bool inconsistent = false;
2224  if (itComputedSr == computedSrf.end() ||
2225  (itSrfFromData != srfFromData.end() && itSrfFromData->id() < itComputedSr->id())) {
2226  //computedSrf is missig a detid found in srfFromData
2227  pair<int, int> ch = dccCh(itSrfFromData->id());
2228  srpAlgoErrorLog_ << event.id() << ": " << itSrfFromData->id() << ", DCC " << ch.first << " ch " << ch.second
2229  << " found in data (SRF:" << itSrfFromData->flagName()
2230  << ") but not in the set of SRFs computed from the data TTF.\n";
2231  inconsistentRu = itSrfFromData->id();
2232  inconsistent = true;
2233  ++itSrfFromData;
2234  } else if (itSrfFromData == srfFromData.end() ||
2235  (itComputedSr != computedSrf.end() && itComputedSr->id() < itSrfFromData->id())) {
2236  //ebSrFlags is missing a detid found in computedSrf
2237  pair<int, int> ch = dccCh(itComputedSr->id());
2238  if (logErrForDccs_[ch.first - minDccId_]) {
2239  srpAlgoErrorLog_ << event.id() << ": " << itComputedSr->id() << ", DCC " << ch.first << " ch " << ch.second
2240  << " not found in data. Computed SRF: " << itComputedSr->flagName() << ".\n";
2241  inconsistentRu = itComputedSr->id();
2242  inconsistent = true;
2243  }
2244  ++itComputedSr;
2245  } else {
2246  //*itSrfFromData and *itComputedSr has same detid
2247  if (itComputedSr->value() != itSrfFromData->value()) {
2248  pair<int, int> ch = dccCh(itSrfFromData->id());
2249  srpAlgoErrorLog_ << event.id() << ", " << itSrfFromData->id() << ", DCC " << ch.first << " ch " << ch.second
2250  << ", SRF inconsistency: "
2251  << "from data: " << itSrfFromData->flagName()
2252  << ", computed from TTF: " << itComputedSr->flagName() << "\n";
2253  inconsistentRu = itComputedSr->id();
2254  inconsistent = true;
2255  }
2256  if (itComputedSr != computedSrf.end())
2257  ++itComputedSr;
2258  if (itSrfFromData != srfFromData.end())
2259  ++itSrfFromData;
2260  }
2261 
2262  if (inconsistent)
2263  fill(meSRFlagsConsistency_, ruGraphX(inconsistentRu), ruGraphY(inconsistentRu));
2264  }
2265 }
2266 
2267 int EcalSelectiveReadoutValidation::dccId(const EcalScDetId& detId) const { return elecMap_->getDCCandSC(detId).first; }
2268 
2270  if (detId.ietaAbs() > 17) {
2271  throw cms::Exception("InvalidArgument")
2272  << "Argument of EcalSelectiveReadoutValidation::dccId(const EcalTrigTowerDetId&) "
2273  << "must be a barrel trigger tower Id\n";
2274  }
2275  return dccCh(detId).first;
2276 }
2277 
2279  logErrForDccs_ = vector<bool>(nDccs_, false);
2280 
2281  for (EBSrFlagCollection::const_iterator it = ebSrFlags_->begin(); it != ebSrFlags_->end(); ++it) {
2282  int iDcc = dccId(it->id()) - minDccId_;
2283 
2284  logErrForDccs_.at(iDcc) = true;
2285  }
2286 
2287  for (EESrFlagCollection::const_iterator it = eeSrFlags_->begin(); it != eeSrFlags_->end(); ++it) {
2288  int iDcc = dccId(it->id()) - minDccId_;
2289 
2290  logErrForDccs_.at(iDcc) = true;
2291  }
2292 
2293  stringstream buf;
2294  buf << "List of DCCs found in the first processed event: ";
2295  bool first = true;
2296  for (unsigned iDcc = 0; iDcc < nDccs_; ++iDcc) {
2297  if (logErrForDccs_[iDcc]) {
2298  buf << (first ? "" : ", ") << (iDcc + minDccId_);
2299  first = false;
2300  }
2301  }
2302  buf << "\nOnly DCCs from this list will be considered for error logging\n";
2303  srpAlgoErrorLog_ << buf.str();
2304  srApplicationErrorLog_ << buf.str();
2305  LogInfo("EcalSrValid") << buf.str();
2306 }
2307 
2308 template <class T>
2310  typedef typename T::const_iterator SrFlagCollectionConstIt;
2311  typedef typename T::key_type MyRuDetIdType;
2312 
2313  for (SrFlagCollectionConstIt itSrf = srfs.begin(); itSrf != srfs.end(); ++itSrf) {
2314  int flag = itSrf->value() & ~EcalSrFlag::SRF_FORCED_MASK;
2315  pair<int, int> ru = dccCh(itSrf->id());
2316 
2317  if (flag == EcalSrFlag::SRF_FULL) {
2318  if (nPerRu_[ru.first - minDccId_][ru.second - 1] == getCrystalCount(ru.first, ru.second)) { //no error
2319  fill(meIncompleteFRORateMap_, ruGraphX(itSrf->id()), ruGraphY(itSrf->id()), 0);
2320  fill(meDroppedFRORateMap_, ruGraphX(itSrf->id()), ruGraphY(itSrf->id()), 0);
2321  } else if (nPerRu_[ru.first - minDccId_][ru.second - 1] == 0) { //tower dropped!
2322  fill(meIncompleteFRORateMap_, ruGraphX(itSrf->id()), ruGraphY(itSrf->id()), 0);
2323  fill(meDroppedFRORateMap_, ruGraphX(itSrf->id()), ruGraphY(itSrf->id()), 1);
2324  fill(meDroppedFROMap_, ruGraphX(itSrf->id()), ruGraphY(itSrf->id()), 1);
2325  ++nDroppedFRO_;
2326  srApplicationErrorLog_ << event.id() << ": Flag of RU " << itSrf->id() << " (DCC " << ru.first << " ch "
2327  << ru.second << ") is 'Full readout' "
2328  << "while none of its channel was read out\n";
2329  } else { //tower partially read out
2330  fill(meIncompleteFRORateMap_, ruGraphX(itSrf->id()), ruGraphY(itSrf->id()), 1);
2331  fill(meDroppedFRORateMap_, ruGraphX(itSrf->id()), ruGraphY(itSrf->id()), 0);
2332  fill(meIncompleteFROMap_, ruGraphX(itSrf->id()), ruGraphY(itSrf->id()), 1);
2333  ++nIncompleteFRO_;
2334  srApplicationErrorLog_ << event.id() << ": Flag of RU" << itSrf->id() << " (DCC " << ru.first << " ch "
2335  << ru.second << ") is 'Full readout' "
2336  << "while only " << nPerRu_[ru.first - minDccId_][ru.second - 1] << " / "
2337  << getCrystalCount(ru.first, ru.second) << " channels were read out.\n";
2338  }
2339  }
2340 
2342  if (nPerRu_[ru.first - minDccId_][ru.second - 1] == getCrystalCount(ru.first, ru.second)) {
2343  //ZS readout unit whose every channel was read
2344 
2345  fill(meCompleteZSMap_, ruGraphX(itSrf->id()), ruGraphY(itSrf->id()));
2346  fill(meCompleteZSRateMap_, ruGraphX(itSrf->id()), ruGraphY(itSrf->id()), 1);
2347 
2348  ++nCompleteZS_;
2349  } else {
2350  fill(meCompleteZSRateMap_, ruGraphX(itSrf->id()), ruGraphY(itSrf->id()), 0);
2351  }
2352  }
2353  }
2354 }
2355 
2357  if (iDcc < minDccId_ || iDcc > maxDccId_) { //invalid DCC
2358  return 0;
2359  } else if (10 <= iDcc && iDcc <= 45) { //EB
2360  return 25;
2361  } else { //EE
2362  int iDccPhi;
2363  if (iDcc < 10)
2364  iDccPhi = iDcc;
2365  else
2366  iDccPhi = iDcc - 45;
2367  switch (iDccPhi * 100 + iDccCh) {
2368  case 110:
2369  case 232:
2370  case 312:
2371  case 412:
2372  case 532:
2373  case 610:
2374  case 830:
2375  case 806:
2376  //inner partials at 12, 3, and 9 o'clock
2377  return 20;
2378  case 134:
2379  case 634:
2380  case 827:
2381  case 803:
2382  return 10;
2383  case 330:
2384  case 430:
2385  return 20;
2386  case 203:
2387  case 503:
2388  case 721:
2389  case 921:
2390  return 21;
2391  default:
2392  return 25;
2393  }
2394  }
2395 }
EcalSelectiveReadoutValidation::lutMapHandle
edm::ESGetToken< EcalTPGLutIdMap, EcalTPGLutIdMapRcd > lutMapHandle
Definition: EcalSelectiveReadoutValidation.h:413
EcalSelectiveReadoutValidation::meEbRecE_
MonitorElement * meEbRecE_
Definition: EcalSelectiveReadoutValidation.h:563
EcalSelectiveReadoutValidation::meEeRecEHitXtal_
MonitorElement * meEeRecEHitXtal_
Definition: EcalSelectiveReadoutValidation.h:575
EcalSelectiveReadoutValidation::meVolE_
MonitorElement * meVolE_
Definition: EcalSelectiveReadoutValidation.h:548
EcalSelectiveReadoutValidation::rad2deg
static const double rad2deg
Conversion factor from radian to degree.
Definition: EcalSelectiveReadoutValidation.h:482
EcalSelectiveReadoutValidation::meDccVolFromData_
MonitorElement * meDccVolFromData_
Definition: EcalSelectiveReadoutValidation.h:545
EcalSelectiveReadoutValidation::getDccSrDependentPayload
double getDccSrDependentPayload(int iDcc0, double nReadRus, double nReadXtals) const
Definition: EcalSelectiveReadoutValidation.h:180
EcalSelectiveReadoutValidation::nEeZsErrors_
int nEeZsErrors_
Counter of EE ZS errors (LI channel below ZS threshold)
Definition: EcalSelectiveReadoutValidation.h:659
dqm::impl::MonitorElement
Definition: MonitorElement.h:99
EcalSelectiveReadoutValidation::fill
void fill(MonitorElement *me, float x)
Definition: EcalSelectiveReadoutValidation.h:350
DDAxes::y
EcalSelectiveReadoutValidation::energiesEe_t::simE
double simE
Definition: EcalSelectiveReadoutValidation.h:398
ecalLiteDTU::gainId
constexpr int gainId(sample_type sample)
get the gainId (2 bits)
Definition: EcalLiteDTUSample.h:14
EcalSelectiveReadoutValidation::meL1aRate_
MonitorElement * meL1aRate_
Definition: EcalSelectiveReadoutValidation.h:638
EESrFlag
Definition: EESrFlag.h:13
EcalSelectiveReadoutValidation::meTpVsEtSum_
MonitorElement * meTpVsEtSum_
Definition: EcalSelectiveReadoutValidation.h:561
EcalRecHit
Definition: EcalRecHit.h:15
Handle.h
EcalSelectiveReadoutValidation::nEe_
int nEe_
Definition: EcalSelectiveReadoutValidation.h:724
EcalSelectiveReadoutValidation::meEbRecEHitXtal_
MonitorElement * meEbRecEHitXtal_
Definition: EcalSelectiveReadoutValidation.h:567
EcalSelectiveReadoutValidation::analyzeEE
void analyzeEE(const edm::Event &event, const edm::EventSetup &es)
Definition: EcalSelectiveReadoutValidation.cc:289
runGCPTkAlMap.title
string title
Definition: runGCPTkAlMap.py:94
EcalSelectiveReadoutValidation::meEeNoise_
MonitorElement * meEeNoise_
Definition: EcalSelectiveReadoutValidation.h:573
electrons_cff.bool
bool
Definition: electrons_cff.py:366
EcalSelectiveReadoutValidation::meTp_
MonitorElement * meTp_
Definition: EcalSelectiveReadoutValidation.h:557
EcalSelectiveReadoutValidation::cIndex2iTtEta
int cIndex2iTtEta(int i) const
Definition: EcalSelectiveReadoutValidation.h:275
mps_fire.i
i
Definition: mps_fire.py:428
EcalTrigTowerDetId::iphi
int iphi() const
get the tower iphi
Definition: EcalTrigTowerDetId.h:52
edm::SortedCollection< EcalRecHit >::const_iterator
std::vector< EcalRecHit >::const_iterator const_iterator
Definition: SortedCollection.h:80
Reference_intrackfit_cff.barrel
list barrel
Definition: Reference_intrackfit_cff.py:37
EcalSelectiveReadoutValidation::nDroppedFRO_
int nDroppedFRO_
Counter of FRO-flagged RU dropped from data.
Definition: EcalSelectiveReadoutValidation.h:641
EBSrFlag::id
const EcalTrigTowerDetId & id() const override
Definition: EBSrFlag.h:36
MessageLogger.h
EcalSelectiveReadoutValidation::getEeEventSize
double getEeEventSize(double nReadXtals) const
Definition: EcalSelectiveReadoutValidation.cc:2073
EcalSelectiveReadoutValidation::energiesEb_t::phi
double phi
number of sim hits
Definition: EcalSelectiveReadoutValidation.h:390
funct::false
false
Definition: Factorize.h:29
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
ecalDccMap.h
EcalSelectiveReadoutValidation::getBytesPerCrystal
double getBytesPerCrystal() const
Definition: EcalSelectiveReadoutValidation.h:154
dqm::implementation::IBooker::bookFloat
MonitorElement * bookFloat(TString const &name, FUNC onbooking=NOOP())
Definition: DQMStore.h:80
EcalSelectiveReadoutValidation::meSRFlagsConsistency_
MonitorElement * meSRFlagsConsistency_
Definition: EcalSelectiveReadoutValidation.h:602
hit::id
unsigned int id
Definition: SiStripHitEffFromCalibTree.cc:92
EcalTPGLutIdMap::EcalTPGLutMap
std::map< uint32_t, EcalTPGLut > EcalTPGLutMap
Definition: EcalTPGLutIdMap.h:12
EcalSelectiveReadoutValidation::meDccLiVol_
MonitorElement * meDccLiVol_
Definition: EcalSelectiveReadoutValidation.h:543
EcalSelectiveReadoutValidation::srpAlgoErrorLogFileName_
std::string srpAlgoErrorLogFileName_
Definition: EcalSelectiveReadoutValidation.h:495
EcalSelectiveReadoutValidation::compareSrfColl
void compareSrfColl(const edm::Event &event, T &srfFromData, T &computedSrf)
Definition: EcalSelectiveReadoutValidation.cc:2215
EcalSelectiveReadoutValidation::meHiTtf_
MonitorElement * meHiTtf_
Definition: EcalSelectiveReadoutValidation.h:585
EcalSelectiveReadoutValidation::nEndcaps
static const int nEndcaps
number of endcaps
Definition: EcalSelectiveReadoutValidation.h:447
EcalTPGGroups::EcalTPGGroupsMapItr
std::map< uint32_t, uint32_t >::const_iterator EcalTPGGroupsMapItr
Definition: EcalTPGGroups.h:20
EcalSelectiveReadoutValidation::getL1aRate
double getL1aRate() const
Definition: EcalSelectiveReadoutValidation.cc:211
ESHandle.h
EcalSelectiveReadoutValidation::meEbSimE_
MonitorElement * meEbSimE_
Definition: EcalSelectiveReadoutValidation.h:566
edm::DataFrameContainer::const_iterator
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
Definition: DataFrameContainer.h:61
EcalSelectiveReadoutValidation::srpAlgoErrorLog_
std::ofstream srpAlgoErrorLog_
Output ascii file for unconsistency on SR flags.
Definition: EcalSelectiveReadoutValidation.h:502
EcalSelectiveReadoutValidation::nEeY
static const int nEeY
EE crystal grid size along Y.
Definition: EcalSelectiveReadoutValidation.h:459
groupFilesInBlocks.tt
int tt
Definition: groupFilesInBlocks.py:144
EcalSelectiveReadoutValidation::ebDigis_
CollHandle< EBDigiCollection > ebDigis_
Definition: EcalSelectiveReadoutValidation.h:513
EcalSelectiveReadoutValidation::nPerDcc_
int nPerDcc_[nDccs_]
Definition: EcalSelectiveReadoutValidation.h:744
simplePhotonAnalyzer_cfi.sample
sample
Definition: simplePhotonAnalyzer_cfi.py:12
EcalSelectiveReadoutValidation::meTpMap_
MonitorElement * meTpMap_
Definition: EcalSelectiveReadoutValidation.h:588
muonTiming_cfi.tmin
tmin
Definition: muonTiming_cfi.py:24
EcalSelectiveReadoutValidation::frame2EnergyForTp
double frame2EnergyForTp(const T &frame, int offset=0) const
Definition: EcalSelectiveReadoutValidation.cc:1929
EcalSelectiveReadoutValidation::meDccHiVol_
MonitorElement * meDccHiVol_
Definition: EcalSelectiveReadoutValidation.h:544
EcalSelectiveReadoutValidation::histList_
std::set< std::string > histList_
Definition: EcalSelectiveReadoutValidation.h:807
EcalSelectiveReadoutValidation::nEeDccs
static const int nEeDccs
number of DCCs for EE
Definition: EcalSelectiveReadoutValidation.h:435
EcalTrigTowerDetId::ietaAbs
int ietaAbs() const
get the absolute value of the tower ieta
Definition: EcalTrigTowerDetId.h:36
EcalSelectiveReadoutValidation::meLiTtf_
MonitorElement * meLiTtf_
Definition: EcalSelectiveReadoutValidation.h:583
EcalSelectiveReadoutValidation::elecMap_
const EcalElectronicsMapping * elecMap_
Definition: EcalSelectiveReadoutValidation.h:675
edm::Run
Definition: Run.h:45
min
T min(T a, T b)
Definition: MathUtil.h:58
ecaldqm::zside
int zside(DetId const &)
Definition: EcalDQMCommonUtils.cc:189
EcalSelectiveReadoutValidation::energiesEb_t::eta
double eta
phi crystal position in degrees
Definition: EcalSelectiveReadoutValidation.h:391
EcalSelectiveReadoutValidation::nEeHI_
int nEeHI_
Definition: EcalSelectiveReadoutValidation.h:732
FEDRawDataCollection
Definition: FEDRawDataCollection.h:18
EcalSelectiveReadoutValidation::meTtfVsEtSum_
MonitorElement * meTtfVsEtSum_
Definition: EcalSelectiveReadoutValidation.h:560
EcalSelectiveReadoutValidation::ttEtSums
double ttEtSums[nTtEta][nTtPhi]
Definition: EcalSelectiveReadoutValidation.h:787
EBDetId
Definition: EBDetId.h:17
edm
HLT enums.
Definition: AlignableModifier.h:19
EcalScDetId::zside
int zside() const
Definition: EcalScDetId.h:64
ecaldqm::ttId
unsigned ttId(DetId const &, EcalElectronicsMapping const *)
Definition: EcalDQMCommonUtils.cc:99
EBDataFrame
Definition: EBDataFrame.h:11
dqm::implementation::IBooker::bookProfile2D
MonitorElement * bookProfile2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, double lowZ, double highZ, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:399
EcalElectronicsMapping::getEcalScDetId
std::vector< EcalScDetId > getEcalScDetId(int DCCid, int DCC_Channel, bool ignoreSingleCrystal=true) const
Definition: EcalElectronicsMapping.cc:799
EcalSelectiveReadoutValidation::meEeLiZsFir_
MonitorElement * meEeLiZsFir_
Definition: EcalSelectiveReadoutValidation.h:598
DetId::det
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46
EcalSelectiveReadoutValidation::meDroppedFROCnt_
MonitorElement * meDroppedFROCnt_
Definition: EcalSelectiveReadoutValidation.h:617
gather_cfg.cout
cout
Definition: gather_cfg.py:144
EcalSelectiveReadoutValidation::triggerTowerMap_
const EcalTrigTowerConstituentsMap * triggerTowerMap_
Definition: EcalSelectiveReadoutValidation.h:671
EcalSelectiveReadoutValidation::analyzeTP
void analyzeTP(const edm::Event &event, const edm::EventSetup &es)
Definition: EcalSelectiveReadoutValidation.cc:1478
EcalSrFlag::value
int value() const
Definition: EcalSrFlag.h:44
EcalSelectiveReadoutValidation::meIncompleteFROMap_
MonitorElement * meIncompleteFROMap_
Definition: EcalSelectiveReadoutValidation.h:608
EcalSelectiveReadoutValidation::meEbFullRoCnt_
MonitorElement * meEbFullRoCnt_
Definition: EcalSelectiveReadoutValidation.h:591
EcalSelectiveReadoutValidation::ebRecHits_
CollHandle< RecHitCollection > ebRecHits_
Definition: EcalSelectiveReadoutValidation.h:524
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
dqm::implementation::NavigatorBase::setCurrentFolder
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
EcalSelectiveReadoutValidation::meVolBHI_
MonitorElement * meVolBHI_
Definition: EcalSelectiveReadoutValidation.h:552
EcalSelectiveReadoutValidation::iEta2cIndex
int iEta2cIndex(int iEta) const
Definition: EcalSelectiveReadoutValidation.h:224
EcalSelectiveReadoutValidation::meEbRecVsSimE_
MonitorElement * meEbRecVsSimE_
Definition: EcalSelectiveReadoutValidation.h:568
EcalSelectiveReadoutValidation::meEbEMean_
MonitorElement * meEbEMean_
Definition: EcalSelectiveReadoutValidation.h:564
EcalSelectiveReadoutValidation::meChOcc_
MonitorElement * meChOcc_
Definition: EcalSelectiveReadoutValidation.h:555
cms::cuda::assert
assert(be >=bs)
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:222
EcalSelectiveReadoutValidation::configFirWeights
void configFirWeights(const std::vector< double > &weightsForZsFIR)
Definition: EcalSelectiveReadoutValidation.cc:2147
edm::EDConsumerBase::consumesCollector
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
Definition: EDConsumerBase.cc:47
EcalSelectiveReadoutValidation::hTriggerTowerMap
edm::ESGetToken< EcalTrigTowerConstituentsMap, IdealGeometryRecord > hTriggerTowerMap
Definition: EcalSelectiveReadoutValidation.h:410
EcalSelectiveReadoutValidation::meEeEMean_
MonitorElement * meEeEMean_
Definition: EcalSelectiveReadoutValidation.h:572
EcalSelectiveReadoutValidation::checkSrApplication
void checkSrApplication(const edm::Event &event, T &srfs)
Definition: EcalSelectiveReadoutValidation.cc:2309
EcalSelectiveReadoutValidation::energiesEe_t::gain12
bool gain12
eta crystal position
Definition: EcalSelectiveReadoutValidation.h:405
EcalSelectiveReadoutValidation::~EcalSelectiveReadoutValidation
~EcalSelectiveReadoutValidation() override
Destructor.
Definition: EcalSelectiveReadoutValidation.cc:831
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
DDAxes::x
compare.hists
hists
Definition: compare.py:318
EcalSelectiveReadoutValidation::meDroppedFROMap_
MonitorElement * meDroppedFROMap_
Definition: EcalSelectiveReadoutValidation.h:609
EcalTrigTowerDetId
Definition: EcalTrigTowerDetId.h:14
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
EcalElectronicsId::dccId
int dccId() const
get the DCC (Ecal Local DCC value not global one) id
Definition: EcalElectronicsId.h:31
findQualityFiles.v
v
Definition: findQualityFiles.py:179
EcalSelectiveReadoutValidation::initAsciiFile
void initAsciiFile()
Definition: EcalSelectiveReadoutValidation.cc:2193
EcalDataFrame
Definition: EcalDataFrame.h:16
EEDetId::ix
int ix() const
Definition: EEDetId.h:77
EcalTrigTowerDetId::zside
int zside() const
get the z-side of the tower (1/-1)
Definition: EcalTrigTowerDetId.h:30
EcalSelectiveReadoutValidation::meEeHiZsFir_
MonitorElement * meEeHiZsFir_
Definition: EcalSelectiveReadoutValidation.h:599
EcalSelectiveReadoutValidation::meZsErrType1Cnt_
MonitorElement * meZsErrType1Cnt_
Definition: EcalSelectiveReadoutValidation.h:624
fileinputsource_cfi.option
option
Definition: fileinputsource_cfi.py:94
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
EcalSelectiveReadoutValidation::ebSrFlags_
CollHandle< EBSrFlagCollection > ebSrFlags_
Definition: EcalSelectiveReadoutValidation.h:517
EcalBarrel
Definition: EcalSubdetector.h:10
EcalSelectiveReadoutValidation::nEeX
static const int nEeX
EE crystal grid size along X.
Definition: EcalSelectiveReadoutValidation.h:456
tmax
static const double tmax[3]
Definition: CastorTimeSlew.cc:7
EcalSelectiveReadoutValidation::bookProfile2D
MonitorElement * bookProfile2D(DQMStore::IBooker &, const std::string &name, const std::string &title, int nbinx, double xmin, double xmax, int nbiny, double ymin, double ymax, const char *option="")
Definition: EcalSelectiveReadoutValidation.cc:2012
EcalSelectiveReadoutValidation::analyzeDataVolume
void analyzeDataVolume(const edm::Event &e, const edm::EventSetup &es)
Definition: EcalSelectiveReadoutValidation.cc:1595
EcalSelectiveReadoutValidation::xtalGraphY
int xtalGraphY(const EEDetId &id) const
Definition: EcalSelectiveReadoutValidation.h:891
ecaldqm::towerId
unsigned towerId(DetId const &, EcalElectronicsMapping const *)
Definition: EcalDQMCommonUtils.cc:77
EcalSelectiveReadoutValidation::meCompleteZSRateMap_
MonitorElement * meCompleteZSRateMap_
Definition: EcalSelectiveReadoutValidation.h:614
EcalElectronicsId::towerId
int towerId() const
get the tower id
Definition: EcalElectronicsId.h:33
funct::sin
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
EcalSelectiveReadoutValidation::withEeSimHit_
bool withEeSimHit_
Definition: EcalSelectiveReadoutValidation.h:824
EcalSelectiveReadoutValidation::energiesEb_t::simHit
int simHit
energy reconstructed from zero-suppressed digi
Definition: EcalSelectiveReadoutValidation.h:389
LEDCalibrationChannels.iphi
iphi
Definition: LEDCalibrationChannels.py:64
EcalSelectiveReadoutValidation::lutGrpHandle
edm::ESGetToken< EcalTPGLutGroup, EcalTPGLutGroupRcd > lutGrpHandle
Definition: EcalSelectiveReadoutValidation.h:412
EESrFlag::id
const EcalScDetId & id() const override
Definition: EESrFlag.h:37
EcalSelectiveReadoutValidation::meDroppedFRORateMap_
MonitorElement * meDroppedFRORateMap_
Definition: EcalSelectiveReadoutValidation.h:613
EcalSelectiveReadoutValidation::anaDigi
void anaDigi(const T &frame, const U &srFlagColl)
Definition: EcalSelectiveReadoutValidation.cc:1649
EcalSelectiveReadoutValidation::meEeZsErrType1Cnt_
MonitorElement * meEeZsErrType1Cnt_
Definition: EcalSelectiveReadoutValidation.h:623
EcalSelectiveReadoutValidation::dqmBeginRun
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
Definition: EcalSelectiveReadoutValidation.cc:833
DetId
Definition: DetId.h:17
EcalSelectiveReadoutValidation::physHandle
edm::ESGetToken< EcalTPGPhysicsConst, EcalTPGPhysicsConstRcd > physHandle
Definition: EcalSelectiveReadoutValidation.h:411
alignCSCRings.s
s
Definition: alignCSCRings.py:92
EcalSelectiveReadoutValidation::nEbLI_
int nEbLI_
Definition: EcalSelectiveReadoutValidation.h:736
EcalSelectiveReadoutValidation::iXY2cIndex
int iXY2cIndex(int iX) const
Definition: EcalSelectiveReadoutValidation.h:240
EcalSelectiveReadoutValidation::energiesEe_t::noZsRecE
double noZsRecE
sim hit energy sum
Definition: EcalSelectiveReadoutValidation.h:399
EcalSelectiveReadoutValidation::meVolB_
MonitorElement * meVolB_
Definition: EcalSelectiveReadoutValidation.h:547
EcalSrFlag::SRF_ZS1
static const int SRF_ZS1
Definition: EcalSrFlag.h:18
EcalSelectiveReadoutValidation::meCompleteZSCnt_
MonitorElement * meCompleteZSCnt_
Definition: EcalSelectiveReadoutValidation.h:618
EcalSelectiveReadoutValidation::dccCh
std::pair< int, int > dccCh(const DetId &xtalId) const
Definition: EcalSelectiveReadoutValidation.cc:1778
EcalSelectiveReadoutValidation::iTtPhi2cIndex
int iTtPhi2cIndex(int iPhi) const
Definition: EcalSelectiveReadoutValidation.h:266
EcalSelectiveReadoutValidation::getDccOverhead
double getDccOverhead(subdet_t subdet) const
Definition: EcalSelectiveReadoutValidation.h:145
EcalSelectiveReadoutValidation::meEbNoise_
MonitorElement * meEbNoise_
Definition: EcalSelectiveReadoutValidation.h:565
EcalSelectiveReadoutValidation::tmin
int64_t tmin
Definition: EcalSelectiveReadoutValidation.h:533
L1TOccupancyClient_cfi.ymax
ymax
Definition: L1TOccupancyClient_cfi.py:43
EcalSelectiveReadoutValidation::energiesEb_t::gain12
bool gain12
eta crystal position
Definition: EcalSelectiveReadoutValidation.h:392
EcalSelectiveReadoutValidation::nLiPerDcc_
int nLiPerDcc_[nDccs_]
Definition: EcalSelectiveReadoutValidation.h:748
EcalSelectiveReadoutValidation::fedRaw_
CollHandle< FEDRawDataCollection > fedRaw_
Definition: EcalSelectiveReadoutValidation.h:526
EcalSelectiveReadoutValidation::dqmEndRun
void dqmEndRun(const edm::Run &r, const edm::EventSetup &c) override
Definition: EcalSelectiveReadoutValidation.cc:843
rpcPointValidation_cfi.simHit
simHit
Definition: rpcPointValidation_cfi.py:24
w
const double w
Definition: UKUtility.cc:23
HLT_FULL_cff.weights
weights
Definition: HLT_FULL_cff.py:99207
EcalSrFlag::SRF_ZS2
static const int SRF_ZS2
Definition: EcalSrFlag.h:21
EcalSelectiveReadoutValidation::anaDigiInit
void anaDigiInit()
Definition: EcalSelectiveReadoutValidation.cc:1724
EBSrFlag
Definition: EBSrFlag.h:13
EcalSelectiveReadoutValidation::bookHistograms
void bookHistograms(DQMStore::IBooker &i, edm::Run const &, edm::EventSetup const &) override
Definition: EcalSelectiveReadoutValidation.cc:847
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
EcalSelectiveReadoutValidation::getEbEventSize
double getEbEventSize(double nReadXtals) const
Definition: EcalSelectiveReadoutValidation.cc:2063
dqm::impl::MonitorElement::Fill
void Fill(long long x)
Definition: MonitorElement.h:290
EcalSelectiveReadoutValidation::energiesEb_t
Definition: EcalSelectiveReadoutValidation.h:384
EcalMappingRcd.h
EcalSelectiveReadoutValidation::meVolELI_
MonitorElement * meVolELI_
Definition: EcalSelectiveReadoutValidation.h:550
EcalScDetId
Definition: EcalScDetId.h:24
EcalSelectiveReadoutValidation::nOneEeTtEta
static const int nOneEeTtEta
Number of Trigger Towers in an endcap along Eta.
Definition: EcalSelectiveReadoutValidation.h:468
EcalSelectiveReadoutValidation::getRuCount
int getRuCount(int iDcc0) const
Definition: EcalSelectiveReadoutValidation.cc:1776
EcalSelectiveReadoutValidation::dccId
int dccId(const EcalScDetId &detId) const
Definition: EcalSelectiveReadoutValidation.cc:2267
EcalSelectiveReadoutValidation::meMiTtf_
MonitorElement * meMiTtf_
Definition: EcalSelectiveReadoutValidation.h:584
EcalSelectiveReadoutValidation::nEbHI_
int nEbHI_
Definition: EcalSelectiveReadoutValidation.h:740
ADC
Definition: ZdcTBAnalysis.h:46
EcalSelectiveReadoutValidation::nEbDccs
static const int nEbDccs
number of DCCs for EB
Definition: EcalSelectiveReadoutValidation.h:432
EcalSelectiveReadoutValidation::meEbHiZsFir_
MonitorElement * meEbHiZsFir_
Definition: EcalSelectiveReadoutValidation.h:595
EcalSelectiveReadoutValidation::eeZsThr_
int eeZsThr_
Definition: EcalSelectiveReadoutValidation.h:696
EcalSelectiveReadoutValidation::l1aOfTmin
int64_t l1aOfTmin
Definition: EcalSelectiveReadoutValidation.h:534
EcalElectronicsMapping::getElectronicsId
EcalElectronicsId getElectronicsId(const DetId &id) const
Get the electronics id for this det id.
Definition: EcalElectronicsMapping.cc:324
EcalSelectiveReadoutValidation::nEbZsErrors_
int nEbZsErrors_
Counter of EB ZS errors (LI channel below ZS threshold)
Definition: EcalSelectiveReadoutValidation.h:656
dqm::implementation::IBooker::bookProfile
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:322
EcalSelectiveReadoutValidation::meVolEHI_
MonitorElement * meVolEHI_
Definition: EcalSelectiveReadoutValidation.h:553
LaserClient_cfi.nbins
nbins
Definition: LaserClient_cfi.py:51
EcalSelectiveReadoutValidation::readAllCollections
void readAllCollections(const edm::Event &e)
Definition: EcalSelectiveReadoutValidation.cc:2036
EcalSelectiveReadoutValidation::ebZsThr_
int ebZsThr_
Definition: EcalSelectiveReadoutValidation.h:692
theta
Geom::Theta< T > theta() const
Definition: Basic3DVectorLD.h:150
EcalSelectiveReadoutValidation::book2D
MonitorElement * book2D(DQMStore::IBooker &, const std::string &name, const std::string &title, int nxbins, double xmin, double xmax, int nybins, double ymin, double ymax)
Definition: EcalSelectiveReadoutValidation.cc:1983
EcalSelectiveReadoutValidation::frame2Energy
double frame2Energy(const EcalDataFrame &frame) const
Definition: EcalSelectiveReadoutValidation.cc:1742
EcalSelectiveReadoutValidation::eeSrFlags_
CollHandle< EESrFlagCollection > eeSrFlags_
Definition: EcalSelectiveReadoutValidation.h:518
EcalSelectiveReadoutValidation::EcalSelectiveReadoutValidation
EcalSelectiveReadoutValidation(const edm::ParameterSet &ps)
Constructor.
Definition: EcalSelectiveReadoutValidation.cc:98
EcalSelectiveReadoutValidation::selectFedsForLog
void selectFedsForLog()
Definition: EcalSelectiveReadoutValidation.cc:2278
EcalSelectiveReadoutValidation::meEbZsErrCnt_
MonitorElement * meEbZsErrCnt_
Definition: EcalSelectiveReadoutValidation.h:619
Point3DBase< float, GlobalTag >
b
double b
Definition: hdecay.h:118
EcalElectronicsId
Ecal readout channel identification [32:20] Unused (so far) [19:13] DCC id [12:6] tower [5:3] strip [...
Definition: EcalElectronicsId.h:18
EcalSelectiveReadoutValidation::meEbLiZsFir_
MonitorElement * meEbLiZsFir_
Definition: EcalSelectiveReadoutValidation.h:594
EcalSelectiveReadoutValidation::registerHist
bool registerHist(const std::string &name, const std::string &title)
Definition: EcalSelectiveReadoutValidation.cc:2031
first
auto first
Definition: CAHitNtupletGeneratorKernelsImpl.h:125
EcalSelectiveReadoutValidation::cIndex2iPhi
int cIndex2iPhi(int i) const
Definition: EcalSelectiveReadoutValidation.h:252
FEDRawDataCollection::FEDData
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
Definition: FEDRawDataCollection.cc:19
EcalSelectiveReadoutValidation::setTtEtSums
void setTtEtSums(const edm::EventSetup &es, const EBDigiCollection &ebDigis, const EEDigiCollection &eeDigis)
Definition: EcalSelectiveReadoutValidation.cc:1852
EcalSelectiveReadoutValidation::tpInGeV_
bool tpInGeV_
Definition: EcalSelectiveReadoutValidation.h:700
DetId::subdetId
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
Definition: DetId.h:48
mitigatedMETSequence_cff.U
U
Definition: mitigatedMETSequence_cff.py:36
EEDetId
Definition: EEDetId.h:14
CaloGeometryRecord.h
EcalSelectiveReadoutValidation::energiesEb_t::noZsRecE
double noZsRecE
sim hit energy sum
Definition: EcalSelectiveReadoutValidation.h:386
EcalEndcap
Definition: EcalSubdetector.h:10
EcalSelectiveReadoutValidation::minDccId_
static const int minDccId_
Definition: EcalSelectiveReadoutValidation.h:426
EcalSelectiveReadoutValidation::nEbEta
static const int nEbEta
number of crystals along Eta in EB
Definition: EcalSelectiveReadoutValidation.h:450
EcalElectronicsMapping::getDCCandSC
std::pair< int, int > getDCCandSC(EcalScDetId id) const
Definition: EcalElectronicsMapping.cc:761
EcalSelectiveReadoutValidation::bookProfile
MonitorElement * bookProfile(DQMStore::IBooker &, const std::string &name, const std::string &title, int nbins, double xmin, double xmax)
Definition: EcalSelectiveReadoutValidation.cc:2001
funct::true
true
Definition: Factorize.h:173
LEDCalibrationChannels.ieta
ieta
Definition: LEDCalibrationChannels.py:63
EcalSelectiveReadoutValidation::nRuPerDcc_
int nRuPerDcc_[nDccs_]
Definition: EcalSelectiveReadoutValidation.h:756
CaloSubdetectorGeometry.h
EcalSelectiveReadoutValidation::nLiRuPerDcc_
int nLiRuPerDcc_[nDccs_]
Definition: EcalSelectiveReadoutValidation.h:760
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
edm::ParameterSet
Definition: ParameterSet.h:47
edm::Transition
Transition
Definition: Transition.h:12
a
double a
Definition: hdecay.h:119
EcalSelectiveReadoutValidation::meVolLI_
MonitorElement * meVolLI_
Definition: EcalSelectiveReadoutValidation.h:551
Event.h
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
EcalSelectiveReadoutValidation::nHiPerDcc_
int nHiPerDcc_[nDccs_]
Definition: EcalSelectiveReadoutValidation.h:752
EBDigiCollection
Definition: EcalDigiCollections.h:56
EcalSelectiveReadoutValidation::isRuComplete_
bool isRuComplete_[nDccs_][nDccChs_]
Definition: EcalSelectiveReadoutValidation.h:773
EcalSelectiveReadoutValidation::firWeights_
std::vector< int > firWeights_
Definition: EcalSelectiveReadoutValidation.h:688
EcalSelectiveReadoutValidation::ievt_
int ievt_
Definition: EcalSelectiveReadoutValidation.h:781
EEDigiCollection
Definition: EcalDigiCollections.h:69
EcalSelectiveReadoutValidation::iPhi2cIndex
int iPhi2cIndex(int iPhi) const
Definition: EcalSelectiveReadoutValidation.h:229
EcalSrFlag
Definition: EcalSrFlag.h:10
EcalSelectiveReadoutValidation::meIncompleteFRORateMap_
MonitorElement * meIncompleteFRORateMap_
Definition: EcalSelectiveReadoutValidation.h:612
EcalSelectiveReadoutValidation::eeRecHits_
CollHandle< RecHitCollection > eeRecHits_
Definition: EcalSelectiveReadoutValidation.h:525
EcalElectronicsMapping.h
EcalSelectiveReadoutValidation::eeComputedSrFlags_
CollHandle< EESrFlagCollection > eeComputedSrFlags_
Definition: EcalSelectiveReadoutValidation.h:520
EcalSelectiveReadoutValidation::nTtEta
static const int nTtEta
Number of Trigger Towers along Eta.
Definition: EcalSelectiveReadoutValidation.h:474
PV3DBase::eta
T eta() const
Definition: PV3DBase.h:73
EcalSelectiveReadoutValidation::ruGraphX
int ruGraphX(const EcalScDetId &id) const
Definition: EcalSelectiveReadoutValidation.h:881
EcalSelectiveReadoutValidation::energiesEb_t::simE
double simE
Definition: EcalSelectiveReadoutValidation.h:385
EcalSelectiveReadoutValidation::maxDccId_
static const int maxDccId_
Definition: EcalSelectiveReadoutValidation.h:429
EcalSelectiveReadoutValidation::getDccEventSize
double getDccEventSize(int iDcc0, double nReadXtals) const
Definition: EcalSelectiveReadoutValidation.h:161
createfilelist.int
int
Definition: createfilelist.py:10
EcalSelectiveReadoutValidation::nTtPhi
static const int nTtPhi
Number of Trigger Towers along Phi.
Definition: EcalSelectiveReadoutValidation.h:477
EcalSelectiveReadoutValidation::meEeNoZsRecVsSimE_
MonitorElement * meEeNoZsRecVsSimE_
Definition: EcalSelectiveReadoutValidation.h:577
EcalSelectiveReadoutValidation::eeDigis_
CollHandle< EEDigiCollection > eeDigis_
Definition: EcalSelectiveReadoutValidation.h:514
EcalSelectiveReadoutValidation::nEb_
int nEb_
Definition: EcalSelectiveReadoutValidation.h:720
phase1PixelTopology::xOffset
constexpr int16_t xOffset
Definition: phase1PixelTopology.h:19
EcalScDetId::iy
int iy() const
Definition: EcalScDetId.h:76
edm::DataFrameContainer::begin
const_iterator begin() const
The iterator returned can not safely be used across threads.
Definition: DataFrameContainer.h:149
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:155
EcalSelectiveReadoutValidation::geoToken
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geoToken
Definition: EcalSelectiveReadoutValidation.h:408
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
EcalSelectiveReadoutValidation::outputFile_
std::string outputFile_
Output file for histograms.
Definition: EcalSelectiveReadoutValidation.h:488
dqm::impl::MonitorElement::getTProfile
virtual TProfile * getTProfile()
Definition: MonitorElement.cc:1019
EcalSelectiveReadoutValidation::meEbNoZsRecVsSimE_
MonitorElement * meEbNoZsRecVsSimE_
Definition: EcalSelectiveReadoutValidation.h:569
EgHLTOffHistBins_cfi.et
et
Definition: EgHLTOffHistBins_cfi.py:8
CaloSubdetectorGeometry::getGeometry
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
Definition: CaloSubdetectorGeometry.cc:36
edm::EventSetup
Definition: EventSetup.h:58
PCaloHit
Definition: PCaloHit.h:8
EcalSelectiveReadoutValidation::updateL1aRate
void updateL1aRate(const edm::Event &event)
Definition: EcalSelectiveReadoutValidation.cc:193
EcalSelectiveReadoutValidation::logSrpAlgoErrors_
bool logSrpAlgoErrors_
Definition: EcalSelectiveReadoutValidation.h:852
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
EcalSelectiveReadoutValidation::energiesEe_t::recE
double recE
energy reconstructed from unsuppressed digi
Definition: EcalSelectiveReadoutValidation.h:400
DetId::Ecal
Definition: DetId.h:27
EcalSelectiveReadoutValidation::nCompleteZS_
int nCompleteZS_
Counter of ZS-flagged RU fully read out.
Definition: EcalSelectiveReadoutValidation.h:647
EcalSelectiveReadoutValidation::meEbZsErrType1Cnt_
MonitorElement * meEbZsErrType1Cnt_
Definition: EcalSelectiveReadoutValidation.h:622
EcalTrigTowerDetId::ieta
int ieta() const
get the tower ieta
Definition: EcalTrigTowerDetId.h:44
EcalSelectiveReadoutValidation::analyze
void analyze(edm::Event const &e, edm::EventSetup const &c) override
Analyzes the event.
Definition: EcalSelectiveReadoutValidation.cc:218
visDQMUpload.buf
buf
Definition: visDQMUpload.py:160
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
EcalSelectiveReadoutValidation::dccZsFIR
static int dccZsFIR(const EcalDataFrame &frame, const std::vector< int > &firWeights, int firstFIRSample, bool *saturated=nullptr)
Definition: EcalSelectiveReadoutValidation.cc:2087
FEDRawData::size
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:45
EcalMGPASample
Definition: EcalMGPASample.h:22
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
EcalSelectiveReadoutValidation::nEeFROCnt_
int nEeFROCnt_
Counter of EE FRO-flagged RUs.
Definition: EcalSelectiveReadoutValidation.h:653
EcalTrigTowerConstituentsMap::towerOf
EcalTrigTowerDetId towerOf(const DetId &id) const
Get the tower id for this det id (or null if not known)
Definition: EcalTrigTowerConstituentsMap.cc:11
EcalSelectiveReadoutValidation::meEeSimE_
MonitorElement * meEeSimE_
Definition: EcalSelectiveReadoutValidation.h:574
alignCSCRings.r
r
Definition: alignCSCRings.py:93
EcalSelectiveReadoutValidation::EE
Definition: EcalSelectiveReadoutValidation.h:67
EcalSelectiveReadoutValidation::nEeZsErrorsType1_
int nEeZsErrorsType1_
Definition: EcalSelectiveReadoutValidation.h:667
EcalSelectiveReadoutValidation::logSrApplicationErrors_
bool logSrApplicationErrors_
Definition: EcalSelectiveReadoutValidation.h:857
EcalSelectiveReadoutValidation::withEbSimHit_
bool withEbSimHit_
Definition: EcalSelectiveReadoutValidation.h:828
EcalSelectiveReadoutValidation::nDccs_
static const unsigned nDccs_
Total number of DCCs.
Definition: EcalSelectiveReadoutValidation.h:419
EcalSelectiveReadoutValidation::meFullRoRu_
MonitorElement * meFullRoRu_
Definition: EcalSelectiveReadoutValidation.h:579
EcalTPGPhysicsConstMap
std::map< uint32_t, EcalTPGPhysicsConst::Item > EcalTPGPhysicsConstMap
Definition: EcalTPGPhysicsConst.h:36
EcalSelectiveReadoutValidation::eeSimHits_
CollHandle< std::vector< PCaloHit > > eeSimHits_
Definition: EcalSelectiveReadoutValidation.h:522
CaloCellGeometry.h
EcalSelectiveReadoutValidation.h
EcalTrigTowerConstituentsMap.h
std
Definition: JetResolutionObject.h:76
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
EcalSelectiveReadoutValidation::nEbZsErrorsType1_
int nEbZsErrorsType1_
Definition: EcalSelectiveReadoutValidation.h:663
EcalTriggerTower
Definition: EcalSubdetector.h:10
L1TOccupancyClient_cfi.ymin
ymin
Definition: L1TOccupancyClient_cfi.py:43
EcalSelectiveReadoutValidation::weights_
std::vector< double > weights_
Definition: EcalSelectiveReadoutValidation.h:684
EcalSelectiveReadoutValidation::iTtEta2cIndex
int iTtEta2cIndex(int iEta) const
Definition: EcalSelectiveReadoutValidation.h:259
EcalSelectiveReadoutValidation::eeRuActive_
bool eeRuActive_[nEndcaps][nEeX/scEdge][nEeY/scEdge]
Definition: EcalSelectiveReadoutValidation.h:770
EcalSelectiveReadoutValidation::meZs1Ru_
MonitorElement * meZs1Ru_
Definition: EcalSelectiveReadoutValidation.h:580
EcalSrFlag::SRF_FULL
static const int SRF_FULL
Definition: EcalSrFlag.h:24
EcalSelectiveReadoutValidation::meEeRecVsSimE_
MonitorElement * meEeRecVsSimE_
Definition: EcalSelectiveReadoutValidation.h:576
EcalSelectiveReadoutValidation::ebComputedSrFlags_
CollHandle< EBSrFlagCollection > ebComputedSrFlags_
Definition: EcalSelectiveReadoutValidation.h:519
EcalSelectiveReadoutValidation::bookFloat
MonitorElement * bookFloat(DQMStore::IBooker &, const std::string &name)
Definition: EcalSelectiveReadoutValidation.cc:1961
EcalSelectiveReadoutValidation::logErrForDccs_
std::vector< bool > logErrForDccs_
Definition: EcalSelectiveReadoutValidation.h:716
EcalSelectiveReadoutValidation::ebEnergies
energiesEb_t ebEnergies[nEbEta][nEbPhi]
Definition: EcalSelectiveReadoutValidation.h:792
T
long double T
Definition: Basic3DVectorLD.h:48
EcalSelectiveReadoutValidation::energiesEe_t::eta
double eta
phi crystal position in degrees
Definition: EcalSelectiveReadoutValidation.h:404
EcalSelectiveReadoutValidation::energiesEe_t::simHit
int simHit
energy reconstructed from zero-suppressed digi
Definition: EcalSelectiveReadoutValidation.h:402
TrackerOfflineValidation_Dqm_cff.xmax
xmax
Definition: TrackerOfflineValidation_Dqm_cff.py:11
edm::Transition::BeginRun
amptDefault_cfi.frame
frame
Definition: amptDefault_cfi.py:12
dqm::implementation::IBooker::book2D
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:177
EcalSelectiveReadoutValidation::nEeLI_
int nEeLI_
Definition: EcalSelectiveReadoutValidation.h:728
EcalSelectiveReadoutValidation::scEdge
static const int scEdge
Number of crystals along a supercrystal edge.
Definition: EcalSelectiveReadoutValidation.h:465
EcalSelectiveReadoutValidation::xtalGraphX
int xtalGraphX(const EEDetId &id) const
Definition: EcalSelectiveReadoutValidation.h:889
Exception
Definition: hltDiff.cc:245
CaloGeometry.h
CollHandle::read
void read(const edm::Event &event)
Definition: CollHandle.h:58
EcalSelectiveReadoutValidation::getFIRWeights
static std::vector< int > getFIRWeights(const std::vector< double > &normalizedWeights)
Definition: EcalSelectiveReadoutValidation.cc:2134
EcalSelectiveReadoutValidation::ebTtEdge
static const int ebTtEdge
Number of crystals along an EB TT.
Definition: EcalSelectiveReadoutValidation.h:462
CollHandle::setToken
void setToken(edm::ConsumesCollector &collector)
Definition: CollHandle.h:48
EcalSelectiveReadoutValidation::book1D
MonitorElement * book1D(DQMStore::IBooker &, const std::string &name, const std::string &title, int nbins, double xmin, double xmax)
Definition: EcalSelectiveReadoutValidation.cc:1972
dqm::implementation::IBooker::UseRunScope
UseScope< MonitorElementData::Scope::RUN > UseRunScope
Definition: DQMStore.h:464
EcalSelectiveReadoutValidation::nDccRus_
static const int nDccRus_[nDccs_]
number of RUs for each DCC
Definition: EcalSelectiveReadoutValidation.h:444
EcalSelectiveReadoutValidation::cIndex2iEta
int cIndex2iEta(int i) const
Definition: EcalSelectiveReadoutValidation.h:248
EcalSelectiveReadoutValidation::meIncompleteFROCnt_
MonitorElement * meIncompleteFROCnt_
Definition: EcalSelectiveReadoutValidation.h:616
EcalTPGLutIdMap::EcalTPGLutMapItr
std::map< uint32_t, EcalTPGLut >::const_iterator EcalTPGLutMapItr
Definition: EcalTPGLutIdMap.h:13
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
EventSetup.h
EcalSelectiveReadoutValidation::firstFIRSample_
int firstFIRSample_
Definition: EcalSelectiveReadoutValidation.h:705
CaloSubdetectorGeometry
Definition: CaloSubdetectorGeometry.h:22
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
EcalSelectiveReadoutValidation::l1aOfTmax
int64_t l1aOfTmax
Definition: EcalSelectiveReadoutValidation.h:535
EcalSelectiveReadoutValidation::nEbFROCnt_
int nEbFROCnt_
Counter of EB FRO-flagged RUs.
Definition: EcalSelectiveReadoutValidation.h:650
EcalSelectiveReadoutValidation::kByte_
static const int kByte_
number of bytes in 1 kByte:
Definition: EcalSelectiveReadoutValidation.h:416
EcalSelectiveReadoutValidation::meZsErrCnt_
MonitorElement * meZsErrCnt_
Definition: EcalSelectiveReadoutValidation.h:621
EcalSelectiveReadoutValidation::ebSimHits_
CollHandle< std::vector< PCaloHit > > ebSimHits_
Definition: EcalSelectiveReadoutValidation.h:521
dqm-mbProfile.log
log
Definition: dqm-mbProfile.py:17
dqm::implementation::IBooker
Definition: DQMStore.h:43
EcalSelectiveReadoutValidation::getCrystalCount
int getCrystalCount(int iDcc, int iDccCh)
Definition: EcalSelectiveReadoutValidation.cc:2356
EcalSelectiveReadoutValidation::meFullRoCnt_
MonitorElement * meFullRoCnt_
Definition: EcalSelectiveReadoutValidation.h:590
EcalSelectiveReadoutValidation::srApplicationErrorLog_
std::ofstream srApplicationErrorLog_
Output ascii file for unconsistency between Xtals and RU Flags.
Definition: EcalSelectiveReadoutValidation.h:505
EcalSelectiveReadoutValidation::printAvailableHists
void printAvailableHists()
Definition: EcalSelectiveReadoutValidation.cc:2053
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
L1TowerCalibrationProducer_cfi.iEta
iEta
Definition: L1TowerCalibrationProducer_cfi.py:60
EcalSelectiveReadoutValidation::localReco_
bool localReco_
Definition: EcalSelectiveReadoutValidation.h:680
EcalSelectiveReadoutValidation::srApplicationErrorLogFileName_
std::string srApplicationErrorLogFileName_
Definition: EcalSelectiveReadoutValidation.h:499
EcalSelectiveReadoutValidation::nPerRu_
int nPerRu_[nDccs_][nDccChs_]
Definition: EcalSelectiveReadoutValidation.h:777
mps_fire.result
result
Definition: mps_fire.py:311
ConsumesCollector.h
cms::Exception
Definition: Exception.h:70
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
EcalSelectiveReadoutValidation::meForcedRu_
MonitorElement * meForcedRu_
Definition: EcalSelectiveReadoutValidation.h:581
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:234
EcalSelectiveReadoutValidation::meForcedTtf_
MonitorElement * meForcedTtf_
Definition: EcalSelectiveReadoutValidation.h:586
ParameterSet.h
EcalSelectiveReadoutValidation::meDccVol_
MonitorElement * meDccVol_
Definition: EcalSelectiveReadoutValidation.h:542
EcalSelectiveReadoutValidation::nIncompleteFRO_
int nIncompleteFRO_
Counter of FRO-flagged RU only partial data.
Definition: EcalSelectiveReadoutValidation.h:644
EcalSelectiveReadoutValidation::allHists_
bool allHists_
Definition: EcalSelectiveReadoutValidation.h:811
EcalSelectiveReadoutValidation::tmax
int64_t tmax
Definition: EcalSelectiveReadoutValidation.h:532
TrackerOfflineValidation_Dqm_cff.xmin
xmin
Definition: TrackerOfflineValidation_Dqm_cff.py:10
EcalSelectiveReadoutValidation::meVolHI_
MonitorElement * meVolHI_
Definition: EcalSelectiveReadoutValidation.h:554
EcalSelectiveReadoutValidation::ebNoZsDigis_
CollHandle< EBDigiCollection > ebNoZsDigis_
Definition: EcalSelectiveReadoutValidation.h:515
EcalSelectiveReadoutValidation::eeNoZsDigis_
CollHandle< EEDigiCollection > eeNoZsDigis_
Definition: EcalSelectiveReadoutValidation.h:516
EcalSelectiveReadoutValidation::ebRuActive_
bool ebRuActive_[nEbEta/ebTtEdge][nEbPhi/ebTtEdge]
Definition: EcalSelectiveReadoutValidation.h:769
EcalSelectiveReadoutValidation::meTtf_
MonitorElement * meTtf_
Definition: EcalSelectiveReadoutValidation.h:558
EcalSrFlag::SRF_FORCED_MASK
static const int SRF_FORCED_MASK
Definition: EcalSrFlag.h:29
EcalSelectiveReadoutValidation::meTtfVsTp_
MonitorElement * meTtfVsTp_
Definition: EcalSelectiveReadoutValidation.h:559
EcalSelectiveReadoutValidation::energiesEe_t::phi
double phi
number of sim hits
Definition: EcalSelectiveReadoutValidation.h:403
event
Definition: event.py:1
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:82
EEDataFrame
Definition: EEDataFrame.h:12
EcalSelectiveReadoutValidation::meEeRecE_
MonitorElement * meEeRecE_
Definition: EcalSelectiveReadoutValidation.h:571
edm::Event
Definition: Event.h:73
EcalSelectiveReadoutValidation::cIndex2iTtPhi
int cIndex2iTtPhi(int i) const
Definition: EcalSelectiveReadoutValidation.h:279
submitPVValidationJobs.t
string t
Definition: submitPVValidationJobs.py:644
EcalSelectiveReadoutValidation::ecalmapping
edm::ESGetToken< EcalElectronicsMapping, EcalMappingRcd > ecalmapping
Definition: EcalSelectiveReadoutValidation.h:409
edm::Log
Definition: MessageLogger.h:70
EcalSelectiveReadoutValidation::readOutUnitOf
EcalTrigTowerDetId readOutUnitOf(const EBDetId &xtalId) const
Definition: EcalSelectiveReadoutValidation.cc:1839
pileupReCalc_HLTpaths.trunc
trunc
Definition: pileupReCalc_HLTpaths.py:143
EcalTPGPhysicsConstMapIterator
std::map< uint32_t, EcalTPGPhysicsConst::Item >::const_iterator EcalTPGPhysicsConstMapIterator
Definition: EcalTPGPhysicsConst.h:37
EcalSelectiveReadoutValidation::nEbPhi
static const int nEbPhi
number of crystals along Phi in EB
Definition: EcalSelectiveReadoutValidation.h:453
EcalSelectiveReadoutValidation::meEeZsErrCnt_
MonitorElement * meEeZsErrCnt_
Definition: EcalSelectiveReadoutValidation.h:620
EcalSelectiveReadoutValidation::meCompleteZSMap_
MonitorElement * meCompleteZSMap_
Definition: EcalSelectiveReadoutValidation.h:610
SimL1EmulatorDM_cff.eeDigis
eeDigis
Definition: SimL1EmulatorDM_cff.py:18
TauDecayModes.dec
dec
Definition: TauDecayModes.py:142
EcalScDetId::ix
int ix() const
Definition: EcalScDetId.h:70
EcalSelectiveReadoutValidation::energiesEb_t::recE
double recE
energy reconstructed from unsuppressed digi
Definition: EcalSelectiveReadoutValidation.h:387
EcalSelectiveReadoutValidation::ruGraphY
int ruGraphY(const EcalScDetId &id) const
Definition: EcalSelectiveReadoutValidation.h:883
edm::DataFrameContainer::end
const_iterator end() const
Definition: DataFrameContainer.h:152
EcalSelectiveReadoutValidation::meEeFullRoCnt_
MonitorElement * meEeFullRoCnt_
Definition: EcalSelectiveReadoutValidation.h:592
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
PV3DBase::phi
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
EcalSelectiveReadoutValidation::meVol_
MonitorElement * meVol_
Definition: EcalSelectiveReadoutValidation.h:546
EcalSelectiveReadoutValidation::eeEnergies
energiesEe_t eeEnergies[nEndcaps][nEeX][nEeY]
Definition: EcalSelectiveReadoutValidation.h:798
hit
Definition: SiStripHitEffFromCalibTree.cc:88
EcalSelectiveReadoutValidation::availableHistList_
std::map< std::string, std::string > availableHistList_
Definition: EcalSelectiveReadoutValidation.h:820
EcalSelectiveReadoutValidation::EB
Definition: EcalSelectiveReadoutValidation.h:67
dqm::implementation::IBooker::book1D
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
EcalTPGGroups::EcalTPGGroupsMap
std::map< uint32_t, uint32_t > EcalTPGGroupsMap
Definition: EcalTPGGroups.h:19
EcalSelectiveReadoutValidation::tps_
CollHandle< EcalTrigPrimDigiCollection > tps_
Definition: EcalSelectiveReadoutValidation.h:523
RemoveAddSevLevel.flag
flag
Definition: RemoveAddSevLevel.py:117
EcalSelectiveReadoutValidation::verbose_
bool verbose_
Verbosity switch.
Definition: EcalSelectiveReadoutValidation.h:485
edm::DataFrameContainer::size
size_type size() const
Definition: DataFrameContainer.h:162
cms
Namespace of DDCMS conversion namespace.
Definition: ProducerAnalyzer.cc:21
EcalSelectiveReadoutValidation::meVolBLI_
MonitorElement * meVolBLI_
Definition: EcalSelectiveReadoutValidation.h:549
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
EcalSelectiveReadoutValidation::nHiRuPerDcc_
int nHiRuPerDcc_[nDccs_]
Definition: EcalSelectiveReadoutValidation.h:764
EcalSelectiveReadoutValidation::analyzeEB
void analyzeEB(const edm::Event &event, const edm::EventSetup &es)
Definition: EcalSelectiveReadoutValidation.cc:557