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),
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: "
191 const char* histName;
193 hName = recString +
"gtfeDataEmul";
194 histName = hName.c_str();
212 int iIndex = iHist - ((TotalBxInEvent + 1) / 2 - 1);
213 int hIndex = (iIndex + 16) % 16;
215 std::stringstream
ss;
217 ss << std::uppercase << std::hex << hIndex;
227 hName = recString +
"FdlDataEmul_" + str;
228 histName = hName.c_str();
230 std::string hTitle =
"FDL data vs emul mismatch for BxInEvent = " + str;
231 const char* histTitle = hTitle.c_str();
252 hName = recString +
"Data_AlgoDecision_" + str;
253 histName = hName.c_str();
255 hTitle =
"Data: algorithm decision word for BxInEvent = " + str;
256 histTitle = hTitle.c_str();
261 hName = recString +
"Emul_AlgoDecision_" + str;
262 histName = hName.c_str();
264 hTitle =
"Emul: algorithm decision word for BxInEvent = " + str;
265 histTitle = hTitle.c_str();
271 hName = recString +
"Data_AlgoDecision_Prescaled_" + str;
272 histName = hName.c_str();
274 hTitle =
"Data: prescaled algorithms: algorithm decision for BxInEvent = " + str;
275 histTitle = hTitle.c_str();
280 hName = recString +
"Emul_AlgoDecision_Prescaled_" + str;
281 histName = hName.c_str();
284 =
"Emul: prescaled algorithms: algorithm decision for BxInEvent = "
286 histTitle = hTitle.c_str();
292 hName = recString +
"Data_AlgoDecision_Unprescaled_" + str;
293 histName = hName.c_str();
296 =
"Data: unprescaled algorithms: algorithm decision for BxInEvent = "
298 histTitle = hTitle.c_str();
303 hName = recString +
"Emul_AlgoDecision_Unprescaled_" + str;
304 histName = hName.c_str();
306 hTitle =
"Emul: unprescaled algorithms: algorithm decision for BxInEvent = " + str;
307 histTitle = hTitle.c_str();
313 hName = recString +
"Data_AlgoDecisionAfterMask_" + str;
314 histName = hName.c_str();
316 hTitle =
"Data, physics partition: algorithm decision word after mask for BxInEvent = " + str;
317 histTitle = hTitle.c_str();
322 hName = recString +
"Emul_AlgoDecisionAfterMask_" + str;
323 histName = hName.c_str();
325 hTitle =
"Emul, physics partition: algorithm decision word after mask for BxInEvent = " + str;
326 histTitle = hTitle.c_str();
331 hName = recString +
"DataEmul_AlgoDecision_" + str;
332 histName = hName.c_str();
334 hTitle =
"Data vs emul: non-matching algorithm decision word for BxInEvent = " + str;
335 histTitle = hTitle.c_str();
340 hName = recString +
"DataEmul_AlgoDecision_Prescaled_" + str;
341 histName = hName.c_str();
343 hTitle =
"Data vs emul: prescaled algorithms with non-matching decision for BxInEvent = " + str;
344 histTitle = hTitle.c_str();
349 hName = recString +
"DataEmul_AlgoDecision_Unprescaled_" + str;
350 histName = hName.c_str();
352 hTitle =
"Data vs emul: unprescaled algorithms with non-matching decision for BxInEvent = " + str;
353 histTitle = hTitle.c_str();
358 hName = recString +
"DataEmul_AlgoDecision_Unprescaled_Allowed_" + str;
359 histName = hName.c_str();
361 hTitle =
"Data vs emul: unprescaled algorithms not excluded with non-matching decision for BxInEvent = " + str;
362 histTitle = hTitle.c_str();
367 hName = recString +
"Data_AlgoDecision_NoMatch_" + str;
368 histName = hName.c_str();
370 hTitle =
"Data: algorithm decision for non-matching cases for BxInEvent = " + str;
371 histTitle = hTitle.c_str();
376 hName = recString +
"Emul_AlgoDecision_NoMatch_" + str;
377 histName = hName.c_str();
380 =
"Emul: algorithm decision for non-matching cases for BxInEvent = "
382 histTitle = hTitle.c_str();
387 hName = recString +
"Data_AlgoDecision_Prescaled_NoMatch_" + str;
388 histName = hName.c_str();
390 hTitle =
"Data: prescaled algorithms: non-matching algorithm decision for BxInEvent = " + str;
391 histTitle = hTitle.c_str();
396 hName = recString +
"Emul_AlgoDecision_Prescaled_NoMatch_" + str;
397 histName = hName.c_str();
399 hTitle =
"Emul: prescaled algorithms: non-matching algorithm decision for BxInEvent = " + str;
400 histTitle = hTitle.c_str();
406 hName = recString +
"Data_AlgoDecision_Unprescaled_NoMatch_" + str;
407 histName = hName.c_str();
409 hTitle =
"Data: unprescaled algorithms: non-matching algorithm decision for BxInEvent = " + str;
410 histTitle = hTitle.c_str();
415 hName = recString +
"Emul_AlgoDecision_Unprescaled_NoMatch_" + str;
416 histName = hName.c_str();
418 hTitle =
"Emul: unprescaled algorithms: non-matching algorithm decision for BxInEvent = " + str;
419 histTitle = hTitle.c_str();
426 hName = recString +
"Data_AlgoDecisionMask_NoMatch_" + str;
427 histName = hName.c_str();
429 hTitle =
"Data: algorithm decision for non-matching cases after mask for BxInEvent = " + str;
430 histTitle = hTitle.c_str();
435 hName = recString +
"Emul_AlgoDecisionMask_NoMatch_" + str;
436 histName = hName.c_str();
438 hTitle =
"Emul: algorithm decision for non-matching cases after mask for BxInEvent = " + str;
439 histTitle = hTitle.c_str();
444 hName = recString +
"Data_AlgoDecisionMask_Prescaled_NoMatch_" + str;
445 histName = hName.c_str();
447 hTitle =
"Data: prescaled algorithms: non-matching algorithm decision after mask for BxInEvent = " + str;
448 histTitle = hTitle.c_str();
453 hName = recString +
"Emul_AlgoDecision_PrescaledMask_NoMatch_" + str;
454 histName = hName.c_str();
456 hTitle =
"Emul: prescaled algorithms: non-matching algorithm decision after mask for BxInEvent = " + str;
457 histTitle = hTitle.c_str();
463 hName = recString +
"Data_AlgoDecision_UnprescaledMask_NoMatch_" + str;
464 histName = hName.c_str();
466 hTitle =
"Data: unprescaled algorithms: non-matching algorithm decision after mask for BxInEvent = " + str;
467 histTitle = hTitle.c_str();
472 hName = recString +
"Emul_AlgoDecision_UnprescaledMask_NoMatch_" + str;
473 histName = hName.c_str();
476 =
"Emul: unprescaled algorithms: non-matching algorithm decision after mask for BxInEvent = "
478 histTitle = hTitle.c_str();
485 hName = recString +
"DataEmul_AlgoDecisionAfterMask_" + str;
486 histName = hName.c_str();
488 hTitle =
"Data vs emul, physics partition: non-matching algorithm decision word after mask for BxInEvent = " + str;
489 histTitle = hTitle.c_str();
495 hName = recString +
"Data_TechDecision_" + str;
496 histName = hName.c_str();
498 hTitle =
"Data technical trigger decision word for BxInEvent = " + str;
499 histTitle = hTitle.c_str();
504 hName = recString +
"Emul_TechDecision_" + str;
505 histName = hName.c_str();
507 hTitle =
"Emul: technical trigger decision word for BxInEvent = " + str;
508 histTitle = hTitle.c_str();
513 hName = recString +
"Data_TechDecisionAfterMask_" + str;
514 histName = hName.c_str();
516 hTitle =
"Data technical trigger decision word after mask for BxInEvent = " + str;
517 histTitle = hTitle.c_str();
522 hName = recString +
"Emul_TechDecisionAfterMask_" + str;
523 histName = hName.c_str();
526 =
"Emul: technical trigger decision word after mask for BxInEvent = "
528 histTitle = hTitle.c_str();
533 hName = recString +
"DataEmul_TechDecision_" + str;
534 histName = hName.c_str();
536 hTitle =
"Data vs emul: non-matching technical trigger decision word for BxInEvent = " + str;
537 histTitle = hTitle.c_str();
541 hName = recString +
"DataEmul_TechDecisionAfterMask_" + str;
542 histName = hName.c_str();
544 hTitle =
"Data vs emul: non-matching technical trigger decision word after mask for BxInEvent = " + str;
545 histTitle = hTitle.c_str();
558 hName = recString +
"FdlDataEmul_Err";
559 histName = hName.c_str();
561 m_fdlDataEmul_Err[iRec] = ibooker.
book1D(histName,
"FDL data vs emul mismatch for non-matching BxInEvent in FDL payload", 13, 0., 13.);
576 hName = recString +
"FdlDataAlgoDecision_Err";
577 histName = hName.c_str();
579 m_fdlDataAlgoDecision_Err[iRec] = ibooker.
book1D(histName,
"Data: algorithm trigger decision word, non-matching BxInEvent", numberAlgoTriggers, 0., numberAlgoTriggers);
582 hName = recString +
"Emul_AlgoDecision_Err";
583 histName = hName.c_str();
585 m_fdlEmulAlgoDecision_Err[iRec] = ibooker.
book1D(histName,
"Emul: algorithm trigger decision word, non-matching BxInEvent", numberAlgoTriggers, 0., numberAlgoTriggers);
587 hName = recString +
"DataEmul_AlgoDecision_Err";
588 histName = hName.c_str();
590 m_fdlDataEmulAlgoDecision_Err[iRec] = ibooker.
book1D(histName,
"Data vs emul: algorithm trigger decision word, non-matching BxInEvent", numberAlgoTriggers, 0., numberAlgoTriggers);
593 hName = recString +
"Data_TechDecision_Err";
594 histName = hName.c_str();
596 m_fdlDataTechDecision_Err[iRec] = ibooker.
book1D(histName,
"Data: technical trigger decision word, non-matching BxInEvent", numberTechTriggers, 0., numberTechTriggers);
598 hName = recString +
"Emul_TechDecision_Err";
599 histName = hName.c_str();
601 m_fdlEmulTechDecision_Err[iRec] = ibooker.
book1D(histName,
"Emul: technical trigger decision word, non-matching BxInEvent", numberTechTriggers, 0., numberTechTriggers);
603 hName = recString +
"DataEmul_TechDecision_Err";
604 histName = hName.c_str();
606 m_fdlDataEmulTechDecision_Err[iRec] = ibooker.
book1D(histName,
"Data vs emul: technical trigger decision word, non-matching BxInEvent", numberTechTriggers, 0., numberTechTriggers);
613 m_excludedAlgorithmsAgreement = ibooker.
book1D(
"ExcludedAlgorithmsFromAgreement",
"Algorithms excluded from data versus emulator agreement flag", numberAlgoTriggers, 0., numberAlgoTriggers);
617 m_gtErrorFlag = ibooker.
book1D(
"GTErrorFlag",
"L1 GT error flag for data versus emulator comparison", 5, 0., 5);
631 unsigned long long l1GtMenuCacheID =
653 LogDebug(
"L1GtHwValidation") <<
"\nUsing L1 menu: \n "
659 for (
CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
661 const int algBitNumber = (itAlgo->second).algoBitNumber();
663 std::stringstream
ss;
665 ss << std::uppercase << algBitNumber;
668 const std::string& aName = algBitString +
" " + itAlgo->first;
669 const char* algName = aName.c_str();
672 for (
int iBxInEvent = 0; iBxInEvent <
TotalBxInEvent; ++iBxInEvent) {
676 int iIndex = iBxInEvent - ((TotalBxInEvent + 1) / 2 - 1);
677 int hIndex = (iIndex + 16) % 16;
679 std::stringstream
ss;
681 ss << std::uppercase << std::hex << hIndex;
697 algBitNumber + 1, algName, 1);
699 algBitNumber + 1, algName, 1);
701 algBitNumber + 1, algName, 1);
703 algBitNumber + 1, algName, 1);
705 algBitNumber + 1, algName, 1);
708 algBitNumber + 1, algName, 1);
710 algBitNumber + 1, algName, 1);
712 algBitNumber + 1, algName, 1);
714 algBitNumber + 1, algName, 1);
716 algBitNumber + 1, algName, 1);
719 algBitNumber + 1, algName, 1);
721 algBitNumber + 1, algName, 1);
723 algBitNumber + 1, algName, 1);
725 algBitNumber + 1, algName, 1);
727 algBitNumber + 1, algName, 1);
749 if (algBitNumber == *itAlgo) {
760 unsigned long long l1GtPfAlgoCacheID = evSetup.
get<
775 unsigned long long l1GtPfTechCacheID = evSetup.
get<
793 unsigned long long l1GtTmAlgoCacheID = evSetup.
get<
808 unsigned long long l1GtTmTechCacheID = evSetup.
get<
828 const L1GtfeWord& gtfeBlockEmul,
const int iRec) {
831 if (gtfeBlockData == gtfeBlockEmul) {
833 <<
" Data and emulated GTFE blocks: identical.\n";
837 <<
" Data and emulated GTFE blocks: different.\n";
853 const boost::uint16_t boardIdData = gtfeBlockData.
boardId();
854 const boost::uint16_t boardIdEmul = gtfeBlockEmul.
boardId();
856 if (boardIdData == boardIdEmul) {
858 <<
" Data and emulated GTFE boardId identical.";
859 m_myCoutStream <<
"\n boardId() = " << std::hex <<
"0x" << std::setw(4)
860 << std::setfill(
'0') << boardIdData << std::setfill(
' ')
866 <<
" Data and emulated GTFE boardId different.";
868 << std::setw(4) << std::setfill(
'0') << boardIdData
871 << std::setw(4) << std::setfill(
'0') << boardIdEmul
879 const boost::uint16_t recordLength1Data = gtfeBlockData.
recordLength1();
880 const boost::uint16_t recordLength1Emul = gtfeBlockEmul.
recordLength1();
882 if (recordLength1Data == recordLength1Emul) {
884 <<
" Data and emulated GTFE recordLength for alternative 1 identical.";
890 <<
" Data and emulated GTFE recordLength for alternative 1 different.";
891 m_myCoutStream <<
"\n Data: recordLength1() = " << recordLength1Data;
892 m_myCoutStream <<
"\n Emul: recordLength1() = " << recordLength1Emul;
899 const boost::uint16_t recordLengthData = gtfeBlockData.
recordLength();
900 const boost::uint16_t recordLengthEmul = gtfeBlockEmul.
recordLength();
902 if (recordLengthData == recordLengthEmul) {
904 <<
" Data and emulated GTFE recordLength for alternative 0 identical.";
910 <<
" Data and emulated GTFE recordLength for alternative 1 different.";
911 m_myCoutStream <<
"\n Data: recordLength() = " << recordLengthData;
912 m_myCoutStream <<
"\n Emul: recordLength() = " << recordLengthEmul;
919 const boost::uint16_t bxNrData = gtfeBlockData.
bxNr();
920 const boost::uint16_t bxNrEmul = gtfeBlockEmul.
bxNr();
922 if (bxNrData == bxNrEmul) {
924 <<
" Data and emulated GTFE bxNr identical.";
930 <<
" Data and emulated GTFE bxNr different.";
939 const boost::uint32_t setupVersionData = gtfeBlockData.
setupVersion();
940 const boost::uint32_t setupVersionEmul = gtfeBlockEmul.
setupVersion();
942 if (setupVersionData == setupVersionEmul) {
944 <<
" Data and emulated GTFE setupVersion identical.";
950 <<
" Data and emulated GTFE setupVersion different.";
951 m_myCoutStream <<
"\n Data: setupVersion() = " << setupVersionData;
952 m_myCoutStream <<
"\n Emul: setupVersion() = " << setupVersionEmul;
959 const boost::uint16_t activeBoardsData = gtfeBlockData.
activeBoards();
960 const boost::uint16_t activeBoardsEmul = gtfeBlockEmul.
activeBoards();
962 if (activeBoardsData == activeBoardsEmul) {
964 <<
" Data and emulated GTFE activeBoards identical.";
966 << std::setw(4) << std::setfill(
'0') << activeBoardsData
972 <<
" Data and emulated GTFE activeBoards different.";
973 m_myCoutStream <<
"\n Data: activeBoards() = " << std::hex <<
"0x"
974 << std::setw(4) << std::setfill(
'0') << activeBoardsData
976 m_myCoutStream <<
"\n Emul: activeBoards() = " << std::hex <<
"0x"
977 << std::setw(4) << std::setfill(
'0') << activeBoardsEmul
987 const boost::uint16_t altNrBxBoardData = gtfeBlockData.
altNrBxBoard();
988 const boost::uint16_t altNrBxBoardEmul = gtfeBlockEmul.
altNrBxBoard();
990 if (altNrBxBoardData == altNrBxBoardEmul) {
992 <<
" Data and emulated GTFE altNrBxBoard identical.";
998 <<
" Data and emulated GTFE altNrBxBoard different.";
999 m_myCoutStream <<
"\n Data: altNrBxBoard() = " << altNrBxBoardData;
1000 m_myCoutStream <<
"\n Emul: altNrBxBoard() = " << altNrBxBoardEmul;
1007 const boost::uint32_t totalTriggerNrData = gtfeBlockData.
totalTriggerNr();
1008 const boost::uint32_t totalTriggerNrEmul = gtfeBlockEmul.
totalTriggerNr();
1010 if (totalTriggerNrData == totalTriggerNrEmul) {
1012 <<
" Data and emulated GTFE totalTriggerNr identical.";
1013 m_myCoutStream <<
"\n totalTriggerNr() = " << totalTriggerNrData;
1018 <<
" Data and emulated GTFE totalTriggerNr different.";
1019 m_myCoutStream <<
"\n Data: totalTriggerNr() = " << totalTriggerNrData;
1020 m_myCoutStream <<
"\n Emul: totalTriggerNr() = " << totalTriggerNrEmul;
1035 const L1GtFdlWord& fdlBlockEmul,
const int iRec) {
1038 int PhysicsPartition = 0;
1043 if (fdlBlockData == fdlBlockEmul) {
1045 <<
" Data and emulated FDL blocks: identical.\n";
1050 <<
" Data and emulated FDL blocks: different.\n";
1067 const int bxInEventData = fdlBlockData.
bxInEvent();
1068 const int bxInEventEmul = fdlBlockEmul.
bxInEvent();
1070 bool matchBxInEvent =
false;
1072 if (bxInEventData == bxInEventEmul) {
1074 <<
" Data and emulated FDL bxInEvent identical.";
1077 matchBxInEvent =
true;
1081 <<
" Data and emulated FDL bxInEvent different.";
1092 <<
"\n Data and emulated FDL bxInEvent different \n";
1102 bool validBxInEvent =
false;
1104 LogDebug(
"L1GtHwValidation") <<
"\n Convert bxInEvent = " << bxInEventData
1105 <<
" to histIndex = " << histIndex << std::endl;
1107 validBxInEvent =
true;
1113 const boost::uint16_t boardIdData = fdlBlockData.
boardId();
1114 const boost::uint16_t boardIdEmul = fdlBlockEmul.
boardId();
1116 if (boardIdData == boardIdEmul) {
1118 <<
" Data and emulated FDL boardId identical.";
1119 m_myCoutStream <<
"\n boardId() = " << std::hex <<
"0x" << std::setw(4)
1120 << std::setfill(
'0') << boardIdData << std::setfill(
' ')
1126 <<
" Data and emulated FDL boardId different.";
1128 << std::setw(4) << std::setfill(
'0') << boardIdData
1131 << std::setw(4) << std::setfill(
'0') << boardIdEmul
1135 if (matchBxInEvent && validBxInEvent) {
1148 const boost::uint16_t bxNrData = fdlBlockData.
bxNr();
1149 const boost::uint16_t bxNrEmul = fdlBlockEmul.
bxNr();
1151 if (bxNrData == bxNrEmul) {
1153 <<
" Data and emulated FDL bxNr identical.";
1159 <<
" Data and emulated FDL bxNr different.";
1164 if (matchBxInEvent && validBxInEvent) {
1176 const boost::uint32_t eventNrData = fdlBlockData.
eventNr();
1177 const boost::uint32_t eventNrEmul = fdlBlockEmul.
eventNr();
1179 if (eventNrData == eventNrEmul) {
1181 <<
" Data and emulated FDL eventNr identical.";
1187 <<
" Data and emulated FDL eventNr different.";
1192 if (matchBxInEvent && validBxInEvent) {
1210 int nTechBits = gtTechnicalTriggerWordData.size();
1215 unsigned int bitValue = 0;
1217 if (matchBxInEvent && validBxInEvent) {
1218 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
1221 << PhysicsPartition);
1223 if (gtTechnicalTriggerWordData[iBit]) {
1226 bitValue = (triggerMask) ? 0 : 1;
1227 gtTechnicalTriggerWordDataMask[iBit] = bitValue;
1233 if (gtTechnicalTriggerWordEmul.at(iBit)) {
1236 bitValue = (triggerMask) ? 0 : 1;
1237 gtTechnicalTriggerWordEmulMask[iBit] = bitValue;
1244 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
1246 if (gtTechnicalTriggerWordData[iBit]) {
1250 if (gtTechnicalTriggerWordEmul.at(iBit)) {
1256 if (gtTechnicalTriggerWordData == gtTechnicalTriggerWordEmul) {
1258 <<
" Data and emulated FDL gtTechnicalTriggerWord identical.\n";
1264 <<
" Data and emulated FDL gtTechnicalTriggerWord different.";
1271 if (matchBxInEvent && validBxInEvent) {
1277 if (matchBxInEvent && validBxInEvent) {
1278 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
1279 if (gtTechnicalTriggerWordData[iBit]
1280 != gtTechnicalTriggerWordEmul.at(iBit)) {
1285 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
1286 if (gtTechnicalTriggerWordData[iBit]
1287 != gtTechnicalTriggerWordEmul.at(iBit)) {
1298 if (gtTechnicalTriggerWordDataMask == gtTechnicalTriggerWordEmulMask) {
1300 <<
" Data and emulated FDL gtTechnicalTriggerWord after mask identical.\n";
1305 <<
" Data and emulated FDL gtTechnicalTriggerWord after mask different.";
1310 if (matchBxInEvent && validBxInEvent) {
1316 if (matchBxInEvent && validBxInEvent) {
1317 for (
int iBit = 0; iBit < nTechBits; ++iBit) {
1318 if (gtTechnicalTriggerWordData[iBit]
1319 != gtTechnicalTriggerWordEmul.at(iBit)) {
1334 int nAlgoBits = gtDecisionWordData.size();
1344 size_t pfSetsSize = (*m_prescaleFactorsAlgoTrig).size();
1349 <<
"\nError: index of prescale factor set retrieved from the data \n"
1350 <<
"less than zero."
1351 <<
"\n Value of index retrieved from data = " << iPfSet
1358 }
else if (iPfSet >= (static_cast<int>(pfSetsSize))) {
1361 <<
"\nError: index of prescale factor set retrieved from the data \n"
1362 <<
"greater than the size of the vector of prescale factor sets."
1363 <<
"\n Value of index retrieved from data = " << iPfSet
1364 <<
"\n Vector size = " << pfSetsSize << std::endl;
1372 const std::vector<int>& prescaleFactorsAlgoTrig =
1373 (*m_prescaleFactorsAlgoTrig).at(iPfSet);
1376 if (matchBxInEvent && validBxInEvent) {
1378 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1381 << PhysicsPartition);
1385 LogTrace(
"L1GtHwValidation") <<
"Bit " << iBit
1386 <<
": prescale factor = " << prescaleFactor
1387 <<
" trigger mask = " << triggerMask << std::endl;
1389 if (gtDecisionWordData[iBit]) {
1392 if (prescaleFactor == 1) {
1399 bitValue = (triggerMask) ? 0 : 1;
1400 gtDecisionWordDataMask[iBit] = bitValue;
1406 if (gtDecisionWordEmul.at(iBit)) {
1409 bitValue = (triggerMask) ? 0 : 1;
1410 gtDecisionWordEmulMask[iBit] = bitValue;
1417 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1418 if (gtDecisionWordData[iBit]) {
1423 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1424 if (gtDecisionWordEmul.at(iBit)) {
1433 <<
"\n matchBxInEvent && validBxInEvent false \n";
1438 if (gtDecisionWordData == gtDecisionWordEmul) {
1440 <<
" Data and emulated FDL gtDecisionWord identical.";
1446 <<
" Data and emulated FDL gtDecisionWord different.";
1453 if (matchBxInEvent && validBxInEvent) {
1459 if (matchBxInEvent && validBxInEvent) {
1460 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1464 if (gtDecisionWordData[iBit] != gtDecisionWordEmul.at(iBit)) {
1469 if (
excludedAlgo(iBit) && (bxInEventData == 0) && (iRec
1474 if (prescaleFactor == 1) {
1489 if (gtDecisionWordData[iBit]) {
1493 if (prescaleFactor == 1) {
1505 <<
"\nDisagreement data versus emulator: "
1506 <<
"result before mask for algorithm with bit number "
1508 <<
"\n Data: true, emulator: false \n";
1520 if (prescaleFactor == 1) {
1532 <<
"\nDisagreement data versus emulator: "
1533 <<
"result before mask for algorithm with bit number "
1535 <<
"\n Data: false, emulator: true \n";
1546 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1547 if (gtDecisionWordData[iBit] != gtDecisionWordEmul.at(iBit)) {
1556 <<
"\n matchBxInEvent && validBxInEvent false \n";
1562 if (gtDecisionWordDataMask == gtDecisionWordEmulMask) {
1564 <<
" Data and emulated FDL gtDecisionWord after mask identical.";
1569 <<
" Data and emulated FDL gtDecisionWord after mask different.";
1574 if (matchBxInEvent && validBxInEvent) {
1580 if (matchBxInEvent && validBxInEvent) {
1581 for (
int iBit = 0; iBit < nAlgoBits; ++iBit) {
1582 if (gtDecisionWordDataMask[iBit] != gtDecisionWordEmulMask.at(
1589 if (gtDecisionWordDataMask[iBit]) {
1593 if (prescaleFactor == 1) {
1605 <<
"\nDisagreement data versus emulator: "
1606 <<
"result after mask for algorithm with bit number "
1608 <<
" different in data versus emulator "
1609 <<
"\n Data: true, emulator: false \n";
1621 if (prescaleFactor == 1) {
1633 <<
"\nDisagreement data versus emulator: "
1634 <<
"result after mask for algorithm with bit number "
1636 <<
" different in data versus emulator "
1637 <<
"\n Data: false, emulator: true \n";
1659 if (gtDecisionWordExtendedData == gtDecisionWordExtendedEmul) {
1661 <<
" Data and emulated FDL gtDecisionWordExtended identical.\n";
1667 <<
" Data and emulated FDL gtDecisionWordExtended different.\n";
1674 if (matchBxInEvent && validBxInEvent) {
1683 const boost::uint16_t noAlgoData = fdlBlockData.
noAlgo();
1684 const boost::uint16_t noAlgoEmul = fdlBlockEmul.
noAlgo();
1686 if (noAlgoData == noAlgoEmul) {
1688 <<
" Data and emulated FDL noAlgo identical.";
1694 <<
" Data and emulated FDL noAlgo different.";
1699 if (matchBxInEvent && validBxInEvent) {
1708 const boost::uint16_t finalORData = fdlBlockData.
finalOR();
1709 const boost::uint16_t finalOREmul = fdlBlockEmul.
finalOR();
1711 if (finalORData == finalOREmul) {
1713 <<
" Data and emulated FDL finalOR identical.";
1714 m_myCoutStream <<
"\n finalOR() = " << std::hex <<
"0x" << std::setw(2)
1715 << std::setfill(
'0') << finalORData << std::setfill(
' ')
1721 <<
" Data and emulated FDL finalOR different.";
1723 << std::setw(2) << std::setfill(
'0') << finalORData
1726 << std::setw(2) << std::setfill(
'0') << finalOREmul
1730 if (matchBxInEvent && validBxInEvent) {
1739 const int finalORPhysData = finalORData & (1 << PhysicsPartition);
1740 const int finalORPhysEmul = finalOREmul & (1 << PhysicsPartition);
1742 if (finalORPhysData == finalORPhysEmul) {
1744 <<
" Data and emulated FDL finalOR for the physics partition identical.";
1750 <<
" Data and emulated FDL finalOR for the physics partition different.";
1755 if (matchBxInEvent && validBxInEvent) {
1764 const boost::uint16_t localBxNrData = fdlBlockData.
localBxNr();
1765 const boost::uint16_t localBxNrEmul = fdlBlockEmul.
localBxNr();
1767 if (localBxNrData == localBxNrEmul) {
1769 <<
" Data and emulated FDL localBxNr identical.";
1775 <<
" Data and emulated FDL localBxNr different.";
1780 if (matchBxInEvent && validBxInEvent) {
1799 if (psbBlockData == psbBlockEmul) {
1800 m_myCoutStream <<
"\nData and emulated PSB blocks: identical.\n";
1804 m_myCoutStream <<
"\nData and emulated PSB blocks: different.\n";
1820 const boost::uint16_t boardIdData = psbBlockData.
boardId();
1821 const boost::uint16_t boardIdEmul = psbBlockEmul.
boardId();
1823 if (boardIdData == boardIdEmul) {
1825 m_myCoutStream <<
"\n boardId() = " << std::hex <<
"0x" << std::setw(4)
1826 << std::setfill(
'0') << boardIdData << std::setfill(
' ')
1833 << std::setw(4) << std::setfill(
'0') << boardIdData
1836 << std::setw(4) << std::setfill(
'0') << boardIdEmul
1843 const int bxInEventData = psbBlockData.
bxInEvent();
1844 const int bxInEventEmul = psbBlockEmul.
bxInEvent();
1846 if (bxInEventData == bxInEventEmul) {
1847 m_myCoutStream <<
"\nData and emulated PSB bxInEvent identical.";
1852 m_myCoutStream <<
"\nData and emulated PSB bxInEvent different.";
1860 const boost::uint16_t bxNrData = psbBlockData.
bxNr();
1861 const boost::uint16_t bxNrEmul = psbBlockEmul.
bxNr();
1863 if (bxNrData == bxNrEmul) {
1877 const boost::uint32_t eventNrData = psbBlockData.
eventNr();
1878 const boost::uint32_t eventNrEmul = psbBlockEmul.
eventNr();
1880 if (eventNrData == eventNrEmul) {
1894 boost::uint16_t valData;
1895 boost::uint16_t valEmul;
1897 for (
int iA = 0; iA < psbBlockData.
NumberAData; ++iA) {
1898 valData = psbBlockData.
aData(iA);
1899 valEmul = psbBlockEmul.
aData(iA);
1901 if (valData == valEmul) {
1905 << std::setw(4) << std::setfill(
'0') << valData
1913 << std::setw(4) << std::setfill(
'0') << valData
1916 << std::setw(4) << std::setfill(
'0') << valEmul
1925 for (
int iB = 0; iB < psbBlockData.
NumberBData; ++iB) {
1926 valData = psbBlockData.
bData(iB);
1927 valEmul = psbBlockEmul.
bData(iB);
1929 if (valData == valEmul) {
1933 << std::setw(4) << std::setfill(
'0') << valData
1941 << std::setw(4) << std::setfill(
'0') << valData
1944 << std::setw(4) << std::setfill(
'0') << valEmul
1953 const boost::uint16_t localBxNrData = psbBlockData.
localBxNr();
1954 const boost::uint16_t localBxNrEmul = psbBlockEmul.
localBxNr();
1956 if (localBxNrData == localBxNrEmul) {
1957 m_myCoutStream <<
"\nData and emulated PSB localBxNr identical.";
1962 m_myCoutStream <<
"\nData and emulated PSB localBxNr different.";
1999 bool validData =
false;
2001 if (!gtReadoutRecordData.
isValid()) {
2011 bool validEmul =
false;
2013 if (!gtReadoutRecordEmul.
isValid()) {
2019 if ((!validData) || (!validEmul)) {
2021 <<
"\n No valid product found: DAQ L1GlobalTriggerReadoutRecord"
2022 <<
"\n Data validity [1 = true; 0 = false]: " << validData
2023 <<
"\n Emulator validity: [1 = true; 0 = false]: "
2024 << validEmul <<
"\n DAQ histograms will not be filled.\n"
2031 const L1GtfeWord& gtfeBlockData = gtReadoutRecordData->gtfeWord();
2032 const L1GtfeWord& gtfeBlockEmul = gtReadoutRecordEmul->gtfeWord();
2034 compareGTFE(iEvent, evSetup, gtfeBlockData, gtfeBlockEmul, iRec);
2037 const std::vector<L1GtFdlWord>& gtFdlVectorData =
2038 gtReadoutRecordData->gtFdlVector();
2039 const std::vector<L1GtFdlWord>& gtFdlVectorEmul =
2040 gtReadoutRecordEmul->gtFdlVector();
2042 int gtFdlVectorDataSize = gtFdlVectorData.size();
2043 int gtFdlVectorEmulSize = gtFdlVectorEmul.size();
2045 if (gtFdlVectorDataSize == gtFdlVectorEmulSize) {
2046 m_myCoutStream <<
"\nData and emulated FDL vector size: identical.\n";
2049 for (
int iFdl = 0; iFdl < gtFdlVectorDataSize; ++iFdl) {
2051 const L1GtFdlWord& fdlBlockData = gtFdlVectorData[iFdl];
2052 const L1GtFdlWord& fdlBlockEmul = gtFdlVectorEmul[iFdl];
2054 compareFDL(iEvent, evSetup, fdlBlockData, fdlBlockEmul, iRec);
2057 m_myCoutStream <<
"\nData and emulated FDL vector size: different.\n";
2058 m_myCoutStream <<
" Data: size = " << gtFdlVectorDataSize << std::endl;
2059 m_myCoutStream <<
" Emul: size = " << gtFdlVectorEmulSize << std::endl;
2069 const std::vector<L1GtPsbWord>& gtPsbVectorData =
2070 gtReadoutRecordData->gtPsbVector();
2071 const std::vector<L1GtPsbWord>& gtPsbVectorEmul =
2072 gtReadoutRecordEmul->gtPsbVector();
2074 int gtPsbVectorDataSize = gtPsbVectorData.size();
2075 int gtPsbVectorEmulSize = gtPsbVectorEmul.size();
2077 if (gtPsbVectorDataSize == gtPsbVectorEmulSize) {
2078 m_myCoutStream <<
"\nData and emulated PSB vector size: identical.\n";
2081 m_myCoutStream <<
"\nData and emulated PSB vector size: different.\n";
2082 m_myCoutStream <<
" Data: size = " << gtPsbVectorDataSize << std::endl;
2083 m_myCoutStream <<
" Emul: size = " << gtPsbVectorEmulSize << std::endl;
2090 for (
int iPsb = 0; iPsb < gtPsbVectorDataSize; ++iPsb) {
2092 const L1GtPsbWord& psbBlockData = gtPsbVectorData[iPsb];
2093 const boost::uint16_t boardIdData = psbBlockData.
boardId();
2094 const int bxInEventData = psbBlockData.
bxInEvent();
2099 bool foundPSB =
false;
2101 for (
int iPsbF = 0; iPsbF < gtPsbVectorEmulSize; ++iPsbF) {
2103 const L1GtPsbWord& psbBlockEmul = gtPsbVectorEmul[iPsbF];
2104 const boost::uint16_t boardIdEmul = psbBlockEmul.
boardId();
2105 const int bxInEventEmul = psbBlockEmul.
bxInEvent();
2107 if ((boardIdEmul == boardIdData)
2108 && (bxInEventData == bxInEventEmul)) {
2113 comparePSB(iEvent, evSetup, psbBlockData, psbBlockEmul);
2119 m_myCoutStream <<
"\nNo emulated PSB with boardId() = " << std::hex
2120 <<
"0x" << std::setw(4) << std::setfill(
'0') << boardIdData
2121 << std::setfill(
' ') <<
std::dec <<
" and BxInEvent = "
2122 << bxInEventData <<
" was found";
2160 bool validData =
false;
2162 if (!gtReadoutRecordData.
isValid()) {
2172 bool validEmul =
false;
2174 if (!gtReadoutRecordEmul.
isValid()) {
2180 if ((!validData) || (!validEmul)) {
2182 <<
"\n No valid product found: EVM L1GlobalTriggerEvmReadoutRecord"
2183 <<
"\n Data validity [1 = true; 0 = false]: " << validData
2184 <<
"\n Emulator validity: [1 = true; 0 = false]: "
2185 << validEmul <<
"\n EVM histograms will not be filled.\n"
2192 const L1GtfeWord& gtfeBlockData = gtReadoutRecordData->gtfeWord();
2193 const L1GtfeWord& gtfeBlockEmul = gtReadoutRecordEmul->gtfeWord();
2195 compareGTFE(iEvent, evSetup, gtfeBlockData, gtfeBlockEmul, iRec);
2198 const std::vector<L1GtFdlWord>& gtFdlVectorData =
2199 gtReadoutRecordData->gtFdlVector();
2200 const std::vector<L1GtFdlWord>& gtFdlVectorEmul =
2201 gtReadoutRecordEmul->gtFdlVector();
2203 int gtFdlVectorDataSize = gtFdlVectorData.size();
2204 int gtFdlVectorEmulSize = gtFdlVectorEmul.size();
2206 if (gtFdlVectorDataSize == gtFdlVectorEmulSize) {
2207 m_myCoutStream <<
"\nData and emulated FDL vector size: identical.\n";
2210 for (
int iFdl = 0; iFdl < gtFdlVectorDataSize; ++iFdl) {
2212 const L1GtFdlWord& fdlBlockData = gtFdlVectorData[iFdl];
2213 const L1GtFdlWord& fdlBlockEmul = gtFdlVectorEmul[iFdl];
2215 compareFDL(iEvent, evSetup, fdlBlockData, fdlBlockEmul, iRec);
2218 m_myCoutStream <<
"\nData and emulated FDL vector size: different.\n";
2219 m_myCoutStream <<
" Data: size = " << gtFdlVectorDataSize << std::endl;
2220 m_myCoutStream <<
" Emul: size = " << gtFdlVectorEmulSize << std::endl;
2270 bool matchValue =
false;
2272 if (excludedCategory ==
CondNull) {
2275 if (conditionCategory == excludedCategory) {
2287 bool matchValue =
false;
2292 if (conditionType == excludedType) {
2302 const std::vector<L1GtObject>& condObjects,
2305 bool matchValue =
false;
2307 if (excludedObject ==
ObjNull) {
2313 for (std::vector<L1GtObject>::const_iterator itCondObj =
2314 condObjects.begin(); itCondObj != condObjects.end(); ++itCondObj) {
2316 if ((*itCondObj) == excludedObject) {
2334 for (
CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
2337 const int algBitNumber = (itAlgo->second).algoBitNumber();
2338 const int chipNr = (itAlgo->second).algoChipNumber();
2343 const std::vector<L1GtLogicParser::TokenRPN>& aRpnVector =
2344 (itAlgo->second).algoRpnVector();
2345 size_t aRpnVectorSize = aRpnVector.size();
2347 bool algWithExcludedCondition =
false;
2348 bool algWithConditionNotInMap =
false;
2351 for (
size_t opI = 0; opI < aRpnVectorSize; ++opI) {
2353 const std::string& cndName = (aRpnVector[opI]).operand;
2355 if (!cndName.empty()) {
2356 bool foundCond =
false;
2358 CItCond itCond = conditionMap.find(cndName);
2359 if (itCond != conditionMap.end()) {
2363 const std::vector<L1GtObject>& objType = (itCond->second)->objectType();
2368 for (std::vector<L1GtConditionCategory>::const_iterator
2380 <<
"Algorithm: " << algName
2381 <<
" Condition: " << cndName
2393 if (matchCondCategoryValue && matchCondTypeValue && matchCondL1GtObjectValue) {
2395 algWithExcludedCondition =
true;
2407 algWithConditionNotInMap =
true;
2409 LogTrace(
"L1GtHwValidation") <<
"\n Error: condition "
2410 << cndName <<
" not found in condition map!"
2411 <<
"\n Add algorithm " << algName
2412 <<
" (bit number " << algBitNumber <<
") "
2413 <<
"\n to list of algorithms excluded from comparison"
2414 <<
"\n data versus emulator." << std::endl;
2420 if (algWithConditionNotInMap) {
2426 <<
"\n Error: one or more conditions from algorithm "
2427 << algName <<
" (bit number " << algBitNumber <<
") "
2428 <<
" not found in condition map!"
2429 <<
"\n Add it to list of algorithms excluded from comparison"
2430 <<
"\n data versus emulator." << std::endl;
2433 if (algWithExcludedCondition) {
2437 LogTrace(
"L1GtHwValidation") <<
"\n Algorithm " << algName
2438 <<
" (bit number " << algBitNumber
2439 <<
") contains an excluded condition."
2440 <<
"\n Add it to list of algorithms excluded from comparison"
2441 <<
"\n data versus emulator." << std::endl;
2446 for (std::vector<std::string>::const_iterator
2450 if ((*itExcl) == algName) {
2454 LogTrace(
"L1GtHwValidation") <<
"\n Algorithm " << algName
2455 <<
" (bit number " << algBitNumber
2456 <<
")\n added to list of algorithms excluded from comparison"
2457 <<
" \n data versus emulator by ExcludeAlgoTrigByName." << std::endl;
2464 for (std::vector<int>::const_iterator
2468 if ((*itExcl) == algBitNumber) {
2472 LogTrace(
"L1GtHwValidation") <<
"\n Algorithm " << algName
2473 <<
" (bit number " << algBitNumber
2474 <<
")\n added to list of algorithms excluded from comparison"
2475 <<
" \n data versus emulator by ExcludeAlgoTrigByBit." << std::endl;
2489 if (iBit == *itAlgo) {
virtual void dqmBeginRun(const edm::Run &, const edm::EventSetup &)
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
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 analyze(const edm::Event &, const edm::EventSetup &)
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
#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
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
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
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
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
virtual void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &, const edm::EventSetup &) override
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]
virtual void beginLuminosityBlock(const edm::LuminosityBlock &, const edm::EventSetup &)
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]