35 m_l1SeedsLogicalExpression(parSet.getParameter<
string>(
"L1SeedsLogicalExpression")),
36 m_l1GtObjectMapTag(parSet.getParameter<
edm::
InputTag>(
"L1ObjectMapInputTag")),
38 m_l1GlobalTag(parSet.getParameter<
edm::
InputTag>(
"L1GlobalInputTag")),
40 m_l1MuonCollectionsTag(parSet.getParameter<
edm::
InputTag>(
"L1MuonInputTag")),
41 m_l1MuonTag(m_l1MuonCollectionsTag),
43 m_l1MuonShowerCollectionsTag(
44 parSet.getParameter<
edm::
InputTag>(
"L1MuonShowerInputTag")),
45 m_l1MuonShowerTag(m_l1MuonShowerCollectionsTag),
47 m_l1EGammaCollectionsTag(parSet.getParameter<
edm::
InputTag>(
"L1EGammaInputTag")),
48 m_l1EGammaTag(m_l1EGammaCollectionsTag),
50 m_l1JetCollectionsTag(parSet.getParameter<
edm::
InputTag>(
"L1JetInputTag")),
51 m_l1JetTag(m_l1JetCollectionsTag),
53 m_l1TauCollectionsTag(parSet.getParameter<
edm::
InputTag>(
"L1TauInputTag")),
54 m_l1TauTag(m_l1TauCollectionsTag),
56 m_l1EtSumCollectionsTag(parSet.getParameter<
edm::
InputTag>(
"L1EtSumInputTag")),
57 m_l1EtSumTag(m_l1EtSumCollectionsTag),
59 m_l1EtSumZdcCollectionsTag(parSet.getParameter<
edm::
InputTag>(
"L1EtSumZdcInputTag")),
60 m_l1EtSumZdcTag(m_l1EtSumZdcCollectionsTag),
62 m_l1GlobalDecision(
false),
65 throw cms::Exception(
"FailModule") <<
"\nTrying to seed with an empty L1SeedsLogicalExpression.\n" << std::endl;
101 desc.add<
string>(
"L1SeedsLogicalExpression",
"");
111 descriptions.
add(
"hltL1TSeed",
desc);
156 LogTrace(
"HLTL1TSeed") <<
"\nHLTL1TSeed::hltFilter " 157 <<
"\n Dump TriggerFilterObjectWithRefs\n" 160 vector<l1t::MuonRef> seedsL1Mu;
162 const size_t sizeSeedsL1Mu = seedsL1Mu.size();
166 LogTrace(
"HLTL1TSeed") <<
"\n L1Mu seeds: " << sizeSeedsL1Mu << endl << endl;
168 for (
size_t i = 0;
i != sizeSeedsL1Mu;
i++) {
176 <<
"pt = " <<
obj->pt() <<
"\t" 177 <<
"eta = " <<
obj->eta() <<
"\t" 178 <<
"phi = " <<
obj->phi();
181 vector<l1t::MuonShowerRef> seedsL1MuShower;
183 const size_t sizeSeedsL1MuShower = seedsL1MuShower.size();
187 LogTrace(
"HLTL1TSeed") <<
"\n L1MuShower seeds: " << sizeSeedsL1MuShower << endl << endl;
189 for (
size_t i = 0;
i != sizeSeedsL1MuShower;
i++) {
192 LogTrace(
"HLTL1TSeed") <<
"\tL1MuShower " 194 <<
"pt = " <<
obj->pt() <<
"\t" 195 <<
"eta = " <<
obj->eta() <<
"\t" 196 <<
"phi = " <<
obj->phi();
199 vector<l1t::EGammaRef> seedsL1EG;
201 const size_t sizeSeedsL1EG = seedsL1EG.size();
203 LogTrace(
"HLTL1TSeed") <<
"\n L1EG seeds: " << sizeSeedsL1EG << endl << endl;
205 for (
size_t i = 0;
i != sizeSeedsL1EG;
i++) {
210 <<
"pt = " <<
obj->pt() <<
"\t" 211 <<
"eta = " <<
obj->eta() <<
"\t" 212 <<
"phi = " <<
obj->phi();
215 vector<l1t::JetRef> seedsL1Jet;
217 const size_t sizeSeedsL1Jet = seedsL1Jet.size();
219 LogTrace(
"HLTL1TSeed") <<
"\n L1Jet seeds: " << sizeSeedsL1Jet << endl << endl;
221 for (
size_t i = 0;
i != sizeSeedsL1Jet;
i++) {
224 LogTrace(
"HLTL1TSeed") <<
"\tL1Jet " 226 <<
"pt = " <<
obj->pt() <<
"\t" 227 <<
"eta = " <<
obj->eta() <<
"\t" 228 <<
"phi = " <<
obj->phi();
231 vector<l1t::TauRef> seedsL1Tau;
233 const size_t sizeSeedsL1Tau = seedsL1Tau.size();
235 LogTrace(
"HLTL1TSeed") <<
"\n L1Tau seeds: " << sizeSeedsL1Tau << endl << endl;
237 for (
size_t i = 0;
i != sizeSeedsL1Tau;
i++) {
240 LogTrace(
"HLTL1TSeed") <<
"\tL1Tau " 242 <<
"pt = " <<
obj->pt() <<
"\t" 243 <<
"eta = " <<
obj->eta() <<
"\t" 244 <<
"phi = " <<
obj->phi();
247 vector<l1t::EtSumRef> seedsL1EtSumETT;
249 const size_t sizeSeedsL1EtSumETT = seedsL1EtSumETT.size();
250 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum ETT seeds: " << sizeSeedsL1EtSumETT << endl << endl;
252 for (
size_t i = 0;
i != sizeSeedsL1EtSumETT;
i++) {
255 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum ETT" 257 <<
"pt = " <<
obj->pt() <<
"\t" 258 <<
"eta = " <<
obj->eta() <<
"\t" 259 <<
"phi = " <<
obj->phi();
262 vector<l1t::EtSumRef> seedsL1EtSumHTT;
264 const size_t sizeSeedsL1EtSumHTT = seedsL1EtSumHTT.size();
265 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum HTT seeds: " << sizeSeedsL1EtSumHTT << endl << endl;
267 for (
size_t i = 0;
i != sizeSeedsL1EtSumHTT;
i++) {
270 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum HTT" 272 <<
"pt = " <<
obj->pt() <<
"\t" 273 <<
"eta = " <<
obj->eta() <<
"\t" 274 <<
"phi = " <<
obj->phi();
277 vector<l1t::EtSumRef> seedsL1EtSumETM;
279 const size_t sizeSeedsL1EtSumETM = seedsL1EtSumETM.size();
280 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum ETM seeds: " << sizeSeedsL1EtSumETM << endl << endl;
282 for (
size_t i = 0;
i != sizeSeedsL1EtSumETM;
i++) {
285 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum ETM" 287 <<
"pt = " <<
obj->pt() <<
"\t" 288 <<
"eta = " <<
obj->eta() <<
"\t" 289 <<
"phi = " <<
obj->phi();
292 vector<l1t::EtSumRef> seedsL1EtSumETMHF;
294 const size_t sizeSeedsL1EtSumETMHF = seedsL1EtSumETMHF.size();
295 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum ETMHF seeds: " << sizeSeedsL1EtSumETMHF << endl << endl;
297 for (
size_t i = 0;
i != sizeSeedsL1EtSumETMHF;
i++) {
300 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum ETMHF" 302 <<
"pt = " <<
obj->pt() <<
"\t" 303 <<
"eta = " <<
obj->eta() <<
"\t" 304 <<
"phi = " <<
obj->phi();
307 vector<l1t::EtSumRef> seedsL1EtSumHTMHF;
309 const size_t sizeSeedsL1EtSumHTMHF = seedsL1EtSumHTMHF.size();
310 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum HTMHF seeds: " << sizeSeedsL1EtSumHTMHF << endl << endl;
312 for (
size_t i = 0;
i != sizeSeedsL1EtSumHTMHF;
i++) {
315 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum HTMHF" 317 <<
"pt = " <<
obj->pt() <<
"\t" 318 <<
"eta = " <<
obj->eta() <<
"\t" 319 <<
"phi = " <<
obj->phi();
322 vector<l1t::EtSumRef> seedsL1EtSumHTM;
324 const size_t sizeSeedsL1EtSumHTM = seedsL1EtSumHTM.size();
325 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum HTM seeds: " << sizeSeedsL1EtSumHTM << endl << endl;
327 for (
size_t i = 0;
i != sizeSeedsL1EtSumHTM;
i++) {
330 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum HTM" 332 <<
"pt = " <<
obj->pt() <<
"\t" 333 <<
"eta = " <<
obj->eta() <<
"\t" 334 <<
"phi = " <<
obj->phi();
337 vector<l1t::EtSumRef> seedsL1EtSumCentrality;
339 const size_t sizeSeedsL1EtSumCentrality = seedsL1EtSumCentrality.size();
340 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum Centrality seeds: " << sizeSeedsL1EtSumCentrality << endl << endl;
342 for (
size_t i = 0;
i != sizeSeedsL1EtSumCentrality;
i++) {
345 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum Centrality Bits: " << std::bitset<8>(
obj->hwPt())
346 <<
" (hwPt = " <<
obj->hwPt() <<
")";
349 vector<l1t::EtSumRef> seedsL1EtSumMinBiasHFP0;
351 const size_t sizeSeedsL1EtSumMinBiasHFP0 = seedsL1EtSumMinBiasHFP0.size();
352 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum MinBiasHFP0 seeds: " << sizeSeedsL1EtSumMinBiasHFP0 << endl << endl;
354 for (
size_t i = 0;
i != sizeSeedsL1EtSumMinBiasHFP0;
i++) {
357 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum MinBiasHFP0: hwPt = " <<
obj->hwPt();
360 vector<l1t::EtSumRef> seedsL1EtSumMinBiasHFM0;
362 const size_t sizeSeedsL1EtSumMinBiasHFM0 = seedsL1EtSumMinBiasHFM0.size();
363 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum MinBiasHFM0 seeds: " << sizeSeedsL1EtSumMinBiasHFM0 << endl << endl;
365 for (
size_t i = 0;
i != sizeSeedsL1EtSumMinBiasHFM0;
i++) {
368 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum MinBiasHFM0: hwPt = " <<
obj->hwPt();
371 vector<l1t::EtSumRef> seedsL1EtSumMinBiasHFP1;
373 const size_t sizeSeedsL1EtSumMinBiasHFP1 = seedsL1EtSumMinBiasHFP1.size();
374 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum MinBiasHFP1 seeds: " << sizeSeedsL1EtSumMinBiasHFP1 << endl << endl;
376 for (
size_t i = 0;
i != sizeSeedsL1EtSumMinBiasHFP1;
i++) {
379 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum MinBiasHFP1: hwPt = " <<
obj->hwPt();
382 vector<l1t::EtSumRef> seedsL1EtSumMinBiasHFM1;
384 const size_t sizeSeedsL1EtSumMinBiasHFM1 = seedsL1EtSumMinBiasHFM1.size();
385 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum MinBiasHFM1 seeds: " << sizeSeedsL1EtSumMinBiasHFM1 << endl << endl;
387 for (
size_t i = 0;
i != sizeSeedsL1EtSumMinBiasHFM1;
i++) {
390 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum MinBiasHFM1: hwPt = " <<
obj->hwPt();
393 vector<l1t::EtSumRef> seedsL1EtSumTowerCount;
395 const size_t sizeSeedsL1EtSumTowerCount = seedsL1EtSumTowerCount.size();
396 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum TowerCount seeds: " << sizeSeedsL1EtSumTowerCount << endl << endl;
398 for (
size_t i = 0;
i != sizeSeedsL1EtSumTowerCount;
i++) {
401 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum TowerCount: hwPt = " <<
obj->hwPt();
404 vector<l1t::EtSumRef> seedsL1EtSumAsymEt;
406 const size_t sizeSeedsL1EtSumAsymEt = seedsL1EtSumAsymEt.size();
407 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum AsymEt seeds: " << sizeSeedsL1EtSumAsymEt << endl << endl;
409 for (
size_t i = 0;
i != sizeSeedsL1EtSumAsymEt;
i++) {
412 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum AsymEt: hwPt = " <<
obj->hwPt();
415 vector<l1t::EtSumRef> seedsL1EtSumAsymHt;
417 const size_t sizeSeedsL1EtSumAsymHt = seedsL1EtSumAsymHt.size();
418 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum AsymHt seeds: " << sizeSeedsL1EtSumAsymHt << endl << endl;
420 for (
size_t i = 0;
i != sizeSeedsL1EtSumAsymHt;
i++) {
423 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum AsymHt: hwPt = " <<
obj->hwPt();
426 vector<l1t::EtSumRef> seedsL1EtSumAsymEtHF;
428 const size_t sizeSeedsL1EtSumAsymEtHF = seedsL1EtSumAsymEtHF.size();
429 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum AsymEtHF seeds: " << sizeSeedsL1EtSumAsymEtHF << endl << endl;
431 for (
size_t i = 0;
i != sizeSeedsL1EtSumAsymEtHF;
i++) {
434 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum AsymEtHF: hwPt = " <<
obj->hwPt();
437 vector<l1t::EtSumRef> seedsL1EtSumAsymHtHF;
439 const size_t sizeSeedsL1EtSumAsymHtHF = seedsL1EtSumAsymHtHF.size();
440 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum AsymHtHF seeds: " << sizeSeedsL1EtSumAsymHtHF << endl << endl;
442 for (
size_t i = 0;
i != sizeSeedsL1EtSumAsymHtHF;
i++) {
445 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum AsymHtHF: hwPt = " <<
obj->hwPt();
448 vector<l1t::EtSumRef> seedsL1EtSumZDCP;
450 const size_t sizeSeedsL1EtSumZDCP = seedsL1EtSumZDCP.size();
451 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum ZDCP seeds: " << sizeSeedsL1EtSumZDCP << endl << endl;
453 for (
size_t i = 0;
i != sizeSeedsL1EtSumZDCP;
i++) {
456 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum ZDCP" 458 <<
"pt = " <<
obj->pt() <<
"\t" 459 <<
"eta = " <<
obj->eta() <<
"\t" 460 <<
"phi = " <<
obj->phi();
463 vector<l1t::EtSumRef> seedsL1EtSumZDCM;
465 const size_t sizeSeedsL1EtSumZDCM = seedsL1EtSumZDCM.size();
466 LogTrace(
"HLTL1TSeed") <<
"\n L1EtSum ZDCM seeds: " << sizeSeedsL1EtSumZDCM << endl << endl;
468 for (
size_t i = 0;
i != sizeSeedsL1EtSumZDCM;
i++) {
471 LogTrace(
"HLTL1TSeed") <<
"\tL1EtSum ZDCM" 473 <<
"pt = " <<
obj->pt() <<
"\t" 474 <<
"eta = " <<
obj->eta() <<
"\t" 475 <<
"phi = " <<
obj->phi();
478 LogTrace(
"HLTL1TSeed") <<
" \n\n" << endl;
490 std::list<int> listMuon;
491 std::list<int> listMuonShower;
493 std::list<int> listEG;
495 std::list<int> listJet;
496 std::list<int> listTau;
498 std::list<int> listETM;
499 std::list<int> listETT;
500 std::list<int> listHTT;
501 std::list<int> listHTM;
502 std::list<int> listETMHF;
503 std::list<int> listHTMHF;
505 std::list<int> listJetCounts;
507 std::list<int> listCentrality;
508 std::list<int> listMinBiasHFP0;
509 std::list<int> listMinBiasHFM0;
510 std::list<int> listMinBiasHFP1;
511 std::list<int> listMinBiasHFM1;
512 std::list<int> listTotalEtEm;
513 std::list<int> listMissingEtHF;
514 std::list<int> listTowerCount;
515 std::list<int> listAsymEt;
516 std::list<int> listAsymHt;
517 std::list<int> listAsymEtHF;
518 std::list<int> listAsymHtHF;
519 std::list<int> listZDCP;
520 std::list<int> listZDCM;
526 if (!uGtAlgoBlocks.
isValid()) {
528 <<
" requested in configuration, but not found in the event." << std::endl;
534 if (uGtAlgoBlocks->
size() == 0) {
536 <<
" is empty for all BXs.";
541 if (uGtAlgoBlocks->
isEmpty(0)) {
543 <<
" is empty for BX=0.";
551 if (!gtObjectMapRecord.
isValid()) {
553 <<
" requested in configuration, but not found in the event." << std::endl;
559 const std::vector<GlobalObjectMap>& objMaps = gtObjectMapRecord->
gtObjectMap();
561 LogTrace(
"HLTL1TSeed") <<
"\nHLTL1Seed" 562 <<
"\n--------------------------------------------------------------------------------------" 563 "-------------------------------";
566 <<
"\n\tAlgorithms in L1TriggerObjectMapRecord and GT results ( emulated | initial | prescaled | final ) " 570 <<
"\tAlgoBit" << std::setw(40) <<
"algoName" 571 <<
"\t (emul|ini|pre|fin)" << endl;
573 LogTrace(
"HLTL1TSeed") <<
"----------------------------------------------------------------------------------------" 574 "-----------------------------";
576 for (
size_t imap = 0; imap < objMaps.size(); imap++) {
577 int bit = objMaps[imap].algoBitNumber();
579 int emulDecision = objMaps[imap].algoGtlResult();
582 int initDecision = (uGtAlgoBlocks->
at(0, 0)).getAlgoDecisionInitial(
bit);
583 int presDecision = (uGtAlgoBlocks->
at(0, 0)).getAlgoDecisionInterm(
bit);
584 int finlDecision = (uGtAlgoBlocks->
at(0, 0)).getAlgoDecisionFinal(
bit);
586 if (emulDecision != initDecision) {
587 LogTrace(
"HLTL1TSeed") <<
"L1T decision (emulated vs. unpacked initial) is not the same:" 588 <<
"\n\tbit = " << std::setw(3) <<
bit << std::setw(40) << objMaps[imap].algoName()
589 <<
"\t emulated decision = " << emulDecision
590 <<
"\t unpacked initial decision = " << initDecision
591 <<
"\nThis should not happen. Include the L1TGtEmulCompare module in the sequence." 595 LogTrace(
"HLTL1TSeed") <<
"\t" << std::setw(3) << imap <<
"\tbit = " << std::setw(3) <<
bit << std::setw(40)
596 << objMaps[imap].algoName() <<
"\t ( " << emulDecision <<
" | " << initDecision <<
" | " 597 << presDecision <<
" | " << finlDecision <<
" ) ";
607 return (uGtAlgoBlocks->
at(0, 0)).getFinalOR();
614 for (
auto&
i : algOpTokenVector) {
617 i.tokenResult =
false;
622 for (
auto&
i : algOpTokenVector) {
627 if (objMap ==
nullptr) {
630 <<
", requested as seed by a HLT path, cannot be matched to a L1 algo name in any GlobalObjectMap\n" 631 <<
"Please check if algorithm " <<
algoName <<
" is present in the L1 menu\n" 638 bool finalAlgoDecision = (uGtAlgoBlocks->
at(0, 0)).getAlgoDecisionFinal(
bit);
639 i.tokenResult = finalAlgoDecision;
649 <<
"\n Result for logical expression after update of algOpTokens: " << seedsResult <<
"\n" 656 for (std::vector<GlobalLogicParser::OperandToken>::const_iterator itSeed =
m_l1AlgoSeeds.begin();
661 LogTrace(
"HLTL1TSeed") <<
"\n ---------------- algo seed name = " << algoSeedName << endl;
665 if (objMap ==
nullptr) {
669 <<
"\nAlgorithm " << algoSeedName
670 <<
", requested as seed by a HLT path, cannot be matched to a L1 algo name in any GlobalObjectMap\n" 671 <<
"Please check if algorithm " << algoSeedName <<
" is present in the L1 menu\n" 679 bool algoSeedResultMaskAndPresc = uGtAlgoBlocks->
at(0, 0).getAlgoDecisionFinal(algoSeedBitNumber);
681 LogTrace(
"HLTL1TSeed") <<
"\n\tAlgo seed " << algoSeedName <<
" result emulated | final = " << algoSeedResult
682 <<
" | " << algoSeedResultMaskAndPresc << endl;
686 if (!algoSeedResultMaskAndPresc)
695 const std::vector<GlobalLogicParser::OperandToken>& opTokenVecObjMap = objMap->
operandTokenVector();
696 const std::vector<L1TObjectTypeInCond>& condObjTypeVec = objMap->
objectTypeVector();
697 const std::vector<CombinationsInCond>& condCombinations = objMap->
combinationVector();
699 LogTrace(
"HLTL1TSeed") <<
"\n\talgoName =" << objMap->
algoName() <<
"\talgoBitNumber = " << algoSeedBitNumber
700 <<
"\talgoGtlResult = " << algoSeedResult << endl
703 if (opTokenVecObjMap.size() != condObjTypeVec.size()) {
706 <<
"\nhas object map for bit number " << algoSeedBitNumber
707 <<
" which contains different size vectors of operand tokens and of condition object types!" << std::endl;
709 assert(opTokenVecObjMap.size() == condObjTypeVec.size());
712 if (opTokenVecObjMap.size() != condCombinations.size()) {
715 <<
"\nhas object map for bit number " << algoSeedBitNumber
716 <<
" which contains different size vectors of operand tokens and of condition object combinations!" 719 assert(opTokenVecObjMap.size() == condCombinations.size());
724 for (
size_t condNumber = 0; condNumber < opTokenVecObjMap.size(); condNumber++) {
725 std::vector<l1t::GlobalObject> condObjType = condObjTypeVec[condNumber];
727 for (
auto& jOb : condObjType) {
728 LogTrace(
"HLTL1TSeed") << setw(15) <<
"\tcondObjType = " << jOb << endl;
731 const std::string condName = opTokenVecObjMap[condNumber].tokenName;
732 bool condResult = opTokenVecObjMap[condNumber].tokenResult;
744 LogTrace(
"HLTL1TSeed") << setw(15) <<
"\tcondCombinations = " << condComb->size() << endl;
746 for (
auto const& itComb : (*condComb)) {
747 LogTrace(
"HLTL1TSeed") << setw(15) <<
"\tnew combination" << endl;
751 for (
auto itObject = itComb.begin(); itObject != itComb.end(); itObject++) {
754 if (condObjType.empty()) {
756 <<
"\talgoName = " << objMap->
algoName()
757 <<
" is object-less L1 algorithm, so do not attempt to store any objects to the list of seeds.\n" 769 LogTrace(
"HLTL1TSeed") <<
"\tAdd object of type " << objTypeVal <<
" and index " << (*itObject)
770 <<
" to the seed list." << std::endl;
777 switch (objTypeVal) {
779 listMuon.push_back(*itObject);
782 listMuonShower.push_back(*itObject);
785 listEG.push_back(*itObject);
788 listJet.push_back(*itObject);
791 listTau.push_back(*itObject);
794 listETM.push_back(*itObject);
797 listETT.push_back(*itObject);
800 listHTT.push_back(*itObject);
803 listHTM.push_back(*itObject);
806 listETMHF.push_back(*itObject);
809 listHTMHF.push_back(*itObject);
812 listTowerCount.push_back(*itObject);
815 listMinBiasHFP0.push_back(*itObject);
818 listMinBiasHFM0.push_back(*itObject);
821 listMinBiasHFP1.push_back(*itObject);
824 listMinBiasHFM1.push_back(*itObject);
827 listTotalEtEm.push_back(*itObject);
830 listAsymEt.push_back(*itObject);
833 listAsymHt.push_back(*itObject);
836 listAsymEtHF.push_back(*itObject);
839 listAsymHtHF.push_back(*itObject);
842 listZDCP.push_back(*itObject);
845 listZDCM.push_back(*itObject);
855 listCentrality.push_back(*itObject);
866 LogTrace(
"HLTL1TSeed") <<
"\n HLTL1TSeed::hltFilter " 867 <<
"\n Unknown object of type " << objTypeVal <<
" and index " << (*itObject)
868 <<
" in the seed list." << std::endl;
886 listMuonShower.sort();
887 listMuonShower.unique();
916 listJetCounts.sort();
917 listJetCounts.unique();
919 listCentrality.sort();
920 listCentrality.unique();
922 listMinBiasHFP0.sort();
923 listMinBiasHFP0.unique();
925 listMinBiasHFM0.sort();
926 listMinBiasHFM0.unique();
928 listMinBiasHFP1.sort();
929 listMinBiasHFP1.unique();
931 listMinBiasHFM1.sort();
932 listMinBiasHFM1.unique();
934 listTotalEtEm.sort();
935 listTotalEtEm.unique();
937 listMissingEtHF.sort();
938 listMissingEtHF.unique();
940 listTowerCount.sort();
941 listTowerCount.unique();
950 listAsymEtHF.unique();
953 listAsymHtHF.unique();
965 if (!listMuon.empty()) {
969 if (!
muons.isValid()) {
971 <<
"\nrequested in configuration, but not found in the event." 972 <<
"\nNo muons added to filterproduct." << endl;
974 for (std::list<int>::const_iterator itObj = listMuon.begin(); itObj != listMuon.end(); ++itObj) {
976 if (*itObj < 0
or unsigned(*itObj) >=
muons->size(0)) {
978 <<
"Invalid index from the L1ObjectMap (L1uGT emulator), will be ignored (l1t::MuonBxCollection):" 979 <<
" index=" << *itObj <<
" (size of unpacked L1T objects in BX0 = " <<
muons->size(0) <<
")";
993 if (!listMuonShower.empty()) {
999 <<
"\nrequested in configuration, but not found in the event." 1000 <<
"\nNo muon showers added to filterproduct." << endl;
1002 for (std::list<int>::const_iterator itObj = listMuonShower.begin(); itObj != listMuonShower.end(); ++itObj) {
1004 if (*itObj < 0
or unsigned(*itObj) >= muonShowers->
size(0)) {
1006 <<
"Invalid index from the L1ObjectMap (L1uGT emulator), will be ignored (l1t::MuonShowerBxCollection):" 1007 <<
" index=" << *itObj <<
" (size of unpacked L1T objects in BX0 = " << muonShowers->
size(0) <<
")";
1012 unsigned int index = muonShowers->
begin(0) - muonShowers->
begin() + *itObj;
1021 if (!listEG.empty()) {
1026 <<
"\nrequested in configuration, but not found in the event." 1027 <<
"\nNo egammas added to filterproduct." << endl;
1029 for (std::list<int>::const_iterator itObj = listEG.begin(); itObj != listEG.end(); ++itObj) {
1031 if (*itObj < 0
or unsigned(*itObj) >= egammas->
size(0)) {
1033 <<
"Invalid index from the L1ObjectMap (L1uGT emulator), will be ignored (l1t::EGammaBxCollection):" 1034 <<
" index=" << *itObj <<
" (size of unpacked L1T objects in BX0 = " << egammas->
size(0) <<
")";
1048 if (!listJet.empty()) {
1052 if (!
jets.isValid()) {
1054 <<
"\nrequested in configuration, but not found in the event." 1055 <<
"\nNo jets added to filterproduct." << endl;
1057 for (std::list<int>::const_iterator itObj = listJet.begin(); itObj != listJet.end(); ++itObj) {
1059 if (*itObj < 0
or unsigned(*itObj) >=
jets->size(0)) {
1061 <<
"Invalid index from the L1ObjectMap (L1uGT emulator), will be ignored (l1t::JetBxCollection):" 1062 <<
" index=" << *itObj <<
" (size of unpacked L1T objects in BX0 = " <<
jets->size(0) <<
")";
1067 unsigned int index =
jets->begin(0) -
jets->begin() + *itObj;
1076 if (!listTau.empty()) {
1080 if (!
taus.isValid()) {
1082 <<
"\nrequested in configuration, but not found in the event." 1083 <<
"\nNo taus added to filterproduct." << endl;
1085 for (std::list<int>::const_iterator itObj = listTau.begin(); itObj != listTau.end(); ++itObj) {
1087 if (*itObj < 0
or unsigned(*itObj) >=
taus->size(0)) {
1089 <<
"Invalid index from the L1ObjectMap (L1uGT emulator), will be ignored (l1t::TauBxCollection):" 1090 <<
" index=" << *itObj <<
" (size of unpacked L1T objects in BX0 = " <<
taus->size(0) <<
")";
1095 unsigned int index =
taus->begin(0) -
taus->begin() + *itObj;
1108 <<
"\nrequested in configuration, but not found in the event." 1109 <<
"\nNo etsums added to filterproduct." << endl;
1113 for (iter = etsums->
begin(0); iter != etsums->
end(0); ++iter) {
1116 switch (iter->getType()) {
1118 if (!listETT.empty())
1122 if (!listHTT.empty())
1126 if (!listETM.empty())
1130 if (!listHTM.empty())
1134 if (!listETMHF.empty())
1138 if (!listHTMHF.empty())
1142 if (!listCentrality.empty())
1146 if (!listMinBiasHFP0.empty())
1150 if (!listMinBiasHFM0.empty())
1154 if (!listMinBiasHFP1.empty())
1158 if (!listMinBiasHFM1.empty())
1162 if (!listTotalEtEm.empty())
1166 if (!listTowerCount.empty())
1170 if (!listAsymEt.empty())
1174 if (!listAsymHt.empty())
1178 if (!listAsymEtHF.empty())
1182 if (!listAsymHtHF.empty())
1186 LogTrace(
"HLTL1TSeed") <<
" L1EtSum seed of currently unsuported HLT TriggerType. l1t::EtSum type: " 1187 << iter->getType() <<
"\n";
1203 <<
"\nrequested in configuration, but not found in the event." 1204 <<
"\nNo etsums (ZDC) added to filterproduct.";
1208 for (iter = etsumzdcs->
begin(0); iter != etsumzdcs->
end(0); ++iter) {
1211 switch (iter->getType()) {
1213 if (!listZDCP.empty())
1217 if (!listZDCM.empty())
1222 <<
" L1EtSum (ZDC) seed of currently unsuported HLT TriggerType. l1t::EtSum type: " 1223 << iter->getType() <<
"\n";
1248 LogTrace(
"HLTL1TSeed") <<
"\nHLTL1Seed:seedsL1TriggerObjectMaps returning " << seedsResult << endl << endl;
const std::vector< L1TObjectTypeInCond > & objectTypeVector() const
BXVector< EGamma > EGammaBxCollection
std::string m_l1SeedsLogicalExpression
void getObjects(Vids &ids, VRphoton &refs) const
various physics-level getters:
edm::EDGetTokenT< l1t::EtSumBxCollection > m_l1EtSumToken
edm::Ref< EGammaBxCollection > EGammaRef
std::vector< const std::vector< GlobalLogicParser::TokenRPN > * > m_l1AlgoSeedsRpn
vector of Rpn vectors for the required algorithms for seeding
unsigned int key(const_iterator &iter) const
edm::InputTag m_l1MuonTag
edm::InputTag m_l1MuonShowerTag
HLTL1TSeed(const edm::ParameterSet &)
constructor
enum start value shifted to 81 so as to avoid clashes with PDG codes
bool seedsL1TriggerObjectMaps(edm::Event &, trigger::TriggerFilterObjectWithRefs &)
seeding is done via L1 trigger object maps, considering the objects which fired in L1 ...
void dumpTriggerFilterObjectWithRefs(trigger::TriggerFilterObjectWithRefs &) const
detailed print of filter content
const std::vector< CombinationsInCond > & combinationVector() const
edm::Ref< JetBxCollection > JetRef
edm::Ref< EtSumBxCollection > EtSumRef
bool isEmpty(int bx) const
muons
the two sets of parameters below are mutually exclusive, depending if RECO or ALCARECO is used the us...
BXVector< Tau > TauBxCollection
std::vector< GlobalLogicParser::OperandToken > expressionSeedsOperandList()
const CombinationsInCond * getCombinationsInCond(const std::string &condNameVal) const
return all the combinations passing the requirements imposed in condition condNameVal ...
const_iterator begin(int bx) const
unsigned size(int bx) const
void addObject(int id, const reco::RecoEcalCandidateRef &ref)
setters for L3 collections: (id=physics type, and Ref<C>)
std::vector< T >::const_iterator const_iterator
BXVector< EtSum > EtSumBxCollection
bool algoGtlResult() const
edm::InputTag m_l1GtObjectMapTag
InputTag for L1 Global Trigger object maps. This is done per menu. Should be part of Run...
~HLTL1TSeed() override
destructor
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
edm::EDGetTokenT< l1t::JetBxCollection > m_l1JetToken
std::vector< OperandToken > & operandTokenVector()
return the vector of operand tokens
GlobalLogicParser m_l1AlgoLogicParser
logic parser for m_l1SeedsLogicalExpression
edm::EDGetTokenT< l1t::EGammaBxCollection > m_l1EGammaToken
edm::InputTag m_l1EtSumTag
edm::Ref< TauBxCollection > TauRef
#define DEFINE_FWK_MODULE(type)
edm::EDGetTokenT< l1t::EtSumBxCollection > m_l1EtSumZdcToken
BXVector< MuonShower > MuonShowerBxCollection
const T & at(int bx, unsigned i) const
const std::vector< GlobalLogicParser::OperandToken > & operandTokenVector() const
edm::Ref< MuonShowerBxCollection > MuonShowerRef
const std::vector< GlobalObjectMap > & gtObjectMap() const
get / set the vector of object maps
BXVector< Muon > MuonBxCollection
bool m_isDebugEnabled
cache edm::isDebugEnabled()
std::vector< GlobalLogicParser::OperandToken > m_l1AlgoSeeds
list of required algorithms for seeding
BXVector< Jet > JetBxCollection
const GlobalObjectMap * getObjectMap(const std::string &algoNameVal) const
return the object map for the algorithm algoNameVal
edm::InputTag m_l1EGammaTag
void addCollectionTag(const edm::InputTag &collectionTag)
collectionTags
void add(std::string const &label, ParameterSetDescription const &psetDescription)
const std::string & algoName() const
destructor
int algoBitNumber() const
get / set bit number for algorithm in the object map
edm::InputTag m_l1GlobalTag
InputTag for L1 Global Trigger.
edm::EDGetTokenT< GlobalAlgBlkBxCollection > m_l1GlobalToken
const_iterator end(int bx) const
edm::Ref< MuonBxCollection > MuonRef
bool hltFilter(edm::Event &, const edm::EventSetup &, trigger::TriggerFilterObjectWithRefs &filterproduct) override
filter the event
bool m_l1GlobalDecision
flag to pass if L1TGlobal accept
Log< level::Warning, false > LogWarning
virtual const bool expressionResult() const
std::vector< SingleCombInCond > CombinationsInCond
all the object combinations evaluated to true in the condition
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
parameter description
static void makeHLTFilterDescription(edm::ParameterSetDescription &desc)
std::vector< std::vector< const std::vector< l1t::GlobalObject > * > > m_l1AlgoSeedsObjType
vector of object-type vectors for each condition in the required algorithms for seeding ...
edm::EDGetTokenT< l1t::MuonBxCollection > m_l1MuonToken
edm::InputTag m_l1EtSumZdcTag
edm::EDGetTokenT< l1t::TauBxCollection > m_l1TauToken
edm::EDGetTokenT< l1t::MuonShowerBxCollection > m_l1MuonShowerToken
edm::EDGetTokenT< GlobalObjectMapRecord > m_l1GtObjectMapToken