79 m_l1UseL1TriggerObjectMaps(parSet.getParameter<bool> (
80 "L1UseL1TriggerObjectMaps")),
83 m_l1NrBxInEvent(parSet.getParameter<int> (
87 m_l1TechTriggerSeeding(parSet.getParameter<bool> (
88 "L1TechTriggerSeeding")),
91 m_l1UseAliasesForSeeding(parSet.getParameter<bool> (
92 "L1UseAliasesForSeeding")),
95 m_l1SeedsLogicalExpression(parSet.getParameter<std::
string> (
96 "L1SeedsLogicalExpression")),
99 m_l1GtReadoutRecordTag(parSet.getParameter<edm::InputTag> (
100 "L1GtReadoutRecordTag")),
103 m_l1GtObjectMapTag(parSet.getParameter<edm::InputTag> (
104 "L1GtObjectMapTag")),
107 m_l1CollectionsTag(parSet.getParameter<edm::InputTag> (
108 "L1CollectionsTag")),
111 m_l1MuonCollectionTag(parSet.getParameter<edm::InputTag> (
112 "L1MuonCollectionTag")),
115 m_l1MuonTag(edm::InputTag(m_l1MuonCollectionTag.
label())),
116 m_l1ExtraTag(edm::InputTag(m_l1CollectionsTag.
label())),
117 m_l1IsoEGTag(edm::InputTag(m_l1CollectionsTag.
label(),
"Isolated")),
118 m_l1NoIsoEGTag(edm::InputTag(m_l1CollectionsTag.
label(),
119 "NonIsolated")), m_l1CenJetTag(edm::InputTag(
120 m_l1CollectionsTag.
label(),
"Central")), m_l1ForJetTag(
121 edm::InputTag(m_l1CollectionsTag.
label(),
"Forward")),
122 m_l1TauJetTag(edm::InputTag(m_l1CollectionsTag.
label(),
"Tau")),
123 m_l1EtMissMET(edm::InputTag(m_l1CollectionsTag.
label(),
"MET")),
124 m_l1EtMissMHT(edm::InputTag(m_l1CollectionsTag.
label(),
"MHT")),
125 m_l1GlobalDecision(
false),
153 <<
"L1 Seeding using L1 trigger object maps: "
155 <<
" if false: seeding with L1Extra\n"
156 <<
"Number of BxInEvent when seeding with L1Extra: "
158 <<
" aka w/o object maps\n " <<
"\n"
159 <<
"L1 Seeding via Technical Triggers: "
161 <<
"L1 Seeding uses algorithm aliases: "
163 <<
"L1 Seeds Logical Expression: " <<
"\n "
165 <<
"Input tag for L1 GT DAQ record: "
167 <<
"Input tag for L1 GT object map record: "
169 <<
"Input tag for L1 extra collections: "
171 <<
"Input tag for L1 muon collections: "
214 if (!gtReadoutRecord.
isValid()) {
216 <<
"\nWarning: L1GlobalTriggerReadoutRecord with input tag "
218 <<
"\nrequested in configuration, but not found in the event."
224 boost::uint16_t gtFinalOR = gtReadoutRecord->finalOR();
225 int physicsDaqPartition = 0;
227 static_cast<bool> (gtFinalOR & (1 << physicsDaqPartition));
251 unsigned long long l1GtTmTechCacheID = evSetup.
get<
268 const std::vector<bool>& gtTechTrigWord =
269 gtReadoutRecord->technicalTriggerWord();
271 physicsDaqPartition);
289 unsigned long long l1GtMenuCacheID =
301 const AlgorithmMap& algorithmMap = l1GtMenu->gtAlgorithmMap();
302 const AlgorithmMap& algorithmAliasMap = l1GtMenu->gtAlgorithmAliasMap();
304 LogTrace(
"HLTLevel1GTSeed") <<
"\n L1 trigger menu "
305 << l1GtMenu->gtTriggerMenuInterface()
306 <<
"\n Number of algorithm names: "
307 << (algorithmMap.size())
308 <<
"\n Number of algorithm aliases: "
309 << (algorithmAliasMap.size()) <<
"\n" << std::endl;
322 unsigned long long l1GtTmAlgoCacheID = evSetup.
get<
340 gtReadoutRecordPtr, physicsDaqPartition))) {
364 CItCond itCond = conditionMap.find(cndName);
365 if (itCond != conditionMap.end())
366 return (&((itCond->second)->objectType()));
369 throw cms::Exception(
"FailModule") <<
"\nCondition " << cndName <<
" not found in the condition map" <<
" for chip number " << chipNr;
377 std::vector<L1GtLogicParser::OperandToken>& algOpTokenVector =
390 for (
size_t i = 0;
i < algOpTokenVector.size(); ++
i) {
392 CItAlgo itAlgo = algorithmMap.find((algOpTokenVector[
i]).tokenName);
393 if (itAlgo != algorithmMap.end()) {
395 int bitNr = (itAlgo->second).algoBitNumber();
396 int chipNr = (itAlgo->second).algoChipNumber();
398 (algOpTokenVector[
i]).tokenNumber = bitNr;
402 if (jSeed < l1AlgoSeedsSize) {
409 == (algOpTokenVector[
i]).tokenName) {
413 const std::vector<L1GtLogicParser::TokenRPN>& aRpnVector =
414 (itAlgo->second).algoRpnVector();
415 size_t aRpnVectorSize = aRpnVector.size();
420 std::vector<const std::vector<L1GtObject>*> tmpObjTypeVec;
421 tmpObjTypeVec.reserve(aRpnVectorSize);
423 for (
size_t opI = 0; opI < aRpnVectorSize; ++opI) {
427 if (!cName.empty()) {
429 tmpObjTypeVec.push_back(
446 << (algOpTokenVector[
i]).tokenName
447 <<
", requested as seed by a HLT path, not found in the L1 trigger menu\n "
449 <<
"\nIncompatible L1 and HLT menus.\n" << std::endl;
466 const std::vector<unsigned int>& triggerMask,
467 const int physicsDaqPartition) {
469 std::vector<L1GtLogicParser::OperandToken>& algOpTokenVector =
472 for (
size_t i = 0;
i < algOpTokenVector.size(); ++
i) {
473 int iBit = (algOpTokenVector[
i]).tokenNumber;
474 bool iResult = gtWord.at(iBit);
476 int triggerMaskBit = triggerMask[iBit] & (1 << physicsDaqPartition);
483 if (triggerMaskBit) {
491 (algOpTokenVector[
i]).tokenResult = iResult;
497 bool iResult = gtWord.at(iBit);
499 int triggerMaskBit = triggerMask[iBit] & (1 << physicsDaqPartition);
506 if (triggerMaskBit) {
519 bool newMenu =
false;
529 std::vector<L1GtLogicParser::OperandToken>& algOpTokenVector =
532 for (
size_t i = 0;
i < algOpTokenVector.size(); ++
i) {
534 std::string bitString = (algOpTokenVector[
i]).tokenName;
535 std::istringstream bitStream(bitString);
538 if ((bitStream >> bitInt).
fail()) {
541 <<
"\nL1 Seeds Logical Expression: = '"
543 <<
"\n Conversion to integer failed for " << bitString
547 (algOpTokenVector[
i]).tokenNumber = bitInt;
554 std::istringstream bitStream(bitString);
557 if ((bitStream >> bitInt).
fail()) {
560 <<
"\nL1 Seeds Logical Expression: = '"
562 <<
"\n Conversion to integer failed for " << bitString
577 <<
"\n\nupdateAlgoLogicParser: seeding via technical trigger"
578 <<
"\n update event quantities." << std::endl;
584 <<
"\n\nupdateAlgoLogicParser: L1 trigger menu changed to "
588 <<
"\n\nupdateAlgoLogicParser: L1 trigger menu unchanged ("
590 <<
")\n update event quantities." << std::endl;
594 std::vector<L1GtLogicParser::OperandToken>& algOpTokenVector =
598 <<
"\n\nupdateAlgoLogicParser: algOpTokenVector.size() = "
599 << algOpTokenVector.size() << std::endl;
601 for (
size_t i = 0;
i < algOpTokenVector.size(); ++
i) {
603 LogTrace(
"HLTLevel1GTSeed") <<
" " << std::setw(5)
604 << (algOpTokenVector[
i]).tokenNumber <<
"\t" << std::setw(25)
605 << (algOpTokenVector[
i]).tokenName <<
"\t"
606 << (algOpTokenVector[
i]).tokenResult << std::endl;
609 LogTrace(
"HLTLevel1GTSeed") << std::endl;
612 <<
"\nupdateAlgoLogicParser: m_l1AlgoSeeds.size() = "
617 LogTrace(
"HLTLevel1GTSeed") <<
" " << std::setw(5)
623 LogTrace(
"HLTLevel1GTSeed") << std::endl;
630 <<
"\nupdateAlgoLogicParser: m_l1AlgoSeedsRpn.size() = "
635 LogTrace(
"HLTLevel1GTSeed") <<
" Rpn vector size: "
640 LogTrace(
"HLTLevel1GTSeed") <<
" ( "
647 LogTrace(
"HLTLevel1GTSeed") << std::endl;
649 LogTrace(
"HLTLevel1GTSeed") <<
"\nupdateAlgoLogicParser: "
650 <<
"algorithms in seed expression: m_l1AlgoSeedsObjType.size() = "
656 <<
" Conditions for an algorithm: vector size: "
662 <<
" Condition object type vector: size: "
668 LogTrace(
"HLTLevel1GTSeed") <<
" " << obj <<
" ";
672 LogTrace(
"HLTLevel1GTSeed") << std::endl;
677 LogTrace(
"HLTLevel1GTSeed") << std::endl;
686 const int physicsDaqPartition) {
690 const std::vector<bool>& gtDecisionWord = gtReadoutRecordPtr->
decisionWord();
698 std::ostringstream myCoutStream;
702 << myCoutStream.str()
703 <<
"\nHLTLevel1GTSeed::hltFilter "
705 <<
"\n Result for logical expression: " << seedsResult <<
"\n"
718 std::list<int> listMuon;
720 std::list<int> listIsoEG;
721 std::list<int> listNoIsoEG;
723 std::list<int> listCenJet;
724 std::list<int> listForJet;
725 std::list<int> listTauJet;
727 std::list<int> listETM;
728 std::list<int> listETT;
729 std::list<int> listHTT;
730 std::list<int> listHTM;
732 std::list<int> listJetCounts;
738 if (!gtObjectMapRecord.
isValid()) {
740 <<
"\nWarning: L1GlobalTriggerObjectMapRecord with input tag "
742 <<
"\nrequested in configuration, but not found in the event." << std::endl;
755 for (std::vector<L1GtLogicParser::OperandToken>::const_iterator
761 int algBit = (*itSeed).tokenNumber;
763 bool algResult = (*itSeed).tokenResult;
766 <<
"\nHLTLevel1GTSeed::hltFilter "
767 <<
"\n Algorithm " << algName <<
" with bit number " << algBit
768 <<
" in the object map seed list"
769 <<
"\n Algorithm result = " << algResult <<
"\n"
782 <<
"\nWarning: L1GlobalTriggerObjectMap for algorithm " << algName
783 <<
" (bit number " << algBit <<
") does not exist.\nReturn false.\n"
788 const std::vector<L1GtLogicParser::OperandToken>& opTokenVecObjMap =
791 const std::vector<L1GtLogicParser::TokenRPN>& algoSeedsRpn =
794 const std::vector<const std::vector<L1GtObject>*>& algoSeedsObjTypeVec =
801 std::vector<L1GtLogicParser::OperandToken> condSeeds =
807 <<
"\n HLTLevel1GTSeed::hltFilter "
808 <<
"\n condSeeds.size() = "
812 for (
size_t i = 0;
i < condSeeds.size(); ++
i) {
815 <<
" " << std::setw(5) << (condSeeds[
i]).tokenNumber <<
"\t"
816 << std::setw(25) << (condSeeds[
i]).tokenName <<
"\t"
817 << (condSeeds[
i]).tokenResult
825 for (std::vector<L1GtLogicParser::OperandToken>::const_iterator
826 itCond = condSeeds.begin(); itCond != condSeeds.end(); itCond++) {
829 int cndNumber = (*itCond).tokenNumber;
830 bool cndResult = (*itCond).tokenResult;
832 const std::vector<L1GtObject>* cndObjTypeVec = algoSeedsObjTypeVec.at(cndNumber);
849 for (std::vector<SingleCombInCond>::const_iterator
850 itComb = (*cndComb).begin(); itComb != (*cndComb).end(); itComb++) {
854 for (SingleCombInCond::const_iterator
855 itObject = (*itComb).begin(); itObject != (*itComb).end(); itObject++) {
858 const L1GtObject objTypeVal = (*cndObjTypeVec).at(iObj);
866 switch (objTypeVal) {
868 listMuon.push_back(*itObject);
873 listNoIsoEG.push_back(*itObject);
878 listIsoEG.push_back(*itObject);
883 listCenJet.push_back(*itObject);
888 listForJet.push_back(*itObject);
893 listTauJet.push_back(*itObject);
898 listETM.push_back(*itObject);
904 listETT.push_back(*itObject);
910 listHTT.push_back(*itObject);
916 listHTM.push_back(*itObject);
922 listJetCounts.push_back(*itObject);
930 <<
"\n HLTLevel1GTSeed::hltFilter "
931 <<
"\n Unknown object of type " << objTypeVal
932 <<
" and index " << (*itObject) <<
" in the seed list."
957 listNoIsoEG.unique();
980 listJetCounts.sort();
981 listJetCounts.unique();
988 if (!listMuon.empty()) {
995 <<
"\nWarning: L1MuonParticleCollection with input tag " <<
m_l1MuonTag
996 <<
"\nrequested in configuration, but not found in the event."
997 <<
"\nNo muon added to filterproduct." << std::endl;
1001 for (std::list<int>::const_iterator itObj = listMuon.begin(); itObj != listMuon.end(); ++itObj) {
1012 if (!listIsoEG.empty()) {
1018 <<
"\nWarning: L1EmParticleCollection with input tag " <<
m_l1IsoEGTag
1019 <<
"\nrequested in configuration, but not found in the event."
1020 <<
"\nNo IsoEG added to filterproduct." << std::endl;
1023 for (std::list<int>::const_iterator itObj = listIsoEG.begin(); itObj != listIsoEG.end(); ++itObj) {
1033 if (!listNoIsoEG.empty()) {
1039 <<
"\nWarning: L1EmParticleCollection with input tag " <<
m_l1NoIsoEGTag
1040 <<
"\nrequested in configuration, but not found in the event."
1041 <<
"\nNo NoIsoEG added to filterproduct." << std::endl;
1044 for (std::list<int>::const_iterator itObj = listNoIsoEG.begin(); itObj
1045 != listNoIsoEG.end(); ++itObj) {
1048 l1NoIsoEG, *itObj));
1055 if (!listCenJet.empty()) {
1061 <<
"\nWarning: L1JetParticleCollection with input tag " <<
m_l1CenJetTag
1062 <<
"\nrequested in configuration, but not found in the event."
1063 <<
"\nNo CenJet added to filterproduct." << std::endl;
1066 for (std::list<int>::const_iterator itObj = listCenJet.begin(); itObj
1067 != listCenJet.end(); ++itObj) {
1077 if (!listForJet.empty()) {
1083 <<
"\nWarning: L1JetParticleCollection with input tag " <<
m_l1ForJetTag
1084 <<
"\nrequested in configuration, but not found in the event."
1085 <<
"\nNo ForJet added to filterproduct." << std::endl;
1088 for (std::list<int>::const_iterator itObj = listForJet.begin(); itObj
1089 != listForJet.end(); ++itObj) {
1099 if (!listTauJet.empty()) {
1105 <<
"\nWarning: L1JetParticleCollection with input tag " <<
m_l1TauJetTag
1106 <<
"\nrequested in configuration, but not found in the event."
1107 <<
"\nNo TauJet added to filterproduct." << std::endl;
1110 for (std::list<int>::const_iterator itObj = listTauJet.begin(); itObj
1111 != listTauJet.end(); ++itObj) {
1121 if (!listETM.empty()) {
1125 if (!l1EnergySums.
isValid()) {
1127 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMET
1128 <<
"\nrequested in configuration, but not found in the event."
1129 <<
"\nNo ETM added to filterproduct." << std::endl;
1130 }
else if (l1EnergySums->size() == 0) {
1132 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMET
1133 <<
"\nfound in the event but with 0 size." <<
"\nNo ETM added to filterproduct."
1138 for (std::list<int>::const_iterator itObj = listETM.begin(); itObj != listETM.end(); ++itObj) {
1141 l1EnergySums, *itObj));
1149 if (!listETT.empty()) {
1153 if (!l1EnergySums.
isValid()) {
1155 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMET
1156 <<
"\nrequested in configuration, but not found in the event."
1157 <<
"\nNo ETT added to filterproduct." << std::endl;
1158 }
else if (l1EnergySums->size() == 0) {
1160 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMET
1161 <<
"\nfound in the event but with 0 size." <<
"\nNo ETT added to filterproduct."
1166 for (std::list<int>::const_iterator itObj = listETT.begin(); itObj != listETT.end(); ++itObj) {
1169 l1EnergySums, *itObj));
1177 if (!listHTT.empty()) {
1181 if (!l1EnergySums.
isValid()) {
1183 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMHT
1184 <<
"\nrequested in configuration, but not found in the event."
1185 <<
"\nNo HTT added to filterproduct." << std::endl;
1187 }
else if (l1EnergySums->size() == 0) {
1189 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMHT
1190 <<
"\nfound in the event but with 0 size." <<
"\nNo HTT added to filterproduct."
1195 for (std::list<int>::const_iterator itObj = listHTT.begin(); itObj != listHTT.end(); ++itObj) {
1198 l1EnergySums, *itObj));
1205 if (!listHTM.empty()) {
1209 if (!l1EnergySums.
isValid()) {
1211 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMHT
1212 <<
"\nrequested in configuration, but not found in the event."
1213 <<
"\nNo HTM added to filterproduct." << std::endl;
1215 }
else if (l1EnergySums->size() == 0) {
1217 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMHT
1218 <<
"\nfound in the event but with 0 size." <<
"\nNo HTM added to filterproduct."
1223 for (std::list<int>::const_iterator itObj = listHTM.begin(); itObj != listHTM.end(); ++itObj) {
1226 l1EnergySums, *itObj));
1288 bool includeMuon =
true;
1290 bool includeIsoEG =
true;
1291 bool includeNoIsoEG =
true;
1293 bool includeCenJet =
true;
1294 bool includeForJet =
true;
1295 bool includeTauJet =
true;
1297 bool includeETM =
true;
1298 bool includeETT =
true;
1299 bool includeHTT =
true;
1300 bool includeHTM =
true;
1302 bool includeJetCounts =
true;
1305 bool objectsInFilter =
false;
1310 for (std::vector<L1GtLogicParser::OperandToken>::const_iterator itSeed =
1316 int algBit = (*itSeed).tokenNumber;
1318 bool algResult = (*itSeed).tokenResult;
1320 LogTrace(
"HLTLevel1GTSeed") <<
"\nHLTLevel1GTSeed::hltFilter "
1321 <<
"\n Algorithm " << algName <<
" with bit number " << algBit
1322 <<
" in the object map seed list" <<
"\n Algorithm result = "
1323 << algResult << std::endl;
1325 const std::vector<const std::vector<L1GtObject>*>& algoSeedsObjTypeVec =
1333 for (std::vector<
const std::vector<L1GtObject>*>::const_iterator itVec =
1334 algoSeedsObjTypeVec.begin(); itVec != algoSeedsObjTypeVec.end(); ++itVec) {
1336 const std::vector<L1GtObject>* condObj = *itVec;
1337 for (std::vector<L1GtObject>::const_iterator itObj =
1338 (*condObj).begin(); itObj != (*condObj).end(); ++itObj) {
1341 <<
" Object type in conditions from this algorithm = "
1342 << (*itObj) << std::endl;
1353 <<
"\nWarning: L1MuonParticleCollection with input tag "
1355 <<
"\nrequested in configuration, but not found in the event."
1356 <<
"\nNo muon added to filterproduct."
1361 for (l1extra::L1MuonParticleCollection::const_iterator
1362 objIter = l1Muon->begin(); objIter
1363 != l1Muon->end(); ++objIter) {
1367 int bxNr = objIter->bx();
1368 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1370 objectsInFilter =
true;
1379 includeMuon =
false;
1391 <<
"\nWarning: L1EmParticleCollection with input tag "
1393 <<
"\nrequested in configuration, but not found in the event."
1394 <<
"\nNo IsoEG added to filterproduct."
1399 for (l1extra::L1EmParticleCollection::const_iterator
1400 objIter = l1IsoEG->begin(); objIter
1401 != l1IsoEG->end(); ++objIter) {
1405 int bxNr = objIter->bx();
1406 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1408 objectsInFilter =
true;
1417 includeIsoEG =
false;
1423 if (includeNoIsoEG) {
1429 <<
"\nWarning: L1EmParticleCollection with input tag "
1431 <<
"\nrequested in configuration, but not found in the event."
1432 <<
"\nNo NoIsoEG added to filterproduct."
1437 for (l1extra::L1EmParticleCollection::const_iterator
1438 objIter = l1NoIsoEG->begin(); objIter
1439 != l1NoIsoEG->end(); ++objIter) {
1443 int bxNr = objIter->bx();
1444 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1446 objectsInFilter =
true;
1455 includeNoIsoEG =
false;
1461 if (includeCenJet) {
1467 <<
"\nWarning: L1JetParticleCollection with input tag "
1469 <<
"\nrequested in configuration, but not found in the event."
1470 <<
"\nNo CenJet added to filterproduct."
1475 for (l1extra::L1JetParticleCollection::const_iterator
1476 objIter = l1CenJet->begin(); objIter
1477 != l1CenJet->end(); ++objIter) {
1481 int bxNr = objIter->bx();
1482 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1484 objectsInFilter =
true;
1493 includeCenJet =
false;
1500 if (includeForJet) {
1506 <<
"\nWarning: L1JetParticleCollection with input tag "
1508 <<
"\nrequested in configuration, but not found in the event."
1509 <<
"\nNo ForJet added to filterproduct."
1514 for (l1extra::L1JetParticleCollection::const_iterator
1515 objIter = l1ForJet->begin(); objIter
1516 != l1ForJet->end(); ++objIter) {
1520 int bxNr = objIter->bx();
1521 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1523 objectsInFilter =
true;
1532 includeForJet =
false;
1539 if (includeTauJet) {
1545 <<
"\nWarning: L1JetParticleCollection with input tag "
1547 <<
"\nrequested in configuration, but not found in the event."
1548 <<
"\nNo TauJet added to filterproduct."
1553 for (l1extra::L1JetParticleCollection::const_iterator
1554 objIter = l1TauJet->begin(); objIter
1555 != l1TauJet->end(); ++objIter) {
1559 int bxNr = objIter->bx();
1560 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1562 objectsInFilter =
true;
1571 includeTauJet =
false;
1582 if (!l1EnergySums.
isValid()) {
1584 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1586 <<
"\nrequested in configuration, but not found in the event."
1587 <<
"\nNo ETM added to filterproduct."
1590 }
else if (l1EnergySums->size() == 0) {
1592 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1594 <<
"\nfound in the event but with 0 size."
1595 <<
"\nNo ETM added to filterproduct."
1600 for (l1extra::L1EtMissParticleCollection::const_iterator
1601 objIter = l1EnergySums->begin(); objIter
1602 != l1EnergySums->end(); ++objIter) {
1606 int bxNr = objIter->bx();
1607 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1609 objectsInFilter =
true;
1613 l1EnergySums, iObj));
1629 if (!l1EnergySums.
isValid()) {
1631 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1633 <<
"\nrequested in configuration, but not found in the event."
1634 <<
"\nNo ETT added to filterproduct."
1637 }
else if (l1EnergySums->size() == 0) {
1639 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1641 <<
"\nfound in the event but with 0 size."
1642 <<
"\nNo ETT added to filterproduct."
1647 for (l1extra::L1EtMissParticleCollection::const_iterator
1648 objIter = l1EnergySums->begin(); objIter
1649 != l1EnergySums->end(); ++objIter) {
1653 int bxNr = objIter->bx();
1654 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1656 objectsInFilter =
true;
1660 l1EnergySums, iObj));
1676 if (!l1EnergySums.
isValid()) {
1678 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1680 <<
"\nrequested in configuration, but not found in the event."
1681 <<
"\nNo HTT added to filterproduct."
1684 }
else if (l1EnergySums->size() == 0) {
1686 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1688 <<
"\nfound in the event but with 0 size."
1689 <<
"\nNo HTT added to filterproduct."
1694 for (l1extra::L1EtMissParticleCollection::const_iterator
1695 objIter = l1EnergySums->begin(); objIter
1696 != l1EnergySums->end(); ++objIter) {
1700 int bxNr = objIter->bx();
1701 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1703 objectsInFilter =
true;
1707 l1EnergySums, iObj));
1722 if (!l1EnergySums.
isValid()) {
1724 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1726 <<
"\nrequested in configuration, but not found in the event."
1727 <<
"\nNo HTM added to filterproduct."
1730 }
else if (l1EnergySums->size() == 0) {
1732 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1734 <<
"\nfound in the event but with 0 size."
1735 <<
"\nNo HTM added to filterproduct."
1740 for (l1extra::L1EtMissParticleCollection::const_iterator
1741 objIter = l1EnergySums->begin(); objIter
1742 != l1EnergySums->end(); ++objIter) {
1746 int bxNr = objIter->bx();
1747 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1749 objectsInFilter =
true;
1753 l1EnergySums, iObj));
1764 if (includeJetCounts) {
1774 <<
"\n HLTLevel1GTSeed::hltFilter "
1775 <<
"\n Unknown object of type " << *itObj
1776 <<
" in the seed list." << std::endl;
1785 LogTrace(
"HLTLevel1GTSeed") << std::endl;
1788 return objectsInFilter;
1795 LogDebug(
"HLTLevel1GTSeed") <<
"\nHLTLevel1GTSeed::hltFilter "
1796 <<
"\n Dump TriggerFilterObjectWithRefs\n" << std::endl;
1798 std::vector<l1extra::L1MuonParticleRef> seedsL1Mu;
1800 std::vector<l1extra::L1EmParticleRef> seedsL1IsoEG;
1801 std::vector<l1extra::L1EmParticleRef> seedsL1NoIsoEG;
1803 std::vector<l1extra::L1JetParticleRef> seedsL1CenJet;
1804 std::vector<l1extra::L1JetParticleRef> seedsL1ForJet;
1805 std::vector<l1extra::L1JetParticleRef> seedsL1TauJet;
1807 std::vector<l1extra::L1EtMissParticleRef> seedsL1ETM;
1808 std::vector<l1extra::L1EtMissParticleRef> seedsL1ETT;
1809 std::vector<l1extra::L1EtMissParticleRef> seedsL1HTT;
1810 std::vector<l1extra::L1EtMissParticleRef> seedsL1HTM;
1813 const size_t sizeSeedsL1Mu = seedsL1Mu.size();
1816 const size_t sizeSeedsL1IsoEG = seedsL1IsoEG.size();
1819 const size_t sizeSeedsL1NoIsoEG = seedsL1NoIsoEG.size();
1822 const size_t sizeSeedsL1CenJet = seedsL1CenJet.size();
1825 const size_t sizeSeedsL1ForJet = seedsL1ForJet.size();
1828 const size_t sizeSeedsL1TauJet = seedsL1TauJet.size();
1831 const size_t sizeSeedsL1ETM = seedsL1ETM.size();
1834 const size_t sizeSeedsL1ETT = seedsL1ETT.size();
1837 const size_t sizeSeedsL1HTT = seedsL1HTT.size();
1840 const size_t sizeSeedsL1HTM = seedsL1HTM.size();
1842 LogTrace(
"HLTLevel1GTSeed") <<
" L1Mu seeds: " << sizeSeedsL1Mu <<
"\n"
1843 <<
" L1IsoEG seeds: " << sizeSeedsL1IsoEG <<
"\n"
1844 <<
" L1NoIsoEG seeds: " << sizeSeedsL1NoIsoEG <<
"\n"
1845 <<
" L1CenJet seeds: " << sizeSeedsL1CenJet <<
"\n"
1846 <<
" L1ForJet seeds: " << sizeSeedsL1ForJet <<
"\n"
1847 <<
" L1TauJet seeds: " << sizeSeedsL1TauJet <<
"\n"
1848 <<
" L1ETM seeds: " << sizeSeedsL1ETM <<
"\n"
1849 <<
" L1ETT seeds: " << sizeSeedsL1ETT <<
"\n"
1850 <<
" L1HTT seeds: " << sizeSeedsL1HTT <<
"\n"
1851 <<
" L1HTM seeds: " << sizeSeedsL1HTM <<
"\n" << std::endl;
1853 for (
size_t i = 0;
i != sizeSeedsL1Mu;
i++) {
1858 LogTrace(
"HLTLevel1GTSeed") <<
"L1Mu " <<
"\t" <<
"q*PT = "
1859 << obj->charge() * obj->pt() <<
"\t" <<
"eta = " << obj->eta()
1860 <<
"\t" <<
"phi = " << obj->phi() <<
"\t" <<
"BX = "
1864 for (
size_t i = 0;
i != sizeSeedsL1IsoEG;
i++) {
1869 LogTrace(
"HLTLevel1GTSeed") <<
"L1IsoEG " <<
"\t" <<
"ET = "
1870 << obj->et() <<
"\t" <<
"eta = " << obj->eta() <<
"\t"
1871 <<
"phi = " << obj->phi() <<
"\t" <<
"BX = " << obj->bx();
1875 for (
size_t i = 0;
i != sizeSeedsL1NoIsoEG;
i++) {
1880 LogTrace(
"HLTLevel1GTSeed") <<
"L1NoIsoEG" <<
"\t" <<
"ET = "
1881 << obj->et() <<
"\t" <<
"eta = " << obj->eta() <<
"\t"
1882 <<
"phi = " << obj->phi() <<
"\t" <<
"BX = " << obj->bx();
1885 for (
size_t i = 0;
i != sizeSeedsL1CenJet;
i++) {
1890 LogTrace(
"HLTLevel1GTSeed") <<
"L1CenJet " <<
"\t" <<
"ET = "
1891 << obj->et() <<
"\t" <<
"eta = " << obj->eta() <<
"\t"
1892 <<
"phi = " << obj->phi() <<
"\t" <<
"BX = " << obj->bx();
1895 for (
size_t i = 0;
i != sizeSeedsL1ForJet;
i++) {
1900 LogTrace(
"HLTLevel1GTSeed") <<
"L1ForJet " <<
"\t" <<
"ET = "
1901 << obj->et() <<
"\t" <<
"eta = " << obj->eta() <<
"\t"
1902 <<
"phi = " << obj->phi() <<
"\t" <<
"BX = " << obj->bx();
1905 for (
size_t i = 0;
i != sizeSeedsL1TauJet;
i++) {
1910 LogTrace(
"HLTLevel1GTSeed") <<
"L1TauJet " <<
"\t" <<
"ET = "
1911 << obj->et() <<
"\t" <<
"eta = " << obj->eta() <<
"\t"
1912 <<
"phi = " << obj->phi() <<
"\t" <<
"BX = " << obj->bx();
1915 for (
size_t i = 0;
i != sizeSeedsL1ETM;
i++) {
1920 LogTrace(
"HLTLevel1GTSeed") <<
"L1ETM " <<
"\t" <<
"ET = "
1921 << obj->etMiss() <<
"\t" <<
"phi = " << obj->phi() <<
"BX = "
1925 for (
size_t i = 0;
i != sizeSeedsL1ETT;
i++) {
1930 LogTrace(
"HLTLevel1GTSeed") <<
"L1ETT " <<
"\t" <<
"ET = "
1931 << obj->etTotal() <<
"\t" <<
"BX = " << obj->bx();
1934 for (
size_t i = 0;
i != sizeSeedsL1HTT;
i++) {
1939 LogTrace(
"HLTLevel1GTSeed") <<
"L1HTT " <<
"\t" <<
"ET = "
1940 << obj->etTotal() <<
"\t" <<
"BX = " << obj->bx();
1943 for (
size_t i = 0;
i != sizeSeedsL1HTM;
i++) {
1948 LogTrace(
"HLTLevel1GTSeed") <<
"L1HTM " <<
"\t" <<
"ET = "
1949 << obj->etMiss() <<
"\t" <<
"phi = " << obj->phi() <<
"BX = "
1953 LogTrace(
"HLTLevel1GTSeed") <<
" \n\n" << std::endl;
std::vector< L1GtLogicParser::OperandToken > expressionSeedsOperandList()
bool m_l1UseL1TriggerObjectMaps
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
const L1GtTriggerMenu * m_l1GtMenu
trigger menu
void dumpTriggerFilterObjectWithRefs(trigger::TriggerFilterObjectWithRefs &)
detailed print of filter content
const L1GtTriggerMask * m_l1GtTmAlgo
trigger masks
edm::InputTag m_l1EtMissMHT
enum start value shifted to 81 so as to avoid clashes with PDG codes
const std::vector< L1GtLogicParser::OperandToken > & operandTokenVector() const
std::vector< L1GtLogicParser::OperandToken > m_l1AlgoSeeds
list of required algorithms for seeding
bool m_l1UseAliasesForSeeding
seeding uses algorithm aliases instead of algorithm names, if value is "true"
void printGtDecision(std::ostream &myCout, int bxInEventValue) const
print global decision and algorithm decision word
bool seedsL1Extra(edm::Event &, trigger::TriggerFilterObjectWithRefs &)
edm::InputTag m_l1ExtraTag
std::vector< unsigned int > m_triggerMaskTechTrig
bool m_l1TechTriggerSeeding
seeding done via technical trigger bits, if value is "true"
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
edm::InputTag m_l1GtObjectMapTag
InputTag for L1 Global Trigger object maps.
std::vector< OperandToken > & operandTokenVector()
return the vector of operand tokens
const std::vector< unsigned int > & gtTriggerMask() const
get the trigger mask
const CombinationsInCond * getCombinationsInCond(const std::string &condNameVal) const
return all the combinations passing the requirements imposed in condition condNameVal ...
std::vector< std::vector< const std::vector< L1GtObject > * > > m_l1AlgoSeedsObjType
vector of object-type vectors for each condition in the required algorithms for seeding ...
edm::InputTag m_l1CollectionsTag
InputTag for L1 particle collections (except muon)
edm::InputTag m_l1MuonCollectionTag
InputTag for L1 muon collection.
void updateAlgoLogicParser(const L1GtTriggerMenu *, const AlgorithmMap &)
std::string m_l1SeedsLogicalExpression
edm::InputTag m_l1IsoEGTag
unsigned long long m_l1GtMenuCacheID
edm::InputTag m_l1ForJetTag
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
const DecisionWord & decisionWord(int bxInEventValue) const
bool m_isDebugEnabled
cache edm::isDebugEnabled()
edm::InputTag m_l1CenJetTag
std::vector< const std::vector< L1GtLogicParser::TokenRPN > * > m_l1AlgoSeedsRpn
vector of Rpn vectors for the required algorithms for seeding
edm::InputTag m_l1NoIsoEGTag
void convertStringToBitNumber()
T const * product() const
unsigned long long m_l1GtTmTechCacheID
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
T const * product() const
unsigned long long m_l1GtTmAlgoCacheID
bool seedsL1TriggerObjectMaps(edm::Event &, trigger::TriggerFilterObjectWithRefs &, const L1GlobalTriggerReadoutRecord *, const int physicsDaqPartition)
seeding is done via L1 trigger object maps, considering the objects which fired in L1 ...
edm::InputTag m_l1GtReadoutRecordTag
InputTag for the L1 Global Trigger DAQ readout record.
bool m_l1GlobalDecision
replace string "L1GlobalDecision" with bool to speed up the "if"
const std::vector< L1GtObject > * objectTypeVec(const int chipNumber, const std::string &cndName)
get the vector of object types for a condition cndName on the GTL chip chipNumber ...
std::vector< unsigned int > m_triggerMaskAlgoTrig
HLTLevel1GTSeed(const edm::ParameterSet &)
constructor
virtual ~HLTLevel1GTSeed()
destructor
edm::InputTag m_l1EtMissMET
edm::InputTag m_l1MuonTag
cached InputTags
L1GtLogicParser m_l1AlgoLogicParser
logic parser for m_l1SeedsLogicalExpression
edm::InputTag m_l1TauJetTag
std::vector< SingleCombInCond > CombinationsInCond
all the object combinations evaluated to true in the condition
tuple size
Write out results.
const L1GtTriggerMask * m_l1GtTmTech
virtual bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct)
filter the event
virtual const bool expressionResult() const