33 #if (CMSSW_COMPAT_VERSION>=210)
52 34, 32, 33, 33, 32, 34, 33, 34, 33,
55 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
58 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
61 32, 33, 33, 32, 34, 33, 34, 33, 34
67 # include <sys/time.h>
70 gettimeofday(&start_, 0);
79 std::cout <<
"[PgTiming] " << mess_ <<
" "
80 << ((t.tv_sec-start_.tv_sec)*1.e3
81 + (t.tv_usec-start_.tv_usec)*1.e-3)
89 #else //DO_TIMING is not defined
94 #endif //DO_TIMING defined condition
97 collNotFoundWarn_(ps.getUntrackedParameter<bool>(
"warnIfCollectionNotFound",
true)),
98 ebDigis_(ps.getParameter<edm::
InputTag>(
"EbDigiCollection"),
false,
100 eeDigis_(ps.getParameter<edm::
InputTag>(
"EeDigiCollection"),
false,
102 ebNoZsDigis_(ps.getParameter<edm::
InputTag>(
"EbUnsuppressedDigiCollection"),
104 eeNoZsDigis_(ps.getParameter<edm::
InputTag>(
"EeUnsuppressedDigiCollection"),
106 ebSrFlags_(ps.getParameter<edm::
InputTag>(
"EbSrFlagCollection"),
false,
108 eeSrFlags_(ps.getParameter<edm::
InputTag>(
"EeSrFlagCollection"),
false,
110 ebComputedSrFlags_(ps.getParameter<edm::
InputTag>(
"EbSrFlagFromTTCollection"),
false,
112 eeComputedSrFlags_(ps.getParameter<edm::
InputTag>(
"EeSrFlagFromTTCollection"),
false,
114 ebSimHits_(ps.getParameter<edm::
InputTag>(
"EbSimHitCollection"),
false,
116 eeSimHits_(ps.getParameter<edm::
InputTag>(
"EeSimHitCollection"),
false,
118 tps_(ps.getParameter<edm::
InputTag>(
"TrigPrimCollection"),
false,
120 ebRecHits_(ps.getParameter<edm::
InputTag>(
"EbRecHitCollection"),
false,
122 eeRecHits_(ps.getParameter<edm::
InputTag>(
"EeRecHitCollection"),
false,
124 fedRaw_(ps.getParameter<edm::
InputTag>(
"FEDRawCollection"),
false,
127 tmin(numeric_limits<int64_t>::
max()),
131 localReco_(ps.getParameter<bool>(
"LocalReco")),
132 weights_(ps.getParameter<vector<double> >(
"weights")),
133 tpInGeV_(ps.getParameter<bool>(
"tpInGeV")),
134 firstFIRSample_(ps.getParameter<int>(
"ecalDccZs1stSample")),
135 useEventRate_(ps.getParameter<bool>(
"useEventRate")),
136 logErrForDccs_(nDccs_,
false),
139 histDir_(ps.getParameter<
string>(
"histDir")),
140 withEeSimHit_(
false),
141 withEbSimHit_(
false){
143 PgTiming t(
"EcalSelectiveReadoutValidation ctor");
160 double ebZsThr = ps.
getParameter<
double>(
"ebZsThrADCCount");
161 double eeZsThr = ps.
getParameter<
double>(
"eeZsThrADCCount");
183 LogInfo(
"OutputInfo") <<
" Ecal Digi Task histograms will be saved to '"
186 LogInfo(
"OutputInfo") <<
" Ecal Digi Task histograms will NOT be saved";
201 if(
verbose_) dbe_->showDirStructure();
207 vector<string>(1,
"all")));
209 for(vector<string>::iterator it = hists.begin();
210 it!=hists.end(); ++it)
histList_.insert(*it);
226 "ECAL DCC event fragment size;Dcc id; "
230 "LI channel payload per DCC;Dcc id; "
234 "HI channel payload per DCC;Dcc id; "
238 "ECAL DCC event fragment size;Dcc id; "
242 "ECAL Barrel low interest crystal data payload;"
243 "Event size (kB);Nevts",
247 "Endcap low interest crystal data payload;"
248 "Event size (kB);Nevts",
252 "ECAL low interest crystal data payload;"
253 "Event size (kB);Nevts",
257 "Barrel high interest crystal data payload;"
258 "Event size (kB);Nevts",
262 "Endcap high interest crystal data payload;"
263 "Event size (kB);Nevts",
267 "ECAL high interest crystal data payload;"
268 "Event size (kB);Nevts",
272 "Barrel data volume;Event size (kB);Nevts",
276 "Endcap data volume;Event size (kB);Nevts",
280 "ECAL data volume;Event size (kB);Nevts",
284 "ECAL crystal channel occupancy after zero suppression;"
285 "iX -200 / iEta / iX + 100;"
286 "iY / iPhi (starting from -10^{o}!);"
295 title =
string(
"Trigger primitive TT E_{T};E_{T} ")
296 + tpUnit +
string(
";Event Count");
302 "Trigger primitive TT flag;Flag number;Event count",
305 title =
string(
"Trigger tower flag vs TP;E_{T}(TT) (")
306 + tpUnit +
string(
");Flag number");
313 "Trigger tower flag vs #sumE_{T};"
318 title =
string(
"Trigger primitive Et (TP) vs #sumE_{T};"
320 "E_{T} (TP) (") + tpUnit +
string (
")");
327 title =
string(
"Trigger primitive E_{T};"
330 "E_{T} (TP) (") + tpUnit +
string (
")");
338 "Full Read-out readout unit;"
339 "iX - 40 / iEta / iX + 20;"
340 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
346 "Number of Full-readout-flagged readout units;"
347 "FRO RU count;Event count",
351 "Number of EB Full-readout-flagged readout units;"
352 "FRO RU count;Event count",
356 "Number of EE Full-readout-flagged readout units;"
357 "FRO RU count;Event count",
361 "Readout unit with ZS-thr-1 flag;"
362 "iX - 40 / iEta / iX + 20;"
363 "iY0 / iPhi0 (iPhi = 1 at phi = 0 rad);"
369 "ECAL readout unit with forced bit of SR flag on;"
370 "iX - 40 / iEta / iX + 20;"
371 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
377 "Low interest trigger tower flags;"
385 "Mid interest trigger tower flags;"
393 "High interest trigger tower flags;"
401 "Trigger tower flags with forced bit set;"
409 const float ebMinNoise = -1.;
410 const float ebMaxNoise = 1.;
412 const float eeMinNoise = -1.;
413 const float eeMaxNoise = 1.;
416 const float ebMinE = 0.;
417 const float ebMaxE = 120.;
419 const float eeMinE = 0.;
420 const float eeMaxE = 120.;
422 const float ebMinE = ebMinNoise;
423 const float ebMaxE = ebMaxNoise;
425 const float eeMinE = eeMinNoise;
426 const float eeMaxE = eeMaxNoise;
430 const int evtMax = 500;
433 "Crystal reconstructed energy;E (GeV);Event count",
434 100, ebMinE, ebMaxE);
437 "EE <E_hit>;event #;<E_hit> (GeV)",
438 evtMax, .5, evtMax + .5);
442 "(rec E of crystal without deposited energy)"
443 ";Rec E (GeV);Event count",
444 100, ebMinNoise, ebMaxNoise);
447 "Emulated ouput of ZS FIR filter for EB "
448 "low interest crystals;"
454 "Emulated ouput of ZS FIR filter for EB "
455 "high interest crystals;"
469 100, ebMinE, ebMaxE);
472 "EB rec energy of hit crystals",
473 100, ebMinE, ebMaxE);
476 "Crystal simulated vs reconstructed energy;"
477 "Esim (GeV);Erec GeV);Event count",
479 100, ebMinE, ebMaxE);
482 "Crystal no-zs simulated vs reconstructed "
484 "Esim (GeV);Erec GeV);Event count",
486 100, ebMinE, ebMaxE);
489 "EE crystal reconstructed energy;E (GeV);"
491 100, eeMinE, eeMaxE);
494 "<E_{EE hit}>;event;<E_{hit}> (GeV)",
495 evtMax, .5, evtMax + .5);
500 "(rec E of crystal without deposited energy);"
501 "E (GeV);Event count",
502 200, eeMinNoise, eeMaxNoise);
505 "Emulated ouput of ZS FIR filter for EE "
506 "low interest crystals;"
512 "Emulated ouput of ZS FIR filter for EE "
513 "high interest crystals;"
528 100, eeMinE, eeMaxE);
531 "EE rec energy of hit crystals",
532 100, eeMinE, eeMaxE);
535 "EE crystal simulated vs reconstructed energy;"
536 "Esim (GeV);Erec GeV);Event count",
538 100, eeMinE, eeMaxE);
541 "EE crystal no-zs simulated vs "
543 "energy;Esim (GeV);Erec GeV);Event count",
545 100, eeMinE, eeMaxE);
548 "TTFlags and SR Flags mismatch;"
549 "iX - 40 / iEta / iX + 20;"
550 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
557 "Incomplete full-readout-flagged readout units;"
558 "iX - 40 / iEta / iX + 20;"
559 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
565 "Number of incomplete full-readout-flagged "
567 "Number of RUs;Event count;",
572 "Incomplete full-readout-flagged readout units;"
573 "iX - 40 / iEta / iX + 20;"
574 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
575 "Incomplete error rate",
581 "Dropped full-readout-flagged readout units;"
582 "iX - 40 / iEta / iX + 20;"
583 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
589 "Number of dropped full-readout-flagged "
590 "RU count;RU count;Event count",
594 "Number of zero-suppressed-flagged RU fully "
596 "RU count;Event count",
600 buf <<
"Number of LI EB channels below the " << ebZsThr_/4. <<
" ADC count ZS threshold;"
601 "Channel count;Event count",
607 buf <<
"Number of LI EE channels below the " <<
eeZsThr_/4. <<
" ADC count ZS theshold;"
608 "Channel count;Event count",
614 "Number of LI channels below the ZS threshold;"
615 "Channel count;Event count",
619 "Number of EB channels below the ZS "
620 "threshold in a LI but fully readout RU;"
621 "Channel count;Event count;",
625 "Number EE channels below the ZS threshold"
626 " in a LI but fully readout RU;"
627 "Channel count;Event count",
631 "Number of LI channels below the ZS threshold "
632 "in a LI but fully readout RU;"
633 "Channel count;Event count",
639 "Dropped full-readout-flagged readout units"
640 "iX - 40 / iEta / iX + 20;"
641 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
647 "Complete zero-suppressed-flagged readout units;"
648 "iX - 40 / iEta / iX + 20;"
649 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
656 "Complete zero-suppressed-flagged readout units;"
657 "iX - 40 / iEta / iX + 20;"
658 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
669 for(set<string>::iterator it =
histList_.begin();
672 if(*it!=
string(
"all")
674 s << (s.str().size()==0?
"":
", ") << *it;
677 if(s.str().size()!=0){
679 <<
"Parameter 'histList' contains some unknown histogram(s). "
680 "Check spelling. Following name were not found: "
687 const int32_t bx =
event.bunchCrossing();
688 if(bx<1 || bx > 3564)
return;
691 int64_t
t =
event.bunchCrossing() + (
event.orbitNumber()-1)*3564;
705 LogDebug(
"EcalSrValid") << __FILE__ <<
":" << __LINE__ <<
": "
706 <<
"Tmax = " <<
tmax <<
" x 25ns; Tmin = " <<
tmin
707 <<
" x 25ns; L1A(Tmax) = " <<
l1aOfTmax <<
"; L1A(Tmin) = "
729 edm::LogInfo(
"EcalSrValid") <<
"Size of TP collection: " <<
tps_->size() <<
"\n"
730 <<
"Size of EB SRF collection read from data: "
732 <<
"Size of EB SRF collection computed from data TTFs: "
734 <<
"Size of EE SRF collection read from data: "
736 <<
"Size of EE SRF collection computed from data TTFs: "
810 bool eventError =
false;
815 for(
int iZ0=0; iZ0<
nEndcaps; ++iZ0){
816 for(
int iX0=0; iX0<
nEeX; ++iX0){
817 for(
int iY0=0; iY0<
nEeY; ++iY0){
836 PgTiming t(
"analyzeEE: unsupressed digis");
843 int iZ0 = frame.
id().
zside()>0?1:0;
845 if(iX0<0 || iX0>=
nEeX){
846 edm::LogError(
"EcalSrValid") <<
"iX0 (= " << iX0 <<
") is out of range ("
847 <<
"[0," <<
nEeX -1 <<
"]\n";
849 if(iY0<0 || iY0>=
nEeY){
850 edm::LogError(
"EcalSrValid") <<
"iY0 (= " << iY0 <<
") is out of range ("
851 <<
"[0," <<
nEeY -1 <<
"]\n";
857 for(
int i = 0;
i< frame.
size(); ++
i){
858 const int gain12Code = 0x1;
878 int iX0 =
iXY2cIndex(static_cast<const EEDetId&>(hit.
id()).ix());
879 int iY0 =
iXY2cIndex(static_cast<const EEDetId&>(hit.
id()).iy());
880 int iZ0 =
static_cast<const EEDetId&
>(hit.
id()).zside()>0?1:0;
882 if(iX0<0 || iX0>=
nEeX){
883 LogError(
"EcalSrValid") <<
"iX0 (= " << iX0 <<
") is out of range ("
884 <<
"[0," <<
nEeX -1 <<
"]\n";
886 if(iY0<0 || iY0>=
nEeY){
887 LogError(
"EcalSrValid") <<
"iY0 (= " << iY0 <<
") is out of range ("
888 <<
"[0," <<
nEeY -1 <<
"]\n";
899 for(vector<PCaloHit>::const_iterator it =
eeSimHits_->begin();
907 int iZ0 = detId.zside()>0?1:0;
914 PgTiming t(
"analyzeEE: suppressed digis");
920 int iX0 =
iXY2cIndex(static_cast<const EEDetId&>(frame.
id()).ix());
921 int iY0 =
iXY2cIndex(static_cast<const EEDetId&>(frame.
id()).iy());
922 int iZ0 =
static_cast<const EEDetId&
>(frame.
id()).zside()>0?1:0;
923 if(iX0<0 || iX0>=
nEeX){
924 LogError(
"EcalSrValid") <<
"iX0 (= " << iX0 <<
") is out of range ("
925 <<
"[0," <<
nEeX -1 <<
"]\n";
927 if(iY0<0 || iY0>=
nEeY){
928 LogError(
"EcalSrValid") <<
"iY0 (= " << iY0 <<
") is out of range ("
929 <<
"[0," <<
nEeY -1 <<
"]\n";
937 for(
int i = 0;
i< frame.
size(); ++
i){
938 const int gain12Code = 0x1;
939 if(frame[
i].
gainId()!=gain12Code){
949 bool highInterest =
false;
955 highInterest = ((srf->value() & ~
EcalSrFlag::SRF_FORCED_MASK)
967 pair<int,int> ru =
dccCh(frame.
id());
971 <<
"RU " << frame.
id() <<
", "
972 <<
"DCC " << ru.first
973 <<
" Ch : " << ru.second <<
": "
974 <<
"LI channel under ZS threshold.\n";
978 <<
"more ZS errors for this event...\n";
988 for(
int iZ0=0; iZ0<
nEndcaps; ++iZ0){
989 for(
int iX0=0; iX0<
nEeX; ++iX0){
990 for(
int iY0=0; iY0<
nEeY; ++iY0){
1019 char eeSrfMark[2][100][100];
1020 bzero(eeSrfMark,
sizeof(eeSrfMark));
1025 int iX = srf.
id().
ix();
1026 int iY = srf.
id().
iy();
1028 if(iX<1 || iY > 100)
throw cms::Exception(
"EcalSelectiveReadoutValidation")
1029 <<
"Found an endcap SRF with an invalid det ID: " << srf.
id() <<
".\n";
1030 ++eeSrfMark[iZ>0?1:0][iX-1][iY-1];
1031 if(eeSrfMark[iZ>0?1:0][iX-1][iY-1] > 1)
throw cms::Exception(
"EcalSelectiveReadoutValidation")
1032 <<
"Duplicate SRF for supercrystal " << srf.
id() <<
".\n";
1050 PgTiming t(
"analyzeEE: SR appli error log");
1054 <<
" ZS-flagged EE channels under "
1056 <<
" in a complete RU.\n";
1064 bool eventError =
false;
1066 vector<pair<int,int> > xtalEtaPhi;
1072 for(
int iEta0=0; iEta0<
nEbEta; ++iEta0){
1073 for(
int iPhi0=0; iPhi0<
nEbPhi; ++iPhi0){
1079 xtalEtaPhi.push_back(pair<int,int>(iEta0, iPhi0));
1087 PgTiming t1(
"analyzeEB: geomRetrieval");
1096 PgTiming t(
"analyzeEB: unsuppressed digi loop");
1101 int iEta0 =
iEta2cIndex(static_cast<const EBDetId&>(frame.
id()).ieta());
1102 int iPhi0 =
iPhi2cIndex(static_cast<const EBDetId&>(frame.
id()).iphi());
1103 if(iEta0<0 || iEta0>=
nEbEta){
1105 s <<
"EcalSelectiveReadoutValidation: "
1106 <<
"iEta0 (= " << iEta0 <<
") is out of range ("
1107 <<
"[0," <<
nEbEta -1 <<
"]\n";
1110 if(iPhi0<0 || iPhi0>=
nEbPhi){
1112 s <<
"EcalSelectiveReadoutValidation: "
1113 <<
"iPhi0 (= " << iPhi0 <<
") is out of range ("
1114 <<
"[0," <<
nEbPhi -1 <<
"]\n";
1120 for(
int i = 0;
i< frame.
size(); ++
i){
1121 const int gain12Code = 0x1;
1137 for(vector<PCaloHit>::const_iterator it =
ebSimHits_->begin();
1141 int iEta = detId.
ieta();
1143 int iPhi = detId.iphi();
1152 PgTiming t(
"analyzeEB: suppressed digi loop init");
1154 for(
int iEta0=0; iEta0<
nEbEta; ++iEta0){
1155 for(
int iPhi0=0; iPhi0<
nEbPhi; ++iPhi0){
1156 crystalShot[iEta0][iPhi0] =
false;
1164 PgTiming t(
"analyzeEB: suppressed digi loop");
1170 int iEta =
static_cast<const EBDetId&
>(frame.
id()).ieta();
1171 int iPhi =
static_cast<const EBDetId&
>(frame.
id()).iphi();
1174 if(iEta0<0 || iEta0>=
nEbEta){
1176 <<
"iEta0 (= " << iEta0 <<
") is out of range ("
1177 <<
"[0," <<
nEbEta -1 <<
"]");
1179 if(iPhi0<0 || iPhi0>=
nEbPhi){
1181 <<
"iPhi0 (= " << iPhi0 <<
") is out of range ("
1182 <<
"[0," <<
nEbPhi -1 <<
"]");
1184 assert(iEta0>=0 && iEta0<
nEbEta);
1185 assert(iPhi0>=0 && iPhi0<
nEbPhi);
1186 if(!crystalShot[iEta0][iPhi0]){
1187 crystalShot[iEta0][iPhi0] =
true;
1189 cout <<
"Error: several digi for same crystal!";
1197 for(
int i = 0;
i< frame.
size(); ++
i){
1198 const int gain12Code = 0x1;
1199 if(frame[
i].
gainId()!=gain12Code){
1208 bool highInterest =
false;
1216 highInterest = ((srf->value() & ~
EcalSrFlag::SRF_FORCED_MASK)
1229 pair<int,int> ru =
dccCh(frame.
id());
1233 <<
"RU " << frame.
id() <<
", "
1234 <<
"DCC " << ru.first
1235 <<
" Ch : " << ru.second <<
": "
1236 <<
"LI channel under ZS threshold.\n";
1240 <<
"more ZS errors for this event...\n";
1257 int iEta =
static_cast<const EBDetId&
>(hit.
id()).ieta();
1258 int iPhi =
static_cast<const EBDetId&
>(hit.
id()).iphi();
1261 if(iEta0<0 || iEta0>=
nEbEta){
1262 LogError(
"EcalSrValid") <<
"iEta0 (= " << iEta0 <<
") is out of range ("
1263 <<
"[0," <<
nEbEta -1 <<
"]\n";
1265 if(iPhi0<0 || iPhi0>=
nEbPhi){
1266 LogError(
"EcalSrValid") <<
"iPhi0 (= " << iPhi0 <<
") is out of range ("
1267 <<
"[0," <<
nEbPhi -1 <<
"]\n";
1286 PgTiming t(
"analyzeEB: loop on energies");
1288 for(
unsigned int i=0;
i<xtalEtaPhi.size(); ++
i){
1289 int iEta0 = xtalEtaPhi[
i].first;
1290 int iPhi0= xtalEtaPhi[
i].second;
1293 double recE = energies.
recE;
1316 char ebSrfMark[2][17][72];
1317 bzero(ebSrfMark,
sizeof(ebSrfMark));
1323 int iPhi = srf.
id().
iphi();
1329 if(iEtaAbs < 1 || iEtaAbs > 17
1330 || iPhi < 1 || iPhi > 72)
throw cms::Exception(
"EcalSelectiveReadoutValidation")
1331 <<
"Found a barrel SRF with an invalid det ID: " << srf.
id() <<
".\n";
1332 ++ebSrfMark[iZ>0?1:0][iEtaAbs-1][iPhi-1];
1333 if(ebSrfMark[iZ>0?1:0][iEtaAbs-1][iPhi-1] > 1)
throw cms::Exception(
"EcalSelectiveReadoutValidation")
1334 <<
"Duplicate SRF for RU " << srf.
id() <<
".\n";
1354 <<
" ZS-flagged EB channels under "
1356 <<
" in a complete RU.\n";
1387 #if (CMSSW_COMPAT_VERSION>=210)
1395 it !=
tps_->end(); ++it){
1410 #if (CMSSW_COMPAT_VERSION<210)
1413 tpEt = ecalScale.
getTPGInGeV(it->compressedEt(), it->id()) ;
1416 tpEt = it->compressedEt();
1418 int iEta = it->id().ieta();
1420 int iPhi = it->id().iphi();
1422 double etSum =
ttEtSums[iEta0][iPhi0];
1426 if((it->ttFlag() & 0x3) == 0){
1429 if((it->ttFlag() & 0x3) == 1){
1432 if((it->ttFlag() & 0x3) == 3){
1435 if((it->ttFlag() & 0x4)){
1461 for (
unsigned int digis=0; digis<
ebDigis_->
size(); ++digis){
1467 for (
unsigned int digis=0; digis<
eeDigis_->
size(); ++digis){
1473 for(
unsigned iDcc0 = 0; iDcc0 <
nDccs_; ++iDcc0){
1510 template<
class T,
class U>
1512 const U& srFlagColl){
1513 const DetId& xtalId = frame.id();
1514 typedef typename U::key_type RuDetId;
1516 typename U::const_iterator srf = srFlagColl.find(ruId);
1518 bool highInterest =
false;
1521 if(srf != srFlagColl.end()){
1526 flag = srf->value() & ~
EcalSrFlag::SRF_FORCED_MASK;
1534 pair<int,int> ch =
dccCh(xtalId);
1543 int iEta0 =
iEta2cIndex(static_cast<const EBDetId&>(xtalId).ieta());
1544 int iPhi0 =
iPhi2cIndex(static_cast<const EBDetId&>(xtalId).iphi());
1568 int iX0 =
iXY2cIndex(static_cast<const EEDetId&>(frame.id()).ix());
1569 int iY0 =
iXY2cIndex(static_cast<const EEDetId&>(frame.id()).iy());
1570 int iZ0 =
static_cast<const EEDetId&
>(frame.id()).zside()>0?1:0;
1590 if(ch.second < 1 || ch.second > 68){
1592 <<
"Error in DCC channel retrieval for crystal with detId "
1593 << xtalId.
rawId() <<
"DCC channel out of allowed range [1..68]\n";
1623 static bool firstCall =
true;
1633 double adc2GeV = 0.;
1647 double gainInv[] = {12., 1., 6., 12.};
1649 for(
int i=0;
i <
n; ++
i){
1650 acc +=
weights_[
i]*frame[
i].adc()*gainInv[frame[
i].gainId()]*adc2GeV;
1671 <<
"Wrong type of DetId passed to the "
1672 "EcalSelectiveReadoutValidation::dccCh(const DetId&). "
1673 "An ECAL DetId was expected.\n";
1686 const int oneXtalPhi0 = iTtPhi0 * 5;
1687 const int oneXtalEta0 = (iTtEta0 -
nOneEeTtEta) * 5;
1694 if(detId.
rawId() & 0x8000){
1710 <<
"Wrong type of DetId passed to the method "
1711 "EcalSelectiveReadoutValidation::dccCh(const DetId&). "
1712 "A valid EcalTriggerTower, EcalBarrel or EcalEndcap DetId was expected. "
1713 "detid = " << xtalId.
rawId() <<
".\n";
1719 result.first = EcalElecId.
dccId();
1723 <<
"Got an invalid DCC ID, DCCID = " << result.first
1724 <<
" for DetId 0x" << hex << detId.
rawId()
1725 <<
" and 0x" << xtalId.
rawId() << dec <<
"\n";
1728 result.second = EcalElecId.
towerId();
1730 if(result.second < 1 || result.second > 68){
1732 <<
"Got an invalid DCC channel ID, DCC_CH = " << result.second
1733 <<
" for DetId 0x" << hex << detId.
rawId()
1734 <<
" and 0x" << xtalId.
rawId() << dec <<
"\n";
1746 (xtalId.
iy()-1)/scEdge+1,
1788 int iDCC= EcalElecId.
dccId();
1789 int iDccChan = EcalElecId.
towerId();
1790 const bool ignoreSingle =
true;
1802 if(eeGeometry==0 || ebGeometry==0){
1812 for(
int iEta0 = 0; iEta0 <
nTtEta; ++iEta0){
1813 for(
int iPhi0 = 0; iPhi0 <
nTtPhi; ++iPhi0){
1836 it != eeDigis.
end(); ++it){
1853 int innerTTEtas[] = {0, 1, 54, 55};
1854 for(
unsigned iRing = 0; iRing <
sizeof(innerTTEtas)/
sizeof(innerTTEtas[0]);
1856 int iTtEta0 = innerTTEtas[iRing];
1872 for(
unsigned iTtPhi0 = 0; iTtPhi0 <
nTtPhi-1; iTtPhi0 += 2){
1873 double et = .5*(
ttEtSums[iTtEta0][iTtPhi0]
1889 double weights[] = {0., -1/3., -1/3., -1/3., 0., 1.};
1891 double adc2GeV = 0.;
1899 << __FILE__ <<
":" << __LINE__ <<
": "
1900 <<
"this is a bug. Please report it.\n";
1905 const int n = min<int>(frame.size(),
sizeof(
weights)/
sizeof(weights[0]));
1907 double gainInv[] = {12., 1., 6., 12};
1909 for(
int i=offset;
i <
n; ++
i){
1911 if(iframe>=0 && iframe<frame.size()){
1912 acc += weights[
i]*frame[iframe].adc()
1913 *gainInv[frame[iframe].gainId()]*adc2GeV;
1928 <<
"Failed to book integer DQM monitor element" <<
name;
1939 <<
"Failed to book histogram " <<
name;
1947 nybins, ymin, ymax);
1950 <<
"Failed to book histogram " <<
name;
1961 <<
"Failed to book histogram " <<
name;
1977 <<
"Failed to book histogram " <<
name;
2007 log <<
"Avalailable histograms (DQM monitor elements): \n";
2011 log << it->first <<
": " << it->second <<
"\n";
2013 log <<
"\nTo include an histogram add its name in the vstring parameter "
2014 "'histograms' of the EcalSelectiveReadoutValidation module\n";
2018 double ruHeaderPayload = 0.;
2019 const int firstEbDcc0 =
nEeDccs/2;
2020 for(
int iDcc0 = firstEbDcc0; iDcc0 < firstEbDcc0 +
nEbDccs; ++iDcc0){
2029 double ruHeaderPayload = 0.;
2030 const unsigned firstEbDcc0 =
nEeDccs/2;
2031 for(
unsigned iDcc0 = 0; iDcc0 <
nDccs_; ++iDcc0){
2033 if(iDcc0== firstEbDcc0) iDcc0 +=
nEbDccs;
2047 double scale = 1./eventCount;
2049 for(
unsigned i = 0;
i <
sizeof(mes)/
sizeof(mes[0]); ++
i){
2050 if(mes[
i] == 0)
continue;
2052 if(dynamic_cast<TH2*>(h)){
2053 h->GetZaxis()->SetTitle(
"Frequency");
2055 h->GetYaxis()->SetTitle(
"<Count>");
2057 buf <<
"Normalising " << h->GetName() <<
". Factor: " << scale <<
"\n";
2061 h->SetBit(TH1::kIsAverage);
2070 const std::vector<int>& firWeights,
2073 const int nFIRTaps = 6;
2075 const vector<int>&
w = firWeights;
2079 bool gain12saturated =
false;
2080 const int gain12 = 0x01;
2081 const int lastFIRSample = firstFIRSample + nFIRTaps - 1;
2084 for(
int iSample=firstFIRSample-1;
2085 iSample<lastFIRSample; ++iSample, ++iWeight){
2086 if(iSample>=0 && iSample < frame.
size()){
2088 if(sample.
gainId()!=gain12) gain12saturated =
true;
2089 LogTrace(
"DccFir") << (iSample>=firstFIRSample?
"+":
"") << sample.
adc()
2090 <<
"*(" << w[iWeight] <<
")";
2091 acc+=sample.
adc()*w[iWeight];
2094 ": Not enough samples in data frame or 'ecalDccZs1stSample' module "
2095 "parameter is not valid...";
2102 acc = (acc>=0)?(acc >> 8):-(-acc >> 8);
2107 LogTrace(
"DccFir") <<
"acc: " << acc <<
"\n"
2108 <<
"saturated: " << (gain12saturated?
"yes":
"no") <<
"\n";
2111 *saturated = gain12saturated;
2120 const int nFIRTaps = 6;
2121 vector<int> firWeights(nFIRTaps, 0);
2122 const static int maxWeight = 0xEFF;
2123 for(
unsigned i=0;
i <
min((
size_t)nFIRTaps,normalizedWeights.size()); ++
i){
2124 firWeights[
i] = lround(normalizedWeights[
i] * (1<<10));
2125 if(
abs(firWeights[
i])>maxWeight){
2126 firWeights[
i] = firWeights[
i]<0?-maxWeight:maxWeight;
2134 bool notNormalized =
false;
2135 bool notInt =
false;
2136 for(
unsigned i=0;
i < weightsForZsFIR.size(); ++
i){
2137 if(weightsForZsFIR[
i] > 1.) notNormalized =
true;
2138 if((
int)weightsForZsFIR[
i]!=weightsForZsFIR[
i]) notInt =
true;
2140 if(notInt && notNormalized){
2142 <<
"weigtsForZsFIR paramater values are not valid: they "
2143 <<
"must either be integer and uses the hardware representation "
2144 <<
"of the weights or less or equal than 1 and used the normalized "
2145 <<
"representation.";
2149 firWeights_ = vector<int>(weightsForZsFIR.size());
2150 for(
unsigned i = 0;
i< weightsForZsFIR.size(); ++
i){
2157 log <<
"Input weights for FIR: ";
2158 for(
unsigned i = 0;
i < weightsForZsFIR.size(); ++
i){
2159 log << weightsForZsFIR[
i] <<
"\t";
2163 log <<
"\nActual FIR weights: ";
2166 s2 += firWeights_[
i]*firWeights_[
i];
2170 log <<
"\nNormalized FIR weights after hw representation rounding: ";
2183 <<
"Failed to open the log file '"
2185 <<
"' for SRP algorithm result check.\n";
2193 <<
"Failed to open the log file '"
2195 <<
"' for Selective Readout decision application check.\n";
2205 typedef typename T::const_iterator SrFlagCollectionConstIt;
2206 typedef typename T::key_type MyRuDetIdType;
2207 SrFlagCollectionConstIt itSrfFromData = srfFromData.begin();
2208 SrFlagCollectionConstIt itComputedSr = computedSrf.begin();
2215 while(itSrfFromData != srfFromData.end()
2216 || itComputedSr != computedSrf.end()){
2218 MyRuDetIdType inconsistentRu = 0;
2219 bool inconsistent =
false;
2220 if(itComputedSr == computedSrf.end() ||
2221 (itSrfFromData != srfFromData.end()
2222 && itSrfFromData->id() < itComputedSr->id())){
2224 pair<int, int> ch =
dccCh(itSrfFromData->id());
2226 <<
", DCC " << ch.first <<
" ch " << ch.second
2227 <<
" found in data (SRF:" << itSrfFromData->flagName()
2228 <<
") but not in the set of SRFs computed from the data TTF.\n";
2229 inconsistentRu = itSrfFromData->id();
2230 inconsistent =
true;
2232 }
else if(itSrfFromData==srfFromData.end() ||
2233 (itComputedSr != computedSrf.end()
2234 && itComputedSr->id() < itSrfFromData->id())){
2236 pair<int, int> ch =
dccCh(itComputedSr->id());
2239 <<
", DCC " << ch.first <<
" ch " << ch.second
2240 <<
" not found in data. Computed SRF: "
2241 << itComputedSr->flagName() <<
".\n";
2242 inconsistentRu = itComputedSr->id();
2243 inconsistent =
true;
2248 if(itComputedSr->value()!=itSrfFromData->value()){
2250 pair<int, int> ch =
dccCh(itSrfFromData->id());
2252 << itSrfFromData->id()
2253 <<
", DCC " << ch.first <<
" ch " << ch.second
2254 <<
", SRF inconsistency: "
2255 <<
"from data: " << itSrfFromData->flagName()
2256 <<
", computed from TTF: "
2257 << itComputedSr->flagName()
2260 inconsistentRu = itComputedSr->id();
2261 inconsistent =
true;
2263 if(itComputedSr != computedSrf.end()) ++itComputedSr;
2264 if(itSrfFromData != srfFromData.end()) ++itSrfFromData;
2281 <<
"Argument of EcalSelectiveReadoutValidation::dccId(const EcalTrigTowerDetId&) "
2282 <<
"must be a barrel trigger tower Id\n";
2284 return dccCh(detId).first;
2320 buf <<
"List of DCCs found in the first processed event: ";
2322 for(
unsigned iDcc = 0; iDcc <
nDccs_; ++iDcc){
2324 buf << (first?
"":
", ") << (iDcc +
minDccId_);
2328 buf <<
"\nOnly DCCs from this list will be considered for error logging\n";
2331 LogInfo(
"EcalSrValid") << buf;
2338 typedef typename T::const_iterator SrFlagCollectionConstIt;
2339 typedef typename T::key_type MyRuDetIdType;
2341 for(SrFlagCollectionConstIt itSrf = srfs.begin();
2342 itSrf != srfs.end(); ++itSrf){
2344 pair<int,int> ru =
dccCh(itSrf->id());
2360 << itSrf->id() <<
" (DCC " << ru.first
2361 <<
" ch " << ru.second <<
") is 'Full readout' "
2362 <<
"while none of its channel was read out\n";
2372 << itSrf->id() <<
" (DCC " << ru.first
2373 <<
" ch " << ru.second <<
") is 'Full readout' "
2377 <<
" channels were read out.\n";
2402 if(iDcc < minDccId_ || iDcc >
maxDccId_){
2404 }
else if (10 <= iDcc && iDcc <= 45) {
2408 if(iDcc < 10) iDccPhi = iDcc;
2409 else iDccPhi = iDcc - 45;
2410 switch(iDccPhi*100+iDccCh){
void printAvailableHists()
double getDccSrDependentPayload(int iDcc0, double nReadRus, double nReadXtals) const
MonitorElement * meEbFullRoCnt_
int iPhi2cIndex(int iPhi) const
T getParameter(std::string const &) const
std::string srApplicationErrorLogFileName_
T getUntrackedParameter(std::string const &, T const &) const
MonitorElement * meEbRecVsSimE_
MonitorElement * meForcedRu_
MonitorElement * meChOcc_
bool gain12
eta crystal position
MonitorElement * bookProfile(const std::string &name, const std::string &title, int nbins, double xmin, double xmax)
int getCrystalCount(int iDcc, int iDccCh)
CollHandle< EBDigiCollection > ebNoZsDigis_
MonitorElement * meEeEMean_
std::ofstream srApplicationErrorLog_
Output ascii file for unconsistency between Xtals and RU Flags.
MonitorElement * meZsErrType1Cnt_
MonitorElement * meTtfVsTp_
double getDccOverhead(subdet_t subdet) const
static const int nEeX
EE crystal grid size along X.
MonitorElement * meDroppedFROMap_
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
int xtalGraphX(const EEDetId &id) const
double getDccEventSize(int iDcc0, double nReadXtals) const
int nIncompleteFRO_
Counter of FRO-flagged RU only partial data.
MonitorElement * meCompleteZSRateMap_
MonitorElement * meEeFullRoCnt_
int cIndex2iPhi(int i) const
void setEventSetup(const edm::EventSetup &evtSetup)
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
int gainId(sample_type sample)
get the gainId (2 bits)
bool verbose_
Verbosity switch.
double phi
number of sim hits
static const int nEbPhi
number of crystals along Phi in EB
MonitorElement * meEeZsErrCnt_
MonitorElement * meEeFixedPayload_
Ecal readout channel identification [32:20] Unused (so far) [19:13] DCC id [12:6] tower [5:3] strip [...
MonitorElement * meEbNoise_
int iXY2cIndex(int iX) const
static const int SRF_FORCED_MASK
static const double rad2deg
Conversion factor from radian to degree.
energiesEe_t eeEnergies[nEndcaps][nEeX][nEeY]
MonitorElement * meEeZsErrType1Cnt_
int simHit
energy reconstructed from zero-suppressed digi
CollHandle< EcalTrigPrimDigiCollection > tps_
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
Sin< T >::type sin(const T &t)
MonitorElement * meVolBLI_
Geom::Phi< T > phi() const
void analyzeEB(const edm::Event &event, const edm::EventSetup &es)
std::vector< EcalRecHit >::const_iterator const_iterator
Geom::Theta< T > theta() const
int simHit
energy reconstructed from zero-suppressed digi
void analyze(edm::Event const &e, edm::EventSetup const &c)
Analyzes the event.
MonitorElement * meEbHiZsFir_
MonitorElement * meDccVolFromData_
void endRun(const edm::Run &r, const edm::EventSetup &c)
Calls at end of run.
int nEeZsErrors_
Counter of EE ZS errors (LI channel below ZS threshold)
CollHandle< FEDRawDataCollection > fedRaw_
int towerId() const
get the tower id
MonitorElement * meTpVsEtSum_
MonitorElement * meDccLiVol_
void beginRun(const edm::Run &r, const edm::EventSetup &c)
Calls at begin of run.
void analyzeEE(const edm::Event &event, const edm::EventSetup &es)
MonitorElement * meEeNoise_
const_iterator begin() const
MonitorElement * meVolELI_
static const int nEeDccs
number of DCCs for EE
double getTPGInGeV(const EcalTriggerPrimitiveDigi &tpDigi)
double eta
phi crystal position in degrees
std::pair< int, int > getDCCandSC(EcalScDetId id) const
int gainId() const
get the gainId (2 bits)
MonitorElement * meTtfVsEtSum_
double ttEtSums[nTtEta][nTtPhi]
MonitorElement * meEbZsErrCnt_
MonitorElement * meEeLiZsFir_
MonitorElement * meDroppedFROCnt_
MonitorElement * meTpMap_
size_t size() const
Lenght of the data buffer in bytes.
MonitorElement * meDccHiVol_
MonitorElement * meEbLiZsFir_
MonitorElement * meLiTtf_
bool registerHist(const std::string &name, const std::string &title)
EcalTrigTowerDetId towerOf(const DetId &id) const
Get the tower id for this det id (or null if not known)
int ieta() const
get the tower ieta
void setTtEtSums(const edm::EventSetup &es, const EBDigiCollection &ebDigis, const EEDigiCollection &eeDigis)
MonitorElement * bookFloat(const char *name)
Book float.
int zside() const
get the z-side of the tower (1/-1)
MonitorElement * book1D(const std::string &name, const std::string &title, int nbins, double xmin, double xmax)
virtual const CaloCellGeometry * getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
MonitorElement * meVolBHI_
static const int minDccId_
static const int nEbEta
number of crystals along Eta in EB
uint32_t rawId() const
get the raw id
MonitorElement * meIncompleteFROMap_
double frame2EnergyForTp(const T &frame, int offset=0) const
EcalElectronicsId getElectronicsId(const DetId &id) const
Get the electronics id for this det id.
CollHandle< EESrFlagCollection > eeComputedSrFlags_
static const int nTtPhi
Number of Trigger Towers along Phi.
int xtalGraphY(const EEDetId &id) const
CollHandle< EEDigiCollection > eeDigis_
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
std::vector< int > firWeights_
void checkSrApplication(const edm::Event &event, T &srfs)
std::string outputFile_
Output file for histograms.
CollHandle< RecHitCollection > eeRecHits_
const T & max(const T &a, const T &b)
int ietaAbs() const
get the absolute value of the tower ieta
static const int maxDccId_
void analyzeDataVolume(const edm::Event &e, const edm::EventSetup &es)
double getL1aRate() const
int iTtEta2cIndex(int iEta) const
double eta
phi crystal position in degrees
MonitorElement * meEeHiZsFir_
void anaDigi(const T &frame, const U &srFlagColl)
CollHandle< EBSrFlagCollection > ebSrFlags_
MonitorElement * meEbNoZsRecVsSimE_
MonitorElement * meEeSimE_
void updateL1aRate(const edm::Event &event)
static const int SRF_FULL
double noZsRecE
sim hit energy sum
int nCompleteZS_
Counter of ZS-flagged RU fully read out.
CollHandle< std::vector< PCaloHit > > eeSimHits_
MonitorElement * meDroppedFRORateMap_
static int dccZsFIR(const EcalDataFrame &frame, const std::vector< int > &firWeights, int firstFIRSample, bool *saturated=0)
DQMStore * dbe_
Histogramming interface.
int nEeFROCnt_
Counter of EE FRO-flagged RUs.
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
MonitorElement * bookFloat(const std::string &name)
int ieta() const
get the crystal ieta
bool logSrApplicationErrors_
std::vector< double > weights_
MonitorElement * meCompleteZSCnt_
unsigned int offset(bool)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
int iTtPhi2cIndex(int iPhi) const
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
int iEta2cIndex(int iEta) const
MonitorElement * book2D(const std::string &name, const std::string &title, int nxbins, double xmin, double xmax, int nybins, double ymin, double ymax)
MonitorElement * meMiTtf_
int dccId() const
get the DCC (Ecal Local DCC value not global one) id
MonitorElement * meVolEHI_
void read(const edm::Event &event)
EcalScDetId superCrystalOf(const EEDetId &xtalId) const
int cIndex2iEta(int i) const
std::vector< EcalScDetId > getEcalScDetId(int DCCid, int DCC_Channel, bool ignoreSingleCrystal=true) const
CollHandle< EESrFlagCollection > eeSrFlags_
static const int nDccRus_[nDccs_]
number of RUs for each DCC
MonitorElement * meEeRecVsSimE_
energiesEb_t ebEnergies[nEbEta][nEbPhi]
static const int nOneEeTtEta
Number of Trigger Towers in an endcap along Eta.
int nEbFROCnt_
Counter of EB FRO-flagged RUs.
static const int nEbDccs
number of DCCs for EB
MonitorElement * meZsErrCnt_
CollHandle< std::vector< PCaloHit > > ebSimHits_
int nEbZsErrors_
Counter of EB ZS errors (LI channel below ZS threshold)
static const int scEdge
Number of crystals along a supercrystal edge.
MonitorElement * meFullRoCnt_
double recE
energy reconstructed from unsuppressed digi
static const double tmax[3]
void readAllCollections(const edm::Event &e)
static std::vector< int > getFIRWeights(const std::vector< double > &normalizedWeights)
int iphi() const
get the tower iphi
static const int ebTtEdge
Number of crystals along an EB TT.
EcalSelectiveReadoutValidation(const edm::ParameterSet &ps)
Constructor.
DetId id() const
get the id
void configFirWeights(std::vector< double > weightsForZsFIR)
double getEeEventSize(double nReadXtals) const
MonitorElement * meForcedTtf_
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
MonitorElement * meDccVol_
static const int kByte_
number of bytes in 1 kByte:
MonitorElement * meEbFixedPayload_
const EcalScDetId & id() const
MonitorElement * meVolLI_
bool ebRuActive_[nEbEta/ebTtEdge][nEbPhi/ebTtEdge]
double getBytesPerCrystal() const
int nPerRu_[nDccs_][nDccChs_]
PgTiming(const std::string &mess)
T const * product() const
int getRuCount(int iDcc0) const
MonitorElement * meCompleteZSMap_
MonitorElement * meIncompleteFRORateMap_
MonitorElement * meVolHI_
EcalTrigTowerDetId readOutUnitOf(const EBDetId &xtalId) const
CollHandle< EEDigiCollection > eeNoZsDigis_
double recE
energy reconstructed from unsuppressed digi
const EcalTrigTowerDetId & id() const
int dccId(const EcalScDetId &detId) const
MonitorElement * meEeRecE_
std::map< std::string, std::string > availableHistList_
IdealGeometryRecord MyCaloGeometryRecord
const_iterator end() const
unsigned ttId(const DetId &)
ESHandle< TrackerGeometry > geometry
bool isRuComplete_[nDccs_][nDccChs_]
int ruGraphX(const EcalScDetId &id) const
double phi
number of sim hits
void normalizeHists(double eventCount)
static const int nTtEta
Number of Trigger Towers along Eta.
MonitorElement * meEeNoZsRecVsSimE_
MonitorElement * meEbZsErrType1Cnt_
MonitorElement * meFixedPayload_
MonitorElement * meEbRecE_
MonitorElement * meEeRecEHitXtal_
int nDroppedFRO_
Counter of FRO-flagged RU dropped from data.
void fill(MonitorElement *me, float x)
MonitorElement * meL1aRate_
int ruGraphY(const EcalScDetId &id) const
void compareSrfColl(const edm::Event &event, T &srfFromData, T &computedSrf)
std::pair< int, int > dccCh(const DetId &xtalId) const
double frame2Energy(const EcalDataFrame &frame) const
double noZsRecE
sim hit energy sum
MonitorElement * meEbRecEHitXtal_
MonitorElement * meEbSimE_
std::ofstream srpAlgoErrorLog_
Output ascii file for unconsistency on SR flags.
static const int nEeY
EE crystal grid size along Y.
CollHandle< EBDigiCollection > ebDigis_
double getEbEventSize(double nReadXtals) const
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Detector det() const
get the detector field from this detid
MonitorElement * meSRFlagsConsistency_
static const unsigned nDccs_
Total number of DCCs.
MonitorElement * meZs1Ru_
MonitorElement * meFullRoRu_
std::string srpAlgoErrorLogFileName_
~EcalSelectiveReadoutValidation()
Destructor.
MonitorElement * meHiTtf_
std::vector< bool > logErrForDccs_
static const int nEndcaps
number of endcaps
const EcalTrigTowerConstituentsMap * triggerTowerMap_
void analyzeTP(const edm::Event &event, const edm::EventSetup &es)
std::set< std::string > histList_
const EcalElectronicsMapping * elecMap_
CollHandle< RecHitCollection > ebRecHits_
int adc() const
get the ADC sample (12 bits)
bool eeRuActive_[nEndcaps][nEeX/scEdge][nEeY/scEdge]
bool gain12
eta crystal position
MonitorElement * meIncompleteFROCnt_
CollHandle< EBSrFlagCollection > ebComputedSrFlags_
MonitorElement * meEbEMean_
MonitorElement * bookProfile2D(const std::string &name, const std::string &title, int nbinx, double xmin, double xmax, int nbiny, double ymin, double ymax, const char *option="")
MonitorElement * bookProfile2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, int nchZ, double lowZ, double highZ, const char *option="s")