55 m_l1GtDataDaqInputTag(paramSet.getParameter<edm::InputTag>(
56 "L1GtDataDaqInputTag")),
58 m_l1GtDataEvmInputTag(paramSet.getParameter<edm::InputTag>(
59 "L1GtDataEvmInputTag")),
61 m_l1GtEmulDaqInputTag(paramSet.getParameter<edm::InputTag>(
62 "L1GtEmulDaqInputTag")),
64 m_l1GtEmulEvmInputTag(paramSet.getParameter<edm::InputTag>(
65 "L1GtEmulEvmInputTag")),
67 m_l1GctDataInputTag(paramSet.getParameter<edm::InputTag>(
68 "L1GctDataInputTag")),
70 m_dirName(paramSet.getUntrackedParameter(
"DirName", std::
string(
73 m_excludeCondCategTypeObject(paramSet.getParameter<std::vector<edm::
ParameterSet> >(
74 "ExcludeCondCategTypeObject")),
76 m_excludeAlgoTrigByName(paramSet.getParameter<std::vector<std::
string> >(
77 "ExcludeAlgoTrigByName")),
79 m_excludeAlgoTrigByBit(paramSet.getParameter<std::vector<int> >(
80 "ExcludeAlgoTrigByBit")),
83 m_nrDataEventError(0),
84 m_nrEmulEventError(0),
86 m_l1GtMenuCacheID(0ULL), m_l1GtPfAlgoCacheID(0ULL),
87 m_l1GtPfTechCacheID(0ULL), m_l1GtTmAlgoCacheID(0ULL),
88 m_l1GtTmTechCacheID(0ULL),
94 m_dataOnlyMask(
false),
95 m_emulOnlyMask(
false),
97 m_nrEvJob(0), m_nrEvRun(0) {
100 for (std::vector<edm::ParameterSet>::const_iterator
105 if (!(itExclud->getParameter<
std::string> (
"ExcludedCondCategory")).empty()) {
108 itExclud->getParameter<
std::string>(
"ExcludedCondCategory")));
114 if (!(itExclud->getParameter<
std::string>(
"ExcludedCondType")).empty() ) {
117 itExclud->getParameter<
std::string> (
"ExcludedCondType")));
123 if (!(itExclud->getParameter<
std::string>(
"ExcludedL1GtObject")).empty() ) {
126 itExclud->getParameter<
std::string> (
"ExcludedL1GtObject")));
135 <<
"\nInput tag for the L1 GT DAQ hardware record: "
137 <<
"\nInput tag for the L1 GT EVM hardware record: "
139 <<
"\nInput tag for the L1 GT DAQ emulator records: "
141 <<
"\nInput tag for the L1 GT EVM emulator records: "
143 <<
"\nInput tag for the L1 GCT hardware record: "
151 <<
"\n Unable to get DQMStore service.";
204 unsigned long long l1GtMenuCacheID =
226 LogDebug(
"L1GtHwValidation") <<
"\nUsing L1 menu: \n "
232 for (
CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
234 const int algBitNumber = (itAlgo->second).algoBitNumber();
236 std::stringstream ss;
238 ss << std::uppercase << algBitNumber;
241 const std::string& aName = algBitString +
" " + itAlgo->first;
242 const char* algName = aName.c_str();
245 for (
int iBxInEvent = 0; iBxInEvent <
TotalBxInEvent; ++iBxInEvent) {
249 int iIndex = iBxInEvent - ((TotalBxInEvent + 1) / 2 - 1);
250 int hIndex = (iIndex + 16) % 16;
252 std::stringstream ss;
254 ss << std::uppercase << std::hex << hIndex;
270 algBitNumber + 1, algName, 1);
272 algBitNumber + 1, algName, 1);
274 algBitNumber + 1, algName, 1);
276 algBitNumber + 1, algName, 1);
278 algBitNumber + 1, algName, 1);
281 algBitNumber + 1, algName, 1);
283 algBitNumber + 1, algName, 1);
285 algBitNumber + 1, algName, 1);
287 algBitNumber + 1, algName, 1);
289 algBitNumber + 1, algName, 1);
292 algBitNumber + 1, algName, 1);
294 algBitNumber + 1, algName, 1);
296 algBitNumber + 1, algName, 1);
298 algBitNumber + 1, algName, 1);
300 algBitNumber + 1, algName, 1);
330 if (algBitNumber == *itAlgo) {
342 unsigned long long l1GtPfAlgoCacheID = evSetup.
get<
357 unsigned long long l1GtPfTechCacheID = evSetup.
get<
375 unsigned long long l1GtTmAlgoCacheID = evSetup.
get<
390 unsigned long long l1GtTmTechCacheID = evSetup.
get<
410 const L1GtfeWord& gtfeBlockEmul,
const int iRec) {
425 if (gtfeBlockData == gtfeBlockEmul) {
427 <<
" Data and emulated GTFE blocks: identical.\n";
431 <<
" Data and emulated GTFE blocks: different.\n";
447 const boost::uint16_t boardIdData = gtfeBlockData.
boardId();
448 const boost::uint16_t boardIdEmul = gtfeBlockEmul.
boardId();
450 if (boardIdData == boardIdEmul) {
452 <<
" Data and emulated GTFE boardId identical.";
453 m_myCoutStream <<
"\n boardId() = " << std::hex <<
"0x" << std::setw(4)
454 << std::setfill(
'0') << boardIdData << std::setfill(
' ')
460 <<
" Data and emulated GTFE boardId different.";
462 << std::setw(4) << std::setfill(
'0') << boardIdData
463 << std::setfill(
' ') << std::dec;
465 << std::setw(4) << std::setfill(
'0') << boardIdEmul
466 << std::setfill(
' ') << std::dec;
473 const boost::uint16_t recordLength1Data = gtfeBlockData.
recordLength1();
474 const boost::uint16_t recordLength1Emul = gtfeBlockEmul.
recordLength1();
476 if (recordLength1Data == recordLength1Emul) {
478 <<
" Data and emulated GTFE recordLength for alternative 1 identical.";
484 <<
" Data and emulated GTFE recordLength for alternative 1 different.";
485 m_myCoutStream <<
"\n Data: recordLength1() = " << recordLength1Data;
486 m_myCoutStream <<
"\n Emul: recordLength1() = " << recordLength1Emul;
493 const boost::uint16_t recordLengthData = gtfeBlockData.
recordLength();
494 const boost::uint16_t recordLengthEmul = gtfeBlockEmul.
recordLength();
496 if (recordLengthData == recordLengthEmul) {
498 <<
" Data and emulated GTFE recordLength for alternative 0 identical.";
504 <<
" Data and emulated GTFE recordLength for alternative 1 different.";
505 m_myCoutStream <<
"\n Data: recordLength() = " << recordLengthData;
506 m_myCoutStream <<
"\n Emul: recordLength() = " << recordLengthEmul;
513 const boost::uint16_t bxNrData = gtfeBlockData.
bxNr();
514 const boost::uint16_t bxNrEmul = gtfeBlockEmul.
bxNr();
516 if (bxNrData == bxNrEmul) {
518 <<
" Data and emulated GTFE bxNr identical.";
524 <<
" Data and emulated GTFE bxNr different.";
533 const boost::uint32_t setupVersionData = gtfeBlockData.
setupVersion();
534 const boost::uint32_t setupVersionEmul = gtfeBlockEmul.
setupVersion();
536 if (setupVersionData == setupVersionEmul) {
538 <<
" Data and emulated GTFE setupVersion identical.";
544 <<
" Data and emulated GTFE setupVersion different.";
545 m_myCoutStream <<
"\n Data: setupVersion() = " << setupVersionData;
546 m_myCoutStream <<
"\n Emul: setupVersion() = " << setupVersionEmul;
553 const boost::uint16_t activeBoardsData = gtfeBlockData.
activeBoards();
554 const boost::uint16_t activeBoardsEmul = gtfeBlockEmul.
activeBoards();
556 if (activeBoardsData == activeBoardsEmul) {
558 <<
" Data and emulated GTFE activeBoards identical.";
560 << std::setw(4) << std::setfill(
'0') << activeBoardsData
561 << std::setfill(
' ') << std::dec;
566 <<
" Data and emulated GTFE activeBoards different.";
567 m_myCoutStream <<
"\n Data: activeBoards() = " << std::hex <<
"0x"
568 << std::setw(4) << std::setfill(
'0') << activeBoardsData
569 << std::setfill(
' ') << std::dec;
570 m_myCoutStream <<
"\n Emul: activeBoards() = " << std::hex <<
"0x"
571 << std::setw(4) << std::setfill(
'0') << activeBoardsEmul
572 << std::setfill(
' ') << std::dec;
581 const boost::uint16_t altNrBxBoardData = gtfeBlockData.
altNrBxBoard();
582 const boost::uint16_t altNrBxBoardEmul = gtfeBlockEmul.
altNrBxBoard();
584 if (altNrBxBoardData == altNrBxBoardEmul) {
586 <<
" Data and emulated GTFE altNrBxBoard identical.";
592 <<
" Data and emulated GTFE altNrBxBoard different.";
593 m_myCoutStream <<
"\n Data: altNrBxBoard() = " << altNrBxBoardData;
594 m_myCoutStream <<
"\n Emul: altNrBxBoard() = " << altNrBxBoardEmul;
601 const boost::uint32_t totalTriggerNrData = gtfeBlockData.
totalTriggerNr();
602 const boost::uint32_t totalTriggerNrEmul = gtfeBlockEmul.
totalTriggerNr();
604 if (totalTriggerNrData == totalTriggerNrEmul) {
606 <<
" Data and emulated GTFE totalTriggerNr identical.";
612 <<
" Data and emulated GTFE totalTriggerNr different.";
613 m_myCoutStream <<
"\n Data: totalTriggerNr() = " << totalTriggerNrData;
614 m_myCoutStream <<
"\n Emul: totalTriggerNr() = " << totalTriggerNrEmul;
632 int PhysicsPartition = 0;
648 if (fdlBlockData == fdlBlockEmul) {
650 <<
" Data and emulated FDL blocks: identical.\n";
655 <<
" Data and emulated FDL blocks: different.\n";
672 const int bxInEventData = fdlBlockData.
bxInEvent();
673 const int bxInEventEmul = fdlBlockEmul.
bxInEvent();
675 bool matchBxInEvent =
false;
677 if (bxInEventData == bxInEventEmul) {
679 <<
" Data and emulated FDL bxInEvent identical.";
682 matchBxInEvent =
true;
686 <<
" Data and emulated FDL bxInEvent different.";
697 <<
"\n Data and emulated FDL bxInEvent different \n";
707 bool validBxInEvent =
false;
709 LogDebug(
"L1GtHwValidation") <<
"\n Convert bxInEvent = " << bxInEventData
710 <<
" to histIndex = " << histIndex << std::endl;
712 validBxInEvent =
true;
718 const boost::uint16_t boardIdData = fdlBlockData.
boardId();
719 const boost::uint16_t boardIdEmul = fdlBlockEmul.
boardId();
721 if (boardIdData == boardIdEmul) {
723 <<
" Data and emulated FDL boardId identical.";
724 m_myCoutStream <<
"\n boardId() = " << std::hex <<
"0x" << std::setw(4)
725 << std::setfill(
'0') << boardIdData << std::setfill(
' ')
731 <<
" Data and emulated FDL boardId different.";
733 << std::setw(4) << std::setfill(
'0') << boardIdData
734 << std::setfill(
' ') << std::dec;
736 << std::setw(4) << std::setfill(
'0') << boardIdEmul
737 << std::setfill(
' ') << std::dec;
740 if (matchBxInEvent && validBxInEvent) {
753 const boost::uint16_t bxNrData = fdlBlockData.
bxNr();
754 const boost::uint16_t bxNrEmul = fdlBlockEmul.
bxNr();
756 if (bxNrData == bxNrEmul) {
758 <<
" Data and emulated FDL bxNr identical.";
764 <<
" Data and emulated FDL bxNr different.";
769 if (matchBxInEvent && validBxInEvent) {
781 const boost::uint32_t eventNrData = fdlBlockData.
eventNr();
782 const boost::uint32_t eventNrEmul = fdlBlockEmul.
eventNr();
784 if (eventNrData == eventNrEmul) {
786 <<
" Data and emulated FDL eventNr identical.";
792 <<
" Data and emulated FDL eventNr different.";
797 if (matchBxInEvent && validBxInEvent) {
815 int nTechBits = gtTechnicalTriggerWordData.size();
820 unsigned int bitValue = 0;
822 if (matchBxInEvent && validBxInEvent) {
823 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
826 << PhysicsPartition);
828 if (gtTechnicalTriggerWordData[iBit]) {
831 bitValue = (triggerMask) ? 0 : 1;
832 gtTechnicalTriggerWordDataMask[iBit] = bitValue;
838 if (gtTechnicalTriggerWordEmul.at(iBit)) {
841 bitValue = (triggerMask) ? 0 : 1;
842 gtTechnicalTriggerWordEmulMask[iBit] = bitValue;
849 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
851 if (gtTechnicalTriggerWordData[iBit]) {
855 if (gtTechnicalTriggerWordEmul.at(iBit)) {
861 if (gtTechnicalTriggerWordData == gtTechnicalTriggerWordEmul) {
863 <<
" Data and emulated FDL gtTechnicalTriggerWord identical.\n";
869 <<
" Data and emulated FDL gtTechnicalTriggerWord different.";
876 if (matchBxInEvent && validBxInEvent) {
882 if (matchBxInEvent && validBxInEvent) {
883 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
884 if (gtTechnicalTriggerWordData[iBit]
885 != gtTechnicalTriggerWordEmul.at(iBit)) {
890 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
891 if (gtTechnicalTriggerWordData[iBit]
892 != gtTechnicalTriggerWordEmul.at(iBit)) {
903 if (gtTechnicalTriggerWordDataMask == gtTechnicalTriggerWordEmulMask) {
905 <<
" Data and emulated FDL gtTechnicalTriggerWord after mask identical.\n";
910 <<
" Data and emulated FDL gtTechnicalTriggerWord after mask different.";
915 if (matchBxInEvent && validBxInEvent) {
921 if (matchBxInEvent && validBxInEvent) {
922 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
923 if (gtTechnicalTriggerWordData[iBit]
924 != gtTechnicalTriggerWordEmul.at(iBit)) {
939 int nAlgoBits = gtDecisionWordData.size();
949 size_t pfSetsSize = (*m_prescaleFactorsAlgoTrig).size();
954 <<
"\nError: index of prescale factor set retrieved from the data \n"
956 <<
"\n Value of index retrieved from data = " << iPfSet
963 }
else if (iPfSet >= (static_cast<int>(pfSetsSize))) {
966 <<
"\nError: index of prescale factor set retrieved from the data \n"
967 <<
"greater than the size of the vector of prescale factor sets."
968 <<
"\n Value of index retrieved from data = " << iPfSet
969 <<
"\n Vector size = " << pfSetsSize << std::endl;
977 const std::vector<int>& prescaleFactorsAlgoTrig =
978 (*m_prescaleFactorsAlgoTrig).at(iPfSet);
981 if (matchBxInEvent && validBxInEvent) {
983 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
986 << PhysicsPartition);
990 LogTrace(
"L1GtHwValidation") <<
"Bit " << iBit
991 <<
": prescale factor = " << prescaleFactor
992 <<
" trigger mask = " << triggerMask << std::endl;
994 if (gtDecisionWordData[iBit]) {
997 if (prescaleFactor == 1) {
1004 bitValue = (triggerMask) ? 0 : 1;
1005 gtDecisionWordDataMask[iBit] = bitValue;
1011 if (gtDecisionWordEmul.at(iBit)) {
1014 bitValue = (triggerMask) ? 0 : 1;
1015 gtDecisionWordEmulMask[iBit] = bitValue;
1022 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1023 if (gtDecisionWordData[iBit]) {
1028 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1029 if (gtDecisionWordEmul.at(iBit)) {
1038 <<
"\n matchBxInEvent && validBxInEvent false \n";
1043 if (gtDecisionWordData == gtDecisionWordEmul) {
1045 <<
" Data and emulated FDL gtDecisionWord identical.";
1051 <<
" Data and emulated FDL gtDecisionWord different.";
1058 if (matchBxInEvent && validBxInEvent) {
1064 if (matchBxInEvent && validBxInEvent) {
1065 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1069 if (gtDecisionWordData[iBit] != gtDecisionWordEmul.at(iBit)) {
1074 if (
excludedAlgo(iBit) && (bxInEventData == 0) && (iRec
1079 if (prescaleFactor == 1) {
1094 if (gtDecisionWordData[iBit]) {
1098 if (prescaleFactor == 1) {
1110 <<
"\nDisagreement data versus emulator: "
1111 <<
"result before mask for algorithm with bit number "
1113 <<
"\n Data: true, emulator: false \n";
1125 if (prescaleFactor == 1) {
1137 <<
"\nDisagreement data versus emulator: "
1138 <<
"result before mask for algorithm with bit number "
1140 <<
"\n Data: false, emulator: true \n";
1151 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1152 if (gtDecisionWordData[iBit] != gtDecisionWordEmul.at(iBit)) {
1161 <<
"\n matchBxInEvent && validBxInEvent false \n";
1167 if (gtDecisionWordDataMask == gtDecisionWordEmulMask) {
1169 <<
" Data and emulated FDL gtDecisionWord after mask identical.";
1174 <<
" Data and emulated FDL gtDecisionWord after mask different.";
1179 if (matchBxInEvent && validBxInEvent) {
1185 if (matchBxInEvent && validBxInEvent) {
1186 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1187 if (gtDecisionWordDataMask[iBit] != gtDecisionWordEmulMask.at(
1194 if (gtDecisionWordDataMask[iBit]) {
1198 if (prescaleFactor == 1) {
1210 <<
"\nDisagreement data versus emulator: "
1211 <<
"result after mask for algorithm with bit number "
1213 <<
" different in data versus emulator "
1214 <<
"\n Data: true, emulator: false \n";
1226 if (prescaleFactor == 1) {
1238 <<
"\nDisagreement data versus emulator: "
1239 <<
"result after mask for algorithm with bit number "
1241 <<
" different in data versus emulator "
1242 <<
"\n Data: false, emulator: true \n";
1264 if (gtDecisionWordExtendedData == gtDecisionWordExtendedEmul) {
1266 <<
" Data and emulated FDL gtDecisionWordExtended identical.\n";
1272 <<
" Data and emulated FDL gtDecisionWordExtended different.\n";
1279 if (matchBxInEvent && validBxInEvent) {
1288 const boost::uint16_t noAlgoData = fdlBlockData.
noAlgo();
1289 const boost::uint16_t noAlgoEmul = fdlBlockEmul.
noAlgo();
1291 if (noAlgoData == noAlgoEmul) {
1293 <<
" Data and emulated FDL noAlgo identical.";
1299 <<
" Data and emulated FDL noAlgo different.";
1304 if (matchBxInEvent && validBxInEvent) {
1313 const boost::uint16_t finalORData = fdlBlockData.
finalOR();
1314 const boost::uint16_t finalOREmul = fdlBlockEmul.
finalOR();
1316 if (finalORData == finalOREmul) {
1318 <<
" Data and emulated FDL finalOR identical.";
1319 m_myCoutStream <<
"\n finalOR() = " << std::hex <<
"0x" << std::setw(2)
1320 << std::setfill(
'0') << finalORData << std::setfill(
' ')
1326 <<
" Data and emulated FDL finalOR different.";
1328 << std::setw(2) << std::setfill(
'0') << finalORData
1329 << std::setfill(
' ') << std::dec;
1331 << std::setw(2) << std::setfill(
'0') << finalOREmul
1332 << std::setfill(
' ') << std::dec;
1335 if (matchBxInEvent && validBxInEvent) {
1344 const int finalORPhysData = finalORData & (1 << PhysicsPartition);
1345 const int finalORPhysEmul = finalOREmul & (1 << PhysicsPartition);
1347 if (finalORPhysData == finalORPhysEmul) {
1349 <<
" Data and emulated FDL finalOR for the physics partition identical.";
1355 <<
" Data and emulated FDL finalOR for the physics partition different.";
1360 if (matchBxInEvent && validBxInEvent) {
1369 const boost::uint16_t localBxNrData = fdlBlockData.
localBxNr();
1370 const boost::uint16_t localBxNrEmul = fdlBlockEmul.
localBxNr();
1372 if (localBxNrData == localBxNrEmul) {
1374 <<
" Data and emulated FDL localBxNr identical.";
1380 <<
" Data and emulated FDL localBxNr different.";
1385 if (matchBxInEvent && validBxInEvent) {
1404 if (psbBlockData == psbBlockEmul) {
1405 m_myCoutStream <<
"\nData and emulated PSB blocks: identical.\n";
1409 m_myCoutStream <<
"\nData and emulated PSB blocks: different.\n";
1425 const boost::uint16_t boardIdData = psbBlockData.
boardId();
1426 const boost::uint16_t boardIdEmul = psbBlockEmul.
boardId();
1428 if (boardIdData == boardIdEmul) {
1430 m_myCoutStream <<
"\n boardId() = " << std::hex <<
"0x" << std::setw(4)
1431 << std::setfill(
'0') << boardIdData << std::setfill(
' ')
1438 << std::setw(4) << std::setfill(
'0') << boardIdData
1439 << std::setfill(
' ') << std::dec;
1441 << std::setw(4) << std::setfill(
'0') << boardIdEmul
1442 << std::setfill(
' ') << std::dec;
1448 const int bxInEventData = psbBlockData.
bxInEvent();
1449 const int bxInEventEmul = psbBlockEmul.
bxInEvent();
1451 if (bxInEventData == bxInEventEmul) {
1452 m_myCoutStream <<
"\nData and emulated PSB bxInEvent identical.";
1457 m_myCoutStream <<
"\nData and emulated PSB bxInEvent different.";
1465 const boost::uint16_t bxNrData = psbBlockData.
bxNr();
1466 const boost::uint16_t bxNrEmul = psbBlockEmul.
bxNr();
1468 if (bxNrData == bxNrEmul) {
1482 const boost::uint32_t eventNrData = psbBlockData.
eventNr();
1483 const boost::uint32_t eventNrEmul = psbBlockEmul.
eventNr();
1485 if (eventNrData == eventNrEmul) {
1499 boost::uint16_t valData;
1500 boost::uint16_t valEmul;
1502 for (
int iA = 0; iA < psbBlockData.
NumberAData; ++iA) {
1503 valData = psbBlockData.
aData(iA);
1504 valEmul = psbBlockEmul.
aData(iA);
1506 if (valData == valEmul) {
1510 << std::setw(4) << std::setfill(
'0') << valData
1511 << std::setfill(
' ') << std::dec;
1518 << std::setw(4) << std::setfill(
'0') << valData
1519 << std::setfill(
' ') << std::dec;
1521 << std::setw(4) << std::setfill(
'0') << valEmul
1522 << std::setfill(
' ') << std::dec;
1530 for (
int iB = 0; iB < psbBlockData.
NumberBData; ++iB) {
1531 valData = psbBlockData.
bData(iB);
1532 valEmul = psbBlockEmul.
bData(iB);
1534 if (valData == valEmul) {
1538 << std::setw(4) << std::setfill(
'0') << valData
1539 << std::setfill(
' ') << std::dec;
1546 << std::setw(4) << std::setfill(
'0') << valData
1547 << std::setfill(
' ') << std::dec;
1549 << std::setw(4) << std::setfill(
'0') << valEmul
1550 << std::setfill(
' ') << std::dec;
1558 const boost::uint16_t localBxNrData = psbBlockData.
localBxNr();
1559 const boost::uint16_t localBxNrEmul = psbBlockEmul.
localBxNr();
1561 if (localBxNrData == localBxNrEmul) {
1562 m_myCoutStream <<
"\nData and emulated PSB localBxNr identical.";
1567 m_myCoutStream <<
"\nData and emulated PSB localBxNr different.";
1605 bool validData =
false;
1607 if (!gtReadoutRecordData.
isValid()) {
1617 bool validEmul =
false;
1619 if (!gtReadoutRecordEmul.
isValid()) {
1625 if ((!validData) || (!validEmul)) {
1627 <<
"\n No valid product found: DAQ L1GlobalTriggerReadoutRecord"
1628 <<
"\n Data validity [1 = true; 0 = false]: " << validData
1629 <<
"\n Emulator validity: [1 = true; 0 = false]: "
1630 << validEmul <<
"\n DAQ histograms will not be filled.\n"
1637 const L1GtfeWord& gtfeBlockData = gtReadoutRecordData->gtfeWord();
1638 const L1GtfeWord& gtfeBlockEmul = gtReadoutRecordEmul->gtfeWord();
1640 compareGTFE(iEvent, evSetup, gtfeBlockData, gtfeBlockEmul, iRec);
1643 const std::vector<L1GtFdlWord>& gtFdlVectorData =
1644 gtReadoutRecordData->gtFdlVector();
1645 const std::vector<L1GtFdlWord>& gtFdlVectorEmul =
1646 gtReadoutRecordEmul->gtFdlVector();
1648 int gtFdlVectorDataSize = gtFdlVectorData.size();
1649 int gtFdlVectorEmulSize = gtFdlVectorEmul.size();
1651 if (gtFdlVectorDataSize == gtFdlVectorEmulSize) {
1652 m_myCoutStream <<
"\nData and emulated FDL vector size: identical.\n";
1655 for (
int iFdl = 0; iFdl < gtFdlVectorDataSize; ++iFdl) {
1657 const L1GtFdlWord& fdlBlockData = gtFdlVectorData[iFdl];
1658 const L1GtFdlWord& fdlBlockEmul = gtFdlVectorEmul[iFdl];
1660 compareFDL(iEvent, evSetup, fdlBlockData, fdlBlockEmul, iRec);
1663 m_myCoutStream <<
"\nData and emulated FDL vector size: different.\n";
1664 m_myCoutStream <<
" Data: size = " << gtFdlVectorDataSize << std::endl;
1665 m_myCoutStream <<
" Emul: size = " << gtFdlVectorEmulSize << std::endl;
1675 const std::vector<L1GtPsbWord>& gtPsbVectorData =
1676 gtReadoutRecordData->gtPsbVector();
1677 const std::vector<L1GtPsbWord>& gtPsbVectorEmul =
1678 gtReadoutRecordEmul->gtPsbVector();
1680 int gtPsbVectorDataSize = gtPsbVectorData.size();
1681 int gtPsbVectorEmulSize = gtPsbVectorEmul.size();
1683 if (gtPsbVectorDataSize == gtPsbVectorEmulSize) {
1684 m_myCoutStream <<
"\nData and emulated PSB vector size: identical.\n";
1687 m_myCoutStream <<
"\nData and emulated PSB vector size: different.\n";
1688 m_myCoutStream <<
" Data: size = " << gtPsbVectorDataSize << std::endl;
1689 m_myCoutStream <<
" Emul: size = " << gtPsbVectorEmulSize << std::endl;
1696 for (
int iPsb = 0; iPsb < gtPsbVectorDataSize; ++iPsb) {
1698 const L1GtPsbWord& psbBlockData = gtPsbVectorData[iPsb];
1699 const boost::uint16_t boardIdData = psbBlockData.
boardId();
1700 const int bxInEventData = psbBlockData.
bxInEvent();
1705 bool foundPSB =
false;
1707 for (
int iPsbF = 0; iPsbF < gtPsbVectorEmulSize; ++iPsbF) {
1709 const L1GtPsbWord& psbBlockEmul = gtPsbVectorEmul[iPsbF];
1710 const boost::uint16_t boardIdEmul = psbBlockEmul.
boardId();
1711 const int bxInEventEmul = psbBlockEmul.
bxInEvent();
1713 if ((boardIdEmul == boardIdData)
1714 && (bxInEventData == bxInEventEmul)) {
1719 comparePSB(iEvent, evSetup, psbBlockData, psbBlockEmul);
1725 m_myCoutStream <<
"\nNo emulated PSB with boardId() = " << std::hex
1726 <<
"0x" << std::setw(4) << std::setfill(
'0') << boardIdData
1727 << std::setfill(
' ') << std::dec <<
" and BxInEvent = "
1728 << bxInEventData <<
" was found";
1772 bool validData =
false;
1774 if (!gtReadoutRecordData.
isValid()) {
1784 bool validEmul =
false;
1786 if (!gtReadoutRecordEmul.
isValid()) {
1792 if ((!validData) || (!validEmul)) {
1794 <<
"\n No valid product found: EVM L1GlobalTriggerEvmReadoutRecord"
1795 <<
"\n Data validity [1 = true; 0 = false]: " << validData
1796 <<
"\n Emulator validity: [1 = true; 0 = false]: "
1797 << validEmul <<
"\n EVM histograms will not be filled.\n"
1804 const L1GtfeWord& gtfeBlockData = gtReadoutRecordData->gtfeWord();
1805 const L1GtfeWord& gtfeBlockEmul = gtReadoutRecordEmul->gtfeWord();
1807 compareGTFE(iEvent, evSetup, gtfeBlockData, gtfeBlockEmul, iRec);
1810 const std::vector<L1GtFdlWord>& gtFdlVectorData =
1811 gtReadoutRecordData->gtFdlVector();
1812 const std::vector<L1GtFdlWord>& gtFdlVectorEmul =
1813 gtReadoutRecordEmul->gtFdlVector();
1815 int gtFdlVectorDataSize = gtFdlVectorData.size();
1816 int gtFdlVectorEmulSize = gtFdlVectorEmul.size();
1818 if (gtFdlVectorDataSize == gtFdlVectorEmulSize) {
1819 m_myCoutStream <<
"\nData and emulated FDL vector size: identical.\n";
1822 for (
int iFdl = 0; iFdl < gtFdlVectorDataSize; ++iFdl) {
1824 const L1GtFdlWord& fdlBlockData = gtFdlVectorData[iFdl];
1825 const L1GtFdlWord& fdlBlockEmul = gtFdlVectorEmul[iFdl];
1827 compareFDL(iEvent, evSetup, fdlBlockData, fdlBlockEmul, iRec);
1830 m_myCoutStream <<
"\nData and emulated FDL vector size: different.\n";
1831 m_myCoutStream <<
" Data: size = " << gtFdlVectorDataSize << std::endl;
1832 m_myCoutStream <<
" Emul: size = " << gtFdlVectorEmulSize << std::endl;
1882 const unsigned int numberTechTriggers =
1885 const unsigned int numberAlgoTriggers =
1905 const char* histName;
1907 hName = recString +
"gtfeDataEmul";
1908 histName = hName.c_str();
1912 "GTFE data vs emul mismatch", 8, 0., 7.);
1927 int iIndex = iHist - ((TotalBxInEvent + 1) / 2 - 1);
1928 int hIndex = (iIndex + 16) % 16;
1930 std::stringstream ss;
1932 ss << std::uppercase << std::hex << hIndex;
1946 hName = recString +
"FdlDataEmul_" + str;
1947 histName = hName.c_str();
1949 std::string hTitle =
"FDL data vs emul mismatch for BxInEvent = "
1951 const char* histTitle = hTitle.c_str();
1973 hName = recString +
"Data_AlgoDecision_" + str;
1974 histName = hName.c_str();
1976 hTitle =
"Data: algorithm decision word for BxInEvent = " + str;
1977 histTitle = hTitle.c_str();
1980 histTitle, numberAlgoTriggers, 0., numberAlgoTriggers);
1983 hName = recString +
"Emul_AlgoDecision_" + str;
1984 histName = hName.c_str();
1986 hTitle =
"Emul: algorithm decision word for BxInEvent = " + str;
1987 histTitle = hTitle.c_str();
1990 histTitle, numberAlgoTriggers, 0., numberAlgoTriggers);
1994 hName = recString +
"Data_AlgoDecision_Prescaled_" + str;
1995 histName = hName.c_str();
1998 =
"Data: prescaled algorithms: algorithm decision for BxInEvent = "
2000 histTitle = hTitle.c_str();
2003 histName, histTitle, numberAlgoTriggers, 0.,
2004 numberAlgoTriggers);
2007 hName = recString +
"Emul_AlgoDecision_Prescaled_" + str;
2008 histName = hName.c_str();
2011 =
"Emul: prescaled algorithms: algorithm decision for BxInEvent = "
2013 histTitle = hTitle.c_str();
2016 histName, histTitle, numberAlgoTriggers, 0.,
2017 numberAlgoTriggers);
2021 hName = recString +
"Data_AlgoDecision_Unprescaled_" + str;
2022 histName = hName.c_str();
2025 =
"Data: unprescaled algorithms: algorithm decision for BxInEvent = "
2027 histTitle = hTitle.c_str();
2030 histName, histTitle, numberAlgoTriggers, 0.,
2031 numberAlgoTriggers);
2034 hName = recString +
"Emul_AlgoDecision_Unprescaled_" + str;
2035 histName = hName.c_str();
2038 =
"Emul: unprescaled algorithms: algorithm decision for BxInEvent = "
2040 histTitle = hTitle.c_str();
2043 histName, histTitle, numberAlgoTriggers, 0.,
2044 numberAlgoTriggers);
2048 hName = recString +
"Data_AlgoDecisionAfterMask_" + str;
2049 histName = hName.c_str();
2052 =
"Data, physics partition: algorithm decision word after mask for BxInEvent = "
2054 histTitle = hTitle.c_str();
2057 histTitle, numberAlgoTriggers, 0., numberAlgoTriggers);
2060 hName = recString +
"Emul_AlgoDecisionAfterMask_" + str;
2061 histName = hName.c_str();
2064 =
"Emul, physics partition: algorithm decision word after mask for BxInEvent = "
2066 histTitle = hTitle.c_str();
2069 histTitle, numberAlgoTriggers, 0., numberAlgoTriggers);
2072 hName = recString +
"DataEmul_AlgoDecision_" + str;
2073 histName = hName.c_str();
2076 =
"Data vs emul: non-matching algorithm decision word for BxInEvent = "
2078 histTitle = hTitle.c_str();
2081 histTitle, numberAlgoTriggers, 0., numberAlgoTriggers);
2084 hName = recString +
"DataEmul_AlgoDecision_Prescaled_" + str;
2085 histName = hName.c_str();
2088 =
"Data vs emul: prescaled algorithms with non-matching decision for BxInEvent = "
2090 histTitle = hTitle.c_str();
2093 histName, histTitle, numberAlgoTriggers, 0.,
2094 numberAlgoTriggers);
2097 hName = recString +
"DataEmul_AlgoDecision_Unprescaled_" + str;
2098 histName = hName.c_str();
2101 =
"Data vs emul: unprescaled algorithms with non-matching decision for BxInEvent = "
2103 histTitle = hTitle.c_str();
2106 histName, histTitle, numberAlgoTriggers, 0.,
2107 numberAlgoTriggers);
2110 hName = recString +
"DataEmul_AlgoDecision_Unprescaled_Allowed_" + str;
2111 histName = hName.c_str();
2114 =
"Data vs emul: unprescaled algorithms not excluded with non-matching decision for BxInEvent = "
2116 histTitle = hTitle.c_str();
2119 histName, histTitle, numberAlgoTriggers, 0.,
2120 numberAlgoTriggers);
2123 hName = recString +
"Data_AlgoDecision_NoMatch_" + str;
2124 histName = hName.c_str();
2127 =
"Data: algorithm decision for non-matching cases for BxInEvent = "
2129 histTitle = hTitle.c_str();
2132 histName, histTitle, numberAlgoTriggers, 0.,
2133 numberAlgoTriggers);
2136 hName = recString +
"Emul_AlgoDecision_NoMatch_" + str;
2137 histName = hName.c_str();
2140 =
"Emul: algorithm decision for non-matching cases for BxInEvent = "
2142 histTitle = hTitle.c_str();
2145 histName, histTitle, numberAlgoTriggers, 0.,
2146 numberAlgoTriggers);
2149 hName = recString +
"Data_AlgoDecision_Prescaled_NoMatch_" + str;
2150 histName = hName.c_str();
2153 =
"Data: prescaled algorithms: non-matching algorithm decision for BxInEvent = "
2155 histTitle = hTitle.c_str();
2158 =
m_dbe->
book1D(histName, histTitle, numberAlgoTriggers,
2159 0., numberAlgoTriggers);
2162 hName = recString +
"Emul_AlgoDecision_Prescaled_NoMatch_" + str;
2163 histName = hName.c_str();
2166 =
"Emul: prescaled algorithms: non-matching algorithm decision for BxInEvent = "
2168 histTitle = hTitle.c_str();
2171 =
m_dbe->
book1D(histName, histTitle, numberAlgoTriggers,
2172 0., numberAlgoTriggers);
2176 hName = recString +
"Data_AlgoDecision_Unprescaled_NoMatch_" + str;
2177 histName = hName.c_str();
2180 =
"Data: unprescaled algorithms: non-matching algorithm decision for BxInEvent = "
2182 histTitle = hTitle.c_str();
2185 =
m_dbe->
book1D(histName, histTitle, numberAlgoTriggers,
2186 0., numberAlgoTriggers);
2189 hName = recString +
"Emul_AlgoDecision_Unprescaled_NoMatch_" + str;
2190 histName = hName.c_str();
2193 =
"Emul: unprescaled algorithms: non-matching algorithm decision for BxInEvent = "
2195 histTitle = hTitle.c_str();
2198 =
m_dbe->
book1D(histName, histTitle, numberAlgoTriggers,
2199 0., numberAlgoTriggers);
2204 hName = recString +
"Data_AlgoDecisionMask_NoMatch_" + str;
2205 histName = hName.c_str();
2208 =
"Data: algorithm decision for non-matching cases after mask for BxInEvent = "
2210 histTitle = hTitle.c_str();
2213 histName, histTitle, numberAlgoTriggers, 0.,
2214 numberAlgoTriggers);
2217 hName = recString +
"Emul_AlgoDecisionMask_NoMatch_" + str;
2218 histName = hName.c_str();
2221 =
"Emul: algorithm decision for non-matching cases after mask for BxInEvent = "
2223 histTitle = hTitle.c_str();
2226 histName, histTitle, numberAlgoTriggers, 0.,
2227 numberAlgoTriggers);
2230 hName = recString +
"Data_AlgoDecisionMask_Prescaled_NoMatch_" + str;
2231 histName = hName.c_str();
2234 =
"Data: prescaled algorithms: non-matching algorithm decision after mask for BxInEvent = "
2236 histTitle = hTitle.c_str();
2239 =
m_dbe->
book1D(histName, histTitle, numberAlgoTriggers,
2240 0., numberAlgoTriggers);
2243 hName = recString +
"Emul_AlgoDecision_PrescaledMask_NoMatch_" + str;
2244 histName = hName.c_str();
2247 =
"Emul: prescaled algorithms: non-matching algorithm decision after mask for BxInEvent = "
2249 histTitle = hTitle.c_str();
2252 =
m_dbe->
book1D(histName, histTitle, numberAlgoTriggers,
2253 0., numberAlgoTriggers);
2257 hName = recString +
"Data_AlgoDecision_UnprescaledMask_NoMatch_" + str;
2258 histName = hName.c_str();
2261 =
"Data: unprescaled algorithms: non-matching algorithm decision after mask for BxInEvent = "
2263 histTitle = hTitle.c_str();
2266 =
m_dbe->
book1D(histName, histTitle, numberAlgoTriggers,
2267 0., numberAlgoTriggers);
2270 hName = recString +
"Emul_AlgoDecision_UnprescaledMask_NoMatch_" + str;
2271 histName = hName.c_str();
2274 =
"Emul: unprescaled algorithms: non-matching algorithm decision after mask for BxInEvent = "
2276 histTitle = hTitle.c_str();
2279 =
m_dbe->
book1D(histName, histTitle, numberAlgoTriggers,
2280 0., numberAlgoTriggers);
2285 hName = recString +
"DataEmul_AlgoDecisionAfterMask_" + str;
2286 histName = hName.c_str();
2289 =
"Data vs emul, physics partition: non-matching algorithm decision word after mask for BxInEvent = "
2291 histTitle = hTitle.c_str();
2294 histName, histTitle, numberAlgoTriggers, 0.,
2295 numberAlgoTriggers);
2299 hName = recString +
"Data_TechDecision_" + str;
2300 histName = hName.c_str();
2302 hTitle =
"Data technical trigger decision word for BxInEvent = "
2304 histTitle = hTitle.c_str();
2307 histTitle, numberTechTriggers, 0., numberTechTriggers);
2310 hName = recString +
"Emul_TechDecision_" + str;
2311 histName = hName.c_str();
2313 hTitle =
"Emul: technical trigger decision word for BxInEvent = "
2315 histTitle = hTitle.c_str();
2318 histTitle, numberTechTriggers, 0., numberTechTriggers);
2321 hName = recString +
"Data_TechDecisionAfterMask_" + str;
2322 histName = hName.c_str();
2325 =
"Data technical trigger decision word after mask for BxInEvent = "
2327 histTitle = hTitle.c_str();
2330 histTitle, numberTechTriggers, 0., numberTechTriggers);
2333 hName = recString +
"Emul_TechDecisionAfterMask_" + str;
2334 histName = hName.c_str();
2337 =
"Emul: technical trigger decision word after mask for BxInEvent = "
2339 histTitle = hTitle.c_str();
2342 histTitle, numberTechTriggers, 0., numberTechTriggers);
2345 hName = recString +
"DataEmul_TechDecision_" + str;
2346 histName = hName.c_str();
2349 =
"Data vs emul: non-matching technical trigger decision word for BxInEvent = "
2351 histTitle = hTitle.c_str();
2354 histTitle, numberTechTriggers, 0., numberTechTriggers);
2356 hName = recString +
"DataEmul_TechDecisionAfterMask_" + str;
2357 histName = hName.c_str();
2360 =
"Data vs emul: non-matching technical trigger decision word after mask for BxInEvent = "
2362 histTitle = hTitle.c_str();
2365 histName, histTitle, numberTechTriggers, 0.,
2366 numberTechTriggers);
2381 hName = recString +
"FdlDataEmul_Err";
2382 histName = hName.c_str();
2387 "FDL data vs emul mismatch for non-matching BxInEvent in FDL payload",
2403 hName = recString +
"FdlDataAlgoDecision_Err";
2404 histName = hName.c_str();
2409 "Data: algorithm trigger decision word, non-matching BxInEvent",
2410 numberAlgoTriggers, 0., numberAlgoTriggers);
2413 hName = recString +
"Emul_AlgoDecision_Err";
2414 histName = hName.c_str();
2419 "Emul: algorithm trigger decision word, non-matching BxInEvent",
2420 numberAlgoTriggers, 0., numberAlgoTriggers);
2422 hName = recString +
"DataEmul_AlgoDecision_Err";
2423 histName = hName.c_str();
2428 "Data vs emul: algorithm trigger decision word, non-matching BxInEvent",
2429 numberAlgoTriggers, 0., numberAlgoTriggers);
2432 hName = recString +
"Data_TechDecision_Err";
2433 histName = hName.c_str();
2438 "Data: technical trigger decision word, non-matching BxInEvent",
2439 numberTechTriggers, 0., numberTechTriggers);
2441 hName = recString +
"Emul_TechDecision_Err";
2442 histName = hName.c_str();
2447 "Emul: technical trigger decision word, non-matching BxInEvent",
2448 numberTechTriggers, 0., numberTechTriggers);
2450 hName = recString +
"DataEmul_TechDecision_Err";
2451 histName = hName.c_str();
2456 "Data vs emul: technical trigger decision word, non-matching BxInEvent",
2457 numberTechTriggers, 0., numberTechTriggers);
2467 "ExcludedAlgorithmsFromAgreement",
2468 "Algorithms excluded from data versus emulator agreement flag",
2469 numberAlgoTriggers, 0., numberAlgoTriggers);
2474 "L1 GT error flag for data versus emulator comparison", 5, 0., 5);
2489 bool matchValue =
false;
2491 if (excludedCategory ==
CondNull) {
2494 if (conditionCategory == excludedCategory) {
2506 bool matchValue =
false;
2511 if (conditionType == excludedType) {
2521 const std::vector<L1GtObject>& condObjects,
2524 bool matchValue =
false;
2526 if (excludedObject ==
ObjNull) {
2532 for (std::vector<L1GtObject>::const_iterator itCondObj =
2533 condObjects.begin(); itCondObj != condObjects.end(); ++itCondObj) {
2535 if ((*itCondObj) == excludedObject) {
2554 for (
CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
2557 const int algBitNumber = (itAlgo->second).algoBitNumber();
2558 const int chipNr = (itAlgo->second).algoChipNumber();
2563 const std::vector<L1GtLogicParser::TokenRPN>& aRpnVector =
2564 (itAlgo->second).algoRpnVector();
2565 size_t aRpnVectorSize = aRpnVector.size();
2567 bool algWithExcludedCondition =
false;
2568 bool algWithConditionNotInMap =
false;
2571 for (
size_t opI = 0; opI < aRpnVectorSize; ++opI) {
2573 const std::string& cndName = (aRpnVector[opI]).operand;
2575 if (!cndName.empty()) {
2576 bool foundCond =
false;
2578 CItCond itCond = conditionMap.find(cndName);
2579 if (itCond != conditionMap.end()) {
2583 const std::vector<L1GtObject>& objType = (itCond->second)->objectType();
2588 for (std::vector<L1GtConditionCategory>::const_iterator
2600 <<
"Algorithm: " << algName
2601 <<
" Condition: " << cndName
2613 if (matchCondCategoryValue && matchCondTypeValue && matchCondL1GtObjectValue) {
2615 algWithExcludedCondition =
true;
2627 algWithConditionNotInMap =
true;
2629 LogTrace(
"L1GtHwValidation") <<
"\n Error: condition "
2630 << cndName <<
" not found in condition map!"
2631 <<
"\n Add algorithm " << algName
2632 <<
" (bit number " << algBitNumber <<
") "
2633 <<
"\n to list of algorithms excluded from comparison"
2634 <<
"\n data versus emulator." << std::endl;
2640 if (algWithConditionNotInMap) {
2646 <<
"\n Error: one or more conditions from algorithm "
2647 << algName <<
" (bit number " << algBitNumber <<
") "
2648 <<
" not found in condition map!"
2649 <<
"\n Add it to list of algorithms excluded from comparison"
2650 <<
"\n data versus emulator." << std::endl;
2653 if (algWithExcludedCondition) {
2657 LogTrace(
"L1GtHwValidation") <<
"\n Algorithm " << algName
2658 <<
" (bit number " << algBitNumber
2659 <<
") contains an excluded condition."
2660 <<
"\n Add it to list of algorithms excluded from comparison"
2661 <<
"\n data versus emulator." << std::endl;
2666 for (std::vector<std::string>::const_iterator
2670 if ((*itExcl) == algName) {
2674 LogTrace(
"L1GtHwValidation") <<
"\n Algorithm " << algName
2675 <<
" (bit number " << algBitNumber
2676 <<
")\n added to list of algorithms excluded from comparison"
2677 <<
" \n data versus emulator by ExcludeAlgoTrigByName." << std::endl;
2684 for (std::vector<int>::const_iterator
2688 if ((*itExcl) == algBitNumber) {
2692 LogTrace(
"L1GtHwValidation") <<
"\n Algorithm " << algName
2693 <<
" (bit number " << algBitNumber
2694 <<
")\n added to list of algorithms excluded from comparison"
2695 <<
" \n data versus emulator by ExcludeAlgoTrigByBit." << std::endl;
2709 if (iBit == *itAlgo) {
2722 LogDebug(
"L1GtHwValidation") <<
"\n\n endRun: " << run.
id()
2723 <<
"\n Number of events analyzed in this run: " <<
m_nrEvRun
2724 <<
"\n Total number of events analyzed in this job: " <<
m_nrEvJob
2725 <<
"\n" << std::endl;
2733 <<
"\n\nTotal number of events analyzed in this job: " <<
m_nrEvJob
2734 <<
"\n" << std::endl;
T getParameter(std::string const &) const
const cms_uint16_t bData(int iB) const
get/set B_DATA_CH_IB
MonitorElement * m_fdlDataEmulAlgoDecision[TotalBxInEvent][NumberOfGtRecords]
T getUntrackedParameter(std::string const &, T const &) const
MonitorElement * m_fdlDataAlgoDecisionPrescaledMask_NoMatch[TotalBxInEvent][NumberOfGtRecords]
const cms_uint16_t bxNr() const
get/set bunch cross number of the actual bx
const TechnicalTriggerWord & gtTechnicalTriggerWord() const
get/set technical trigger bits
MonitorElement * m_fdlEmulAlgoDecisionUnprescaled_NoMatch[TotalBxInEvent][NumberOfGtRecords]
const L1GtTriggerMask * m_l1GtTmTech
const cms_uint16_t boardId() const
get/set board ID
MonitorElement * m_fdlDataAlgoDecision_Err[NumberOfGtRecords]
const cms_uint16_t noAlgo() const
get/set NoAlgo
edm::EDGetTokenT< L1GlobalTriggerEvmReadoutRecord > m_l1GtDataEvmInputToken_
virtual void compareGTFE(const edm::Event &, const edm::EventSetup &, const L1GtfeWord &, const L1GtfeWord &, const int)
compare the GTFE board
bool matchCondCategory(const L1GtConditionCategory &, const L1GtConditionCategory &)
virtual void analyze(const edm::Event &, const edm::EventSetup &)
virtual void comparePSB(const edm::Event &, const edm::EventSetup &, const L1GtPsbWord &, const L1GtPsbWord &)
compare the PSB board
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
virtual void print(std::ostream &myCout) const
pretty print the content of a L1GtfeWord
void rmdir(const std::string &fullpath)
const std::vector< std::vector< int > > * m_prescaleFactorsAlgoTrig
MonitorElement * m_gtErrorFlag
PSB.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
static const unsigned int NumberTechnicalTriggers
MonitorElement * m_fdlEmulTechDecision[TotalBxInEvent][NumberOfGtRecords]
std::vector< L1GtConditionType > m_excludedCondType
excluded condition types
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
MonitorElement * m_fdlDataEmulAlgoDecisionPrescaled[TotalBxInEvent][NumberOfGtRecords]
MonitorElement * m_fdlDataEmulAlgoDecisionUnprescaledAllowed[TotalBxInEvent][NumberOfGtRecords]
void excludedAlgoList()
exclude from comparison some bits with known disagreement - bit list
void bookHistograms()
book all histograms for the module
MonitorElement * m_fdlDataAlgoDecisionUnprescaledMask_NoMatch[TotalBxInEvent][NumberOfGtRecords]
std::string l1GtConditionCategoryEnumToString(const L1GtConditionCategory &)
edm::InputTag m_l1GtEmulEvmInputTag
input tag for the L1 GT emulator EVM record
MonitorElement * m_fdlEmulAlgoDecisionMask[TotalBxInEvent][NumberOfGtRecords]
MonitorElement * m_fdlDataAlgoDecisionUnprescaled[TotalBxInEvent][NumberOfGtRecords]
unsigned long long m_l1GtMenuCacheID
const L1GtPrescaleFactors * m_l1GtPfTech
std::string l1GtObjectEnumToString(const L1GtObject &)
MonitorElement * m_fdlEmulAlgoDecisionPrescaledMask_NoMatch[TotalBxInEvent][NumberOfGtRecords]
virtual void compareFDL(const edm::Event &, const edm::EventSetup &, const L1GtFdlWord &, const L1GtFdlWord &, const int)
compare the FDL board
const cms_uint16_t altNrBxBoard() const
get/set alternative for number of BX per board
bool matchCondL1GtObject(const std::vector< L1GtObject > &, const L1GtObject &)
std::vector< int > m_excludeAlgoTrigByBit
exclude algorithm triggers from comparison data - emulator by algorithm bit number ...
virtual void compareTCS(const edm::Event &, const edm::EventSetup &, const L1TcsWord &, const L1TcsWord &)
compare the TCS board
DQMStore * m_dbe
internal members
unsigned long long m_l1GtTmAlgoCacheID
MonitorElement * m_fdlEmulTechDecisionMask[TotalBxInEvent][NumberOfGtRecords]
const cms_uint16_t bxNr() const
get/set BxNr - bunch cross number of the actual bx
MonitorElement * m_fdlDataAlgoDecisionPrescaled[TotalBxInEvent][NumberOfGtRecords]
const cms_uint16_t boardId() const
get/set board ID
MonitorElement * m_fdlDataAlgoDecisionMask_NoMatch[TotalBxInEvent][NumberOfGtRecords]
void printGtDecisionWord(std::ostream &myCout) const
const cms_uint16_t recordLength() const
get/set record length for alternative 0
const cms_uint32_t eventNr() const
get/set event number since last L1 reset generated in FDL
MonitorElement * m_gtfeDataEmul[NumberOfGtRecords]
histograms
L1GtConditionType l1GtConditionTypeStringToEnum(const std::string &)
MonitorElement * m_fdlDataAlgoDecisionUnprescaled_NoMatch[TotalBxInEvent][NumberOfGtRecords]
std::vector< bool > DecisionWordExtended
void beginRun(const edm::Run &run, const edm::EventSetup &c)
std::vector< unsigned int > m_triggerMaskTechTrig
virtual ~L1GtHwValidation()
MonitorElement * m_fdlDataEmulAlgoDecisionMask[TotalBxInEvent][NumberOfGtRecords]
L1GtObject l1GtObjectStringToEnum(const std::string &)
const cms_uint16_t aData(int iA) const
get/set A_DATA_CH_IA
std::vector< L1GtObject > m_excludedL1GtObject
excluded L1 GT objects
MonitorElement * m_fdlDataAlgoDecisionPrescaled_NoMatch[TotalBxInEvent][NumberOfGtRecords]
const std::vector< unsigned int > & gtTriggerMask() const
get the trigger mask
std::vector< std::string > m_excludeAlgoTrigByName
exclude algorithm triggers from comparison data - emulator by algorithm name
std::vector< bool > DecisionWord
typedefs
MonitorElement * m_excludedAlgorithmsAgreement
const L1GtTriggerMask * m_l1GtTmAlgo
trigger masks
edm::InputTag m_l1GtEmulDaqInputTag
input tag for the L1 GT emulator DAQ record
MonitorElement * m_fdlDataEmulTechDecision[TotalBxInEvent][NumberOfGtRecords]
MonitorElement * m_fdlEmulAlgoDecisionUnprescaledMask_NoMatch[TotalBxInEvent][NumberOfGtRecords]
const int bxInEvent() const
get/set bunch cross in the GT event record
const cms_uint32_t totalTriggerNr() const
get/set total number of L1A sent since start of run
void printGtDecisionWordExtended(std::ostream &myCout) const
void endRun(const edm::Run &run, const edm::EventSetup &c)
L1GtConditionCategory
condition categories
virtual void compareEvmRecord(const edm::Event &, const edm::EventSetup &)
L1 GT EVM record comparison.
MonitorElement * m_fdlDataTechDecision_Err[NumberOfGtRecords]
bool matchCondType(const L1GtConditionType &, const L1GtConditionType &)
MonitorElement * m_fdlDataAlgoDecision[TotalBxInEvent][NumberOfGtRecords]
std::vector< bool > TechnicalTriggerWord
technical trigger bits (64 bits)
L1GtHwValidation(const edm::ParameterSet &)
static const unsigned int NumberPhysTriggers
L1GtConditionCategory l1GtConditionCategoryStringToEnum(const std::string &)
edm::EDGetTokenT< L1GlobalTriggerReadoutRecord > m_l1GtDataDaqInputToken_
void setVerbose(unsigned level)
static const int TotalBxInEvent
MonitorElement * m_fdlEmulAlgoDecisionUnprescaled[TotalBxInEvent][NumberOfGtRecords]
const cms_uint16_t localBxNr() const
get/set local bunch cross number of the actual bx
const cms_uint16_t activeBoards() const
get/set boards contributing to EVM respectively DAQ record
const L1GtTriggerMenu * m_l1GtMenu
trigger menu
MonitorElement * m_fdlEmulAlgoDecision_Err[NumberOfGtRecords]
const cms_uint16_t bxNr() const
get/set bunch cross number as counted in the GTFE board
edm::EDGetTokenT< L1GlobalTriggerEvmReadoutRecord > m_l1GtEmulEvmInputToken_
void print(std::ostream &myCout) const
pretty print the content of a L1GtFdlWord
void print(std::ostream &myCout) const
pretty print
bool dirExists(const std::string &path) const
true if directory exists
std::string l1GtConditionTypeEnumToString(const L1GtConditionType &)
const cms_uint16_t boardId() const
get/set board ID
unsigned long long m_l1GtPfAlgoCacheID
const cms_uint32_t eventNr() const
get/set event number since last L1 reset generated in PSB
MonitorElement * m_fdlDataTechDecisionMask[TotalBxInEvent][NumberOfGtRecords]
edm::InputTag m_l1GtDataDaqInputTag
input tag for the L1 GT hardware DAQ record
MonitorElement * m_fdlDataAlgoDecision_NoMatch[TotalBxInEvent][NumberOfGtRecords]
MonitorElement * m_fdlDataEmul[TotalBxInEvent][NumberOfGtRecords]
FDL (0 for DAQ, 1 for EVM record)
const cms_uint16_t gtPrescaleFactorIndexAlgo() const
MonitorElement * m_fdlDataEmul_Err[NumberOfGtRecords]
const std::vector< std::vector< int > > & gtPrescaleFactors() const
get the prescale factors by reference
edm::EDGetTokenT< L1GlobalTriggerReadoutRecord > m_l1GtEmulDaqInputToken_
std::vector< L1GtConditionCategory > m_excludedCondCategory
excluded condition categories
std::ostringstream m_myCoutStream
static const int NumberBData
int m_nrDataEventError
counters
T const * product() const
MonitorElement * m_fdlEmulAlgoDecisionMask_NoMatch[TotalBxInEvent][NumberOfGtRecords]
const int bxInEvent() const
get/set bunch cross in the GT event record
const DecisionWord & gtDecisionWord() const
get/set/print algorithms bits (decision word)
unsigned long long m_l1GtTmTechCacheID
virtual void compareGt_Gct(const edm::Event &, const edm::EventSetup &)
MonitorElement * m_fdlEmulTechDecision_Err[NumberOfGtRecords]
static const int NumberAData
edm::InputTag m_l1GctDataInputTag
input tag for the L1 GCT hardware record
std::vector< edm::ParameterSet > m_excludeCondCategTypeObject
void printGtTechnicalTriggerWord(std::ostream &myCout) const
MonitorElement * m_fdlDataEmulAlgoDecision_Err[NumberOfGtRecords]
const cms_uint32_t setupVersion() const
get/set setup version
static const int NumberOfGtRecords
MonitorElement * m_fdlDataTechDecision[TotalBxInEvent][NumberOfGtRecords]
MonitorElement * m_fdlEmulAlgoDecision[TotalBxInEvent][NumberOfGtRecords]
const std::vector< std::vector< int > > * m_prescaleFactorsTechTrig
volatile std::atomic< bool > shutdown_flag false
MonitorElement * m_fdlEmulAlgoDecision_NoMatch[TotalBxInEvent][NumberOfGtRecords]
const DecisionWordExtended & gtDecisionWordExtended() const
get/set extended algorithms bits (extended decision word)
MonitorElement * m_fdlDataEmulTechDecisionMask[TotalBxInEvent][NumberOfGtRecords]
MonitorElement * m_fdlDataAlgoDecisionMask[TotalBxInEvent][NumberOfGtRecords]
virtual void compareDaqRecord(const edm::Event &, const edm::EventSetup &)
L1 GT DAQ record comparison.
const cms_uint16_t recordLength1() const
get/set record length for alternative 1
std::vector< unsigned int > m_triggerMaskAlgoTrig
std::vector< int > m_excludedAlgoList
MonitorElement * m_fdlDataEmulTechDecision_Err[NumberOfGtRecords]
MonitorElement * m_fdlEmulAlgoDecisionPrescaled_NoMatch[TotalBxInEvent][NumberOfGtRecords]
void setCurrentFolder(const std::string &fullpath)
const cms_uint16_t localBxNr() const
get/set local bunch cross number of the actual bx
const L1GtPrescaleFactors * m_l1GtPfAlgo
prescale factors
edm::InputTag m_l1GtDataEvmInputTag
input tag for the L1 GT hardware EVM record
const cms_uint16_t finalOR() const
get/set "Final OR" bits
unsigned long long m_l1GtPfTechCacheID
MonitorElement * m_fdlEmulAlgoDecisionPrescaled[TotalBxInEvent][NumberOfGtRecords]
bool excludedAlgo(const int &) const
exclusion status for algorithm with bit i
std::string m_dirName
directory name for L1Extra plots
MonitorElement * m_fdlDataEmulAlgoDecisionUnprescaled[TotalBxInEvent][NumberOfGtRecords]