104 delete m_candL1MuShower;
108 delete m_candL1EtSum;
109 delete m_candL1EtSumZdc;
110 delete m_candL1External;
120 const int nrL1MuShower,
129 m_candL1Mu->setBXRange(m_bxFirst_, m_bxLast_);
130 m_candL1MuShower->setBXRange(m_bxFirst_, m_bxLast_);
131 m_candL1EG->setBXRange(m_bxFirst_, m_bxLast_);
132 m_candL1Tau->setBXRange(m_bxFirst_, m_bxLast_);
133 m_candL1Jet->setBXRange(m_bxFirst_, m_bxLast_);
134 m_candL1EtSum->setBXRange(m_bxFirst_, m_bxLast_);
135 m_candL1EtSumZdc->setBXRange(m_bxFirst_, m_bxLast_);
136 m_candL1External->setBXRange(m_bxFirst_, m_bxLast_);
140 LogDebug(
"L1TGlobal") <<
"\t Initializing Board with bxFirst = " << m_bxFirst_ <<
", bxLast = " << m_bxLast_;
151 const bool receiveEG,
153 const bool receiveTau,
155 const bool receiveJet,
157 const bool receiveEtSums,
158 const bool receiveEtSumsZdc,
159 const bool receiveCICADA) {
161 LogDebug(
"L1TGlobal") <<
"\n**** Board receiving Calo Data ";
169 iEvent.getByToken(egInputToken, egData);
173 edm::LogWarning(
"L1TGlobal") <<
"\nWarning: Input tag for the BXVector<l1t::EGamma> collection" 174 <<
"\nrequested in configuration, but not found in the event.\n";
178 for (
int i = egData->getFirstBX();
i <= egData->getLastBX(); ++
i) {
180 if (i < m_bxFirst_ || i > m_bxLast_)
185 for (std::vector<l1t::EGamma>::const_iterator eg = egData->begin(
i); eg != egData->end(
i); ++eg) {
187 (*m_candL1EG).push_back(
i, &(*eg));
189 edm::LogWarning(
"L1TGlobal") <<
" Too many EG (" << nObj <<
") for uGT Configuration maxEG =" << nrL1EG;
191 LogDebug(
"L1TGlobal") <<
"EG Pt " << eg->hwPt() <<
" Eta " << eg->hwEta() <<
" Phi " << eg->hwPhi()
192 <<
" Qual " << eg->hwQual() <<
" Iso " << eg->hwIso();
202 iEvent.getByToken(tauInputToken, tauData);
206 edm::LogWarning(
"L1TGlobal") <<
"\nWarning: Input tag for the BXVector<l1t::Tau> collection" 207 <<
"\nrequested in configuration, but not found in the event.\n";
211 for (
int i = tauData->getFirstBX();
i <= tauData->getLastBX(); ++
i) {
213 if (i < m_bxFirst_ || i > m_bxLast_)
218 for (std::vector<l1t::Tau>::const_iterator
tau = tauData->begin(
i);
tau != tauData->end(
i); ++
tau) {
219 if (nObj < nrL1Tau) {
220 (*m_candL1Tau).push_back(
i, &(*
tau));
222 LogTrace(
"L1TGlobal") <<
" Too many Tau (" << nObj <<
") for uGT Configuration maxTau =" << nrL1Tau;
225 LogDebug(
"L1TGlobal") <<
"tau Pt " <<
tau->hwPt() <<
" Eta " <<
tau->hwEta() <<
" Phi " <<
tau->hwPhi()
226 <<
" Qual " <<
tau->hwQual() <<
" Iso " <<
tau->hwIso();
240 edm::LogWarning(
"L1TGlobal") <<
"\nWarning: Input tag for the BXVector<l1t::Jet> collection" 241 <<
"\nrequested in configuration, but not found in the event.\n";
247 if (i < m_bxFirst_ || i > m_bxLast_)
253 if (nObj < nrL1Jet) {
254 (*m_candL1Jet).push_back(
i, &(*
jet));
256 edm::LogWarning(
"L1TGlobal") <<
" Too many Jets (" << nObj <<
") for uGT Configuration maxJet =" << nrL1Jet;
259 LogDebug(
"L1TGlobal") <<
"Jet Pt " <<
jet->hwPt() <<
" Eta " <<
jet->hwEta() <<
" Phi " <<
jet->hwPhi()
260 <<
" Qual " <<
jet->hwQual() <<
" Iso " <<
jet->hwIso();
269 iEvent.getByToken(sumInputToken, etSumData);
273 edm::LogWarning(
"L1TGlobal") <<
"\nWarning: Input tag for the BXVector<l1t::EtSum> collection" 274 <<
"\nrequested in configuration, but not found in the event.\n";
277 for (
int i = etSumData->getFirstBX();
i <= etSumData->getLastBX(); ++
i) {
279 if (i < m_bxFirst_ || i > m_bxLast_)
283 for (std::vector<l1t::EtSum>::const_iterator etsum = etSumData->begin(
i); etsum != etSumData->end(
i); ++etsum) {
284 (*m_candL1EtSum).push_back(
i, &(*etsum));
329 if (receiveEtSumsZdc) {
331 iEvent.getByToken(sumZdcInputToken, etSumData);
335 edm::LogWarning(
"L1TGlobal") <<
"\nWarning: Input tag for the ZDC Energy Sums collection" 336 <<
"\nrequested in configuration, but not found in the event.\n";
339 for (
int i = etSumData->getFirstBX();
i <= etSumData->getLastBX(); ++
i) {
341 if (i < m_bxFirst_ || i > m_bxLast_)
344 for (std::vector<l1t::EtSum>::const_iterator etsum = etSumData->begin(
i); etsum != etSumData->end(
i); ++etsum) {
345 (*m_candL1EtSumZdc).push_back(
i, &(*etsum));
352 iEvent.getByToken(CICADAInputToken, cicadaScoreHandle);
353 if (not cicadaScoreHandle.
isValid()) {
355 edm::LogWarning(
"L1Tglobal") <<
"\nWarning: Input tag for the CICADA score" 356 <<
"\nrequested in configuration, but not found in the event.\n" 357 <<
"\nSetting score to 0.0";
360 }
else if (cicadaScoreHandle->isEmpty(0)) {
363 <<
"\nWarning: CICADA score had a valid input tag, but an empty BX collection" 364 <<
"\nThe CICADA score will be filled with 0.0 to prevent any failure of uGT emulation";
368 setCICADAScore(cicadaScoreHandle->at(
378 const bool receiveMu,
381 LogDebug(
"L1TGlobal") <<
"\n**** GlobalBoard receiving muon data = ";
390 iEvent.getByToken(muInputToken, muonData);
394 edm::LogWarning(
"L1TGlobal") <<
"\nWarning: Input tag for the BXVector<l1t::Muon> collection" 395 <<
"\nrequested in configuration, but not found in the event.\n";
399 for (
int i = muonData->getFirstBX();
i <= muonData->getLastBX(); ++
i) {
401 if (i < m_bxFirst_ || i > m_bxLast_)
406 for (std::vector<l1t::Muon>::const_iterator
mu = muonData->begin(
i);
mu != muonData->end(
i); ++
mu) {
408 (*m_candL1Mu).push_back(
i, &(*
mu));
410 edm::LogWarning(
"L1TGlobal") <<
" Too many Muons (" << nObj <<
") for uGT Configuration maxMu =" << nrL1Mu;
413 LogDebug(
"L1TGlobal") <<
"Muon Pt " <<
mu->hwPt() <<
" EtaAtVtx " <<
mu->hwEtaAtVtx() <<
" PhiAtVtx " 414 <<
mu->hwPhiAtVtx() <<
" Qual " <<
mu->hwQual() <<
" Iso " <<
mu->hwIso();
425 const bool receiveMuShower,
426 const int nrL1MuShower) {
428 if (receiveMuShower) {
430 iEvent.getByToken(muShowerInputToken, muonData);
434 edm::LogWarning(
"L1TGlobal") <<
"\nWarning: Input tag for the BXVector<l1t::MuonShower> collection" 435 <<
"\nrequested in configuration, but not found in the event.\n";
439 for (
int i = muonData->getFirstBX();
i <= muonData->getLastBX(); ++
i) {
441 if (i < m_bxFirst_ || i > m_bxLast_)
446 for (std::vector<l1t::MuonShower>::const_iterator
mu = muonData->begin(
i);
mu != muonData->end(
i); ++
mu) {
447 if (nObj < nrL1MuShower) {
452 std::shared_ptr<l1t::MuonShower> musOneNominalInTime =
453 std::make_shared<l1t::MuonShower>(
false,
false,
false,
false,
false,
false);
454 std::shared_ptr<l1t::MuonShower> musOneTightInTime =
455 std::make_shared<l1t::MuonShower>(
false,
false,
false,
false,
false,
false);
456 std::shared_ptr<l1t::MuonShower> musTwoLooseDiffSectorsInTime =
457 std::make_shared<l1t::MuonShower>(
false,
false,
false,
false,
false,
false);
458 std::shared_ptr<l1t::MuonShower> musOutOfTime0 =
459 std::make_shared<l1t::MuonShower>(
false,
false,
false,
false,
false,
false);
460 std::shared_ptr<l1t::MuonShower> musOutOfTime1 =
461 std::make_shared<l1t::MuonShower>(
false,
false,
false,
false,
false,
false);
463 musOneNominalInTime->setOneNominalInTime(
mu->isOneNominalInTime());
464 musOneTightInTime->setOneTightInTime(
mu->isOneTightInTime());
465 musTwoLooseDiffSectorsInTime->setTwoLooseDiffSectorsInTime(
mu->isTwoLooseDiffSectorsInTime());
466 musOutOfTime0->setMusOutOfTime0(
mu->musOutOfTime0());
467 musOutOfTime1->setMusOutOfTime1(
mu->musOutOfTime1());
469 (*m_candL1MuShower).push_back(
i, musOneNominalInTime);
470 (*m_candL1MuShower).push_back(
i, musOneTightInTime);
471 (*m_candL1MuShower).push_back(
i, musTwoLooseDiffSectorsInTime);
472 (*m_candL1MuShower).push_back(
i, musOutOfTime0);
473 (*m_candL1MuShower).push_back(
i, musOutOfTime1);
477 <<
") for uGT Configuration maxMuShower =" << nrL1MuShower;
489 const bool receiveExt) {
491 LogDebug(
"L1TGlobal") <<
"\n**** GlobalBoard receiving external data = ";
500 iEvent.getByToken(extInputToken, extData);
504 edm::LogWarning(
"L1TGlobal") <<
"\nWarning: Input tag for the BXVector<GlobalExtBlk> collection" 505 <<
"\nrequested in configuration, but not found in the event.\n";
509 for (
int i = extData->getFirstBX();
i <= extData->getLastBX(); ++
i) {
511 if (i < m_bxFirst_ || i > m_bxLast_)
515 for (std::vector<GlobalExtBlk>::const_iterator
ext = extData->begin(
i);
ext != extData->end(
i); ++
ext) {
516 (*m_candL1External).push_back(
i, &(*
ext));
525 m_uGtAXOScore.reset();
526 m_uGtAXOScore.setbxInEventNr((iBxInEvent & 0xF));
529 float scorevalue = 0.0;
530 if (iBxInEvent == 0) {
531 scorevalue = m_storedAXOScore;
535 m_uGtAXOScore.setAXOScore(scorevalue);
536 AxoScoreRecord->push_back(iBxInEvent, m_uGtAXOScore);
543 const bool produceL1GtObjectMapRecord,
544 const int iBxInEvent,
545 std::unique_ptr<GlobalObjectMapRecord>& gtObjectMapRecord,
546 const unsigned int numberPhysTriggers,
548 const int nrL1MuShower,
552 const std::vector<ConditionMap>& conditionMap = m_l1GtMenu->
gtConditionMap();
556 LogDebug(
"L1TGlobal") <<
" L1 Menu Scales -- Set Name: " << scaleSetName;
560 m_algInitialOr =
false;
561 m_algPrescaledOr =
false;
562 m_algIntermOr =
false;
563 m_algFinalOr =
false;
564 m_algFinalOrVeto =
false;
566 const std::vector<std::vector<MuonTemplate>>& corrMuon = m_l1GtMenu->
corMuonTemplate();
568 const std::vector<std::vector<CaloTemplate>>& corrCalo = m_l1GtMenu->
corCaloTemplate();
570 const std::vector<std::vector<EnergySumTemplate>>& corrEnergySum = m_l1GtMenu->
corEnergySumTemplate();
572 LogDebug(
"L1TGlobal") <<
"Size corrMuon " << corrMuon.size() <<
"\nSize corrCalo " << corrCalo.size()
573 <<
"\nSize corrSums " << corrEnergySum.size();
581 if (m_conditionResultMaps.size() != conditionMap.size()) {
582 m_conditionResultMaps.clear();
583 m_conditionResultMaps.resize(conditionMap.size());
588 for (std::vector<ConditionMap>::const_iterator itCondOnChip = conditionMap.begin();
589 itCondOnChip != conditionMap.end();
595 for (
CItCond itCond = itCondOnChip->begin(); itCond != itCondOnChip->end(); itCond++) {
597 switch ((itCond->second)->condCategory()) {
600 const int ifMuEtaNumberBits = 0;
608 cMapResults[itCond->first] = muCondition;
610 if (m_verbosity && m_isDebugEnabled) {
611 std::ostringstream myCout;
612 muCondition->
print(myCout);
614 LogTrace(
"L1TGlobal") << myCout.str();
626 cMapResults[itCond->first] = muShowerCondition;
628 if (m_verbosity && m_isDebugEnabled) {
629 std::ostringstream myCout;
630 muShowerCondition->
print(myCout);
632 edm::LogWarning(
"L1TGlobal") <<
"MuonShowerCondition " << myCout.str();
639 const int ifCaloEtaNumberBits = 0;
642 new CaloCondition(itCond->second,
this, nrL1EG, nrL1Jet, nrL1Tau, ifCaloEtaNumberBits);
648 cMapResults[itCond->first] = caloCondition;
650 if (m_verbosity && m_isDebugEnabled) {
651 std::ostringstream myCout;
652 caloCondition->
print(myCout);
654 LogTrace(
"L1TGlobal") << myCout.str();
665 cMapResults[itCond->first] = eSumCondition;
667 if (m_verbosity && m_isDebugEnabled) {
668 std::ostringstream myCout;
669 eSumCondition->
print(myCout);
671 LogTrace(
"L1TGlobal") << myCout.str();
682 cMapResults[itCond->first] = eSumZdcCondition;
684 if (m_verbosity && m_isDebugEnabled) {
685 std::ostringstream myCout;
686 eSumZdcCondition->
print(myCout);
688 LogTrace(
"L1TGlobal") << myCout.str();
700 cMapResults[itCond->first] = axol1tlCondition;
704 if (m_saveAXOScore && m_storedAXOScore < 0.0) {
705 m_storedAXOScore = axol1tlCondition->
getScore();
708 if (m_verbosity && m_isDebugEnabled) {
709 std::ostringstream myCout;
710 axol1tlCondition->
print(myCout);
723 cMapResults[itCond->first] = cicadaCondition;
725 if (m_verbosity && m_isDebugEnabled) {
726 std::ostringstream myCout;
727 cicadaCondition->
print(myCout);
739 cMapResults[itCond->first] = extCondition;
741 if (m_verbosity && m_isDebugEnabled) {
742 std::ostringstream myCout;
743 extCondition->
print(myCout);
745 LogTrace(
"L1TGlobal") << myCout.str();
755 const int cond0Ind = corrTemplate->
cond0Index();
756 const int cond1Ind = corrTemplate->
cond1Index();
762 int cond0NrL1Objects = 0;
763 int cond1NrL1Objects = 0;
764 LogDebug(
"L1TGlobal") <<
" cond0NrL1Objects" << cond0NrL1Objects <<
" cond1NrL1Objects " 767 switch (cond0Categ) {
769 cond0Condition = &((corrMuon[iChip])[cond0Ind]);
772 cond0Condition = &((corrCalo[iChip])[cond0Ind]);
775 cond0Condition = &((corrEnergySum[iChip])[cond0Ind]);
782 switch (cond1Categ) {
784 cond1Condition = &((corrMuon[iChip])[cond1Ind]);
787 cond1Condition = &((corrCalo[iChip])[cond1Ind]);
790 cond1Condition = &((corrEnergySum[iChip])[cond1Ind]);
803 cMapResults[itCond->first] = correlationCond;
805 if (m_verbosity && m_isDebugEnabled) {
806 std::ostringstream myCout;
807 correlationCond->
print(myCout);
809 LogTrace(
"L1TGlobal") << myCout.str();
822 const int cond0Ind = corrTemplate->
cond0Index();
823 const int cond1Ind = corrTemplate->
cond1Index();
824 const int cond2Ind = corrTemplate->
cond2Index();
831 int cond0NrL1Objects = 0;
832 int cond1NrL1Objects = 0;
833 int cond2NrL1Objects = 0;
834 LogDebug(
"L1TGlobal") <<
" cond0NrL1Objects " << cond0NrL1Objects <<
" cond1NrL1Objects " 835 << cond1NrL1Objects <<
" cond2NrL1Objects " << cond2NrL1Objects;
837 cond0Condition = &((corrMuon[iChip])[cond0Ind]);
839 LogDebug(
"L1TGlobal") <<
"No muon0 to evaluate three-body correlation condition";
842 cond1Condition = &((corrMuon[iChip])[cond1Ind]);
844 LogDebug(
"L1TGlobal") <<
"No muon1 to evaluate three-body correlation condition";
847 cond2Condition = &((corrMuon[iChip])[cond2Ind]);
849 LogDebug(
"L1TGlobal") <<
"No muon2 to evaluate three-body correlation condition";
856 correlationThreeBodyCond->
setScales(>Scales);
858 cMapResults[itCond->first] = correlationThreeBodyCond;
860 if (m_verbosity && m_isDebugEnabled) {
861 std::ostringstream myCout;
862 correlationThreeBodyCond->
print(myCout);
864 LogTrace(
"L1TGlobal") << myCout.str();
876 const int cond0Ind = corrTemplate->
cond0Index();
877 const int cond1Ind = corrTemplate->
cond1Index();
878 const int cond2Ind = corrTemplate->
cond2Index();
885 int cond0NrL1Objects = 0;
886 int cond1NrL1Objects = 0;
887 int cond2NrL1Objects = 0;
888 LogDebug(
"L1TGlobal") <<
" cond0NrL1Objects" << cond0NrL1Objects <<
" cond1NrL1Objects " << cond1NrL1Objects
889 <<
" cond2NrL1Objects " << cond2NrL1Objects;
891 switch (cond0Categ) {
893 cond0Condition = &((corrMuon[iChip])[cond0Ind]);
896 cond0Condition = &((corrCalo[iChip])[cond0Ind]);
899 cond0Condition = &((corrEnergySum[iChip])[cond0Ind]);
906 switch (cond1Categ) {
908 cond1Condition = &((corrMuon[iChip])[cond1Ind]);
911 cond1Condition = &((corrCalo[iChip])[cond1Ind]);
914 cond1Condition = &((corrEnergySum[iChip])[cond1Ind]);
921 switch (cond2Categ) {
923 cond2Condition = &((corrMuon[iChip])[cond2Ind]);
926 cond2Condition = &((corrCalo[iChip])[cond2Ind]);
929 cond2Condition = &((corrEnergySum[iChip])[cond2Ind]);
940 correlationCondWOR->
setScales(>Scales);
943 cMapResults[itCond->first] = correlationCondWOR;
945 if (m_verbosity && m_isDebugEnabled) {
946 std::ostringstream myCout;
947 correlationCondWOR->
print(myCout);
949 LogTrace(
"L1TGlobal") << myCout.str();
971 std::vector<GlobalObjectMap> objMapVec;
972 if (produceL1GtObjectMapRecord && (iBxInEvent == 0))
973 objMapVec.reserve(numberPhysTriggers);
975 for (
CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
977 gtAlg.
evaluateAlgorithm((itAlgo->second).algoChipNumber(), m_conditionResultMaps);
979 int algBitNumber = (itAlgo->second).algoBitNumber();
982 LogDebug(
"L1TGlobal") <<
" ===> for iBxInEvent = " << iBxInEvent <<
":\t algBitName = " << itAlgo->first
983 <<
",\t algBitNumber = " << algBitNumber <<
",\t algResult = " << algResult;
987 m_uGtAlgBlk.setAlgoDecisionInitial(algBitNumber, algResult);
988 m_algInitialOr =
true;
991 if (m_verbosity && m_isDebugEnabled) {
992 std::ostringstream myCout;
993 (itAlgo->second).
print(myCout);
996 LogTrace(
"L1TGlobal") << myCout.str();
1000 if (produceL1GtObjectMapRecord && (iBxInEvent == 0)) {
1001 std::vector<L1TObjectTypeInCond> otypes;
1006 for (
auto imap = conditionMap.begin(); imap != conditionMap.end(); imap++) {
1007 auto match = imap->find(iop->tokenName);
1009 if (match != imap->end()) {
1013 otype = match->second->objectType();
1015 for (
auto itype =
otype.begin(); itype !=
otype.end(); itype++) {
1021 edm::LogWarning(
"L1TGlobal") <<
"\n Failed to find match for operand token " << iop->tokenName <<
"\n";
1023 otypes.push_back(
otype);
1038 if (m_verbosity && m_isDebugEnabled) {
1039 std::ostringstream myCout1;
1040 objMap.
print(myCout1);
1042 LogTrace(
"L1TGlobal") << myCout1.str();
1045 objMapVec.push_back(objMap);
1050 if (produceL1GtObjectMapRecord && (iBxInEvent == 0)) {
1051 gtObjectMapRecord->swapGtObjectMap(objMapVec);
1057 for (std::vector<AlgorithmEvaluation::ConditionEvaluationMap>::iterator itCondOnChip = m_conditionResultMaps.begin();
1058 itCondOnChip != m_conditionResultMaps.end();
1061 delete itCond->second;
1062 itCond->second =
nullptr;
1071 const int iBxInEvent,
1072 const int totalBxInEvent,
1073 const unsigned int numberPhysTriggers,
1074 const std::vector<double>& prescaleFactorsAlgoTrig,
1075 const std::vector<unsigned int>& triggerMaskAlgoTrig,
1076 const std::vector<int>& triggerMaskVetoAlgoTrig,
1077 const bool algorithmTriggersUnprescaled,
1078 const bool algorithmTriggersUnmasked) {
1080 LogDebug(
"L1TGlobal") <<
"\n**** GlobalBoard apply Final Decision Logic ";
1084 if (m_prescaleCounterAlgoTrig.empty()
or 1085 (m_currentLumi !=
iEvent.luminosityBlock() and m_resetPSCountersEachLumiSec)) {
1086 m_prescaleCounterAlgoTrig.clear();
1087 m_prescaleCounterAlgoTrig.reserve(totalBxInEvent);
1088 auto const& prescaleCountersAlgoTrig =
1089 m_semiRandomInitialPSCounters ? prescaleCountersWithSemirandomInitialCounter(prescaleFactorsAlgoTrig,
iEvent)
1090 : prescaleCounters(prescaleFactorsAlgoTrig);
1091 for (
int iBxInEvent = 0; iBxInEvent < totalBxInEvent; ++iBxInEvent) {
1092 m_prescaleCounterAlgoTrig.push_back(prescaleCountersAlgoTrig);
1095 m_currentLumi =
iEvent.luminosityBlock();
1100 m_uGtAlgBlk.copyInitialToInterm();
1105 if (!algorithmTriggersUnprescaled) {
1107 int const inBxInEvent = totalBxInEvent / 2 + iBxInEvent;
1109 bool temp_algPrescaledOr =
false;
1110 bool alreadyReported =
false;
1111 for (
unsigned int iBit = 0; iBit < numberPhysTriggers; ++iBit) {
1112 bool const bitValue = m_uGtAlgBlk.getAlgoDecisionInitial(iBit);
1115 if (iBit < prescaleFactorsAlgoTrig.size()) {
1116 if (prescaleFactorsAlgoTrig.at(iBit) != 1) {
1117 bool const triggered = m_prescaleCounterAlgoTrig.at(inBxInEvent).at(iBit).accept();
1119 temp_algPrescaledOr =
true;
1122 m_uGtAlgBlk.setAlgoDecisionInterm(iBit,
false);
1126 temp_algPrescaledOr =
true;
1129 else if (!alreadyReported) {
1130 alreadyReported =
true;
1131 edm::LogWarning(
"L1TGlobal") <<
"\nWarning: algoBit >= prescaleFactorsAlgoTrig.size() in bx " << iBxInEvent;
1136 m_algPrescaledOr = temp_algPrescaledOr;
1140 m_algPrescaledOr = m_algInitialOr;
1146 m_uGtAlgBlk.copyIntermToFinal();
1148 if (!algorithmTriggersUnmasked) {
1149 bool temp_algFinalOr =
false;
1150 bool alreadyReported =
false;
1151 for (
unsigned int iBit = 0; iBit < numberPhysTriggers; ++iBit) {
1152 const bool bitValue = m_uGtAlgBlk.getAlgoDecisionInterm(iBit);
1156 bool isMasked =
false;
1157 if (iBit < triggerMaskAlgoTrig.size())
1158 isMasked = (triggerMaskAlgoTrig.at(iBit) == 0);
1159 else if (!alreadyReported) {
1160 alreadyReported =
true;
1161 edm::LogWarning(
"L1TGlobal") <<
"\nWarning: algoBit >= triggerMaskAlgoTrig.size() in bx " << iBxInEvent;
1164 bool const passMask = (bitValue && !isMasked);
1167 temp_algFinalOr =
true;
1169 m_uGtAlgBlk.setAlgoDecisionFinal(iBit,
false);
1172 if (triggerMaskVetoAlgoTrig.at(iBit) == 1)
1173 m_algFinalOrVeto =
true;
1177 m_algIntermOr = temp_algFinalOr;
1180 m_algIntermOr = m_algPrescaledOr;
1187 m_algFinalOr = (m_algIntermOr & !m_algFinalOrVeto);
1192 std::unique_ptr<GlobalAlgBlkBxCollection>& uGtAlgRecord,
1197 LogDebug(
"L1TGlobal") <<
"\n**** GlobalBoard fill DAQ Records for bx= " << iBxInEvent;
1201 m_uGtAlgBlk.setbxInEventNr((iBxInEvent & 0xF));
1202 m_uGtAlgBlk.setPreScColumn(prescaleSet);
1203 m_uGtAlgBlk.setL1MenuUUID(menuUUID);
1204 m_uGtAlgBlk.setL1FirmwareUUID(firmwareUUID);
1206 m_uGtAlgBlk.setFinalORVeto(m_algFinalOrVeto);
1207 m_uGtAlgBlk.setFinalORPreVeto(m_algIntermOr);
1208 m_uGtAlgBlk.setFinalOR(m_algFinalOr);
1210 uGtAlgRecord->push_back(iBxInEvent, m_uGtAlgBlk);
1220 m_uGtAlgBlk.reset();
1223 m_storedAXOScore = -999.0;
1224 m_uGtAXOScore.reset();
1226 m_gtlDecisionWord.reset();
1227 m_gtlAlgorithmOR.reset();
1232 m_candL1Mu->clear();
1233 m_candL1Mu->setBXRange(m_bxFirst_, m_bxLast_);
1238 m_candL1MuShower->clear();
1239 m_candL1MuShower->setBXRange(m_bxFirst_, m_bxLast_);
1244 m_candL1EG->clear();
1245 m_candL1Tau->clear();
1246 m_candL1Jet->clear();
1247 m_candL1EtSum->clear();
1248 m_candL1EtSumZdc->clear();
1249 m_cicadaScore = 0.0;
1251 m_candL1EG->setBXRange(m_bxFirst_, m_bxLast_);
1252 m_candL1Tau->setBXRange(m_bxFirst_, m_bxLast_);
1253 m_candL1Jet->setBXRange(m_bxFirst_, m_bxLast_);
1254 m_candL1EtSum->setBXRange(m_bxFirst_, m_bxLast_);
1255 m_candL1EtSumZdc->setBXRange(m_bxFirst_, m_bxLast_);
1259 m_candL1External->clear();
1260 m_candL1External->setBXRange(m_bxFirst_, m_bxLast_);
1265 LogTrace(
"L1TGlobal") <<
"\nl1t::L1GlobalTrigger: uGMT data received for BxInEvent = " << iBxInEvent;
1267 int nrL1Mu = m_candL1Mu->size(iBxInEvent);
1268 LogTrace(
"L1TGlobal") <<
"Number of GMT muons = " << nrL1Mu <<
"\n";
1273 std::vector<double>
const& prescaleFactorsAlgoTrig) {
1274 std::vector<PrescaleCounter>
out;
1275 out.reserve(prescaleFactorsAlgoTrig.size());
1276 for (
size_t iAlgo = 0; iAlgo < prescaleFactorsAlgoTrig.size(); ++iAlgo) {
1277 out.emplace_back(prescaleFactorsAlgoTrig[iAlgo]);
1284 std::vector<double>
const& prescaleFactorsAlgoTrig,
edm::Event const&
iEvent) {
1288 std::srand(
iEvent.id().run());
1289 std::srand(std::rand() +
iEvent.id().luminosityBlock());
1290 std::srand(std::rand() +
iEvent.id().event());
1291 int const semirandom = std::rand();
1293 std::vector<PrescaleCounter>
out;
1294 out.reserve(prescaleFactorsAlgoTrig.size());
1296 for (
size_t iAlgo = 0; iAlgo < prescaleFactorsAlgoTrig.size(); ++iAlgo) {
1297 out.emplace_back(prescaleFactorsAlgoTrig[iAlgo]);
1301 auto& prescaleCounter =
out.back();
1302 if (prescaleCounter.prescale_count > 0) {
1303 prescaleCounter.trigger_counter = semirandom % prescaleCounter.prescale_count;
1312 trigger_counter += m_singlestep;
1314 if (prescale_count == 0
or trigger_counter < prescale_count)
1317 trigger_counter -= prescale_count;
void setAlgoBitNumber(int algoBitNumberValue)
void print(std::ostream &myCout) const override
print condition
const int cond0Index() const
get / set the index of the two sub-conditions in the cor* vector from menu
void evaluateConditionStoreResult(const int bxEval)
call evaluateCondition and save last result
std::vector< l1t::GlobalObject > L1TObjectTypeInCond
void swapOperandTokenVector(std::vector< GlobalLogicParser::OperandToken > &operandTokenVectorValue)
void print(std::ostream &myCout) const override
print condition
void print(std::ostream &myCout) const override
print condition
void print(std::ostream &myCout) const override
print condition
static std::vector< PrescaleCounter > prescaleCountersWithSemirandomInitialCounter(std::vector< double > const &prescaleFactorsAlgoTrig, edm::Event const &iEvent)
void setVerbosity(const int verbosity)
const int cond1Index() const
virtual std::string getScalesName() const
void fillAlgRecord(int iBxInEvent, std::unique_ptr< GlobalAlgBlkBxCollection > &uGtAlgRecord, int prescaleSet, int menuUUID, int firmwareUUID)
Fill the Daq Records.
unsigned long long m_l1MuTriggerScalesCacheID
const l1t::GtConditionCategory cond1Category() const
void runFDL(const edm::Event &iEvent, const int iBxInEvent, const int totalBxInEvent, const unsigned int numberPhysTriggers, const std::vector< double > &prescaleFactorsAlgoTrig, const std::vector< unsigned int > &triggerMaskAlgoTrig, const std::vector< int > &triggerMaskVetoAlgoTrig, const bool algorithmTriggersUnprescaled, const bool algorithmTriggersUnmasked)
run the uGT FDL (Apply Prescales and Veto)
const int cond0Index() const
get / set the index of the two sub-conditions in the cor* vector from menu
void print(std::ostream &myCout) const
print the full object map
const l1t::GtConditionCategory cond1Category() const
void swapObjectTypeVector(std::vector< L1TObjectTypeInCond > &objectTypeVectorValue)
void swapCombinationVector(std::vector< CombinationsInCond > &combinationVectorValue)
ConditionEvaluationMap::iterator ItEvalMap
void printGmtData(const int iBxInEvent) const
print received Muon dataWord
void print(std::ostream &myCout) const
unsigned long long m_l1GtMenuCacheID
void print(std::ostream &myCout) const override
print condition
static std::vector< PrescaleCounter > prescaleCounters(std::vector< double > const &prescaleFactorsAlgoTrig)
const l1t::GtConditionCategory cond2Category() const
const int cond1Index() const
std::bitset< GlobalAlgBlk::maxPhysicsTriggers > m_gtlDecisionWord
ConditionMap::const_iterator CItCond
iterators through map containing the conditions
GtConditionCategory
condition categories
const l1t::GtConditionCategory cond0Category() const
get / set the category of the thre sub-conditions
void receiveCaloObjectData(const edm::Event &, const edm::EDGetTokenT< BXVector< l1t::EGamma >> &, const edm::EDGetTokenT< BXVector< l1t::Tau >> &, const edm::EDGetTokenT< BXVector< l1t::Jet >> &, const edm::EDGetTokenT< BXVector< l1t::EtSum >> &, const edm::EDGetTokenT< BXVector< l1t::EtSum >> &, const edm::EDGetTokenT< BXVector< float >> &, const bool receiveEG, const int nrL1EG, const bool receiveTau, const int nrL1Tau, const bool receiveJet, const int nrL1Jet, const bool receiveEtSums, const bool receiveEtSumsZdc, const bool receiveCICADA)
receive data from Global Muon Trigger
const l1t::GtConditionCategory cond0Category() const
get / set the category of the two sub-conditions
unsigned int m_boardEventCount
AlgorithmMap::const_iterator CItAlgo
iterators through map containing the algorithms
void print(std::ostream &myCout) const override
print condition
void reset()
reset the content of a GlobalAlgBlk
AXOL1TLScore m_uGtAXOScore
void print(std::ostream &myCout) const override
print condition
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
void runGTL(const edm::Event &iEvent, const edm::EventSetup &evSetup, const TriggerMenu *m_l1GtMenu, const bool produceL1GtObjectMapRecord, const int iBxInEvent, std::unique_ptr< GlobalObjectMapRecord > >ObjectMapRecord, const unsigned int numberPhysTriggers, const int nrL1Mu, const int nrL1MuShower, const int nrL1EG, const int nrL1Tau, const int nrL1Jet)
run the uGT GTL (Conditions and Algorithms)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
unsigned long long m_l1CaloGeometryCacheID
const l1t::GtConditionCategory cond1Category() const
void setAlgoGtlResult(bool algoGtlResultValue)
const int cond2Index() const
void print(std::ostream &myCout) const override
print condition
std::vector< CombinationsInCond > & gtAlgoCombinationVector()
std::vector< std::vector< PrescaleCounter > > m_prescaleCounterAlgoTrig
void setScales(const GlobalScales *)
void evaluateAlgorithm(const int chipNumber, const std::vector< ConditionEvaluationMap > &)
evaluate an algorithm
void receiveExternalData(const edm::Event &, const edm::EDGetTokenT< BXVector< GlobalExtBlk >> &, const bool receiveExt)
bool gtAlgoResult() const
get / set the result of the algorithm
const int cond2Index() const
void setAlgoName(const std::string &algoNameValue)
const int cond1Index() const
void print(std::ostream &myCout) const override
print condition
void setScales(const GlobalScales *)
std::vector< GlobalLogicParser::OperandToken > & operandTokenVector()
void setScales(const GlobalScales *)
const int cond0Index() const
get / set the index of the three subconditions in the cor* vector from menu
void init(const int numberPhysTriggers, const int nrL1Mu, const int nrL1MuShower, const int nrL1EG, const int nrL1Tau, const int nrL1Jet, int bxFirst, int bxLast)
initialize the class (mainly reserve)
void print(std::ostream &myCout) const override
print condition
std::unordered_map< std::string, ConditionEvaluation * > ConditionEvaluationMap
copy constructor
const l1t::GtConditionCategory cond0Category() const
get / set the category of the three subconditions
Log< level::Warning, false > LogWarning
std::bitset< GlobalAlgBlk::maxPhysicsTriggers > m_gtlAlgorithmOR
std::map< std::string, GlobalAlgorithm > AlgorithmMap
map containing the algorithms
const l1t::GtConditionCategory cond2Category() const
void receiveMuonShowerObjectData(const edm::Event &, const edm::EDGetTokenT< BXVector< l1t::MuonShower >> &, const bool receiveMuShower, const int nrL1MuShower)
void receiveMuonObjectData(const edm::Event &, const edm::EDGetTokenT< BXVector< l1t::Muon >> &, const bool receiveMu, const int nrL1Mu)
void print(std::ostream &myCout) const override
print condition
void fillAXOScore(int iBxInEvent, std::unique_ptr< AXOL1TLScoreBxCollection > &AxoScoreRecord)