78 m_l1UseL1TriggerObjectMaps(parSet.getParameter<bool> (
79 "L1UseL1TriggerObjectMaps")),
82 m_l1NrBxInEvent(parSet.getParameter<int> (
86 m_l1TechTriggerSeeding(parSet.getParameter<bool> (
87 "L1TechTriggerSeeding")),
90 m_l1UseAliasesForSeeding(parSet.getParameter<bool> (
91 "L1UseAliasesForSeeding")),
94 m_l1SeedsLogicalExpression(parSet.getParameter<std::
string> (
95 "L1SeedsLogicalExpression")),
98 m_l1GtReadoutRecordTag(parSet.getParameter<edm::InputTag> (
99 "L1GtReadoutRecordTag")),
103 m_l1GtObjectMapTag(parSet.getParameter<edm::InputTag> (
104 "L1GtObjectMapTag")),
108 m_l1CollectionsTag(parSet.getParameter<edm::InputTag> (
109 "L1CollectionsTag")),
112 m_l1MuonCollectionTag(parSet.getParameter<edm::InputTag> (
113 "L1MuonCollectionTag")),
116 m_l1ExtraTag(edm::InputTag(m_l1CollectionsTag.
label())),
117 m_l1MuonTag(edm::InputTag(m_l1MuonCollectionTag.
label())),
119 m_l1IsoEGTag(edm::InputTag(m_l1CollectionsTag.
label(),
"Isolated")),
121 m_l1NoIsoEGTag(edm::InputTag(m_l1CollectionsTag.
label(),
"NonIsolated")),
123 m_l1CenJetTag(edm::InputTag(m_l1CollectionsTag.
label(),
"Central")),
125 m_l1ForJetTag(edm::InputTag(m_l1CollectionsTag.
label(),
"Forward")),
127 m_l1TauJetTag(edm::InputTag(m_l1CollectionsTag.
label(),
"Tau")),
129 m_l1EtMissMETTag(edm::InputTag(m_l1CollectionsTag.
label(),
"MET")),
131 m_l1EtMissMHTTag(edm::InputTag(m_l1CollectionsTag.
label(),
"MHT")),
133 m_l1GlobalDecision(
false),
161 <<
"L1 Seeding using L1 trigger object maps: "
163 <<
" if false: seeding with L1Extra\n"
164 <<
"Number of BxInEvent when seeding with L1Extra: "
166 <<
" aka w/o object maps\n " <<
"\n"
167 <<
"L1 Seeding via Technical Triggers: "
169 <<
"L1 Seeding uses algorithm aliases: "
171 <<
"L1 Seeds Logical Expression: " <<
"\n "
173 <<
"Input tag for L1 GT DAQ record: "
175 <<
"Input tag for L1 GT object map record: "
177 <<
"Input tag for L1 extra collections: "
179 <<
"Input tag for L1 muon collections: "
207 desc.
add<
bool>(
"L1UseL1TriggerObjectMaps",
true);
211 desc.
add<
int>(
"L1NrBxInEvent",3);
215 desc.
add<
bool>(
"L1TechTriggerSeeding",
false);
218 desc.
add<
bool>(
"L1UseAliasesForSeeding",
true);
249 descriptions.
add(
"hltLevel1GTSeed", desc);
281 if (!gtReadoutRecord.
isValid()) {
283 <<
"\nWarning: L1GlobalTriggerReadoutRecord with input tag "
285 <<
"\nrequested in configuration, but not found in the event."
291 boost::uint16_t gtFinalOR = gtReadoutRecord->finalOR();
292 int physicsDaqPartition = 0;
294 static_cast<bool> (gtFinalOR & (1 << physicsDaqPartition));
322 const std::vector<bool>& gtTechTrigWord = gtReadoutRecord->technicalTriggerWord();
341 unsigned long long l1GtMenuCacheID =
354 const AlgorithmMap& algorithmMap = l1GtMenu->gtAlgorithmMap();
355 const AlgorithmMap& algorithmAliasMap = l1GtMenu->gtAlgorithmAliasMap();
357 LogTrace(
"HLTLevel1GTSeed") <<
"\n L1 trigger menu "
358 << l1GtMenu->gtTriggerMenuInterface()
359 <<
"\n Number of algorithm names: "
360 << (algorithmMap.size())
361 <<
"\n Number of algorithm aliases: "
362 << (algorithmAliasMap.size()) <<
"\n" << std::endl;
395 CItCond itCond = conditionMap.find(cndName);
396 if (itCond != conditionMap.end())
397 return (&((itCond->second)->objectType()));
400 throw cms::Exception(
"FailModule") <<
"\nCondition " << cndName <<
" not found in the condition map" <<
" for chip number " << chipNr;
419 for (
size_t i = 0;
i < algOpTokenVector.size(); ++
i) {
421 CItAlgo itAlgo = algorithmMap.find((algOpTokenVector[
i]).tokenName);
422 if (itAlgo != algorithmMap.end()) {
424 int bitNr = (itAlgo->second).algoBitNumber();
425 int chipNr = (itAlgo->second).algoChipNumber();
427 (algOpTokenVector[
i]).tokenNumber = bitNr;
431 if (jSeed < l1AlgoSeedsSize) {
438 == (algOpTokenVector[
i]).tokenName) {
442 const std::vector<L1GtLogicParser::TokenRPN>& aRpnVector =
443 (itAlgo->second).algoRpnVector();
444 size_t aRpnVectorSize = aRpnVector.size();
449 std::vector<const std::vector<L1GtObject>*> tmpObjTypeVec;
450 tmpObjTypeVec.reserve(aRpnVectorSize);
452 for (
size_t opI = 0; opI < aRpnVectorSize; ++opI) {
456 if (!cName.empty()) {
458 tmpObjTypeVec.push_back(
475 << (algOpTokenVector[
i]).tokenName
476 <<
", requested as seed by a HLT path, not found in the L1 trigger menu\n "
478 <<
"\nIncompatible L1 and HLT menus.\n" << std::endl;
495 const std::vector<unsigned int>& triggerMask,
496 const int physicsDaqPartition) {
498 std::vector<L1GtLogicParser::OperandToken>& algOpTokenVector =
501 for (
size_t i = 0;
i < algOpTokenVector.size(); ++
i) {
502 int iBit = (algOpTokenVector[
i]).tokenNumber;
503 bool iResult = gtWord.at(iBit);
505 int triggerMaskBit = triggerMask[iBit] & (1 << physicsDaqPartition);
512 if (triggerMaskBit) {
520 (algOpTokenVector[
i]).tokenResult = iResult;
526 bool iResult = gtWord.at(iBit);
528 int triggerMaskBit = triggerMask[iBit] & (1 << physicsDaqPartition);
535 if (triggerMaskBit) {
548 bool newMenu =
false;
558 std::vector<L1GtLogicParser::OperandToken> & algOpTokenVector =
561 for (
size_t i = 0;
i < algOpTokenVector.size(); ++
i) {
563 std::string bitString = (algOpTokenVector[
i]).tokenName;
564 std::istringstream bitStream(bitString);
567 if ((bitStream >> bitInt).
fail()) {
570 <<
"\nL1 Seeds Logical Expression: = '"
572 <<
"\n Conversion to integer failed for " << bitString
576 (algOpTokenVector[
i]).tokenNumber = bitInt;
583 std::istringstream bitStream(bitString);
586 if ((bitStream >> bitInt).
fail()) {
589 <<
"\nL1 Seeds Logical Expression: = '"
591 <<
"\n Conversion to integer failed for " << bitString
607 <<
"\n\nupdateAlgoLogicParser: seeding via technical trigger"
608 <<
"\n update event quantities." << std::endl;
614 <<
"\n\nupdateAlgoLogicParser: L1 trigger menu changed to "
618 <<
"\n\nupdateAlgoLogicParser: L1 trigger menu unchanged ("
620 <<
")\n update event quantities." << std::endl;
624 std::vector<L1GtLogicParser::OperandToken>
const & algOpTokenVector =
628 <<
"\n\nupdateAlgoLogicParser: algOpTokenVector.size() = "
629 << algOpTokenVector.size() << std::endl;
631 for (
size_t i = 0;
i < algOpTokenVector.size(); ++
i) {
633 LogTrace(
"HLTLevel1GTSeed") <<
" " << std::setw(5)
634 << (algOpTokenVector[
i]).tokenNumber <<
"\t" << std::setw(25)
635 << (algOpTokenVector[
i]).tokenName <<
"\t"
636 << (algOpTokenVector[
i]).tokenResult << std::endl;
639 LogTrace(
"HLTLevel1GTSeed") << std::endl;
642 <<
"\nupdateAlgoLogicParser: m_l1AlgoSeeds.size() = "
647 LogTrace(
"HLTLevel1GTSeed") <<
" " << std::setw(5)
653 LogTrace(
"HLTLevel1GTSeed") << std::endl;
660 <<
"\nupdateAlgoLogicParser: m_l1AlgoSeedsRpn.size() = "
665 LogTrace(
"HLTLevel1GTSeed") <<
" Rpn vector size: "
670 LogTrace(
"HLTLevel1GTSeed") <<
" ( "
677 LogTrace(
"HLTLevel1GTSeed") << std::endl;
679 LogTrace(
"HLTLevel1GTSeed") <<
"\nupdateAlgoLogicParser: "
680 <<
"algorithms in seed expression: m_l1AlgoSeedsObjType.size() = "
686 <<
" Conditions for an algorithm: vector size: "
692 <<
" Condition object type vector: size: "
698 LogTrace(
"HLTLevel1GTSeed") <<
" " << obj <<
" ";
702 LogTrace(
"HLTLevel1GTSeed") << std::endl;
707 LogTrace(
"HLTLevel1GTSeed") << std::endl;
717 const int physicsDaqPartition) {
721 const std::vector<bool>& gtDecisionWord = gtReadoutRecordPtr->
decisionWord();
729 std::ostringstream myCoutStream;
733 << myCoutStream.str()
734 <<
"\nHLTLevel1GTSeed::hltFilter "
736 <<
"\n Result for logical expression: " << seedsResult <<
"\n"
749 std::list<int> listMuon;
751 std::list<int> listIsoEG;
752 std::list<int> listNoIsoEG;
754 std::list<int> listCenJet;
755 std::list<int> listForJet;
756 std::list<int> listTauJet;
758 std::list<int> listETM;
759 std::list<int> listETT;
760 std::list<int> listHTT;
761 std::list<int> listHTM;
763 std::list<int> listJetCounts;
769 if (!gtObjectMapRecord.
isValid()) {
771 <<
"\nWarning: L1GlobalTriggerObjectMapRecord with input tag "
773 <<
"\nrequested in configuration, but not found in the event." << std::endl;
786 for (std::vector<L1GtLogicParser::OperandToken>::const_iterator
792 int algBit = (*itSeed).tokenNumber;
794 bool algResult = (*itSeed).tokenResult;
797 <<
"\nHLTLevel1GTSeed::hltFilter "
798 <<
"\n Algorithm " << algName <<
" with bit number " << algBit
799 <<
" in the object map seed list"
800 <<
"\n Algorithm result = " << algResult <<
"\n"
813 <<
"\nWarning: L1GlobalTriggerObjectMap for algorithm " << algName
814 <<
" (bit number " << algBit <<
") does not exist.\nReturn false.\n"
819 const std::vector<L1GtLogicParser::OperandToken>& opTokenVecObjMap =
822 const std::vector<L1GtLogicParser::TokenRPN>& algoSeedsRpn =
825 const std::vector<const std::vector<L1GtObject>*>& algoSeedsObjTypeVec =
832 std::vector<L1GtLogicParser::OperandToken> condSeeds =
838 <<
"\n HLTLevel1GTSeed::hltFilter "
839 <<
"\n condSeeds.size() = "
843 for (
size_t i = 0;
i < condSeeds.size(); ++
i) {
846 <<
" " << std::setw(5) << (condSeeds[
i]).tokenNumber <<
"\t"
847 << std::setw(25) << (condSeeds[
i]).tokenName <<
"\t"
848 << (condSeeds[
i]).tokenResult
856 for (std::vector<L1GtLogicParser::OperandToken>::const_iterator
857 itCond = condSeeds.begin(); itCond != condSeeds.end(); itCond++) {
860 int cndNumber = (*itCond).tokenNumber;
861 bool cndResult = (*itCond).tokenResult;
863 const std::vector<L1GtObject>* cndObjTypeVec = algoSeedsObjTypeVec.at(cndNumber);
880 for (std::vector<SingleCombInCond>::const_iterator
881 itComb = (*cndComb).begin(); itComb != (*cndComb).end(); itComb++) {
885 for (SingleCombInCond::const_iterator
886 itObject = (*itComb).begin(); itObject != (*itComb).end(); itObject++) {
889 const L1GtObject objTypeVal = (*cndObjTypeVec).at(iObj);
897 switch (objTypeVal) {
899 listMuon.push_back(*itObject);
904 listNoIsoEG.push_back(*itObject);
909 listIsoEG.push_back(*itObject);
914 listCenJet.push_back(*itObject);
919 listForJet.push_back(*itObject);
924 listTauJet.push_back(*itObject);
929 listETM.push_back(*itObject);
935 listETT.push_back(*itObject);
941 listHTT.push_back(*itObject);
947 listHTM.push_back(*itObject);
953 listJetCounts.push_back(*itObject);
961 <<
"\n HLTLevel1GTSeed::hltFilter "
962 <<
"\n Unknown object of type " << objTypeVal
963 <<
" and index " << (*itObject) <<
" in the seed list."
988 listNoIsoEG.unique();
1011 listJetCounts.sort();
1012 listJetCounts.unique();
1019 if (!listMuon.empty()) {
1026 <<
"\nWarning: L1MuonParticleCollection with input tag " <<
m_l1MuonTag
1027 <<
"\nrequested in configuration, but not found in the event."
1028 <<
"\nNo muon added to filterproduct." << std::endl;
1032 for (std::list<int>::const_iterator itObj = listMuon.begin(); itObj != listMuon.end(); ++itObj) {
1043 if (!listIsoEG.empty()) {
1049 <<
"\nWarning: L1EmParticleCollection with input tag " <<
m_l1IsoEGTag
1050 <<
"\nrequested in configuration, but not found in the event."
1051 <<
"\nNo IsoEG added to filterproduct." << std::endl;
1054 for (std::list<int>::const_iterator itObj = listIsoEG.begin(); itObj != listIsoEG.end(); ++itObj) {
1064 if (!listNoIsoEG.empty()) {
1070 <<
"\nWarning: L1EmParticleCollection with input tag " <<
m_l1NoIsoEGTag
1071 <<
"\nrequested in configuration, but not found in the event."
1072 <<
"\nNo NoIsoEG added to filterproduct." << std::endl;
1075 for (std::list<int>::const_iterator itObj = listNoIsoEG.begin(); itObj
1076 != listNoIsoEG.end(); ++itObj) {
1079 l1NoIsoEG, *itObj));
1086 if (!listCenJet.empty()) {
1092 <<
"\nWarning: L1JetParticleCollection with input tag " <<
m_l1CenJetTag
1093 <<
"\nrequested in configuration, but not found in the event."
1094 <<
"\nNo CenJet added to filterproduct." << std::endl;
1097 for (std::list<int>::const_iterator itObj = listCenJet.begin(); itObj
1098 != listCenJet.end(); ++itObj) {
1108 if (!listForJet.empty()) {
1114 <<
"\nWarning: L1JetParticleCollection with input tag " <<
m_l1ForJetTag
1115 <<
"\nrequested in configuration, but not found in the event."
1116 <<
"\nNo ForJet added to filterproduct." << std::endl;
1119 for (std::list<int>::const_iterator itObj = listForJet.begin(); itObj
1120 != listForJet.end(); ++itObj) {
1130 if (!listTauJet.empty()) {
1136 <<
"\nWarning: L1JetParticleCollection with input tag " <<
m_l1TauJetTag
1137 <<
"\nrequested in configuration, but not found in the event."
1138 <<
"\nNo TauJet added to filterproduct." << std::endl;
1141 for (std::list<int>::const_iterator itObj = listTauJet.begin(); itObj
1142 != listTauJet.end(); ++itObj) {
1152 if (!listETM.empty()) {
1156 if (!l1EnergySums.
isValid()) {
1158 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMETTag
1159 <<
"\nrequested in configuration, but not found in the event."
1160 <<
"\nNo ETM added to filterproduct." << std::endl;
1161 }
else if (l1EnergySums->size() == 0) {
1163 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMETTag
1164 <<
"\nfound in the event but with 0 size." <<
"\nNo ETM added to filterproduct."
1169 for (std::list<int>::const_iterator itObj = listETM.begin(); itObj != listETM.end(); ++itObj) {
1172 l1EnergySums, *itObj));
1180 if (!listETT.empty()) {
1184 if (!l1EnergySums.
isValid()) {
1186 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMETTag
1187 <<
"\nrequested in configuration, but not found in the event."
1188 <<
"\nNo ETT added to filterproduct." << std::endl;
1189 }
else if (l1EnergySums->size() == 0) {
1191 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMETTag
1192 <<
"\nfound in the event but with 0 size." <<
"\nNo ETT added to filterproduct."
1197 for (std::list<int>::const_iterator itObj = listETT.begin(); itObj != listETT.end(); ++itObj) {
1200 l1EnergySums, *itObj));
1208 if (!listHTT.empty()) {
1212 if (!l1EnergySums.
isValid()) {
1214 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMHTTag
1215 <<
"\nrequested in configuration, but not found in the event."
1216 <<
"\nNo HTT added to filterproduct." << std::endl;
1218 }
else if (l1EnergySums->size() == 0) {
1220 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMHTTag
1221 <<
"\nfound in the event but with 0 size." <<
"\nNo HTT added to filterproduct."
1226 for (std::list<int>::const_iterator itObj = listHTT.begin(); itObj != listHTT.end(); ++itObj) {
1229 l1EnergySums, *itObj));
1236 if (!listHTM.empty()) {
1240 if (!l1EnergySums.
isValid()) {
1242 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMHTTag
1243 <<
"\nrequested in configuration, but not found in the event."
1244 <<
"\nNo HTM added to filterproduct." << std::endl;
1246 }
else if (l1EnergySums->size() == 0) {
1248 <<
"\nWarning: L1EtMissParticleCollection with input tag " <<
m_l1EtMissMHTTag
1249 <<
"\nfound in the event but with 0 size." <<
"\nNo HTM added to filterproduct."
1254 for (std::list<int>::const_iterator itObj = listHTM.begin(); itObj != listHTM.end(); ++itObj) {
1257 l1EnergySums, *itObj));
1319 bool includeMuon =
true;
1321 bool includeIsoEG =
true;
1322 bool includeNoIsoEG =
true;
1324 bool includeCenJet =
true;
1325 bool includeForJet =
true;
1326 bool includeTauJet =
true;
1328 bool includeETM =
true;
1329 bool includeETT =
true;
1330 bool includeHTT =
true;
1331 bool includeHTM =
true;
1333 bool includeJetCounts =
true;
1336 bool objectsInFilter =
false;
1341 for (std::vector<L1GtLogicParser::OperandToken>::const_iterator itSeed =
1347 int algBit = (*itSeed).tokenNumber;
1349 bool algResult = (*itSeed).tokenResult;
1351 LogTrace(
"HLTLevel1GTSeed") <<
"\nHLTLevel1GTSeed::hltFilter "
1352 <<
"\n Algorithm " << algName <<
" with bit number " << algBit
1353 <<
" in the object map seed list" <<
"\n Algorithm result = "
1354 << algResult << std::endl;
1356 const std::vector<const std::vector<L1GtObject>*>& algoSeedsObjTypeVec =
1364 for (std::vector<
const std::vector<L1GtObject>*>::const_iterator itVec =
1365 algoSeedsObjTypeVec.begin(); itVec != algoSeedsObjTypeVec.end(); ++itVec) {
1367 const std::vector<L1GtObject>* condObj = *itVec;
1368 for (std::vector<L1GtObject>::const_iterator itObj =
1369 (*condObj).begin(); itObj != (*condObj).end(); ++itObj) {
1372 <<
" Object type in conditions from this algorithm = "
1373 << (*itObj) << std::endl;
1384 <<
"\nWarning: L1MuonParticleCollection with input tag "
1386 <<
"\nrequested in configuration, but not found in the event."
1387 <<
"\nNo muon added to filterproduct."
1392 for (l1extra::L1MuonParticleCollection::const_iterator
1393 objIter = l1Muon->begin(); objIter
1394 != l1Muon->end(); ++objIter) {
1398 int bxNr = objIter->bx();
1399 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1401 objectsInFilter =
true;
1410 includeMuon =
false;
1422 <<
"\nWarning: L1EmParticleCollection with input tag "
1424 <<
"\nrequested in configuration, but not found in the event."
1425 <<
"\nNo IsoEG added to filterproduct."
1430 for (l1extra::L1EmParticleCollection::const_iterator
1431 objIter = l1IsoEG->begin(); objIter
1432 != l1IsoEG->end(); ++objIter) {
1436 int bxNr = objIter->bx();
1437 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1439 objectsInFilter =
true;
1448 includeIsoEG =
false;
1454 if (includeNoIsoEG) {
1460 <<
"\nWarning: L1EmParticleCollection with input tag "
1462 <<
"\nrequested in configuration, but not found in the event."
1463 <<
"\nNo NoIsoEG added to filterproduct."
1468 for (l1extra::L1EmParticleCollection::const_iterator
1469 objIter = l1NoIsoEG->begin(); objIter
1470 != l1NoIsoEG->end(); ++objIter) {
1474 int bxNr = objIter->bx();
1475 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1477 objectsInFilter =
true;
1486 includeNoIsoEG =
false;
1492 if (includeCenJet) {
1498 <<
"\nWarning: L1JetParticleCollection with input tag "
1500 <<
"\nrequested in configuration, but not found in the event."
1501 <<
"\nNo CenJet added to filterproduct."
1506 for (l1extra::L1JetParticleCollection::const_iterator
1507 objIter = l1CenJet->begin(); objIter
1508 != l1CenJet->end(); ++objIter) {
1512 int bxNr = objIter->bx();
1513 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1515 objectsInFilter =
true;
1524 includeCenJet =
false;
1531 if (includeForJet) {
1537 <<
"\nWarning: L1JetParticleCollection with input tag "
1539 <<
"\nrequested in configuration, but not found in the event."
1540 <<
"\nNo ForJet added to filterproduct."
1545 for (l1extra::L1JetParticleCollection::const_iterator
1546 objIter = l1ForJet->begin(); objIter
1547 != l1ForJet->end(); ++objIter) {
1551 int bxNr = objIter->bx();
1552 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1554 objectsInFilter =
true;
1563 includeForJet =
false;
1570 if (includeTauJet) {
1576 <<
"\nWarning: L1JetParticleCollection with input tag "
1578 <<
"\nrequested in configuration, but not found in the event."
1579 <<
"\nNo TauJet added to filterproduct."
1584 for (l1extra::L1JetParticleCollection::const_iterator
1585 objIter = l1TauJet->begin(); objIter
1586 != l1TauJet->end(); ++objIter) {
1590 int bxNr = objIter->bx();
1591 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1593 objectsInFilter =
true;
1602 includeTauJet =
false;
1613 if (!l1EnergySums.
isValid()) {
1615 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1617 <<
"\nrequested in configuration, but not found in the event."
1618 <<
"\nNo ETM added to filterproduct."
1621 }
else if (l1EnergySums->size() == 0) {
1623 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1625 <<
"\nfound in the event but with 0 size."
1626 <<
"\nNo ETM added to filterproduct."
1631 for (l1extra::L1EtMissParticleCollection::const_iterator
1632 objIter = l1EnergySums->begin(); objIter
1633 != l1EnergySums->end(); ++objIter) {
1637 int bxNr = objIter->bx();
1638 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1640 objectsInFilter =
true;
1644 l1EnergySums, iObj));
1660 if (!l1EnergySums.
isValid()) {
1662 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1664 <<
"\nrequested in configuration, but not found in the event."
1665 <<
"\nNo ETT added to filterproduct."
1668 }
else if (l1EnergySums->size() == 0) {
1670 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1672 <<
"\nfound in the event but with 0 size."
1673 <<
"\nNo ETT added to filterproduct."
1678 for (l1extra::L1EtMissParticleCollection::const_iterator
1679 objIter = l1EnergySums->begin(); objIter
1680 != l1EnergySums->end(); ++objIter) {
1684 int bxNr = objIter->bx();
1685 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1687 objectsInFilter =
true;
1691 l1EnergySums, iObj));
1707 if (!l1EnergySums.
isValid()) {
1709 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1711 <<
"\nrequested in configuration, but not found in the event."
1712 <<
"\nNo HTT added to filterproduct."
1715 }
else if (l1EnergySums->size() == 0) {
1717 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1719 <<
"\nfound in the event but with 0 size."
1720 <<
"\nNo HTT added to filterproduct."
1725 for (l1extra::L1EtMissParticleCollection::const_iterator
1726 objIter = l1EnergySums->begin(); objIter
1727 != l1EnergySums->end(); ++objIter) {
1731 int bxNr = objIter->bx();
1732 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1734 objectsInFilter =
true;
1738 l1EnergySums, iObj));
1753 if (!l1EnergySums.
isValid()) {
1755 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1757 <<
"\nrequested in configuration, but not found in the event."
1758 <<
"\nNo HTM added to filterproduct."
1761 }
else if (l1EnergySums->size() == 0) {
1763 <<
"\nWarning: L1EtMissParticleCollection with input tag "
1765 <<
"\nfound in the event but with 0 size."
1766 <<
"\nNo HTM added to filterproduct."
1771 for (l1extra::L1EtMissParticleCollection::const_iterator
1772 objIter = l1EnergySums->begin(); objIter
1773 != l1EnergySums->end(); ++objIter) {
1777 int bxNr = objIter->bx();
1778 if ((bxNr >= minBxInEvent) && (bxNr <= maxBxInEvent)) {
1780 objectsInFilter =
true;
1784 l1EnergySums, iObj));
1795 if (includeJetCounts) {
1805 <<
"\n HLTLevel1GTSeed::hltFilter "
1806 <<
"\n Unknown object of type " << *itObj
1807 <<
" in the seed list." << std::endl;
1816 LogTrace(
"HLTLevel1GTSeed") << std::endl;
1819 return objectsInFilter;
1826 LogDebug(
"HLTLevel1GTSeed") <<
"\nHLTLevel1GTSeed::hltFilter "
1827 <<
"\n Dump TriggerFilterObjectWithRefs\n" << std::endl;
1829 std::vector<l1extra::L1MuonParticleRef> seedsL1Mu;
1831 std::vector<l1extra::L1EmParticleRef> seedsL1IsoEG;
1832 std::vector<l1extra::L1EmParticleRef> seedsL1NoIsoEG;
1834 std::vector<l1extra::L1JetParticleRef> seedsL1CenJet;
1835 std::vector<l1extra::L1JetParticleRef> seedsL1ForJet;
1836 std::vector<l1extra::L1JetParticleRef> seedsL1TauJet;
1838 std::vector<l1extra::L1EtMissParticleRef> seedsL1ETM;
1839 std::vector<l1extra::L1EtMissParticleRef> seedsL1ETT;
1840 std::vector<l1extra::L1EtMissParticleRef> seedsL1HTT;
1841 std::vector<l1extra::L1EtMissParticleRef> seedsL1HTM;
1844 const size_t sizeSeedsL1Mu = seedsL1Mu.size();
1847 const size_t sizeSeedsL1IsoEG = seedsL1IsoEG.size();
1850 const size_t sizeSeedsL1NoIsoEG = seedsL1NoIsoEG.size();
1853 const size_t sizeSeedsL1CenJet = seedsL1CenJet.size();
1856 const size_t sizeSeedsL1ForJet = seedsL1ForJet.size();
1859 const size_t sizeSeedsL1TauJet = seedsL1TauJet.size();
1862 const size_t sizeSeedsL1ETM = seedsL1ETM.size();
1865 const size_t sizeSeedsL1ETT = seedsL1ETT.size();
1868 const size_t sizeSeedsL1HTT = seedsL1HTT.size();
1871 const size_t sizeSeedsL1HTM = seedsL1HTM.size();
1873 LogTrace(
"HLTLevel1GTSeed") <<
" L1Mu seeds: " << sizeSeedsL1Mu <<
"\n"
1874 <<
" L1IsoEG seeds: " << sizeSeedsL1IsoEG <<
"\n"
1875 <<
" L1NoIsoEG seeds: " << sizeSeedsL1NoIsoEG <<
"\n"
1876 <<
" L1CenJet seeds: " << sizeSeedsL1CenJet <<
"\n"
1877 <<
" L1ForJet seeds: " << sizeSeedsL1ForJet <<
"\n"
1878 <<
" L1TauJet seeds: " << sizeSeedsL1TauJet <<
"\n"
1879 <<
" L1ETM seeds: " << sizeSeedsL1ETM <<
"\n"
1880 <<
" L1ETT seeds: " << sizeSeedsL1ETT <<
"\n"
1881 <<
" L1HTT seeds: " << sizeSeedsL1HTT <<
"\n"
1882 <<
" L1HTM seeds: " << sizeSeedsL1HTM <<
"\n" << std::endl;
1884 for (
size_t i = 0;
i != sizeSeedsL1Mu;
i++) {
1889 LogTrace(
"HLTLevel1GTSeed") <<
"L1Mu " <<
"\t" <<
"q*PT = "
1890 << obj->charge() * obj->pt() <<
"\t" <<
"eta = " << obj->eta()
1891 <<
"\t" <<
"phi = " << obj->phi() <<
"\t" <<
"BX = "
1895 for (
size_t i = 0;
i != sizeSeedsL1IsoEG;
i++) {
1900 LogTrace(
"HLTLevel1GTSeed") <<
"L1IsoEG " <<
"\t" <<
"ET = "
1901 << obj->et() <<
"\t" <<
"eta = " << obj->eta() <<
"\t"
1902 <<
"phi = " << obj->phi() <<
"\t" <<
"BX = " << obj->bx();
1906 for (
size_t i = 0;
i != sizeSeedsL1NoIsoEG;
i++) {
1911 LogTrace(
"HLTLevel1GTSeed") <<
"L1NoIsoEG" <<
"\t" <<
"ET = "
1912 << obj->et() <<
"\t" <<
"eta = " << obj->eta() <<
"\t"
1913 <<
"phi = " << obj->phi() <<
"\t" <<
"BX = " << obj->bx();
1916 for (
size_t i = 0;
i != sizeSeedsL1CenJet;
i++) {
1921 LogTrace(
"HLTLevel1GTSeed") <<
"L1CenJet " <<
"\t" <<
"ET = "
1922 << obj->et() <<
"\t" <<
"eta = " << obj->eta() <<
"\t"
1923 <<
"phi = " << obj->phi() <<
"\t" <<
"BX = " << obj->bx();
1926 for (
size_t i = 0;
i != sizeSeedsL1ForJet;
i++) {
1931 LogTrace(
"HLTLevel1GTSeed") <<
"L1ForJet " <<
"\t" <<
"ET = "
1932 << obj->et() <<
"\t" <<
"eta = " << obj->eta() <<
"\t"
1933 <<
"phi = " << obj->phi() <<
"\t" <<
"BX = " << obj->bx();
1936 for (
size_t i = 0;
i != sizeSeedsL1TauJet;
i++) {
1941 LogTrace(
"HLTLevel1GTSeed") <<
"L1TauJet " <<
"\t" <<
"ET = "
1942 << obj->et() <<
"\t" <<
"eta = " << obj->eta() <<
"\t"
1943 <<
"phi = " << obj->phi() <<
"\t" <<
"BX = " << obj->bx();
1946 for (
size_t i = 0;
i != sizeSeedsL1ETM;
i++) {
1951 LogTrace(
"HLTLevel1GTSeed") <<
"L1ETM " <<
"\t" <<
"ET = "
1952 << obj->etMiss() <<
"\t" <<
"phi = " << obj->phi() <<
"BX = "
1956 for (
size_t i = 0;
i != sizeSeedsL1ETT;
i++) {
1961 LogTrace(
"HLTLevel1GTSeed") <<
"L1ETT " <<
"\t" <<
"ET = "
1962 << obj->etTotal() <<
"\t" <<
"BX = " << obj->bx();
1965 for (
size_t i = 0;
i != sizeSeedsL1HTT;
i++) {
1970 LogTrace(
"HLTLevel1GTSeed") <<
"L1HTT " <<
"\t" <<
"ET = "
1971 << obj->etTotal() <<
"\t" <<
"BX = " << obj->bx();
1974 for (
size_t i = 0;
i != sizeSeedsL1HTM;
i++) {
1979 LogTrace(
"HLTLevel1GTSeed") <<
"L1HTM " <<
"\t" <<
"ET = "
1980 << obj->etMiss() <<
"\t" <<
"phi = " << obj->phi() <<
"BX = "
1984 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:
void dumpTriggerFilterObjectWithRefs(trigger::TriggerFilterObjectWithRefs &) const
detailed print of filter content
bool getByToken(EDGetToken token, Handle< PROD > &result) const
enum start value shifted to 81 so as to avoid clashes with PDG codes
bool seedsL1Extra(edm::Event &, trigger::TriggerFilterObjectWithRefs &) const
#define DEFINE_FWK_MODULE(type)
const std::vector< L1GtLogicParser::OperandToken > & operandTokenVector() const
edm::InputTag m_l1EtMissMETTag
edm::EDGetTokenT< l1extra::L1EtMissParticleCollection > m_l1EtMissMHTToken
void debugPrint(bool) 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
edm::EDGetTokenT< l1extra::L1JetParticleCollection > m_l1ForJetToken
edm::InputTag m_l1ExtraTag
cached InputTags
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_l1EtMissMHTTag
edm::InputTag m_l1GtObjectMapTag
InputTag for L1 Global Trigger object maps.
virtual bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) override
filter the event
std::vector< OperandToken > & operandTokenVector()
return the vector of operand tokens
const std::vector< unsigned int > & gtTriggerMask() const
get the trigger mask
edm::EDGetTokenT< l1extra::L1EtMissParticleCollection > m_l1EtMissMETToken
const CombinationsInCond * getCombinationsInCond(const std::string &condNameVal) const
return all the combinations passing the requirements imposed in condition condNameVal ...
edm::EDGetTokenT< L1GlobalTriggerReadoutRecord > m_l1GtReadoutRecordToken
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
Meta InputTag for L1 particle collections (except muon)
edm::InputTag m_l1MuonCollectionTag
Meta InputTag for L1 muon collection.
edm::EDGetTokenT< l1extra::L1JetParticleCollection > m_l1CenJetToken
void updateAlgoLogicParser(const L1GtTriggerMenu *, const AlgorithmMap &)
edm::EDGetTokenT< l1extra::L1EmParticleCollection > m_l1IsoEGToken
std::string m_l1SeedsLogicalExpression
edm::InputTag m_l1IsoEGTag
unsigned long long m_l1GtMenuCacheID
ParameterDescriptionBase * add(U const &iLabel, T const &value)
edm::InputTag m_l1ForJetTag
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()
edm::EDGetTokenT< l1extra::L1JetParticleCollection > m_l1TauJetToken
edm::EDGetTokenT< L1GlobalTriggerObjectMapRecord > m_l1GtObjectMapToken
const std::vector< L1GtObject > * objectTypeVec(const int chipNumber, const std::string &cndName) const
get the vector of object types for a condition cndName on the GTL chip chipNumber ...
T const * product() const
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
T const * product() const
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"
edm::EDGetTokenT< l1extra::L1MuonParticleCollection > m_l1MuonToken
HLTLevel1GTSeed(const edm::ParameterSet &)
constructor
virtual ~HLTLevel1GTSeed()
destructor
edm::EDGetTokenT< l1extra::L1EmParticleCollection > m_l1NoIsoEGToken
bool seedsL1TriggerObjectMaps(edm::Event &, trigger::TriggerFilterObjectWithRefs &, const L1GtTriggerMask *, const L1GlobalTriggerReadoutRecord *, const int physicsDaqPartition)
seeding is done via L1 trigger object maps, considering the objects which fired in L1 ...
edm::InputTag m_l1MuonTag
L1GtLogicParser m_l1AlgoLogicParser
logic parser for m_l1SeedsLogicalExpression
volatile std::atomic< bool > shutdown_flag false
edm::InputTag m_l1TauJetTag
std::vector< SingleCombInCond > CombinationsInCond
all the object combinations evaluated to true in the condition
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
tuple size
Write out results.
L1GtTriggerMenu * m_l1GtMenu
trigger menu
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
parameter description
virtual const bool expressionResult() const