31 #if (CMSSW_COMPAT_VERSION>=210)
50 34, 32, 33, 33, 32, 34, 33, 34, 33,
53 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
56 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
59 32, 33, 33, 32, 34, 33, 34, 33, 34
65 # include <sys/time.h>
68 gettimeofday(&start_, 0);
77 std::cout <<
"[PgTiming] " << mess_ <<
" "
78 << ((t.tv_sec-start_.tv_sec)*1.e3
79 + (t.tv_usec-start_.tv_usec)*1.e-3)
87 #else //DO_TIMING is not defined
92 #endif //DO_TIMING defined condition
95 collNotFoundWarn_(ps.getUntrackedParameter<bool>(
"warnIfCollectionNotFound",
true)),
96 ebDigis_(ps.getParameter<edm::
InputTag>(
"EbDigiCollection"),
false,
98 eeDigis_(ps.getParameter<edm::
InputTag>(
"EeDigiCollection"),
false,
100 ebNoZsDigis_(ps.getParameter<edm::
InputTag>(
"EbUnsuppressedDigiCollection"),
102 eeNoZsDigis_(ps.getParameter<edm::
InputTag>(
"EeUnsuppressedDigiCollection"),
104 ebSrFlags_(ps.getParameter<edm::
InputTag>(
"EbSrFlagCollection"),
false,
106 eeSrFlags_(ps.getParameter<edm::
InputTag>(
"EeSrFlagCollection"),
false,
108 ebComputedSrFlags_(ps.getParameter<edm::
InputTag>(
"EbSrFlagFromTTCollection"),
false,
110 eeComputedSrFlags_(ps.getParameter<edm::
InputTag>(
"EeSrFlagFromTTCollection"),
false,
112 ebSimHits_(ps.getParameter<edm::
InputTag>(
"EbSimHitCollection"),
false,
114 eeSimHits_(ps.getParameter<edm::
InputTag>(
"EeSimHitCollection"),
false,
116 tps_(ps.getParameter<edm::
InputTag>(
"TrigPrimCollection"),
false,
118 ebRecHits_(ps.getParameter<edm::
InputTag>(
"EbRecHitCollection"),
false,
120 eeRecHits_(ps.getParameter<edm::
InputTag>(
"EeRecHitCollection"),
false,
122 fedRaw_(ps.getParameter<edm::
InputTag>(
"FEDRawCollection"),
false,
125 tmin(numeric_limits<int64_t>::
max()),
129 localReco_(ps.getParameter<bool>(
"LocalReco")),
130 weights_(ps.getParameter<vector<double> >(
"weights")),
131 tpInGeV_(ps.getParameter<bool>(
"tpInGeV")),
132 firstFIRSample_(ps.getParameter<int>(
"ecalDccZs1stSample")),
133 useEventRate_(ps.getParameter<bool>(
"useEventRate")),
134 logErrForDccs_(nDccs_,
false),
137 histDir_(ps.getParameter<
string>(
"histDir")),
138 withEeSimHit_(
false),
139 withEbSimHit_(
false){
141 PgTiming t(
"EcalSelectiveReadoutValidation ctor");
158 double ebZsThr = ps.
getParameter<
double>(
"ebZsThrADCCount");
159 double eeZsThr = ps.
getParameter<
double>(
"eeZsThrADCCount");
181 LogInfo(
"OutputInfo") <<
" Ecal Digi Task histograms will be saved to '"
184 LogInfo(
"OutputInfo") <<
" Ecal Digi Task histograms will NOT be saved";
199 if(
verbose_) dbe_->showDirStructure();
205 vector<string>(1,
"all")));
207 for(vector<string>::iterator it = hists.begin();
208 it!=hists.end(); ++it)
histList_.insert(*it);
224 "ECAL DCC event fragment size;Dcc id; "
228 "LI channel payload per DCC;Dcc id; "
232 "HI channel payload per DCC;Dcc id; "
236 "ECAL DCC event fragment size;Dcc id; "
240 "ECAL Barrel low interest crystal data payload;"
241 "Event size (kB);Nevts",
245 "Endcap low interest crystal data payload;"
246 "Event size (kB);Nevts",
250 "ECAL low interest crystal data payload;"
251 "Event size (kB);Nevts",
255 "Barrel high interest crystal data payload;"
256 "Event size (kB);Nevts",
260 "Endcap high interest crystal data payload;"
261 "Event size (kB);Nevts",
265 "ECAL high interest crystal data payload;"
266 "Event size (kB);Nevts",
270 "Barrel data volume;Event size (kB);Nevts",
274 "Endcap data volume;Event size (kB);Nevts",
278 "ECAL data volume;Event size (kB);Nevts",
282 "ECAL crystal channel occupancy after zero suppression;"
283 "iX -200 / iEta / iX + 100;"
284 "iY / iPhi (starting from -10^{o}!);"
293 title =
string(
"Trigger primitive TT E_{T};E_{T} ")
294 + tpUnit +
string(
";Event Count");
300 "Trigger primitive TT flag;Flag number;Event count",
303 title =
string(
"Trigger tower flag vs TP;E_{T}(TT) (")
304 + tpUnit +
string(
");Flag number");
311 "Trigger tower flag vs #sumE_{T};"
316 title =
string(
"Trigger primitive Et (TP) vs #sumE_{T};"
318 "E_{T} (TP) (") + tpUnit +
string (
")");
325 title =
string(
"Trigger primitive E_{T};"
328 "E_{T} (TP) (") + tpUnit +
string (
")");
336 "Full Read-out readout unit;"
337 "iX - 40 / iEta / iX + 20;"
338 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
344 "Number of Full-readout-flagged readout units;"
345 "FRO RU count;Event count",
349 "Number of EB Full-readout-flagged readout units;"
350 "FRO RU count;Event count",
354 "Number of EE Full-readout-flagged readout units;"
355 "FRO RU count;Event count",
359 "Readout unit with ZS-thr-1 flag;"
360 "iX - 40 / iEta / iX + 20;"
361 "iY0 / iPhi0 (iPhi = 1 at phi = 0 rad);"
367 "ECAL readout unit with forced bit of SR flag on;"
368 "iX - 40 / iEta / iX + 20;"
369 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
375 "Low interest trigger tower flags;"
383 "Mid interest trigger tower flags;"
391 "High interest trigger tower flags;"
399 "Trigger tower flags with forced bit set;"
407 const float ebMinNoise = -1.;
408 const float ebMaxNoise = 1.;
410 const float eeMinNoise = -1.;
411 const float eeMaxNoise = 1.;
414 const float ebMinE = 0.;
415 const float ebMaxE = 120.;
417 const float eeMinE = 0.;
418 const float eeMaxE = 120.;
420 const float ebMinE = ebMinNoise;
421 const float ebMaxE = ebMaxNoise;
423 const float eeMinE = eeMinNoise;
424 const float eeMaxE = eeMaxNoise;
428 const int evtMax = 500;
431 "Crystal reconstructed energy;E (GeV);Event count",
432 100, ebMinE, ebMaxE);
435 "EE <E_hit>;event #;<E_hit> (GeV)",
436 evtMax, .5, evtMax + .5);
440 "(rec E of crystal without deposited energy)"
441 ";Rec E (GeV);Event count",
442 100, ebMinNoise, ebMaxNoise);
445 "Emulated ouput of ZS FIR filter for EB "
446 "low interest crystals;"
452 "Emulated ouput of ZS FIR filter for EB "
453 "high interest crystals;"
467 100, ebMinE, ebMaxE);
470 "EB rec energy of hit crystals",
471 100, ebMinE, ebMaxE);
474 "Crystal simulated vs reconstructed energy;"
475 "Esim (GeV);Erec GeV);Event count",
477 100, ebMinE, ebMaxE);
480 "Crystal no-zs simulated vs reconstructed "
482 "Esim (GeV);Erec GeV);Event count",
484 100, ebMinE, ebMaxE);
487 "EE crystal reconstructed energy;E (GeV);"
489 100, eeMinE, eeMaxE);
492 "<E_{EE hit}>;event;<E_{hit}> (GeV)",
493 evtMax, .5, evtMax + .5);
498 "(rec E of crystal without deposited energy);"
499 "E (GeV);Event count",
500 200, eeMinNoise, eeMaxNoise);
503 "Emulated ouput of ZS FIR filter for EE "
504 "low interest crystals;"
510 "Emulated ouput of ZS FIR filter for EE "
511 "high interest crystals;"
526 100, eeMinE, eeMaxE);
529 "EE rec energy of hit crystals",
530 100, eeMinE, eeMaxE);
533 "EE crystal simulated vs reconstructed energy;"
534 "Esim (GeV);Erec GeV);Event count",
536 100, eeMinE, eeMaxE);
539 "EE crystal no-zs simulated vs "
541 "energy;Esim (GeV);Erec GeV);Event count",
543 100, eeMinE, eeMaxE);
546 "TTFlags and SR Flags mismatch;"
547 "iX - 40 / iEta / iX + 20;"
548 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
555 "Incomplete full-readout-flagged readout units;"
556 "iX - 40 / iEta / iX + 20;"
557 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
563 "Number of incomplete full-readout-flagged "
565 "Number of RUs;Event count;",
570 "Incomplete full-readout-flagged readout units;"
571 "iX - 40 / iEta / iX + 20;"
572 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
573 "Incomplete error rate",
579 "Dropped full-readout-flagged readout units;"
580 "iX - 40 / iEta / iX + 20;"
581 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
587 "Number of dropped full-readout-flagged "
588 "RU count;RU count;Event count",
592 "Number of zero-suppressed-flagged RU fully "
594 "RU count;Event count",
598 buf <<
"Number of LI EB channels below the " << ebZsThr_/4. <<
" ADC count ZS threshold;"
599 "Channel count;Event count",
605 buf <<
"Number of LI EE channels below the " <<
eeZsThr_/4. <<
" ADC count ZS theshold;"
606 "Channel count;Event count",
612 "Number of LI channels below the ZS threshold;"
613 "Channel count;Event count",
617 "Number of EB channels below the ZS "
618 "threshold in a LI but fully readout RU;"
619 "Channel count;Event count;",
623 "Number EE channels below the ZS threshold"
624 " in a LI but fully readout RU;"
625 "Channel count;Event count",
629 "Number of LI channels below the ZS threshold "
630 "in a LI but fully readout RU;"
631 "Channel count;Event count",
637 "Dropped full-readout-flagged readout units"
638 "iX - 40 / iEta / iX + 20;"
639 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
645 "Complete zero-suppressed-flagged readout units;"
646 "iX - 40 / iEta / iX + 20;"
647 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
654 "Complete zero-suppressed-flagged readout units;"
655 "iX - 40 / iEta / iX + 20;"
656 "iY / iPhi (iPhi = 1 at phi = 0 rad);"
667 for(set<string>::iterator it =
histList_.begin();
670 if(*it!=
string(
"all")
672 s << (s.str().size()==0?
"":
", ") << *it;
675 if(s.str().size()!=0){
677 <<
"Parameter 'histList' contains some unknown histogram(s). "
678 "Check spelling. Following name were not found: "
685 const int32_t bx =
event.bunchCrossing();
686 if(bx<1 || bx > 3564)
return;
689 int64_t
t =
event.bunchCrossing() + (
event.orbitNumber()-1)*3564;
703 LogDebug(
"EcalSrValid") << __FILE__ <<
":" << __LINE__ <<
": "
704 <<
"Tmax = " <<
tmax <<
" x 25ns; Tmin = " <<
tmin
705 <<
" x 25ns; L1A(Tmax) = " <<
l1aOfTmax <<
"; L1A(Tmin) = "
727 edm::LogInfo(
"EcalSrValid") <<
"Size of TP collection: " <<
tps_->size() <<
"\n"
728 <<
"Size of EB SRF collection read from data: "
730 <<
"Size of EB SRF collection computed from data TTFs: "
732 <<
"Size of EE SRF collection read from data: "
734 <<
"Size of EE SRF collection computed from data TTFs: "
808 bool eventError =
false;
813 for(
int iZ0=0; iZ0<
nEndcaps; ++iZ0){
814 for(
int iX0=0; iX0<
nEeX; ++iX0){
815 for(
int iY0=0; iY0<
nEeY; ++iY0){
834 PgTiming t(
"analyzeEE: unsupressed digis");
841 int iZ0 = frame.
id().
zside()>0?1:0;
843 if(iX0<0 || iX0>=
nEeX){
844 edm::LogError(
"EcalSrValid") <<
"iX0 (= " << iX0 <<
") is out of range ("
845 <<
"[0," <<
nEeX -1 <<
"]\n";
847 if(iY0<0 || iY0>=
nEeY){
848 edm::LogError(
"EcalSrValid") <<
"iY0 (= " << iY0 <<
") is out of range ("
849 <<
"[0," <<
nEeY -1 <<
"]\n";
855 for(
int i = 0;
i< frame.
size(); ++
i){
856 const int gain12Code = 0x1;
876 int iX0 =
iXY2cIndex(static_cast<const EEDetId&>(hit.
id()).ix());
877 int iY0 =
iXY2cIndex(static_cast<const EEDetId&>(hit.
id()).iy());
878 int iZ0 =
static_cast<const EEDetId&
>(hit.
id()).zside()>0?1:0;
880 if(iX0<0 || iX0>=
nEeX){
881 LogError(
"EcalSrValid") <<
"iX0 (= " << iX0 <<
") is out of range ("
882 <<
"[0," <<
nEeX -1 <<
"]\n";
884 if(iY0<0 || iY0>=
nEeY){
885 LogError(
"EcalSrValid") <<
"iY0 (= " << iY0 <<
") is out of range ("
886 <<
"[0," <<
nEeY -1 <<
"]\n";
897 for(vector<PCaloHit>::const_iterator it =
eeSimHits_->begin();
905 int iZ0 = detId.zside()>0?1:0;
912 PgTiming t(
"analyzeEE: suppressed digis");
918 int iX0 =
iXY2cIndex(static_cast<const EEDetId&>(frame.
id()).ix());
919 int iY0 =
iXY2cIndex(static_cast<const EEDetId&>(frame.
id()).iy());
920 int iZ0 =
static_cast<const EEDetId&
>(frame.
id()).zside()>0?1:0;
921 if(iX0<0 || iX0>=
nEeX){
922 LogError(
"EcalSrValid") <<
"iX0 (= " << iX0 <<
") is out of range ("
923 <<
"[0," <<
nEeX -1 <<
"]\n";
925 if(iY0<0 || iY0>=
nEeY){
926 LogError(
"EcalSrValid") <<
"iY0 (= " << iY0 <<
") is out of range ("
927 <<
"[0," <<
nEeY -1 <<
"]\n";
935 for(
int i = 0;
i< frame.
size(); ++
i){
936 const int gain12Code = 0x1;
937 if(frame[
i].
gainId()!=gain12Code){
947 bool highInterest =
false;
953 highInterest = ((srf->value() & ~
EcalSrFlag::SRF_FORCED_MASK)
965 pair<int,int> ru =
dccCh(frame.
id());
969 <<
"RU " << frame.
id() <<
", "
970 <<
"DCC " << ru.first
971 <<
" Ch : " << ru.second <<
": "
972 <<
"LI channel under ZS threshold.\n";
976 <<
"more ZS errors for this event...\n";
986 for(
int iZ0=0; iZ0<
nEndcaps; ++iZ0){
987 for(
int iX0=0; iX0<
nEeX; ++iX0){
988 for(
int iY0=0; iY0<
nEeY; ++iY0){
1017 char eeSrfMark[2][100][100];
1018 bzero(eeSrfMark,
sizeof(eeSrfMark));
1023 int iX = srf.
id().
ix();
1024 int iY = srf.
id().
iy();
1026 if(iX<1 || iY > 100)
throw cms::Exception(
"EcalSelectiveReadoutValidation")
1027 <<
"Found an endcap SRF with an invalid det ID: " << srf.
id() <<
".\n";
1028 ++eeSrfMark[iZ>0?1:0][iX-1][iY-1];
1029 if(eeSrfMark[iZ>0?1:0][iX-1][iY-1] > 1)
throw cms::Exception(
"EcalSelectiveReadoutValidation")
1030 <<
"Duplicate SRF for supercrystal " << srf.
id() <<
".\n";
1048 PgTiming t(
"analyzeEE: SR appli error log");
1052 <<
" ZS-flagged EE channels under "
1054 <<
" in a complete RU.\n";
1062 bool eventError =
false;
1064 vector<pair<int,int> > xtalEtaPhi;
1070 for(
int iEta0=0; iEta0<
nEbEta; ++iEta0){
1071 for(
int iPhi0=0; iPhi0<
nEbPhi; ++iPhi0){
1077 xtalEtaPhi.push_back(pair<int,int>(iEta0, iPhi0));
1085 PgTiming t1(
"analyzeEB: geomRetrieval");
1094 PgTiming t(
"analyzeEB: unsuppressed digi loop");
1099 int iEta0 =
iEta2cIndex(static_cast<const EBDetId&>(frame.
id()).ieta());
1100 int iPhi0 =
iPhi2cIndex(static_cast<const EBDetId&>(frame.
id()).iphi());
1101 if(iEta0<0 || iEta0>=
nEbEta){
1103 s <<
"EcalSelectiveReadoutValidation: "
1104 <<
"iEta0 (= " << iEta0 <<
") is out of range ("
1105 <<
"[0," <<
nEbEta -1 <<
"]\n";
1108 if(iPhi0<0 || iPhi0>=
nEbPhi){
1110 s <<
"EcalSelectiveReadoutValidation: "
1111 <<
"iPhi0 (= " << iPhi0 <<
") is out of range ("
1112 <<
"[0," <<
nEbPhi -1 <<
"]\n";
1118 for(
int i = 0;
i< frame.
size(); ++
i){
1119 const int gain12Code = 0x1;
1135 for(vector<PCaloHit>::const_iterator it =
ebSimHits_->begin();
1139 int iEta = detId.
ieta();
1141 int iPhi = detId.iphi();
1150 PgTiming t(
"analyzeEB: suppressed digi loop init");
1152 for(
int iEta0=0; iEta0<
nEbEta; ++iEta0){
1153 for(
int iPhi0=0; iPhi0<
nEbPhi; ++iPhi0){
1154 crystalShot[iEta0][iPhi0] =
false;
1162 PgTiming t(
"analyzeEB: suppressed digi loop");
1168 int iEta =
static_cast<const EBDetId&
>(frame.
id()).ieta();
1169 int iPhi =
static_cast<const EBDetId&
>(frame.
id()).iphi();
1172 if(iEta0<0 || iEta0>=
nEbEta){
1174 <<
"iEta0 (= " << iEta0 <<
") is out of range ("
1175 <<
"[0," <<
nEbEta -1 <<
"]");
1177 if(iPhi0<0 || iPhi0>=
nEbPhi){
1179 <<
"iPhi0 (= " << iPhi0 <<
") is out of range ("
1180 <<
"[0," <<
nEbPhi -1 <<
"]");
1182 assert(iEta0>=0 && iEta0<
nEbEta);
1183 assert(iPhi0>=0 && iPhi0<
nEbPhi);
1184 if(!crystalShot[iEta0][iPhi0]){
1185 crystalShot[iEta0][iPhi0] =
true;
1187 cout <<
"Error: several digi for same crystal!";
1195 for(
int i = 0;
i< frame.
size(); ++
i){
1196 const int gain12Code = 0x1;
1197 if(frame[
i].
gainId()!=gain12Code){
1206 bool highInterest =
false;
1214 highInterest = ((srf->value() & ~
EcalSrFlag::SRF_FORCED_MASK)
1227 pair<int,int> ru =
dccCh(frame.
id());
1231 <<
"RU " << frame.
id() <<
", "
1232 <<
"DCC " << ru.first
1233 <<
" Ch : " << ru.second <<
": "
1234 <<
"LI channel under ZS threshold.\n";
1238 <<
"more ZS errors for this event...\n";
1255 int iEta =
static_cast<const EBDetId&
>(hit.
id()).ieta();
1256 int iPhi =
static_cast<const EBDetId&
>(hit.
id()).iphi();
1259 if(iEta0<0 || iEta0>=
nEbEta){
1260 LogError(
"EcalSrValid") <<
"iEta0 (= " << iEta0 <<
") is out of range ("
1261 <<
"[0," <<
nEbEta -1 <<
"]\n";
1263 if(iPhi0<0 || iPhi0>=
nEbPhi){
1264 LogError(
"EcalSrValid") <<
"iPhi0 (= " << iPhi0 <<
") is out of range ("
1265 <<
"[0," <<
nEbPhi -1 <<
"]\n";
1284 PgTiming t(
"analyzeEB: loop on energies");
1286 for(
unsigned int i=0;
i<xtalEtaPhi.size(); ++
i){
1287 int iEta0 = xtalEtaPhi[
i].first;
1288 int iPhi0= xtalEtaPhi[
i].second;
1291 double recE = energies.
recE;
1314 char ebSrfMark[2][17][72];
1315 bzero(ebSrfMark,
sizeof(ebSrfMark));
1321 int iPhi = srf.
id().
iphi();
1327 if(iEtaAbs < 1 || iEtaAbs > 17
1328 || iPhi < 1 || iPhi > 72)
throw cms::Exception(
"EcalSelectiveReadoutValidation")
1329 <<
"Found a barrel SRF with an invalid det ID: " << srf.
id() <<
".\n";
1330 ++ebSrfMark[iZ>0?1:0][iEtaAbs-1][iPhi-1];
1331 if(ebSrfMark[iZ>0?1:0][iEtaAbs-1][iPhi-1] > 1)
throw cms::Exception(
"EcalSelectiveReadoutValidation")
1332 <<
"Duplicate SRF for RU " << srf.
id() <<
".\n";
1352 <<
" ZS-flagged EB channels under "
1354 <<
" in a complete RU.\n";
1385 #if (CMSSW_COMPAT_VERSION>=210)
1393 it !=
tps_->end(); ++it){
1408 #if (CMSSW_COMPAT_VERSION<210)
1411 tpEt = ecalScale.
getTPGInGeV(it->compressedEt(), it->id()) ;
1414 tpEt = it->compressedEt();
1416 int iEta = it->id().ieta();
1418 int iPhi = it->id().iphi();
1420 double etSum =
ttEtSums[iEta0][iPhi0];
1424 if((it->ttFlag() & 0x3) == 0){
1427 if((it->ttFlag() & 0x3) == 1){
1430 if((it->ttFlag() & 0x3) == 3){
1433 if((it->ttFlag() & 0x4)){
1459 for (
unsigned int digis=0; digis<
ebDigis_->
size(); ++digis){
1465 for (
unsigned int digis=0; digis<
eeDigis_->
size(); ++digis){
1471 for(
unsigned iDcc0 = 0; iDcc0 <
nDccs_; ++iDcc0){
1508 template<
class T,
class U>
1510 const U& srFlagColl){
1511 const DetId& xtalId = frame.id();
1512 typedef typename U::key_type RuDetId;
1514 typename U::const_iterator srf = srFlagColl.find(ruId);
1516 bool highInterest =
false;
1519 if(srf != srFlagColl.end()){
1524 flag = srf->value() & ~
EcalSrFlag::SRF_FORCED_MASK;
1532 pair<int,int> ch =
dccCh(xtalId);
1541 int iEta0 =
iEta2cIndex(static_cast<const EBDetId&>(xtalId).ieta());
1542 int iPhi0 =
iPhi2cIndex(static_cast<const EBDetId&>(xtalId).iphi());
1566 int iX0 =
iXY2cIndex(static_cast<const EEDetId&>(frame.id()).ix());
1567 int iY0 =
iXY2cIndex(static_cast<const EEDetId&>(frame.id()).iy());
1568 int iZ0 =
static_cast<const EEDetId&
>(frame.id()).zside()>0?1:0;
1588 if(ch.second < 1 || ch.second > 68){
1590 <<
"Error in DCC channel retrieval for crystal with detId "
1591 << xtalId.
rawId() <<
"DCC channel out of allowed range [1..68]\n";
1621 static bool firstCall =
true;
1631 double adc2GeV = 0.;
1645 double gainInv[] = {12., 1., 6., 12.};
1647 for(
int i=0;
i <
n; ++
i){
1648 acc +=
weights_[
i]*frame[
i].adc()*gainInv[frame[
i].gainId()]*adc2GeV;
1669 <<
"Wrong type of DetId passed to the "
1670 "EcalSelectiveReadoutValidation::dccCh(const DetId&). "
1671 "An ECAL DetId was expected.\n";
1684 const int oneXtalPhi0 = iTtPhi0 * 5;
1685 const int oneXtalEta0 = (iTtEta0 -
nOneEeTtEta) * 5;
1692 if(detId.
rawId() & 0x8000){
1708 <<
"Wrong type of DetId passed to the method "
1709 "EcalSelectiveReadoutValidation::dccCh(const DetId&). "
1710 "A valid EcalTriggerTower, EcalBarrel or EcalEndcap DetId was expected. "
1711 "detid = " << xtalId.
rawId() <<
".\n";
1717 result.first = EcalElecId.
dccId();
1721 <<
"Got an invalid DCC ID, DCCID = " << result.first
1722 <<
" for DetId 0x" << hex << detId.
rawId()
1723 <<
" and 0x" << xtalId.
rawId() << dec <<
"\n";
1726 result.second = EcalElecId.
towerId();
1728 if(result.second < 1 || result.second > 68){
1730 <<
"Got an invalid DCC channel ID, DCC_CH = " << result.second
1731 <<
" for DetId 0x" << hex << detId.
rawId()
1732 <<
" and 0x" << xtalId.
rawId() << dec <<
"\n";
1744 (xtalId.
iy()-1)/scEdge+1,
1786 int iDCC= EcalElecId.
dccId();
1787 int iDccChan = EcalElecId.
towerId();
1788 const bool ignoreSingle =
true;
1800 if(eeGeometry==0 || ebGeometry==0){
1810 for(
int iEta0 = 0; iEta0 <
nTtEta; ++iEta0){
1811 for(
int iPhi0 = 0; iPhi0 <
nTtPhi; ++iPhi0){
1834 it != eeDigis.
end(); ++it){
1851 int innerTTEtas[] = {0, 1, 54, 55};
1852 for(
unsigned iRing = 0; iRing <
sizeof(innerTTEtas)/
sizeof(innerTTEtas[0]);
1854 int iTtEta0 = innerTTEtas[iRing];
1870 for(
unsigned iTtPhi0 = 0; iTtPhi0 <
nTtPhi-1; iTtPhi0 += 2){
1871 double et = .5*(
ttEtSums[iTtEta0][iTtPhi0]
1887 double weights[] = {0., -1/3., -1/3., -1/3., 0., 1.};
1889 double adc2GeV = 0.;
1897 << __FILE__ <<
":" << __LINE__ <<
": "
1898 <<
"this is a bug. Please report it.\n";
1903 const int n = min<int>(frame.size(),
sizeof(
weights)/
sizeof(weights[0]));
1905 double gainInv[] = {12., 1., 6., 12};
1907 for(
int i=offset;
i <
n; ++
i){
1909 if(iframe>=0 && iframe<frame.size()){
1910 acc += weights[
i]*frame[iframe].adc()
1911 *gainInv[frame[iframe].gainId()]*adc2GeV;
1926 <<
"Failed to book integer DQM monitor element" <<
name;
1937 <<
"Failed to book histogram " <<
name;
1945 nybins, ymin, ymax);
1948 <<
"Failed to book histogram " <<
name;
1959 <<
"Failed to book histogram " <<
name;
1975 <<
"Failed to book histogram " <<
name;
2005 log <<
"Avalailable histograms (DQM monitor elements): \n";
2009 log << it->first <<
": " << it->second <<
"\n";
2011 log <<
"\nTo include an histogram add its name in the vstring parameter "
2012 "'histograms' of the EcalSelectiveReadoutValidation module\n";
2016 double ruHeaderPayload = 0.;
2017 const int firstEbDcc0 =
nEeDccs/2;
2018 for(
int iDcc0 = firstEbDcc0; iDcc0 < firstEbDcc0 +
nEbDccs; ++iDcc0){
2027 double ruHeaderPayload = 0.;
2028 const unsigned firstEbDcc0 =
nEeDccs/2;
2029 for(
unsigned iDcc0 = 0; iDcc0 <
nDccs_; ++iDcc0){
2031 if(iDcc0== firstEbDcc0) iDcc0 +=
nEbDccs;
2045 double scale = 1./eventCount;
2047 for(
unsigned i = 0;
i <
sizeof(mes)/
sizeof(mes[0]); ++
i){
2048 if(mes[
i] == 0)
continue;
2050 if(dynamic_cast<TH2*>(h)){
2051 h->GetZaxis()->SetTitle(
"Frequency");
2053 h->GetYaxis()->SetTitle(
"<Count>");
2055 buf <<
"Normalising " << h->GetName() <<
". Factor: " << scale <<
"\n";
2059 h->SetBit(TH1::kIsAverage);
2068 const std::vector<int>& firWeights,
2071 const int nFIRTaps = 6;
2073 const vector<int>&
w = firWeights;
2077 bool gain12saturated =
false;
2078 const int gain12 = 0x01;
2079 const int lastFIRSample = firstFIRSample + nFIRTaps - 1;
2082 for(
int iSample=firstFIRSample-1;
2083 iSample<lastFIRSample; ++iSample, ++iWeight){
2084 if(iSample>=0 && iSample < frame.
size()){
2086 if(sample.
gainId()!=gain12) gain12saturated =
true;
2087 LogTrace(
"DccFir") << (iSample>=firstFIRSample?
"+":
"") << sample.
adc()
2088 <<
"*(" << w[iWeight] <<
")";
2089 acc+=sample.
adc()*w[iWeight];
2092 ": Not enough samples in data frame or 'ecalDccZs1stSample' module "
2093 "parameter is not valid...";
2100 acc = (acc>=0)?(acc >> 8):-(-acc >> 8);
2105 LogTrace(
"DccFir") <<
"acc: " << acc <<
"\n"
2106 <<
"saturated: " << (gain12saturated?
"yes":
"no") <<
"\n";
2109 *saturated = gain12saturated;
2118 const int nFIRTaps = 6;
2119 vector<int> firWeights(nFIRTaps, 0);
2120 const static int maxWeight = 0xEFF;
2121 for(
unsigned i=0;
i <
min((
size_t)nFIRTaps,normalizedWeights.size()); ++
i){
2122 firWeights[
i] = lround(normalizedWeights[
i] * (1<<10));
2123 if(
abs(firWeights[
i])>maxWeight){
2124 firWeights[
i] = firWeights[
i]<0?-maxWeight:maxWeight;
2132 bool notNormalized =
false;
2133 bool notInt =
false;
2134 for(
unsigned i=0;
i < weightsForZsFIR.size(); ++
i){
2135 if(weightsForZsFIR[
i] > 1.) notNormalized =
true;
2136 if((
int)weightsForZsFIR[
i]!=weightsForZsFIR[
i]) notInt =
true;
2138 if(notInt && notNormalized){
2140 <<
"weigtsForZsFIR paramater values are not valid: they "
2141 <<
"must either be integer and uses the hardware representation "
2142 <<
"of the weights or less or equal than 1 and used the normalized "
2143 <<
"representation.";
2147 firWeights_ = vector<int>(weightsForZsFIR.size());
2148 for(
unsigned i = 0;
i< weightsForZsFIR.size(); ++
i){
2155 log <<
"Input weights for FIR: ";
2156 for(
unsigned i = 0;
i < weightsForZsFIR.size(); ++
i){
2157 log << weightsForZsFIR[
i] <<
"\t";
2161 log <<
"\nActual FIR weights: ";
2164 s2 += firWeights_[
i]*firWeights_[
i];
2168 log <<
"\nNormalized FIR weights after hw representation rounding: ";
2181 <<
"Failed to open the log file '"
2183 <<
"' for SRP algorithm result check.\n";
2191 <<
"Failed to open the log file '"
2193 <<
"' for Selective Readout decision application check.\n";
2203 typedef typename T::const_iterator SrFlagCollectionConstIt;
2204 typedef typename T::key_type MyRuDetIdType;
2205 SrFlagCollectionConstIt itSrfFromData = srfFromData.begin();
2206 SrFlagCollectionConstIt itComputedSr = computedSrf.begin();
2213 while(itSrfFromData != srfFromData.end()
2214 || itComputedSr != computedSrf.end()){
2216 MyRuDetIdType inconsistentRu = 0;
2217 bool inconsistent =
false;
2218 if(itComputedSr == computedSrf.end() ||
2219 (itSrfFromData != srfFromData.end()
2220 && itSrfFromData->id() < itComputedSr->id())){
2222 pair<int, int> ch =
dccCh(itSrfFromData->id());
2224 <<
", DCC " << ch.first <<
" ch " << ch.second
2225 <<
" found in data (SRF:" << itSrfFromData->flagName()
2226 <<
") but not in the set of SRFs computed from the data TTF.\n";
2227 inconsistentRu = itSrfFromData->id();
2228 inconsistent =
true;
2230 }
else if(itSrfFromData==srfFromData.end() ||
2231 (itComputedSr != computedSrf.end()
2232 && itComputedSr->id() < itSrfFromData->id())){
2234 pair<int, int> ch =
dccCh(itComputedSr->id());
2237 <<
", DCC " << ch.first <<
" ch " << ch.second
2238 <<
" not found in data. Computed SRF: "
2239 << itComputedSr->flagName() <<
".\n";
2240 inconsistentRu = itComputedSr->id();
2241 inconsistent =
true;
2246 if(itComputedSr->value()!=itSrfFromData->value()){
2248 pair<int, int> ch =
dccCh(itSrfFromData->id());
2250 << itSrfFromData->id()
2251 <<
", DCC " << ch.first <<
" ch " << ch.second
2252 <<
", SRF inconsistency: "
2253 <<
"from data: " << itSrfFromData->flagName()
2254 <<
", computed from TTF: "
2255 << itComputedSr->flagName()
2258 inconsistentRu = itComputedSr->id();
2259 inconsistent =
true;
2261 if(itComputedSr != computedSrf.end()) ++itComputedSr;
2262 if(itSrfFromData != srfFromData.end()) ++itSrfFromData;
2279 <<
"Argument of EcalSelectiveReadoutValidation::dccId(const EcalTrigTowerDetId&) "
2280 <<
"must be a barrel trigger tower Id\n";
2282 return dccCh(detId).first;
2318 buf <<
"List of DCCs found in the first processed event: ";
2320 for(
unsigned iDcc = 0; iDcc <
nDccs_; ++iDcc){
2322 buf << (first?
"":
", ") << (iDcc +
minDccId_);
2326 buf <<
"\nOnly DCCs from this list will be considered for error logging\n";
2329 LogInfo(
"EcalSrValid") << buf;
2336 typedef typename T::const_iterator SrFlagCollectionConstIt;
2337 typedef typename T::key_type MyRuDetIdType;
2339 for(SrFlagCollectionConstIt itSrf = srfs.begin();
2340 itSrf != srfs.end(); ++itSrf){
2341 int flag = itSrf->value() & ~
EcalSrFlag::SRF_FORCED_MASK;
2342 pair<int,int> ru =
dccCh(itSrf->id());
2358 << itSrf->id() <<
" (DCC " << ru.first
2359 <<
" ch " << ru.second <<
") is 'Full readout' "
2360 <<
"while none of its channel was read out\n";
2370 << itSrf->id() <<
" (DCC " << ru.first
2371 <<
" ch " << ru.second <<
") is 'Full readout' "
2375 <<
" channels were read out.\n";
2400 if(iDcc < minDccId_ || iDcc >
maxDccId_){
2402 }
else if (10 <= iDcc && iDcc <= 45) {
2406 if(iDcc < 10) iDccPhi = iDcc;
2407 else iDccPhi = iDcc - 45;
2408 switch(iDccPhi*100+iDccCh){
void configFirWeights(const std::vector< double > &weightsForZsFIR)
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_
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
Abs< T >::type abs(const T &t)
double noZsRecE
sim hit energy sum
int nCompleteZS_
Counter of ZS-flagged RU fully read out.
CollHandle< std::vector< PCaloHit > > eeSimHits_
MonitorElement * meDroppedFRORateMap_
void save(const std::string &filename, const std::string &path="", const std::string &pattern="", const std::string &rewrite="", const uint32_t run=0, SaveReferenceTag ref=SaveWithReference, int minStatus=dqm::qstatus::STATUS_OK, const std::string &fileupdate="RECREATE")
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
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
volatile std::atomic< bool > shutdown_flag false
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")