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(
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),
93 m_dataOnlyMask(
false),
94 m_emulOnlyMask(
false),
96 m_nrEvJob(0), m_nrEvRun(0) {
99 for (std::vector<edm::ParameterSet>::const_iterator
104 if (!(itExclud->getParameter<
std::string> (
"ExcludedCondCategory")).empty()) {
107 itExclud->getParameter<
std::string>(
"ExcludedCondCategory")));
113 if (!(itExclud->getParameter<
std::string>(
"ExcludedCondType")).empty() ) {
116 itExclud->getParameter<
std::string> (
"ExcludedCondType")));
122 if (!(itExclud->getParameter<
std::string>(
"ExcludedL1GtObject")).empty() ) {
125 itExclud->getParameter<
std::string> (
"ExcludedL1GtObject")));
134 <<
"\nInput tag for the L1 GT DAQ hardware record: " 136 <<
"\nInput tag for the L1 GT EVM hardware record: " 138 <<
"\nInput tag for the L1 GT DAQ emulator records: " 140 <<
"\nInput tag for the L1 GT EVM emulator records: " 142 <<
"\nInput tag for the L1 GCT hardware record: " 188 const char* histName;
190 hName = recString +
"gtfeDataEmul";
191 histName = hName.c_str();
209 int iIndex = iHist - ((TotalBxInEvent + 1) / 2 - 1);
210 int hIndex = (iIndex + 16) % 16;
212 std::stringstream ss;
214 ss << std::uppercase << std::hex << hIndex;
224 hName = recString +
"FdlDataEmul_" +
str;
225 histName = hName.c_str();
227 std::string hTitle =
"FDL data vs emul mismatch for BxInEvent = " +
str;
228 const char* histTitle = hTitle.c_str();
249 hName = recString +
"Data_AlgoDecision_" +
str;
250 histName = hName.c_str();
252 hTitle =
"Data: algorithm decision word for BxInEvent = " +
str;
253 histTitle = hTitle.c_str();
258 hName = recString +
"Emul_AlgoDecision_" +
str;
259 histName = hName.c_str();
261 hTitle =
"Emul: algorithm decision word for BxInEvent = " +
str;
262 histTitle = hTitle.c_str();
268 hName = recString +
"Data_AlgoDecision_Prescaled_" +
str;
269 histName = hName.c_str();
271 hTitle =
"Data: prescaled algorithms: algorithm decision for BxInEvent = " +
str;
272 histTitle = hTitle.c_str();
277 hName = recString +
"Emul_AlgoDecision_Prescaled_" +
str;
278 histName = hName.c_str();
281 =
"Emul: prescaled algorithms: algorithm decision for BxInEvent = " 283 histTitle = hTitle.c_str();
289 hName = recString +
"Data_AlgoDecision_Unprescaled_" +
str;
290 histName = hName.c_str();
293 =
"Data: unprescaled algorithms: algorithm decision for BxInEvent = " 295 histTitle = hTitle.c_str();
300 hName = recString +
"Emul_AlgoDecision_Unprescaled_" +
str;
301 histName = hName.c_str();
303 hTitle =
"Emul: unprescaled algorithms: algorithm decision for BxInEvent = " +
str;
304 histTitle = hTitle.c_str();
310 hName = recString +
"Data_AlgoDecisionAfterMask_" +
str;
311 histName = hName.c_str();
313 hTitle =
"Data, physics partition: algorithm decision word after mask for BxInEvent = " +
str;
314 histTitle = hTitle.c_str();
319 hName = recString +
"Emul_AlgoDecisionAfterMask_" +
str;
320 histName = hName.c_str();
322 hTitle =
"Emul, physics partition: algorithm decision word after mask for BxInEvent = " +
str;
323 histTitle = hTitle.c_str();
328 hName = recString +
"DataEmul_AlgoDecision_" +
str;
329 histName = hName.c_str();
331 hTitle =
"Data vs emul: non-matching algorithm decision word for BxInEvent = " +
str;
332 histTitle = hTitle.c_str();
337 hName = recString +
"DataEmul_AlgoDecision_Prescaled_" +
str;
338 histName = hName.c_str();
340 hTitle =
"Data vs emul: prescaled algorithms with non-matching decision for BxInEvent = " +
str;
341 histTitle = hTitle.c_str();
346 hName = recString +
"DataEmul_AlgoDecision_Unprescaled_" +
str;
347 histName = hName.c_str();
349 hTitle =
"Data vs emul: unprescaled algorithms with non-matching decision for BxInEvent = " +
str;
350 histTitle = hTitle.c_str();
355 hName = recString +
"DataEmul_AlgoDecision_Unprescaled_Allowed_" +
str;
356 histName = hName.c_str();
358 hTitle =
"Data vs emul: unprescaled algorithms not excluded with non-matching decision for BxInEvent = " +
str;
359 histTitle = hTitle.c_str();
364 hName = recString +
"Data_AlgoDecision_NoMatch_" +
str;
365 histName = hName.c_str();
367 hTitle =
"Data: algorithm decision for non-matching cases for BxInEvent = " +
str;
368 histTitle = hTitle.c_str();
373 hName = recString +
"Emul_AlgoDecision_NoMatch_" +
str;
374 histName = hName.c_str();
377 =
"Emul: algorithm decision for non-matching cases for BxInEvent = " 379 histTitle = hTitle.c_str();
384 hName = recString +
"Data_AlgoDecision_Prescaled_NoMatch_" +
str;
385 histName = hName.c_str();
387 hTitle =
"Data: prescaled algorithms: non-matching algorithm decision for BxInEvent = " +
str;
388 histTitle = hTitle.c_str();
393 hName = recString +
"Emul_AlgoDecision_Prescaled_NoMatch_" +
str;
394 histName = hName.c_str();
396 hTitle =
"Emul: prescaled algorithms: non-matching algorithm decision for BxInEvent = " +
str;
397 histTitle = hTitle.c_str();
403 hName = recString +
"Data_AlgoDecision_Unprescaled_NoMatch_" +
str;
404 histName = hName.c_str();
406 hTitle =
"Data: unprescaled algorithms: non-matching algorithm decision for BxInEvent = " +
str;
407 histTitle = hTitle.c_str();
412 hName = recString +
"Emul_AlgoDecision_Unprescaled_NoMatch_" +
str;
413 histName = hName.c_str();
415 hTitle =
"Emul: unprescaled algorithms: non-matching algorithm decision for BxInEvent = " +
str;
416 histTitle = hTitle.c_str();
423 hName = recString +
"Data_AlgoDecisionMask_NoMatch_" +
str;
424 histName = hName.c_str();
426 hTitle =
"Data: algorithm decision for non-matching cases after mask for BxInEvent = " +
str;
427 histTitle = hTitle.c_str();
432 hName = recString +
"Emul_AlgoDecisionMask_NoMatch_" +
str;
433 histName = hName.c_str();
435 hTitle =
"Emul: algorithm decision for non-matching cases after mask for BxInEvent = " +
str;
436 histTitle = hTitle.c_str();
441 hName = recString +
"Data_AlgoDecisionMask_Prescaled_NoMatch_" +
str;
442 histName = hName.c_str();
444 hTitle =
"Data: prescaled algorithms: non-matching algorithm decision after mask for BxInEvent = " +
str;
445 histTitle = hTitle.c_str();
450 hName = recString +
"Emul_AlgoDecision_PrescaledMask_NoMatch_" +
str;
451 histName = hName.c_str();
453 hTitle =
"Emul: prescaled algorithms: non-matching algorithm decision after mask for BxInEvent = " +
str;
454 histTitle = hTitle.c_str();
460 hName = recString +
"Data_AlgoDecision_UnprescaledMask_NoMatch_" +
str;
461 histName = hName.c_str();
463 hTitle =
"Data: unprescaled algorithms: non-matching algorithm decision after mask for BxInEvent = " +
str;
464 histTitle = hTitle.c_str();
469 hName = recString +
"Emul_AlgoDecision_UnprescaledMask_NoMatch_" +
str;
470 histName = hName.c_str();
473 =
"Emul: unprescaled algorithms: non-matching algorithm decision after mask for BxInEvent = " 475 histTitle = hTitle.c_str();
482 hName = recString +
"DataEmul_AlgoDecisionAfterMask_" +
str;
483 histName = hName.c_str();
485 hTitle =
"Data vs emul, physics partition: non-matching algorithm decision word after mask for BxInEvent = " +
str;
486 histTitle = hTitle.c_str();
492 hName = recString +
"Data_TechDecision_" +
str;
493 histName = hName.c_str();
495 hTitle =
"Data technical trigger decision word for BxInEvent = " +
str;
496 histTitle = hTitle.c_str();
501 hName = recString +
"Emul_TechDecision_" +
str;
502 histName = hName.c_str();
504 hTitle =
"Emul: technical trigger decision word for BxInEvent = " +
str;
505 histTitle = hTitle.c_str();
510 hName = recString +
"Data_TechDecisionAfterMask_" +
str;
511 histName = hName.c_str();
513 hTitle =
"Data technical trigger decision word after mask for BxInEvent = " +
str;
514 histTitle = hTitle.c_str();
519 hName = recString +
"Emul_TechDecisionAfterMask_" +
str;
520 histName = hName.c_str();
523 =
"Emul: technical trigger decision word after mask for BxInEvent = " 525 histTitle = hTitle.c_str();
530 hName = recString +
"DataEmul_TechDecision_" +
str;
531 histName = hName.c_str();
533 hTitle =
"Data vs emul: non-matching technical trigger decision word for BxInEvent = " +
str;
534 histTitle = hTitle.c_str();
538 hName = recString +
"DataEmul_TechDecisionAfterMask_" +
str;
539 histName = hName.c_str();
541 hTitle =
"Data vs emul: non-matching technical trigger decision word after mask for BxInEvent = " +
str;
542 histTitle = hTitle.c_str();
555 hName = recString +
"FdlDataEmul_Err";
556 histName = hName.c_str();
558 m_fdlDataEmul_Err[iRec] = ibooker.
book1D(histName,
"FDL data vs emul mismatch for non-matching BxInEvent in FDL payload", 13, 0., 13.);
573 hName = recString +
"FdlDataAlgoDecision_Err";
574 histName = hName.c_str();
576 m_fdlDataAlgoDecision_Err[iRec] = ibooker.
book1D(histName,
"Data: algorithm trigger decision word, non-matching BxInEvent", numberAlgoTriggers, 0., numberAlgoTriggers);
579 hName = recString +
"Emul_AlgoDecision_Err";
580 histName = hName.c_str();
582 m_fdlEmulAlgoDecision_Err[iRec] = ibooker.
book1D(histName,
"Emul: algorithm trigger decision word, non-matching BxInEvent", numberAlgoTriggers, 0., numberAlgoTriggers);
584 hName = recString +
"DataEmul_AlgoDecision_Err";
585 histName = hName.c_str();
587 m_fdlDataEmulAlgoDecision_Err[iRec] = ibooker.
book1D(histName,
"Data vs emul: algorithm trigger decision word, non-matching BxInEvent", numberAlgoTriggers, 0., numberAlgoTriggers);
590 hName = recString +
"Data_TechDecision_Err";
591 histName = hName.c_str();
593 m_fdlDataTechDecision_Err[iRec] = ibooker.
book1D(histName,
"Data: technical trigger decision word, non-matching BxInEvent", numberTechTriggers, 0., numberTechTriggers);
595 hName = recString +
"Emul_TechDecision_Err";
596 histName = hName.c_str();
598 m_fdlEmulTechDecision_Err[iRec] = ibooker.
book1D(histName,
"Emul: technical trigger decision word, non-matching BxInEvent", numberTechTriggers, 0., numberTechTriggers);
600 hName = recString +
"DataEmul_TechDecision_Err";
601 histName = hName.c_str();
603 m_fdlDataEmulTechDecision_Err[iRec] = ibooker.
book1D(histName,
"Data vs emul: technical trigger decision word, non-matching BxInEvent", numberTechTriggers, 0., numberTechTriggers);
610 m_excludedAlgorithmsAgreement = ibooker.
book1D(
"ExcludedAlgorithmsFromAgreement",
"Algorithms excluded from data versus emulator agreement flag", numberAlgoTriggers, 0., numberAlgoTriggers);
614 m_gtErrorFlag = ibooker.
book1D(
"GTErrorFlag",
"L1 GT error flag for data versus emulator comparison", 5, 0., 5);
628 unsigned long long l1GtMenuCacheID =
650 LogDebug(
"L1GtHwValidation") <<
"\nUsing L1 menu: \n " 656 for (
CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
658 const int algBitNumber = (itAlgo->second).algoBitNumber();
660 std::stringstream ss;
662 ss << std::uppercase << algBitNumber;
665 const std::string& aName = algBitString +
" " + itAlgo->first;
666 const char* algName = aName.c_str();
669 for (
int iBxInEvent = 0; iBxInEvent <
TotalBxInEvent; ++iBxInEvent) {
673 int iIndex = iBxInEvent - ((TotalBxInEvent + 1) / 2 - 1);
674 int hIndex = (iIndex + 16) % 16;
676 std::stringstream ss;
678 ss << std::uppercase << std::hex << hIndex;
694 algBitNumber + 1, algName, 1);
696 algBitNumber + 1, algName, 1);
698 algBitNumber + 1, algName, 1);
700 algBitNumber + 1, algName, 1);
702 algBitNumber + 1, algName, 1);
705 algBitNumber + 1, algName, 1);
707 algBitNumber + 1, algName, 1);
709 algBitNumber + 1, algName, 1);
711 algBitNumber + 1, algName, 1);
713 algBitNumber + 1, algName, 1);
716 algBitNumber + 1, algName, 1);
718 algBitNumber + 1, algName, 1);
720 algBitNumber + 1, algName, 1);
722 algBitNumber + 1, algName, 1);
724 algBitNumber + 1, algName, 1);
746 if (algBitNumber == *itAlgo) {
757 unsigned long long l1GtPfAlgoCacheID = evSetup.
get<
772 unsigned long long l1GtPfTechCacheID = evSetup.
get<
790 unsigned long long l1GtTmAlgoCacheID = evSetup.
get<
805 unsigned long long l1GtTmTechCacheID = evSetup.
get<
825 const L1GtfeWord& gtfeBlockEmul,
const int iRec) {
828 if (gtfeBlockData == gtfeBlockEmul) {
830 <<
" Data and emulated GTFE blocks: identical.\n";
834 <<
" Data and emulated GTFE blocks: different.\n";
850 const boost::uint16_t boardIdData = gtfeBlockData.
boardId();
851 const boost::uint16_t boardIdEmul = gtfeBlockEmul.
boardId();
853 if (boardIdData == boardIdEmul) {
855 <<
" Data and emulated GTFE boardId identical.";
856 m_myCoutStream <<
"\n boardId() = " << std::hex <<
"0x" << std::setw(4)
857 << std::setfill(
'0') << boardIdData << std::setfill(
' ')
863 <<
" Data and emulated GTFE boardId different.";
865 << std::setw(4) << std::setfill(
'0') << boardIdData
868 << std::setw(4) << std::setfill(
'0') << boardIdEmul
876 const boost::uint16_t recordLength1Data = gtfeBlockData.
recordLength1();
877 const boost::uint16_t recordLength1Emul = gtfeBlockEmul.
recordLength1();
879 if (recordLength1Data == recordLength1Emul) {
881 <<
" Data and emulated GTFE recordLength for alternative 1 identical.";
887 <<
" Data and emulated GTFE recordLength for alternative 1 different.";
888 m_myCoutStream <<
"\n Data: recordLength1() = " << recordLength1Data;
889 m_myCoutStream <<
"\n Emul: recordLength1() = " << recordLength1Emul;
896 const boost::uint16_t recordLengthData = gtfeBlockData.
recordLength();
897 const boost::uint16_t recordLengthEmul = gtfeBlockEmul.
recordLength();
899 if (recordLengthData == recordLengthEmul) {
901 <<
" Data and emulated GTFE recordLength for alternative 0 identical.";
907 <<
" Data and emulated GTFE recordLength for alternative 1 different.";
908 m_myCoutStream <<
"\n Data: recordLength() = " << recordLengthData;
909 m_myCoutStream <<
"\n Emul: recordLength() = " << recordLengthEmul;
916 const boost::uint16_t bxNrData = gtfeBlockData.
bxNr();
917 const boost::uint16_t bxNrEmul = gtfeBlockEmul.
bxNr();
919 if (bxNrData == bxNrEmul) {
921 <<
" Data and emulated GTFE bxNr identical.";
927 <<
" Data and emulated GTFE bxNr different.";
936 const boost::uint32_t setupVersionData = gtfeBlockData.
setupVersion();
937 const boost::uint32_t setupVersionEmul = gtfeBlockEmul.
setupVersion();
939 if (setupVersionData == setupVersionEmul) {
941 <<
" Data and emulated GTFE setupVersion identical.";
947 <<
" Data and emulated GTFE setupVersion different.";
948 m_myCoutStream <<
"\n Data: setupVersion() = " << setupVersionData;
949 m_myCoutStream <<
"\n Emul: setupVersion() = " << setupVersionEmul;
956 const boost::uint16_t activeBoardsData = gtfeBlockData.
activeBoards();
957 const boost::uint16_t activeBoardsEmul = gtfeBlockEmul.
activeBoards();
959 if (activeBoardsData == activeBoardsEmul) {
961 <<
" Data and emulated GTFE activeBoards identical.";
963 << std::setw(4) << std::setfill(
'0') << activeBoardsData
969 <<
" Data and emulated GTFE activeBoards different.";
970 m_myCoutStream <<
"\n Data: activeBoards() = " << std::hex <<
"0x" 971 << std::setw(4) << std::setfill(
'0') << activeBoardsData
973 m_myCoutStream <<
"\n Emul: activeBoards() = " << std::hex <<
"0x" 974 << std::setw(4) << std::setfill(
'0') << activeBoardsEmul
984 const boost::uint16_t altNrBxBoardData = gtfeBlockData.
altNrBxBoard();
985 const boost::uint16_t altNrBxBoardEmul = gtfeBlockEmul.
altNrBxBoard();
987 if (altNrBxBoardData == altNrBxBoardEmul) {
989 <<
" Data and emulated GTFE altNrBxBoard identical.";
995 <<
" Data and emulated GTFE altNrBxBoard different.";
996 m_myCoutStream <<
"\n Data: altNrBxBoard() = " << altNrBxBoardData;
997 m_myCoutStream <<
"\n Emul: altNrBxBoard() = " << altNrBxBoardEmul;
1004 const boost::uint32_t totalTriggerNrData = gtfeBlockData.
totalTriggerNr();
1005 const boost::uint32_t totalTriggerNrEmul = gtfeBlockEmul.
totalTriggerNr();
1007 if (totalTriggerNrData == totalTriggerNrEmul) {
1009 <<
" Data and emulated GTFE totalTriggerNr identical.";
1010 m_myCoutStream <<
"\n totalTriggerNr() = " << totalTriggerNrData;
1015 <<
" Data and emulated GTFE totalTriggerNr different.";
1016 m_myCoutStream <<
"\n Data: totalTriggerNr() = " << totalTriggerNrData;
1017 m_myCoutStream <<
"\n Emul: totalTriggerNr() = " << totalTriggerNrEmul;
1032 const L1GtFdlWord& fdlBlockEmul,
const int iRec) {
1035 int PhysicsPartition = 0;
1040 if (fdlBlockData == fdlBlockEmul) {
1042 <<
" Data and emulated FDL blocks: identical.\n";
1047 <<
" Data and emulated FDL blocks: different.\n";
1064 const int bxInEventData = fdlBlockData.
bxInEvent();
1065 const int bxInEventEmul = fdlBlockEmul.
bxInEvent();
1067 bool matchBxInEvent =
false;
1069 if (bxInEventData == bxInEventEmul) {
1071 <<
" Data and emulated FDL bxInEvent identical.";
1074 matchBxInEvent =
true;
1078 <<
" Data and emulated FDL bxInEvent different.";
1089 <<
"\n Data and emulated FDL bxInEvent different \n";
1099 bool validBxInEvent =
false;
1101 LogDebug(
"L1GtHwValidation") <<
"\n Convert bxInEvent = " << bxInEventData
1102 <<
" to histIndex = " << histIndex << std::endl;
1104 validBxInEvent =
true;
1110 const boost::uint16_t boardIdData = fdlBlockData.
boardId();
1111 const boost::uint16_t boardIdEmul = fdlBlockEmul.
boardId();
1113 if (boardIdData == boardIdEmul) {
1115 <<
" Data and emulated FDL boardId identical.";
1116 m_myCoutStream <<
"\n boardId() = " << std::hex <<
"0x" << std::setw(4)
1117 << std::setfill(
'0') << boardIdData << std::setfill(
' ')
1123 <<
" Data and emulated FDL boardId different.";
1125 << std::setw(4) << std::setfill(
'0') << boardIdData
1128 << std::setw(4) << std::setfill(
'0') << boardIdEmul
1132 if (matchBxInEvent && validBxInEvent) {
1145 const boost::uint16_t bxNrData = fdlBlockData.
bxNr();
1146 const boost::uint16_t bxNrEmul = fdlBlockEmul.
bxNr();
1148 if (bxNrData == bxNrEmul) {
1150 <<
" Data and emulated FDL bxNr identical.";
1156 <<
" Data and emulated FDL bxNr different.";
1161 if (matchBxInEvent && validBxInEvent) {
1173 const boost::uint32_t eventNrData = fdlBlockData.
eventNr();
1174 const boost::uint32_t eventNrEmul = fdlBlockEmul.
eventNr();
1176 if (eventNrData == eventNrEmul) {
1178 <<
" Data and emulated FDL eventNr identical.";
1184 <<
" Data and emulated FDL eventNr different.";
1189 if (matchBxInEvent && validBxInEvent) {
1207 int nTechBits = gtTechnicalTriggerWordData.size();
1212 unsigned int bitValue = 0;
1214 if (matchBxInEvent && validBxInEvent) {
1215 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
1218 << PhysicsPartition);
1220 if (gtTechnicalTriggerWordData[iBit]) {
1223 bitValue = (triggerMask) ? 0 : 1;
1224 gtTechnicalTriggerWordDataMask[iBit] = bitValue;
1230 if (gtTechnicalTriggerWordEmul.at(iBit)) {
1233 bitValue = (triggerMask) ? 0 : 1;
1234 gtTechnicalTriggerWordEmulMask[iBit] = bitValue;
1241 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
1243 if (gtTechnicalTriggerWordData[iBit]) {
1247 if (gtTechnicalTriggerWordEmul.at(iBit)) {
1253 if (gtTechnicalTriggerWordData == gtTechnicalTriggerWordEmul) {
1255 <<
" Data and emulated FDL gtTechnicalTriggerWord identical.\n";
1261 <<
" Data and emulated FDL gtTechnicalTriggerWord different.";
1268 if (matchBxInEvent && validBxInEvent) {
1274 if (matchBxInEvent && validBxInEvent) {
1275 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
1276 if (gtTechnicalTriggerWordData[iBit]
1277 != gtTechnicalTriggerWordEmul.at(iBit)) {
1282 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
1283 if (gtTechnicalTriggerWordData[iBit]
1284 != gtTechnicalTriggerWordEmul.at(iBit)) {
1295 if (gtTechnicalTriggerWordDataMask == gtTechnicalTriggerWordEmulMask) {
1297 <<
" Data and emulated FDL gtTechnicalTriggerWord after mask identical.\n";
1302 <<
" Data and emulated FDL gtTechnicalTriggerWord after mask different.";
1307 if (matchBxInEvent && validBxInEvent) {
1313 if (matchBxInEvent && validBxInEvent) {
1314 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
1315 if (gtTechnicalTriggerWordData[iBit]
1316 != gtTechnicalTriggerWordEmul.at(iBit)) {
1331 int nAlgoBits = gtDecisionWordData.size();
1341 size_t pfSetsSize = (*m_prescaleFactorsAlgoTrig).size();
1346 <<
"\nError: index of prescale factor set retrieved from the data \n" 1347 <<
"less than zero." 1348 <<
"\n Value of index retrieved from data = " << iPfSet
1355 }
else if (iPfSet >= (static_cast<int>(pfSetsSize))) {
1358 <<
"\nError: index of prescale factor set retrieved from the data \n" 1359 <<
"greater than the size of the vector of prescale factor sets." 1360 <<
"\n Value of index retrieved from data = " << iPfSet
1361 <<
"\n Vector size = " << pfSetsSize << std::endl;
1369 const std::vector<int>& prescaleFactorsAlgoTrig =
1370 (*m_prescaleFactorsAlgoTrig).at(iPfSet);
1373 if (matchBxInEvent && validBxInEvent) {
1375 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1378 << PhysicsPartition);
1382 LogTrace(
"L1GtHwValidation") <<
"Bit " << iBit
1383 <<
": prescale factor = " << prescaleFactor
1384 <<
" trigger mask = " << triggerMask << std::endl;
1386 if (gtDecisionWordData[iBit]) {
1389 if (prescaleFactor == 1) {
1396 bitValue = (triggerMask) ? 0 : 1;
1397 gtDecisionWordDataMask[iBit] = bitValue;
1403 if (gtDecisionWordEmul.at(iBit)) {
1406 bitValue = (triggerMask) ? 0 : 1;
1407 gtDecisionWordEmulMask[iBit] = bitValue;
1414 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1415 if (gtDecisionWordData[iBit]) {
1420 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1421 if (gtDecisionWordEmul.at(iBit)) {
1430 <<
"\n matchBxInEvent && validBxInEvent false \n";
1435 if (gtDecisionWordData == gtDecisionWordEmul) {
1437 <<
" Data and emulated FDL gtDecisionWord identical.";
1443 <<
" Data and emulated FDL gtDecisionWord different.";
1450 if (matchBxInEvent && validBxInEvent) {
1456 if (matchBxInEvent && validBxInEvent) {
1457 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1461 if (gtDecisionWordData[iBit] != gtDecisionWordEmul.at(iBit)) {
1466 if (
excludedAlgo(iBit) && (bxInEventData == 0) && (iRec
1471 if (prescaleFactor == 1) {
1486 if (gtDecisionWordData[iBit]) {
1490 if (prescaleFactor == 1) {
1502 <<
"\nDisagreement data versus emulator: " 1503 <<
"result before mask for algorithm with bit number " 1505 <<
"\n Data: true, emulator: false \n";
1517 if (prescaleFactor == 1) {
1529 <<
"\nDisagreement data versus emulator: " 1530 <<
"result before mask for algorithm with bit number " 1532 <<
"\n Data: false, emulator: true \n";
1543 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1544 if (gtDecisionWordData[iBit] != gtDecisionWordEmul.at(iBit)) {
1553 <<
"\n matchBxInEvent && validBxInEvent false \n";
1559 if (gtDecisionWordDataMask == gtDecisionWordEmulMask) {
1561 <<
" Data and emulated FDL gtDecisionWord after mask identical.";
1566 <<
" Data and emulated FDL gtDecisionWord after mask different.";
1571 if (matchBxInEvent && validBxInEvent) {
1577 if (matchBxInEvent && validBxInEvent) {
1578 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1579 if (gtDecisionWordDataMask[iBit] != gtDecisionWordEmulMask.at(
1586 if (gtDecisionWordDataMask[iBit]) {
1590 if (prescaleFactor == 1) {
1602 <<
"\nDisagreement data versus emulator: " 1603 <<
"result after mask for algorithm with bit number " 1605 <<
" different in data versus emulator " 1606 <<
"\n Data: true, emulator: false \n";
1618 if (prescaleFactor == 1) {
1630 <<
"\nDisagreement data versus emulator: " 1631 <<
"result after mask for algorithm with bit number " 1633 <<
" different in data versus emulator " 1634 <<
"\n Data: false, emulator: true \n";
1656 if (gtDecisionWordExtendedData == gtDecisionWordExtendedEmul) {
1658 <<
" Data and emulated FDL gtDecisionWordExtended identical.\n";
1664 <<
" Data and emulated FDL gtDecisionWordExtended different.\n";
1671 if (matchBxInEvent && validBxInEvent) {
1680 const boost::uint16_t noAlgoData = fdlBlockData.
noAlgo();
1681 const boost::uint16_t noAlgoEmul = fdlBlockEmul.
noAlgo();
1683 if (noAlgoData == noAlgoEmul) {
1685 <<
" Data and emulated FDL noAlgo identical.";
1691 <<
" Data and emulated FDL noAlgo different.";
1696 if (matchBxInEvent && validBxInEvent) {
1705 const boost::uint16_t finalORData = fdlBlockData.
finalOR();
1706 const boost::uint16_t finalOREmul = fdlBlockEmul.
finalOR();
1708 if (finalORData == finalOREmul) {
1710 <<
" Data and emulated FDL finalOR identical.";
1711 m_myCoutStream <<
"\n finalOR() = " << std::hex <<
"0x" << std::setw(2)
1712 << std::setfill(
'0') << finalORData << std::setfill(
' ')
1718 <<
" Data and emulated FDL finalOR different.";
1720 << std::setw(2) << std::setfill(
'0') << finalORData
1723 << std::setw(2) << std::setfill(
'0') << finalOREmul
1727 if (matchBxInEvent && validBxInEvent) {
1736 const int finalORPhysData = finalORData & (1 << PhysicsPartition);
1737 const int finalORPhysEmul = finalOREmul & (1 << PhysicsPartition);
1739 if (finalORPhysData == finalORPhysEmul) {
1741 <<
" Data and emulated FDL finalOR for the physics partition identical.";
1747 <<
" Data and emulated FDL finalOR for the physics partition different.";
1752 if (matchBxInEvent && validBxInEvent) {
1761 const boost::uint16_t localBxNrData = fdlBlockData.
localBxNr();
1762 const boost::uint16_t localBxNrEmul = fdlBlockEmul.
localBxNr();
1764 if (localBxNrData == localBxNrEmul) {
1766 <<
" Data and emulated FDL localBxNr identical.";
1772 <<
" Data and emulated FDL localBxNr different.";
1777 if (matchBxInEvent && validBxInEvent) {
1796 if (psbBlockData == psbBlockEmul) {
1797 m_myCoutStream <<
"\nData and emulated PSB blocks: identical.\n";
1801 m_myCoutStream <<
"\nData and emulated PSB blocks: different.\n";
1817 const boost::uint16_t boardIdData = psbBlockData.
boardId();
1818 const boost::uint16_t boardIdEmul = psbBlockEmul.
boardId();
1820 if (boardIdData == boardIdEmul) {
1822 m_myCoutStream <<
"\n boardId() = " << std::hex <<
"0x" << std::setw(4)
1823 << std::setfill(
'0') << boardIdData << std::setfill(
' ')
1830 << std::setw(4) << std::setfill(
'0') << boardIdData
1833 << std::setw(4) << std::setfill(
'0') << boardIdEmul
1840 const int bxInEventData = psbBlockData.
bxInEvent();
1841 const int bxInEventEmul = psbBlockEmul.
bxInEvent();
1843 if (bxInEventData == bxInEventEmul) {
1844 m_myCoutStream <<
"\nData and emulated PSB bxInEvent identical.";
1849 m_myCoutStream <<
"\nData and emulated PSB bxInEvent different.";
1857 const boost::uint16_t bxNrData = psbBlockData.
bxNr();
1858 const boost::uint16_t bxNrEmul = psbBlockEmul.
bxNr();
1860 if (bxNrData == bxNrEmul) {
1874 const boost::uint32_t eventNrData = psbBlockData.
eventNr();
1875 const boost::uint32_t eventNrEmul = psbBlockEmul.
eventNr();
1877 if (eventNrData == eventNrEmul) {
1891 boost::uint16_t valData;
1892 boost::uint16_t valEmul;
1894 for (
int iA = 0; iA < psbBlockData.
NumberAData; ++iA) {
1895 valData = psbBlockData.
aData(iA);
1896 valEmul = psbBlockEmul.
aData(iA);
1898 if (valData == valEmul) {
1902 << std::setw(4) << std::setfill(
'0') << valData
1910 << std::setw(4) << std::setfill(
'0') << valData
1913 << std::setw(4) << std::setfill(
'0') << valEmul
1922 for (
int iB = 0; iB < psbBlockData.
NumberBData; ++iB) {
1923 valData = psbBlockData.
bData(iB);
1924 valEmul = psbBlockEmul.
bData(iB);
1926 if (valData == valEmul) {
1930 << std::setw(4) << std::setfill(
'0') << valData
1938 << std::setw(4) << std::setfill(
'0') << valData
1941 << std::setw(4) << std::setfill(
'0') << valEmul
1950 const boost::uint16_t localBxNrData = psbBlockData.
localBxNr();
1951 const boost::uint16_t localBxNrEmul = psbBlockEmul.
localBxNr();
1953 if (localBxNrData == localBxNrEmul) {
1954 m_myCoutStream <<
"\nData and emulated PSB localBxNr identical.";
1959 m_myCoutStream <<
"\nData and emulated PSB localBxNr different.";
1996 bool validData =
false;
1998 if (!gtReadoutRecordData.
isValid()) {
2008 bool validEmul =
false;
2010 if (!gtReadoutRecordEmul.
isValid()) {
2016 if ((!validData) || (!validEmul)) {
2018 <<
"\n No valid product found: DAQ L1GlobalTriggerReadoutRecord" 2019 <<
"\n Data validity [1 = true; 0 = false]: " << validData
2020 <<
"\n Emulator validity: [1 = true; 0 = false]: " 2021 << validEmul <<
"\n DAQ histograms will not be filled.\n" 2031 compareGTFE(iEvent, evSetup, gtfeBlockData, gtfeBlockEmul, iRec);
2034 const std::vector<L1GtFdlWord>& gtFdlVectorData =
2036 const std::vector<L1GtFdlWord>& gtFdlVectorEmul =
2039 int gtFdlVectorDataSize = gtFdlVectorData.size();
2040 int gtFdlVectorEmulSize = gtFdlVectorEmul.size();
2042 if (gtFdlVectorDataSize == gtFdlVectorEmulSize) {
2043 m_myCoutStream <<
"\nData and emulated FDL vector size: identical.\n";
2046 for (
int iFdl = 0; iFdl < gtFdlVectorDataSize; ++iFdl) {
2048 const L1GtFdlWord& fdlBlockData = gtFdlVectorData[iFdl];
2049 const L1GtFdlWord& fdlBlockEmul = gtFdlVectorEmul[iFdl];
2051 compareFDL(iEvent, evSetup, fdlBlockData, fdlBlockEmul, iRec);
2054 m_myCoutStream <<
"\nData and emulated FDL vector size: different.\n";
2055 m_myCoutStream <<
" Data: size = " << gtFdlVectorDataSize << std::endl;
2056 m_myCoutStream <<
" Emul: size = " << gtFdlVectorEmulSize << std::endl;
2066 const std::vector<L1GtPsbWord>& gtPsbVectorData =
2068 const std::vector<L1GtPsbWord>& gtPsbVectorEmul =
2071 int gtPsbVectorDataSize = gtPsbVectorData.size();
2072 int gtPsbVectorEmulSize = gtPsbVectorEmul.size();
2074 if (gtPsbVectorDataSize == gtPsbVectorEmulSize) {
2075 m_myCoutStream <<
"\nData and emulated PSB vector size: identical.\n";
2078 m_myCoutStream <<
"\nData and emulated PSB vector size: different.\n";
2079 m_myCoutStream <<
" Data: size = " << gtPsbVectorDataSize << std::endl;
2080 m_myCoutStream <<
" Emul: size = " << gtPsbVectorEmulSize << std::endl;
2087 for (
int iPsb = 0; iPsb < gtPsbVectorDataSize; ++iPsb) {
2089 const L1GtPsbWord& psbBlockData = gtPsbVectorData[iPsb];
2090 const boost::uint16_t boardIdData = psbBlockData.
boardId();
2091 const int bxInEventData = psbBlockData.
bxInEvent();
2096 bool foundPSB =
false;
2098 for (
int iPsbF = 0; iPsbF < gtPsbVectorEmulSize; ++iPsbF) {
2100 const L1GtPsbWord& psbBlockEmul = gtPsbVectorEmul[iPsbF];
2101 const boost::uint16_t boardIdEmul = psbBlockEmul.
boardId();
2102 const int bxInEventEmul = psbBlockEmul.
bxInEvent();
2104 if ((boardIdEmul == boardIdData)
2105 && (bxInEventData == bxInEventEmul)) {
2110 comparePSB(iEvent, evSetup, psbBlockData, psbBlockEmul);
2116 m_myCoutStream <<
"\nNo emulated PSB with boardId() = " << std::hex
2117 <<
"0x" << std::setw(4) << std::setfill(
'0') << boardIdData
2118 << std::setfill(
' ') <<
std::dec <<
" and BxInEvent = " 2119 << bxInEventData <<
" was found";
2157 bool validData =
false;
2159 if (!gtReadoutRecordData.
isValid()) {
2169 bool validEmul =
false;
2171 if (!gtReadoutRecordEmul.
isValid()) {
2177 if ((!validData) || (!validEmul)) {
2179 <<
"\n No valid product found: EVM L1GlobalTriggerEvmReadoutRecord" 2180 <<
"\n Data validity [1 = true; 0 = false]: " << validData
2181 <<
"\n Emulator validity: [1 = true; 0 = false]: " 2182 << validEmul <<
"\n EVM histograms will not be filled.\n" 2192 compareGTFE(iEvent, evSetup, gtfeBlockData, gtfeBlockEmul, iRec);
2195 const std::vector<L1GtFdlWord>& gtFdlVectorData =
2197 const std::vector<L1GtFdlWord>& gtFdlVectorEmul =
2200 int gtFdlVectorDataSize = gtFdlVectorData.size();
2201 int gtFdlVectorEmulSize = gtFdlVectorEmul.size();
2203 if (gtFdlVectorDataSize == gtFdlVectorEmulSize) {
2204 m_myCoutStream <<
"\nData and emulated FDL vector size: identical.\n";
2207 for (
int iFdl = 0; iFdl < gtFdlVectorDataSize; ++iFdl) {
2209 const L1GtFdlWord& fdlBlockData = gtFdlVectorData[iFdl];
2210 const L1GtFdlWord& fdlBlockEmul = gtFdlVectorEmul[iFdl];
2212 compareFDL(iEvent, evSetup, fdlBlockData, fdlBlockEmul, iRec);
2215 m_myCoutStream <<
"\nData and emulated FDL vector size: different.\n";
2216 m_myCoutStream <<
" Data: size = " << gtFdlVectorDataSize << std::endl;
2217 m_myCoutStream <<
" Emul: size = " << gtFdlVectorEmulSize << std::endl;
2267 bool matchValue =
false;
2269 if (excludedCategory ==
CondNull) {
2272 if (conditionCategory == excludedCategory) {
2284 bool matchValue =
false;
2289 if (conditionType == excludedType) {
2299 const std::vector<L1GtObject>& condObjects,
2302 bool matchValue =
false;
2304 if (excludedObject ==
ObjNull) {
2310 for (std::vector<L1GtObject>::const_iterator itCondObj =
2311 condObjects.begin(); itCondObj != condObjects.end(); ++itCondObj) {
2313 if ((*itCondObj) == excludedObject) {
2331 for (
CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
2334 const int algBitNumber = (itAlgo->second).algoBitNumber();
2335 const int chipNr = (itAlgo->second).algoChipNumber();
2340 const std::vector<L1GtLogicParser::TokenRPN>& aRpnVector =
2341 (itAlgo->second).algoRpnVector();
2342 size_t aRpnVectorSize = aRpnVector.size();
2344 bool algWithExcludedCondition =
false;
2345 bool algWithConditionNotInMap =
false;
2348 for (
size_t opI = 0; opI < aRpnVectorSize; ++opI) {
2350 const std::string& cndName = (aRpnVector[opI]).operand;
2352 if (!cndName.empty()) {
2353 bool foundCond =
false;
2355 CItCond itCond = conditionMap.find(cndName);
2356 if (itCond != conditionMap.end()) {
2360 const std::vector<L1GtObject>&
objType = (itCond->second)->objectType();
2365 for (std::vector<L1GtConditionCategory>::const_iterator
2377 <<
"Algorithm: " << algName
2378 <<
" Condition: " << cndName
2390 if (matchCondCategoryValue && matchCondTypeValue && matchCondL1GtObjectValue) {
2392 algWithExcludedCondition =
true;
2404 algWithConditionNotInMap =
true;
2406 LogTrace(
"L1GtHwValidation") <<
"\n Error: condition " 2407 << cndName <<
" not found in condition map!" 2408 <<
"\n Add algorithm " << algName
2409 <<
" (bit number " << algBitNumber <<
") " 2410 <<
"\n to list of algorithms excluded from comparison" 2411 <<
"\n data versus emulator." << std::endl;
2417 if (algWithConditionNotInMap) {
2423 <<
"\n Error: one or more conditions from algorithm " 2424 << algName <<
" (bit number " << algBitNumber <<
") " 2425 <<
" not found in condition map!" 2426 <<
"\n Add it to list of algorithms excluded from comparison" 2427 <<
"\n data versus emulator." << std::endl;
2430 if (algWithExcludedCondition) {
2434 LogTrace(
"L1GtHwValidation") <<
"\n Algorithm " << algName
2435 <<
" (bit number " << algBitNumber
2436 <<
") contains an excluded condition." 2437 <<
"\n Add it to list of algorithms excluded from comparison" 2438 <<
"\n data versus emulator." << std::endl;
2443 for (std::vector<std::string>::const_iterator
2447 if ((*itExcl) == algName) {
2451 LogTrace(
"L1GtHwValidation") <<
"\n Algorithm " << algName
2452 <<
" (bit number " << algBitNumber
2453 <<
")\n added to list of algorithms excluded from comparison" 2454 <<
" \n data versus emulator by ExcludeAlgoTrigByName." << std::endl;
2461 for (std::vector<int>::const_iterator
2465 if ((*itExcl) == algBitNumber) {
2469 LogTrace(
"L1GtHwValidation") <<
"\n Algorithm " << algName
2470 <<
" (bit number " << algBitNumber
2471 <<
")\n added to list of algorithms excluded from comparison" 2472 <<
" \n data versus emulator by ExcludeAlgoTrigByBit." << std::endl;
2486 if (iBit == *itAlgo) {
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]
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
~L1GtHwValidation() override
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 &)
book all histograms for the module
virtual void comparePSB(const edm::Event &, const edm::EventSetup &, const L1GtPsbWord &, const L1GtPsbWord &)
compare the PSB board
virtual void print(std::ostream &myCout) const
pretty print the content of a L1GtfeWord
const std::vector< std::vector< int > > * m_prescaleFactorsAlgoTrig
MonitorElement * m_gtErrorFlag
PSB.
bool getByToken(EDGetToken token, Handle< PROD > &result) const
static const unsigned int NumberTechnicalTriggers
MonitorElement * m_fdlEmulTechDecision[TotalBxInEvent][NumberOfGtRecords]
std::vector< L1GtConditionType > m_excludedCondType
excluded condition types
const L1GtfeExtWord gtfeWord() const
get / set GTFE word (record) in the GT readout record
const std::vector< L1GtFdlWord > gtFdlVector() const
get the vector of L1GtFdlWord
const L1GtfeWord gtfeWord() const
get / set GTFE word (record) in the GT readout record
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
MonitorElement * m_fdlDataAlgoDecisionUnprescaledMask_NoMatch[TotalBxInEvent][NumberOfGtRecords]
const std::vector< L1GtPsbWord > gtPsbVector() const
get the vector of L1GtPsbWord
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
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
std::vector< unsigned int > m_triggerMaskTechTrig
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
bool m_agree
internal members
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
MonitorElement * book1D(Args &&...args)
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_
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
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]
void setCurrentFolder(const std::string &fullpath)
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
void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &, const edm::EventSetup &) override
static const int NumberBData
int m_nrDataEventError
counters
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
MonitorElement * m_fdlEmulAlgoDecision_NoMatch[TotalBxInEvent][NumberOfGtRecords]
const DecisionWordExtended & gtDecisionWordExtended() const
get/set extended algorithms bits (extended decision word)
MonitorElement * m_fdlDataEmulTechDecisionMask[TotalBxInEvent][NumberOfGtRecords]
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
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
T const * product() const
std::vector< int > m_excludedAlgoList
MonitorElement * m_fdlDataEmulTechDecision_Err[NumberOfGtRecords]
MonitorElement * m_fdlEmulAlgoDecisionPrescaled_NoMatch[TotalBxInEvent][NumberOfGtRecords]
void analyze(const edm::Event &, const edm::EventSetup &) override
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
const std::vector< L1GtFdlWord > gtFdlVector() const
get the vector of L1GtFdlWord
std::string m_dirName
directory name for L1Extra plots
MonitorElement * m_fdlDataEmulAlgoDecisionUnprescaled[TotalBxInEvent][NumberOfGtRecords]