385 m_evtNum = eventInfo->eventNumber();
398 std::ostringstream evState;
399 evState <<
"Run "<< std::setw(6) <<
m_runNum
401 <<
" Evt "<< std::setw(9) <<
m_evtNum
403 <<
" Flags 0x" << std::hex <<
m_tileFlag << std::dec;
405 std::ostringstream evtnum;
406 evtnum <<
"Run "<< std::setw(6) <<
m_runNum
408 <<
" Evt "<< std::setw(9) <<
m_evtNum
411 std::ostringstream nevtnum;
412 nevtnum << evtnum.str()
415 bool emptyBad =
true;
416 bool badFromCell =
false;
430 for (
size_t i=0; i<
m_drawer.size(); ++i) {
433 m_tileHWID->get_hash(ch_id, hash, &chan_context);
435 std::fill(itr,itr+48,
true);
443 using namespace boost::local_time;
444 using namespace boost::posix_time;
445 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"));
446 local_date_time gva_time(from_time_t(eventInfo->timeStamp()),gva_tz);
447 evState <<
" " << gva_time <<
" ";
450 const char * part[5] = {
"UNK",
"LBA",
"LBC",
"EBA",
"EBC" };
454 int n2 = (n1 + dn - 1) % 64;
456 evState <<
" " << part[
rr] <<std::setw(2)<<std::setfill(
'0')<<n1+1
457 <<
" - " << part[
rr] <<std::setw(2)<<std::setfill(
'0')<<n2+1
458 <<
" " << dn <<
" consec bad ";
466 for (
int rr = 1;
rr < 5; ++
rr) {
467 if ((p2 & pp) || (p1 & pp)) {
468 evState <<
" " << part[
rr];
470 if (p0 & pp) evState <<
" off";
471 else evState <<
" OFF";
474 if (p0 & pp) evState <<
" mask";
475 else evState <<
" MASK";
480 evState <<
" " << dn <<
" consec bad ";
491 std::vector<int> allmod;
492 std::vector<int> consec;
493 for (
int ros = 1; ros < 5; ++ros) {
495 for (
int dr = 0; dr < drmax; ++dr) {
496 int drawer = dr % 64;
500 if (dr < 64) allmod.push_back((ros << 8) + dr);
501 }
else if (m1 >= 0) {
503 if (m1 == 0) drmax += dm;
510 consec.push_back((ros << 8) + m1);
511 }
else if (dm == dn) {
512 if (m1 < 64) consec.push_back((ros << 8) + m1);
518 evState <<
" DCS " << allmod.size() <<
" off ";
521 if (consec.size() > 1) evState <<
"*" << (consec.size());
522 evState <<
" consec "
523 << part[
rr] << std::setw(2) << std::setfill(
'0') << (n1 % 64) + 1 <<
" - "
524 << part[
rr] << std::setw(2) << std::setfill(
'0') << (n2 % 64) + 1 <<
" ";
527 for (
size_t n = 1; n < consec.size(); ++n) {
530 evState << part[m1 >> 8] << std::setw(2) << std::setfill(
'0') << (m1 % 64) + 1 <<
" - "
531 << part[m2 >> 8] << std::setw(2) << std::setfill(
'0') << (m2 % 64) + 1 <<
" ";
532 for (
size_t m = 0; m < allmod.size(); ++m) {
534 if (mm >= m1 && mm <= m2) {
535 allmod[m] += n1 - m1;
542 if (allmod.size() > (
size_t) dn) {
543 for (
size_t m = 0; m < allmod.size(); ++m) {
545 if (!(mm >= n1 && mm <= n2)) {
546 evState << part[mm >> 8] << std::setw(2) << std::setfill(
'0') << (mm % 64) + 1 <<
" ";
566 if (!cellContainer.
isValid()) {
568 ATH_MSG_WARNING(
"Unable to read CaloCellContainer from EventStore, disable reading of this container");
593 for (
const CaloCell* cell : *cellContainer) {
598 if (tile_cell==0)
continue;
608 bool bad1 = tile_cell->
badch1();
609 bool bad2 = tile_cell->
badch2();
610 float ene1 = tile_cell->
ene1();
611 float ene2 = tile_cell->
ene2();
612 float time1 = tile_cell->
time1();
613 float time2 = tile_cell->
time2();
623 float ene = tile_cell->
energy();
641 float time = tile_cell->
time();
659 if (timeOk && eneOk) {
662 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(
id,-2)
663 <<
" ene = " << ene <<
" time = " << time);
671 }
else if (ene > emax) {
678 tcellmin = tile_cell;
680 else if (time>tmax) {
682 tcellmax = tile_cell;
686 if ( !(bad1 && bad2) ) {
689 bool time1Ok =
false;
722 bool time2Ok =
false;
761 if ((ene1Ok && time1Ok) || over1) {
764 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(
id,-2)
765 <<
" ch_ene1 = " << ene1 <<
" ch_t1 = " << time1
766 << ((over1)?
" overflow":
""));
773 cellminCh = tile_cell;
774 }
else if (ene1 > chmax) {
776 cellmaxCh = tile_cell;
781 tcellminCh = tile_cell;
782 }
else if (time1 > tcmax) {
784 tcellmaxCh = tile_cell;
788 if ((ene2Ok && time2Ok) || over2) {
791 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(
id,-2)
792 <<
" ch_ene2 = " << ene2 <<
" ch_t2 = " << time2
793 << ((over2)?
" overflow":
""));
800 cellminCh = tile_cell;
801 }
else if (ene2 > chmax) {
803 cellmaxCh = tile_cell;
808 tcellminCh = tile_cell;
809 }
else if (time2 > tcmax) {
811 tcellmaxCh = tile_cell;
819 if (tcellmin && tcellmin != cellmin && tcellmin != cellmax) {
821 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(tcellmin->
ID(),-2)
822 <<
" ene = " << tcellmin->
energy()
823 <<
" tmin = " << tcellmin->
time());
825 if (tcellmax && tcellmax != cellmin && tcellmax != cellmax) {
827 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(tcellmax->
ID(),-2)
828 <<
" ene = " << tcellmax->
energy()
829 <<
" tmax = " << tcellmax->
energy());
832 if (tcellminCh && tcellminCh != cellminCh && tcellminCh != cellmaxCh) {
834 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(tcellminCh->
ID(),-2)
835 <<
" ch_ene = " << tcellminCh->
ene1() <<
" " << tcellminCh->
ene2()
836 <<
" ch_tmin = " << tcellminCh->
time1() <<
" " << tcellminCh->
time2());
838 if (tcellmaxCh && tcellmaxCh != cellminCh && tcellmaxCh != cellmaxCh) {
840 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(tcellmaxCh->
ID(),-2)
841 <<
" ch_ene = " << tcellmaxCh->
ene1() <<
" " << tcellmaxCh->
ene2()
842 <<
" ch_tmax = " << tcellmaxCh->
time1() <<
" " << tcellmaxCh->
time2());
848 const char * tit = (tcellmin == cellmin) ?
" tmin = ": ((tcellmax == cellmin) ?
" tmax = ":
" t = ");
849 if (cellminCh!=cellmin) {
851 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellmin->ID(),-2)
852 <<
" emin = " << emin
853 << tit << cellmin->time()
858 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellmin->ID(),-2)
859 <<
" emin = " << emin
860 <<
" ch_emin = " << chmin
861 << tit << cellmin->time()
869 const char * tit = (tcellminCh == cellminCh) ?
" tmin = ": ((tcellmaxCh == cellminCh) ?
" tmax = ":
" t = ");
870 if (cellminCh!=cellmin) {
872 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellminCh->
ID(),-2)
873 <<
" ch_emin = " << chmin
874 << tit << cellminCh->
time()
882 const char * tit = (tcellmin == cellmax) ?
" tmin = ": ((tcellmax == cellmax) ?
" tmax = ":
" t = ");
883 if (cellmaxCh!=cellmax) {
885 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellmax->ID(),-2)
886 <<
" emax = " << emax
887 << tit << cellmax->time()
892 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellmax->ID(),-2)
893 <<
" emax = " << emax
894 <<
" ch_emax = " << chmax
895 << tit << cellmax->time()
903 const char * tit = (tcellminCh == cellmaxCh) ?
" tmin = ": ((tcellmaxCh == cellmaxCh) ?
" tmax = ":
" t = ");
904 if (cellmaxCh!=cellmax) {
906 <<
" cell " << std::left << std::setw(14) <<
m_tileID->to_string(cellmaxCh->
ID(),-2)
907 <<
" ch_emax = " << chmax
908 << tit << cellmaxCh->
time()
925 if ( !rawChannelContainer.isValid() ) {
926 ATH_MSG_WARNING(
"Unable to read TileRawChannelContainer from EventStore, disable reading of this container");
942 bool fillChanEne = ( !
m_readCells && allowAmpCheck );
964 bool someDQerrors =
false;
968 int frag = rawChannelCollection->identify();
969 bool eb = (frag > 0x2ff);
970 bool ebsp = (frag == 0x30e || frag == 0x411);
973 int drawer = frag & 0x3F;
979 for (
int ch: {12,4,0}) {
989 m_tileHWID->get_hash(ch_id, hash, &chan_context);
990 int hashNext =
index = (int)hash + 48;
994 uint32_t RODBCID = rawChannelCollection->getRODBCID();
995 uint32_t DSPBCID = rawChannelCollection->getFragDSPBCID();
996 uint32_t GlobalCRCErr = rawChannelCollection->getFragGlobalCRC() & 0x1;
997 uint32_t FE_DMUmask = rawChannelCollection->getFragFEChipMask();
998 uint32_t ROD_DMUmask = rawChannelCollection->getFragRODChipMask();
999 uint32_t BCIDErr = rawChannelCollection->getFragBCID();
1000 uint32_t MemoryParityErr = rawChannelCollection->getFragMemoryPar();
1001 uint32_t HeaderFormatErr = rawChannelCollection->getFragHeaderBit();
1002 uint32_t HeaderParityErr = rawChannelCollection->getFragHeaderPar();
1003 uint32_t SampleFormatErr = rawChannelCollection->getFragSampleBit();
1004 uint32_t SampleParityErr = rawChannelCollection->getFragSamplePar();
1005 uint32_t SingleStrobeErr = rawChannelCollection->getFragSstrobe();
1006 uint32_t DoubleStrobeErr = rawChannelCollection->getFragDstrobe();
1008 if (RODBCID!=0 && RODBCID !=
m_evtBCID ) {
1011 <<
" drw " <<
drwname(rawChannelCollection->identify())
1012 <<
" ROD BCID " << RODBCID <<
" is wrong - skipping");
1016 <<
" suppressing further messages about drawer 0x" << std::hex << rawChannelCollection->identify()
1017 << std::dec <<
" being bad");
1019 someDQerrors =
true;
1023 if (DSPBCID >= 0x7FFF
1025 && FE_DMUmask == 0xFFFF
1026 && ROD_DMUmask == 0xFFFF
1027 && BCIDErr == 0xFFFF
1028 && MemoryParityErr == 0xFFFF
1029 && HeaderFormatErr == 0xFFFF
1030 && HeaderParityErr == 0xFFFF
1031 && SampleFormatErr == 0xFFFF
1032 && SampleParityErr == 0xFFFF
1033 && SingleStrobeErr == 0xFFFF
1034 && DoubleStrobeErr == 0xFFFF) {
1038 <<
" drw " <<
drwname(rawChannelCollection->identify())
1039 <<
" is OFF - skipping");
1043 <<
" suppressing further messages about drawer 0x" << std::hex
1044 << rawChannelCollection->identify()
1045 << std::dec <<
" being bad");
1051 && GlobalCRCErr == 0
1055 && MemoryParityErr == 0
1056 && HeaderFormatErr == 0
1057 && HeaderParityErr == 0
1058 && SampleFormatErr == 0
1059 && SampleParityErr == 0
1060 && SingleStrobeErr == 0
1061 && DoubleStrobeErr == 0) {
1065 <<
" drw " <<
drwname(rawChannelCollection->identify())
1066 <<
" is MISSING - skipping");
1070 <<
" suppressing further messages about drawer 0x" << std::hex
1071 << rawChannelCollection->identify() << std::dec <<
" being bad");
1077 GlobalCRCErr = 0xFFFF;
1081 <<
" drw " <<
drwname(rawChannelCollection->identify())
1082 <<
" global CRC error - skipping");
1086 <<
" suppressing further messages about drawer 0x" << std::hex
1087 << rawChannelCollection->identify() << std::dec <<
" being bad");
1089 someDQerrors =
true;
1094 if (HeaderFormatErr || HeaderParityErr || SampleFormatErr || SampleParityErr ) {
1095 FE_DMUmask = 0xFFFF;
1098 if (ebsp) FE_DMUmask<<=1;
1099 FE_DMUmask = (FE_DMUmask & 0xFF) | ((FE_DMUmask & 0xF00)<<2);
1103 FE_DMUmask = ~FE_DMUmask & 0xFFFF;
1104 ROD_DMUmask = ~ROD_DMUmask & 0xFFFF;
1106 if (BCIDErr & 0x2) {
1111 <<
" drw " <<
drwname(rawChannelCollection->identify())
1112 <<
" BCID in DMU1 is bad - skipping");
1116 <<
" suppressing further messages about drawer 0x"
1117 << std::hex << rawChannelCollection->identify() << std::dec <<
" being bad");
1119 someDQerrors =
true;
1125 if ( DSPBCID!=0xDEAD && DSPBCID!=
m_evtBCID ) {
1130 <<
" drw " <<
drwname(rawChannelCollection->identify())
1131 <<
" DSP BCID is wrong - skipping");
1135 <<
" suppressing further messages about drawer 0x"
1136 << std::hex << rawChannelCollection->identify() << std::dec <<
" being bad");
1138 someDQerrors =
true;
1144 uint32_t
error = GlobalCRCErr | FE_DMUmask | ROD_DMUmask | BCIDErr | MemoryParityErr |
1145 HeaderFormatErr | HeaderParityErr | SampleFormatErr | SampleParityErr;
1150 <<
" drw " <<
drwname(rawChannelCollection->identify())
1151 <<
" whole drawer is bad - skipping");
1155 <<
" suppressing further messages about drawer 0x"
1156 << std::hex << rawChannelCollection->identify() << std::dec <<
" being bad");
1158 someDQerrors =
true;
1167 <<
" enabling messages about drawer 0x" << std::hex
1168 << rawChannelCollection->identify()
1169 << std::dec <<
" being bad after " <<
m_maxVerboseCnt <<
" good events");
1173 uint32_t errMB = BCIDErr;
1183 if (errMB & 0xF) ++nbadMB;
1187 if (nbadMB > nbadMBMax) {
1189 collMBMax = rawChannelCollection;
1193 for (uint32_t i = 0x8000; i != 0; i >>= 1) {
1198 if (emptyBad && nbadMB < 4) {
1208 int nbad = ((ebsp) ? nerr-5 : ((eb) ? nerr-4 : nerr));
1211 someDQerrors =
true;
1212 if (nbad > nbadMax) {
1214 collMax = rawChannelCollection;
1223 if (allowAmpCheck || emptyBad) {
1229 m_tileHWID->get_hash(chId, hash, &chan_context);
1234 if (channel == chMBTS) {
1236 }
else if ( (ebsp && (channel == 18 || channel == 19 || channel == 12 || channel == 13) )
1237 || (eb && (channel == 0 || channel == 1 || channel == 12 || channel == 13) ) ) {
1242 (DQstatus && !DQstatus->
isAdcDQgood(ros,drawer,channel,adc)) ||
1246 if (allowAmpCheck) {
1248 float amp = rawChannel->amplitude();
1249 float time = rawChannel->time();
1253 m_chanQua[hash] = rawChannel->quality();
1274 bool timeOk =
false;
1283 if (ampOk && timeOk) {
1286 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(adcId)
1287 <<
" ch_ene = " << amp <<
" ch_t = " << time);
1294 }
else if (amp > chmax) {
1301 tminCh = rawChannel;
1303 else if (time>tcmax) {
1305 tmaxCh = rawChannel;
1315 <<
" drw " <<
drwname(rawChannelCollection->identify())
1316 <<
" nBadMB = " << nbadMB
1317 <<
" nBadDMU = " << nbad
1319 <<
" DSPBCID = " << rawChannelCollection->getFragDSPBCID()
1320 <<
" GlobCRC = " << rawChannelCollection->getFragGlobalCRC() <<
" " << GlobalCRCErr
1321 <<
" error = 0x" << std::hex <<
error
1322 <<
" FE_CRC = 0x" << rawChannelCollection->getFragFEChipMask() <<
" 0x" << FE_DMUmask
1323 <<
" ROD_CRC = 0x" << rawChannelCollection->getFragRODChipMask() <<
" 0x" << ROD_DMUmask
1324 <<
" BCIDErr = 0x" << rawChannelCollection->getFragBCID() <<
" 0x" << BCIDErr
1325 <<
" MemPar = 0x" << rawChannelCollection->getFragMemoryPar()
1326 <<
" HeadForm = 0x"<< rawChannelCollection->getFragHeaderBit()
1327 <<
" HeadPar = 0x" << rawChannelCollection->getFragHeaderPar()
1328 <<
" SampForm = 0x"<< rawChannelCollection->getFragSampleBit()
1329 <<
" SampPar = 0x" << rawChannelCollection->getFragSamplePar()
1341 <<
" nBadMB = " << nbadMBMax
1349 <<
" nBadDMU = " << nbadMax
1353 if (tminCh && tminCh != minCh && tminCh != maxCh) {
1355 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(tminCh->
adc_HWID())
1357 <<
" tmin =" << tminCh->
time());
1360 if (tmaxCh && tmaxCh != minCh && tmaxCh != maxCh) {
1362 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(tmaxCh->
adc_HWID())
1364 <<
" tmax = " << tmaxCh->
time());
1370 const char * tit = (tminCh == minCh) ?
" tmin = ": ((tmaxCh == minCh) ?
" tmax = ":
" t = ");
1372 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(minCh->
adc_HWID())
1373 <<
" ch_emin = " << chmin
1374 << tit << minCh->
time()
1380 const char * tit = (tminCh == maxCh) ?
" tmin = ": ((tmaxCh == maxCh) ?
" tmax = ":
" t = ");
1382 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(maxCh->
adc_HWID())
1383 <<
" ch_emax = " << chmax
1384 << tit << maxCh->
time()
1397 if (!digitsContainer.
isValid()) {
1398 ATH_MSG_WARNING(
"Unable to read TileDigitsContainer from EventStore, disable reading of this container");
1416 int frag = digitsCollection->identify();
1417 bool eb = (frag > 0x2ff);
1418 bool ebsp = (frag == 0x30e || frag == 0x411);
1420 int ros = frag >> 8;
1421 int drawer = frag & 0x3F;
1427 for (
int ch: {12,4,0}) {
1440 int nChDmu[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
1441 int nChBadDmu[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
1443 for (
const TileDigits* tile_digits : *digitsCollection) {
1449 m_tileHWID->get_hash(chId, hash, &chan_context);
1452 int dmu = channel/3;
1455 bool isConnected = (chEmpty < 2);
1456 if (!isConnected) ++nChBadNC;
1458 const char *cellname =
"";
1460 if (channel == chMBTS) {
1463 }
else if ( (ebsp && (channel == 18 || channel == 19 || channel == 12 || channel == 13) )
1464 || (eb && (channel == 0 || channel == 1 || channel == 12 || channel == 13) ) ) {
1467 }
else if (chEmpty > 0) {
1468 cellname =
" EMPTY";
1471 const char *badname =
"";
1472 if (DQstatus && !DQstatus->
isAdcDQgood(ros,drawer,channel,adc)) {
1479 badname =
" BADDCS";
1487 if (ch_type != 2) badname =
" BADQUAL";
1489 if (isConnected && ch_type!=2) {
1494 badname =
" BADUNKN";
1496 }
else if (badFromCell &&
m_chanEne[hash] == 0.0) {
1497 badname =
" BADDIGI";
1503 const char *enename =
" ene = ";
1504 const char *timename =
" time = ";
1505 const char *qualname =
" qual = ";
1506 if (badFromCell && badname[0] != 0) {
1507 enename =
" BAD = ";
1509 qualname =
" eDSP = ";
1513 timename =
" tDSP = ";
1519 sprintf(badnm,
" BADDIGIEX%s",badname);
1522 std::vector<float> samples = tile_digits->samples();
1523 int nSamp = samples.size();
1526 bool useCh= !( (
m_skipMBTS && channel == chMBTS) ||
1532 if (badname[0]==0) {
1533 if (err && err>-3) {
1534 if (isConnected || err != -2) {
1539 if (!isConnected) --nChBadNC;
1544 }
else if (err < 36) {
1553 int warn =
Are3FF(samples, adc, ch_type);
1556 sprintf(badnm,
" warningE%d%s",warn,badname);
1564 && (badname[0] == 0 || badname[1] ==
'w'
1599 bool someSampErrors =
false;
1606 float ped = samples[0];
1611 bool cnstPed =
true;
1612 bool cnstPedmax =
true;
1613 for (
int i = 1; i < nSamp; ++i) {
1614 float smp = samples[i];
1615 float dped = smp - ped;
1616 if (fabs(dped) < pedDelta) {
1625 cnstPedmax = cnstPed;
1633 }
else if (smp>dmax) {
1639 cnstPedmax = cnstPed;
1642 if (dmax - dmin >= jumpDelta) {
1645 bool accCnst =
false;
1646 bool accJump =
false;
1647 bool cnstMin =
true;
1648 bool cnstMax =
true;
1649 bool jumpNeg =
false;
1650 bool jumpPos =
false;
1651 bool jumpEnd =
false;
1652 bool jumpZer =
false;
1653 bool jumpOve =
false;
1654 bool narrowUp =
false;
1655 bool narrowDown =
false;
1656 if (npedmax >=
m_constLength && ((dmax-ped) >= jumpDelta || (ped-dmin) >= jumpDelta) ) {
1664 float abovemin = dmax;
1665 float belowmax = dmin;
1666 for (
int i = 0; i < nSamp; ++i) {
1667 float smp = samples[i];
1668 if (smp - dmin < pedDelta) {
1671 if (smp != dmin) cnstMin =
false;
1673 if (dmax - smp < pedDelta) {
1676 if (smp != dmax) cnstMax =
false;
1678 if (smp < abovemin && smp > dmin) {
1681 if (smp > belowmax && smp < dmax) {
1685 if (
nmax + nmin == nSamp) {
1686 if (
nmax > 1 && nmin > 1) {
1689 }
else if (
nmax == 1) {
1690 if (pmax < nSamp - 1) {
1696 if (pmax == 0 || pmax == nSamp - 1) {
1699 }
else if (nmin == 1) {
1704 if (pmin == 0 || pmin == nSamp - 1) {
1728 if (pmax > 0 && pmax < nSamp-1 && std::max(samples[pmax-1], samples[pmax+1]) < dmin+secondMax) {
1733 if (nmin +
nmax != nSamp) {
1739 if (pmin > 0 && pmin < nSamp - 1 && std::min(samples[pmin - 1], samples[pmin + 1]) > dmax - secondMax) {
1744 if (nmin +
nmax != nSamp) {
1751 if (accEmin || accEmax || accCnst || accJump) {
1752 someSampErrors =
true;
1754 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(adcId)
1755 << enename <<
m_chanEne[hash] <<
" samp = " << samples[0]
1756 <<
" " << samples[1] <<
" " << samples[2] <<
" " << samples[3]
1757 <<
" " << samples[4] <<
" " << samples[5] <<
" " << samples[6]
1760 << cellname << badname
1761 << ((accEmin) ?
" neg_e" :
"")
1762 << ((accEmax) ?
" pos_e" :
"")
1763 << ((accCnst) ?
" const" :
"")
1764 << ((accCnst&&cnstPedmax) ?
"Const" :
"")
1765 << ((accJump) ?
" jump" :
"")
1766 << ((accJump&&jumpZer) ?
"Zero" :
"")
1767 << ((accJump&&jumpOve) ?
"Over" :
"")
1768 << ((accJump&&jumpPos) ?
"SingleUp" : ((narrowUp) ?
"NarrowUp" :
"") )
1769 << ((accJump&&jumpNeg) ?
"SingleDown" : ((narrowDown) ?
"NarrowDown" :
"") )
1770 << ((accJump&&jumpEnd) ?
"AtEdge" :
"")
1771 << ((accJump&&cnstMin) ?
"ConstMin" :
"")
1772 << ((accJump&&cnstMax) ?
"ConstMax" :
"")
1773 <<
" " << dmax-dmin);
1778 if (someSampErrors) {
1784 bool jumpZer = (dmin < 0.01);
1786 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(adcId)
1787 << enename <<
m_chanEne[hash] <<
" samp = " << samples[0]
1788 <<
" " << samples[1] <<
" " << samples[2] <<
" " << samples[3]
1789 <<
" " << samples[4] <<
" " << samples[5] <<
" " << samples[6]
1792 << cellname << badname
1793 << ((accEmin) ?
" neg_e" :
"")
1794 << ((accEmax) ?
" pos_e" :
"")
1795 <<((jumpZer) ?
" underflow" :
"")
1796 <<((jumpOve) ?
" overflow" :
"") );
1801 if (
m_checkDMUs && nChBad > 1 && nChBad + nChBadDB + nChBadNC < nChTot) {
1809 for (
int dmu = 0; dmu < 16; ++dmu) {
1810 if (nChDmu[dmu] > 0) {
1812 if (nChBadDmu[dmu] > 0) {
1815 nChBad1 += nChBadDmu[dmu];
1818 nChBad2 += nChBadDmu[dmu];
1821 if (nChBadDmu[dmu] == 2 && nChDmu[dmu] == 3) has23 =
true;
1825 if (nDmuBad == 1 )
continue;
1826 if (nDmuBad == 2 && nChBad < 3)
continue;
1828 if (nDmuBad>2 || nChBad > 9 || nChTot > 19 || has23) {
1832 for (
const TileDigits* tile_digits : *digitsCollection) {
1836 m_tileHWID->get_hash(chId, hash, &chan_context);
1838 std::vector<float> samples = tile_digits->samples();
1840 if (!
m_chanSel[hash] && samples.size()>6) {
1844 const char *cellname =
"";
1846 if (channel == chMBTS) {
1849 }
else if ( (ebsp && (channel == 18 || channel == 19 || channel == 12 || channel == 13) )
1850 || (eb && (channel == 0 || channel == 1 || channel == 12 || channel == 13) ) ) {
1853 }
else if (chEmpty > 0) {
1854 cellname =
" EMPTY";
1856 const char *badname =
"";
1859 }
else if (DQstatus && !DQstatus->
isAdcDQgood(ros, drawer, channel, adc)) {
1862 badname =
" BADDCS";
1865 if (ch_type != 2) badname =
" BADQUAL";
1868 badname =
" BADUNKN";
1870 }
else if (badFromCell &&
m_chanEne[hash] == 0.0) {
1871 badname =
" BADDIGI";
1875 sprintf(badnm,
" BADDIGIEX%s", badname);
1881 bool isConnected = (chEmpty < 2);
1882 if (isConnected || err != -2) {
1887 badnm[9] = 48 + err;
1888 }
else if (err < 36) {
1889 badnm[9] = 55 + err;
1896 const char *enename =
" ene = ";
1897 const char *timename =
" time = ";
1898 const char *qualname =
" qual = ";
1899 if (badFromCell && badname[0] != 0) {
1900 enename =
" BAD = ";
1902 qualname =
" eDSP = ";
1906 timename =
" tDSP = ";
1914 bool jumpZer = (dmin < 0.01);
1917 <<
" chan " << std::left << std::setw(14) <<
m_tileHWID->to_string(adcId)
1918 << enename <<
m_chanEne[hash] <<
" samp = " << samples[0]
1919 <<
" " << samples[1] <<
" " << samples[2] <<
" " << samples[3]
1920 <<
" " << samples[4] <<
" " << samples[5] <<
" " << samples[6]
1923 << cellname << badname
1924 << ((accEmin) ?
" neg_e" :
"")
1925 << ((accEmax) ?
" pos_e" :
"")
1926 << ((jumpZer) ?
" underflow" :
"")
1927 << ((jumpOve) ?
" overflow" :
"") );
1933 std::ostringstream badstr;
1934 badstr <<
" ch: " << nChBad1 <<
" + " << nChBad2 <<
" = " << nChBad <<
" / " << nChTot <<
" = " << 100*nChBad/nChTot
1935 <<
" % dmu: " << nDmuBad1 <<
" + " << nDmuBad2 <<
" = " << nDmuBad <<
" / " << nDmuTot <<
" ";
1936 for (
int dmu=0; dmu<16; ++dmu) {
1937 if (nChDmu[dmu]>0) {
1938 badstr <<
" " << std::hex << dmu <<
"=" << nChBadDmu[dmu] <<
"/" << nChDmu[dmu];
1942 <<
" drw " <<
drwname(digitsCollection->identify()) << badstr.str());
1950 <<
" n_const_sample_errors = " << nConst
1957 <<
" n_jump_sample_errors = " << nJump
1964 <<
" n_overflow_LG = " << nOverLG
1971 <<
" n_overflow_HG = " << nOverHG
1978 <<
" n_underflow_LG = " << nUnderLG
1985 <<
" n_underflow_HG = " << nUnderHG
1992 <<
" n_DMU_errors = " << nDmuErr
2010 return StatusCode::SUCCESS;