384 m_evtNum = eventInfo->eventNumber();
397 std::ostringstream evState;
398 evState <<
"Run "<< std::setw(6) <<
m_runNum
400 <<
" Evt "<< std::setw(9) <<
m_evtNum
402 <<
" Flags 0x" << std::hex <<
m_tileFlag << std::dec;
404 std::ostringstream evtnum;
405 evtnum <<
"Run "<< std::setw(6) <<
m_runNum
407 <<
" Evt "<< std::setw(9) <<
m_evtNum
410 std::ostringstream nevtnum;
411 nevtnum << evtnum.str()
414 bool emptyBad =
true;
415 bool badFromCell =
false;
429 for (
size_t i=0; i<
m_drawer.size(); ++i) {
432 m_tileHWID->get_hash(ch_id, hash, &chan_context);
434 std::fill(itr,itr+48,
true);
442 using namespace boost::local_time;
443 using namespace boost::posix_time;
444 static const time_zone_ptr gva_tz(
new posix_time_zone((std::string)
"CET+01CEST01:00:00,M3.5.0/02:00:00,M10.5.0/03:00:00"));
445 local_date_time gva_time(from_time_t(eventInfo->timeStamp()),gva_tz);
446 evState <<
" " << gva_time <<
" ";
449 const char * part[5] = {
"UNK",
"LBA",
"LBC",
"EBA",
"EBC" };
453 int n2 = (n1 + dn - 1) % 64;
455 evState <<
" " << part[
rr] <<std::setw(2)<<std::setfill(
'0')<<n1+1
456 <<
" - " << part[
rr] <<std::setw(2)<<std::setfill(
'0')<<n2+1
457 <<
" " << dn <<
" consec bad ";
465 for (
int rr = 1;
rr < 5; ++
rr) {
466 if ((p2 & pp) || (p1 & pp)) {
467 evState <<
" " << part[
rr];
469 if (p0 & pp) evState <<
" off";
470 else evState <<
" OFF";
473 if (p0 & pp) evState <<
" mask";
474 else evState <<
" MASK";
479 evState <<
" " << dn <<
" consec bad ";
490 std::vector<int> allmod;
491 std::vector<int> consec;
492 for (
int ros = 1; ros < 5; ++ros) {
494 for (
int dr = 0; dr < drmax; ++dr) {
495 int drawer = dr % 64;
499 if (dr < 64) allmod.push_back((ros << 8) + dr);
500 }
else if (m1 >= 0) {
502 if (m1 == 0) drmax += dm;
509 consec.push_back((ros << 8) + m1);
510 }
else if (dm == dn) {
511 if (m1 < 64) consec.push_back((ros << 8) + m1);
517 evState <<
" DCS " << allmod.size() <<
" off ";
520 if (consec.size() > 1) evState <<
"*" << (consec.size());
521 evState <<
" consec "
522 << part[
rr] << std::setw(2) << std::setfill(
'0') << (n1 % 64) + 1 <<
" - "
523 << part[
rr] << std::setw(2) << std::setfill(
'0') << (n2 % 64) + 1 <<
" ";
526 for (
size_t n = 1; n < consec.size(); ++n) {
529 evState << part[m1 >> 8] << std::setw(2) << std::setfill(
'0') << (m1 % 64) + 1 <<
" - "
530 << part[m2 >> 8] << std::setw(2) << std::setfill(
'0') << (m2 % 64) + 1 <<
" ";
531 for (
size_t m = 0; m < allmod.size(); ++m) {
533 if (mm >= m1 && mm <= m2) {
534 allmod[m] += n1 - m1;
541 if (allmod.size() > (
size_t) dn) {
542 for (
size_t m = 0; m < allmod.size(); ++m) {
544 if (!(mm >= n1 && mm <= n2)) {
545 evState << part[mm >> 8] << std::setw(2) << std::setfill(
'0') << (mm % 64) + 1 <<
" ";
565 if (!cellContainer.
isValid()) {
567 ATH_MSG_WARNING(
"Unable to read CaloCellContainer from EventStore, disable reading of this container");
592 for (
const CaloCell* cell : *cellContainer) {
597 if (tile_cell==0)
continue;
607 bool bad1 = tile_cell->
badch1();
608 bool bad2 = tile_cell->
badch2();
609 float ene1 = tile_cell->
ene1();
610 float ene2 = tile_cell->
ene2();
611 float time1 = tile_cell->
time1();
612 float time2 = tile_cell->
time2();
622 float ene = tile_cell->
energy();
640 float time = tile_cell->
time();
658 if (timeOk && eneOk) {
661 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(
id,-2)
662 <<
" ene = " << ene <<
" time = " << time);
670 }
else if (ene > emax) {
677 tcellmin = tile_cell;
679 else if (time>tmax) {
681 tcellmax = tile_cell;
685 if ( !(bad1 && bad2) ) {
688 bool time1Ok =
false;
721 bool time2Ok =
false;
760 if ((ene1Ok && time1Ok) || over1) {
763 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(
id,-2)
764 <<
" ch_ene1 = " << ene1 <<
" ch_t1 = " << time1
765 << ((over1)?
" overflow":
""));
772 cellminCh = tile_cell;
773 }
else if (ene1 > chmax) {
775 cellmaxCh = tile_cell;
780 tcellminCh = tile_cell;
781 }
else if (time1 > tcmax) {
783 tcellmaxCh = tile_cell;
787 if ((ene2Ok && time2Ok) || over2) {
790 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(
id,-2)
791 <<
" ch_ene2 = " << ene2 <<
" ch_t2 = " << time2
792 << ((over2)?
" overflow":
""));
799 cellminCh = tile_cell;
800 }
else if (ene2 > chmax) {
802 cellmaxCh = tile_cell;
807 tcellminCh = tile_cell;
808 }
else if (time2 > tcmax) {
810 tcellmaxCh = tile_cell;
818 if (tcellmin && tcellmin != cellmin && tcellmin != cellmax) {
820 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(tcellmin->
ID(),-2)
821 <<
" ene = " << tcellmin->
energy()
822 <<
" tmin = " << tcellmin->
time());
824 if (tcellmax && tcellmax != cellmin && tcellmax != cellmax) {
826 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(tcellmax->
ID(),-2)
827 <<
" ene = " << tcellmax->
energy()
828 <<
" tmax = " << tcellmax->
energy());
831 if (tcellminCh && tcellminCh != cellminCh && tcellminCh != cellmaxCh) {
833 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(tcellminCh->
ID(),-2)
834 <<
" ch_ene = " << tcellminCh->
ene1() <<
" " << tcellminCh->
ene2()
835 <<
" ch_tmin = " << tcellminCh->
time1() <<
" " << tcellminCh->
time2());
837 if (tcellmaxCh && tcellmaxCh != cellminCh && tcellmaxCh != cellmaxCh) {
839 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(tcellmaxCh->
ID(),-2)
840 <<
" ch_ene = " << tcellmaxCh->
ene1() <<
" " << tcellmaxCh->
ene2()
841 <<
" ch_tmax = " << tcellmaxCh->
time1() <<
" " << tcellmaxCh->
time2());
847 const char * tit = (tcellmin == cellmin) ?
" tmin = ": ((tcellmax == cellmin) ?
" tmax = ":
" t = ");
848 if (cellminCh!=cellmin) {
850 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellmin->ID(),-2)
851 <<
" emin = " << emin
852 << tit << cellmin->time()
857 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellmin->ID(),-2)
858 <<
" emin = " << emin
859 <<
" ch_emin = " << chmin
860 << tit << cellmin->time()
868 const char * tit = (tcellminCh == cellminCh) ?
" tmin = ": ((tcellmaxCh == cellminCh) ?
" tmax = ":
" t = ");
869 if (cellminCh!=cellmin) {
871 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellminCh->
ID(),-2)
872 <<
" ch_emin = " << chmin
873 << tit << cellminCh->
time()
881 const char * tit = (tcellmin == cellmax) ?
" tmin = ": ((tcellmax == cellmax) ?
" tmax = ":
" t = ");
882 if (cellmaxCh!=cellmax) {
884 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellmax->ID(),-2)
885 <<
" emax = " << emax
886 << tit << cellmax->time()
891 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellmax->ID(),-2)
892 <<
" emax = " << emax
893 <<
" ch_emax = " << chmax
894 << tit << cellmax->time()
902 const char * tit = (tcellminCh == cellmaxCh) ?
" tmin = ": ((tcellmaxCh == cellmaxCh) ?
" tmax = ":
" t = ");
903 if (cellmaxCh!=cellmax) {
905 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellmaxCh->
ID(),-2)
906 <<
" ch_emax = " << chmax
907 << tit << cellmaxCh->
time()
924 if ( !rawChannelContainer.isValid() ) {
925 ATH_MSG_WARNING(
"Unable to read TileRawChannelContainer from EventStore, disable reading of this container");
941 bool fillChanEne = ( !
m_readCells && allowAmpCheck );
963 bool someDQerrors =
false;
967 int frag = rawChannelCollection->identify();
968 bool eb = (frag > 0x2ff);
969 bool ebsp = (frag == 0x30e || frag == 0x411);
972 int drawer = frag & 0x3F;
978 for (
int ch: {12,4,0}) {
988 m_tileHWID->get_hash(ch_id, hash, &chan_context);
989 int hashNext =
index = (int)hash + 48;
993 uint32_t RODBCID = rawChannelCollection->getRODBCID();
994 uint32_t DSPBCID = rawChannelCollection->getFragDSPBCID();
995 uint32_t GlobalCRCErr = rawChannelCollection->getFragGlobalCRC() & 0x1;
996 uint32_t FE_DMUmask = rawChannelCollection->getFragFEChipMask();
997 uint32_t ROD_DMUmask = rawChannelCollection->getFragRODChipMask();
998 uint32_t BCIDErr = rawChannelCollection->getFragBCID();
999 uint32_t MemoryParityErr = rawChannelCollection->getFragMemoryPar();
1000 uint32_t HeaderFormatErr = rawChannelCollection->getFragHeaderBit();
1001 uint32_t HeaderParityErr = rawChannelCollection->getFragHeaderPar();
1002 uint32_t SampleFormatErr = rawChannelCollection->getFragSampleBit();
1003 uint32_t SampleParityErr = rawChannelCollection->getFragSamplePar();
1004 uint32_t SingleStrobeErr = rawChannelCollection->getFragSstrobe();
1005 uint32_t DoubleStrobeErr = rawChannelCollection->getFragDstrobe();
1007 if (RODBCID!=0 && RODBCID !=
m_evtBCID ) {
1010 <<
" drw " <<
drwname(rawChannelCollection->identify())
1011 <<
" ROD BCID " << RODBCID <<
" is wrong - skipping");
1015 <<
" suppressing further messages about drawer 0x" << std::hex << rawChannelCollection->identify()
1016 << std::dec <<
" being bad");
1018 someDQerrors =
true;
1022 if (DSPBCID >= 0x7FFF
1024 && FE_DMUmask == 0xFFFF
1025 && ROD_DMUmask == 0xFFFF
1026 && BCIDErr == 0xFFFF
1027 && MemoryParityErr == 0xFFFF
1028 && HeaderFormatErr == 0xFFFF
1029 && HeaderParityErr == 0xFFFF
1030 && SampleFormatErr == 0xFFFF
1031 && SampleParityErr == 0xFFFF
1032 && SingleStrobeErr == 0xFFFF
1033 && DoubleStrobeErr == 0xFFFF) {
1037 <<
" drw " <<
drwname(rawChannelCollection->identify())
1038 <<
" is OFF - skipping");
1042 <<
" suppressing further messages about drawer 0x" << std::hex
1043 << rawChannelCollection->identify()
1044 << std::dec <<
" being bad");
1050 && GlobalCRCErr == 0
1054 && MemoryParityErr == 0
1055 && HeaderFormatErr == 0
1056 && HeaderParityErr == 0
1057 && SampleFormatErr == 0
1058 && SampleParityErr == 0
1059 && SingleStrobeErr == 0
1060 && DoubleStrobeErr == 0) {
1064 <<
" drw " <<
drwname(rawChannelCollection->identify())
1065 <<
" is MISSING - skipping");
1069 <<
" suppressing further messages about drawer 0x" << std::hex
1070 << rawChannelCollection->identify() << std::dec <<
" being bad");
1076 GlobalCRCErr = 0xFFFF;
1080 <<
" drw " <<
drwname(rawChannelCollection->identify())
1081 <<
" global CRC error - skipping");
1085 <<
" suppressing further messages about drawer 0x" << std::hex
1086 << rawChannelCollection->identify() << std::dec <<
" being bad");
1088 someDQerrors =
true;
1093 if (HeaderFormatErr || HeaderParityErr || SampleFormatErr || SampleParityErr ) {
1094 FE_DMUmask = 0xFFFF;
1097 if (ebsp) FE_DMUmask<<=1;
1098 FE_DMUmask = (FE_DMUmask & 0xFF) | ((FE_DMUmask & 0xF00)<<2);
1102 FE_DMUmask = ~FE_DMUmask & 0xFFFF;
1103 ROD_DMUmask = ~ROD_DMUmask & 0xFFFF;
1105 if (BCIDErr & 0x2) {
1110 <<
" drw " <<
drwname(rawChannelCollection->identify())
1111 <<
" BCID in DMU1 is bad - skipping");
1115 <<
" suppressing further messages about drawer 0x"
1116 << std::hex << rawChannelCollection->identify() << std::dec <<
" being bad");
1118 someDQerrors =
true;
1124 if ( DSPBCID!=0xDEAD && DSPBCID!=
m_evtBCID ) {
1129 <<
" drw " <<
drwname(rawChannelCollection->identify())
1130 <<
" DSP BCID is wrong - skipping");
1134 <<
" suppressing further messages about drawer 0x"
1135 << std::hex << rawChannelCollection->identify() << std::dec <<
" being bad");
1137 someDQerrors =
true;
1143 uint32_t
error = GlobalCRCErr | FE_DMUmask | ROD_DMUmask | BCIDErr | MemoryParityErr |
1144 HeaderFormatErr | HeaderParityErr | SampleFormatErr | SampleParityErr;
1149 <<
" drw " <<
drwname(rawChannelCollection->identify())
1150 <<
" whole drawer is bad - skipping");
1154 <<
" suppressing further messages about drawer 0x"
1155 << std::hex << rawChannelCollection->identify() << std::dec <<
" being bad");
1157 someDQerrors =
true;
1166 <<
" enabling messages about drawer 0x" << std::hex
1167 << rawChannelCollection->identify()
1168 << std::dec <<
" being bad after " <<
m_maxVerboseCnt <<
" good events");
1172 uint32_t errMB = BCIDErr;
1182 if (errMB & 0xF) ++nbadMB;
1186 if (nbadMB > nbadMBMax) {
1188 collMBMax = rawChannelCollection;
1192 for (uint32_t i = 0x8000; i != 0; i >>= 1) {
1197 if (emptyBad && nbadMB < 4) {
1207 int nbad = ((ebsp) ? nerr-5 : ((eb) ? nerr-4 : nerr));
1210 someDQerrors =
true;
1211 if (nbad > nbadMax) {
1213 collMax = rawChannelCollection;
1222 if (allowAmpCheck || emptyBad) {
1228 m_tileHWID->get_hash(chId, hash, &chan_context);
1233 if (channel == chMBTS) {
1235 }
else if ( (ebsp && (channel == 18 || channel == 19 || channel == 12 || channel == 13) )
1236 || (eb && (channel == 0 || channel == 1 || channel == 12 || channel == 13) ) ) {
1241 (DQstatus && !DQstatus->
isAdcDQgood(ros,drawer,channel,adc)) ||
1245 if (allowAmpCheck) {
1247 float amp = rawChannel->amplitude();
1248 float time = rawChannel->time();
1252 m_chanQua[hash] = rawChannel->quality();
1273 bool timeOk =
false;
1282 if (ampOk && timeOk) {
1285 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(adcId)
1286 <<
" ch_ene = " << amp <<
" ch_t = " << time);
1293 }
else if (amp > chmax) {
1300 tminCh = rawChannel;
1302 else if (time>tcmax) {
1304 tmaxCh = rawChannel;
1314 <<
" drw " <<
drwname(rawChannelCollection->identify())
1315 <<
" nBadMB = " << nbadMB
1316 <<
" nBadDMU = " << nbad
1318 <<
" DSPBCID = " << rawChannelCollection->getFragDSPBCID()
1319 <<
" GlobCRC = " << rawChannelCollection->getFragGlobalCRC() <<
" " << GlobalCRCErr
1320 <<
" error = 0x" << std::hex <<
error
1321 <<
" FE_CRC = 0x" << rawChannelCollection->getFragFEChipMask() <<
" 0x" << FE_DMUmask
1322 <<
" ROD_CRC = 0x" << rawChannelCollection->getFragRODChipMask() <<
" 0x" << ROD_DMUmask
1323 <<
" BCIDErr = 0x" << rawChannelCollection->getFragBCID() <<
" 0x" << BCIDErr
1324 <<
" MemPar = 0x" << rawChannelCollection->getFragMemoryPar()
1325 <<
" HeadForm = 0x"<< rawChannelCollection->getFragHeaderBit()
1326 <<
" HeadPar = 0x" << rawChannelCollection->getFragHeaderPar()
1327 <<
" SampForm = 0x"<< rawChannelCollection->getFragSampleBit()
1328 <<
" SampPar = 0x" << rawChannelCollection->getFragSamplePar()
1340 <<
" nBadMB = " << nbadMBMax
1348 <<
" nBadDMU = " << nbadMax
1352 if (tminCh && tminCh != minCh && tminCh != maxCh) {
1354 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(tminCh->
adc_HWID())
1356 <<
" tmin =" << tminCh->
time());
1359 if (tmaxCh && tmaxCh != minCh && tmaxCh != maxCh) {
1361 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(tmaxCh->
adc_HWID())
1363 <<
" tmax = " << tmaxCh->
time());
1369 const char * tit = (tminCh == minCh) ?
" tmin = ": ((tmaxCh == minCh) ?
" tmax = ":
" t = ");
1371 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(minCh->
adc_HWID())
1372 <<
" ch_emin = " << chmin
1373 << tit << minCh->
time()
1379 const char * tit = (tminCh == maxCh) ?
" tmin = ": ((tmaxCh == maxCh) ?
" tmax = ":
" t = ");
1381 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(maxCh->
adc_HWID())
1382 <<
" ch_emax = " << chmax
1383 << tit << maxCh->
time()
1396 if (!digitsContainer.
isValid()) {
1397 ATH_MSG_WARNING(
"Unable to read TileDigitsContainer from EventStore, disable reading of this container");
1415 int frag = digitsCollection->identify();
1416 bool eb = (frag > 0x2ff);
1417 bool ebsp = (frag == 0x30e || frag == 0x411);
1419 int ros = frag >> 8;
1420 int drawer = frag & 0x3F;
1426 for (
int ch: {12,4,0}) {
1439 int nChDmu[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
1440 int nChBadDmu[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
1442 for (
const TileDigits* tile_digits : *digitsCollection) {
1448 m_tileHWID->get_hash(chId, hash, &chan_context);
1451 int dmu = channel/3;
1454 bool isConnected = (chEmpty < 2);
1455 if (!isConnected) ++nChBadNC;
1457 const char *cellname =
"";
1459 if (channel == chMBTS) {
1462 }
else if ( (ebsp && (channel == 18 || channel == 19 || channel == 12 || channel == 13) )
1463 || (eb && (channel == 0 || channel == 1 || channel == 12 || channel == 13) ) ) {
1466 }
else if (chEmpty > 0) {
1467 cellname =
" EMPTY";
1470 const char *badname =
"";
1471 if (DQstatus && !DQstatus->
isAdcDQgood(ros,drawer,channel,adc)) {
1478 badname =
" BADDCS";
1479 }
else if (
m_tileBadChanTool->getAdcStatus(drawerIdx,channel,adc,ctx).isBad()) {
1486 if (ch_type != 2) badname =
" BADQUAL";
1488 if (isConnected && ch_type!=2) {
1493 badname =
" BADUNKN";
1495 }
else if (badFromCell &&
m_chanEne[hash] == 0.0) {
1496 badname =
" BADDIGI";
1502 const char *enename =
" ene = ";
1503 const char *timename =
" time = ";
1504 const char *qualname =
" qual = ";
1505 if (badFromCell && badname[0] != 0) {
1506 enename =
" BAD = ";
1508 qualname =
" eDSP = ";
1512 timename =
" tDSP = ";
1518 sprintf(badnm,
" BADDIGIEX%s",badname);
1521 std::vector<float> samples = tile_digits->samples();
1522 int nSamp = samples.size();
1525 bool useCh= !( (
m_skipMBTS && channel == chMBTS) ||
1531 if (badname[0]==0) {
1532 if (err && err>-3) {
1533 if (isConnected || err != -2) {
1538 if (!isConnected) --nChBadNC;
1543 }
else if (err < 36) {
1552 int warn =
Are3FF(samples, adc, ch_type);
1555 sprintf(badnm,
" warningE%d%s",warn,badname);
1563 && (badname[0] == 0 || badname[1] ==
'w'
1598 bool someSampErrors =
false;
1605 float ped = samples[0];
1610 bool cnstPed =
true;
1611 bool cnstPedmax =
true;
1612 for (
int i = 1; i < nSamp; ++i) {
1613 float smp = samples[i];
1614 float dped = smp - ped;
1615 if (fabs(dped) < pedDelta) {
1624 cnstPedmax = cnstPed;
1632 }
else if (smp>dmax) {
1638 cnstPedmax = cnstPed;
1641 if (dmax - dmin >= jumpDelta) {
1644 bool accCnst =
false;
1645 bool accJump =
false;
1646 bool cnstMin =
true;
1647 bool cnstMax =
true;
1648 bool jumpNeg =
false;
1649 bool jumpPos =
false;
1650 bool jumpEnd =
false;
1651 bool jumpZer =
false;
1652 bool jumpOve =
false;
1653 bool narrowUp =
false;
1654 bool narrowDown =
false;
1655 if (npedmax >=
m_constLength && ((dmax-ped) >= jumpDelta || (ped-dmin) >= jumpDelta) ) {
1663 float abovemin = dmax;
1664 float belowmax = dmin;
1665 for (
int i = 0; i < nSamp; ++i) {
1666 float smp = samples[i];
1667 if (smp - dmin < pedDelta) {
1670 if (smp != dmin) cnstMin =
false;
1672 if (dmax - smp < pedDelta) {
1675 if (smp != dmax) cnstMax =
false;
1677 if (smp < abovemin && smp > dmin) {
1680 if (smp > belowmax && smp < dmax) {
1684 if (
nmax + nmin == nSamp) {
1685 if (
nmax > 1 && nmin > 1) {
1688 }
else if (
nmax == 1) {
1689 if (pmax < nSamp - 1) {
1695 if (pmax == 0 || pmax == nSamp - 1) {
1698 }
else if (nmin == 1) {
1703 if (pmin == 0 || pmin == nSamp - 1) {
1727 if (pmax > 0 && pmax < nSamp-1 && std::max(samples[pmax-1], samples[pmax+1]) < dmin+secondMax) {
1732 if (nmin +
nmax != nSamp) {
1738 if (pmin > 0 && pmin < nSamp - 1 && std::min(samples[pmin - 1], samples[pmin + 1]) > dmax - secondMax) {
1743 if (nmin +
nmax != nSamp) {
1750 if (accEmin || accEmax || accCnst || accJump) {
1751 someSampErrors =
true;
1753 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(adcId)
1754 << enename <<
m_chanEne[hash] <<
" samp = " << samples[0]
1755 <<
" " << samples[1] <<
" " << samples[2] <<
" " << samples[3]
1756 <<
" " << samples[4] <<
" " << samples[5] <<
" " << samples[6]
1759 << cellname << badname
1760 << ((accEmin) ?
" neg_e" :
"")
1761 << ((accEmax) ?
" pos_e" :
"")
1762 << ((accCnst) ?
" const" :
"")
1763 << ((accCnst&&cnstPedmax) ?
"Const" :
"")
1764 << ((accJump) ?
" jump" :
"")
1765 << ((accJump&&jumpZer) ?
"Zero" :
"")
1766 << ((accJump&&jumpOve) ?
"Over" :
"")
1767 << ((accJump&&jumpPos) ?
"SingleUp" : ((narrowUp) ?
"NarrowUp" :
"") )
1768 << ((accJump&&jumpNeg) ?
"SingleDown" : ((narrowDown) ?
"NarrowDown" :
"") )
1769 << ((accJump&&jumpEnd) ?
"AtEdge" :
"")
1770 << ((accJump&&cnstMin) ?
"ConstMin" :
"")
1771 << ((accJump&&cnstMax) ?
"ConstMax" :
"")
1772 <<
" " << dmax-dmin);
1777 if (someSampErrors) {
1783 bool jumpZer = (dmin < 0.01);
1785 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(adcId)
1786 << enename <<
m_chanEne[hash] <<
" samp = " << samples[0]
1787 <<
" " << samples[1] <<
" " << samples[2] <<
" " << samples[3]
1788 <<
" " << samples[4] <<
" " << samples[5] <<
" " << samples[6]
1791 << cellname << badname
1792 << ((accEmin) ?
" neg_e" :
"")
1793 << ((accEmax) ?
" pos_e" :
"")
1794 <<((jumpZer) ?
" underflow" :
"")
1795 <<((jumpOve) ?
" overflow" :
"") );
1800 if (
m_checkDMUs && nChBad > 1 && nChBad + nChBadDB + nChBadNC < nChTot) {
1808 for (
int dmu = 0; dmu < 16; ++dmu) {
1809 if (nChDmu[dmu] > 0) {
1811 if (nChBadDmu[dmu] > 0) {
1814 nChBad1 += nChBadDmu[dmu];
1817 nChBad2 += nChBadDmu[dmu];
1820 if (nChBadDmu[dmu] == 2 && nChDmu[dmu] == 3) has23 =
true;
1824 if (nDmuBad == 1 )
continue;
1825 if (nDmuBad == 2 && nChBad < 3)
continue;
1827 if (nDmuBad>2 || nChBad > 9 || nChTot > 19 || has23) {
1831 for (
const TileDigits* tile_digits : *digitsCollection) {
1835 m_tileHWID->get_hash(chId, hash, &chan_context);
1837 std::vector<float> samples = tile_digits->samples();
1839 if (!
m_chanSel[hash] && samples.size()>6) {
1843 const char *cellname =
"";
1845 if (channel == chMBTS) {
1848 }
else if ( (ebsp && (channel == 18 || channel == 19 || channel == 12 || channel == 13) )
1849 || (eb && (channel == 0 || channel == 1 || channel == 12 || channel == 13) ) ) {
1852 }
else if (chEmpty > 0) {
1853 cellname =
" EMPTY";
1855 const char *badname =
"";
1858 }
else if (DQstatus && !DQstatus->
isAdcDQgood(ros, drawer, channel, adc)) {
1861 badname =
" BADDCS";
1864 if (ch_type != 2) badname =
" BADQUAL";
1867 badname =
" BADUNKN";
1869 }
else if (badFromCell &&
m_chanEne[hash] == 0.0) {
1870 badname =
" BADDIGI";
1874 sprintf(badnm,
" BADDIGIEX%s", badname);
1880 bool isConnected = (chEmpty < 2);
1881 if (isConnected || err != -2) {
1886 badnm[9] = 48 + err;
1887 }
else if (err < 36) {
1888 badnm[9] = 55 + err;
1895 const char *enename =
" ene = ";
1896 const char *timename =
" time = ";
1897 const char *qualname =
" qual = ";
1898 if (badFromCell && badname[0] != 0) {
1899 enename =
" BAD = ";
1901 qualname =
" eDSP = ";
1905 timename =
" tDSP = ";
1913 bool jumpZer = (dmin < 0.01);
1916 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(adcId)
1917 << enename <<
m_chanEne[hash] <<
" samp = " << samples[0]
1918 <<
" " << samples[1] <<
" " << samples[2] <<
" " << samples[3]
1919 <<
" " << samples[4] <<
" " << samples[5] <<
" " << samples[6]
1922 << cellname << badname
1923 << ((accEmin) ?
" neg_e" :
"")
1924 << ((accEmax) ?
" pos_e" :
"")
1925 << ((jumpZer) ?
" underflow" :
"")
1926 << ((jumpOve) ?
" overflow" :
"") );
1932 std::ostringstream badstr;
1933 badstr <<
" ch: " << nChBad1 <<
" + " << nChBad2 <<
" = " << nChBad <<
" / " << nChTot <<
" = " << 100*nChBad/nChTot
1934 <<
" % dmu: " << nDmuBad1 <<
" + " << nDmuBad2 <<
" = " << nDmuBad <<
" / " << nDmuTot <<
" ";
1935 for (
int dmu=0; dmu<16; ++dmu) {
1936 if (nChDmu[dmu]>0) {
1937 badstr <<
" " << std::hex << dmu <<
"=" << nChBadDmu[dmu] <<
"/" << nChDmu[dmu];
1941 <<
" drw " <<
drwname(digitsCollection->identify()) << badstr.str());
1949 <<
" n_const_sample_errors = " << nConst
1956 <<
" n_jump_sample_errors = " << nJump
1963 <<
" n_overflow_LG = " << nOverLG
1970 <<
" n_overflow_HG = " << nOverHG
1977 <<
" n_underflow_LG = " << nUnderLG
1984 <<
" n_underflow_HG = " << nUnderHG
1991 <<
" n_DMU_errors = " << nDmuErr
2009 return StatusCode::SUCCESS;