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