152 std::map<std::string, std::vector<PathAndFlags> >::const_iterator it =
map_.find(
filter);
153 return (it ==
map_.end() ?
empty_ : it->second);
161 std::map<std::string, std::vector<PathAndFlags> >
map_;
162 const std::vector<PathAndFlags>
empty_ = {};
177 : nameProcess_(iConfig.getParameter<
std::
string>(
"processName")),
178 autoProcessName_(nameProcess_ ==
"*"),
179 onlyStandAlone_(iConfig.getParameter<
bool>(
"onlyStandAlone")),
183 tagL1GlobalTriggerObjectMaps_(
"l1L1GtObjectMap"),
185 tagL1ExtraNoIsoEG_(),
192 autoProcessNameL1ExtraMu_(
false),
193 autoProcessNameL1ExtraNoIsoEG_(
false),
194 autoProcessNameL1ExtraIsoEG_(
false),
195 autoProcessNameL1ExtraCenJet_(
false),
196 autoProcessNameL1ExtraForJet_(
false),
197 autoProcessNameL1ExtraTauJet_(
false),
198 autoProcessNameL1ExtraETM_(
false),
199 autoProcessNameL1ExtraHTM_(
false),
202 hltPrescaleProvider_(iConfig, consumesCollector(), *this),
203 hltConfigInit_(
false),
205 tagTriggerResults_(
"TriggerResults"),
206 tagTriggerEvent_(
"hltTriggerSummaryAOD"),
208 labelHltPrescaleTable_(),
209 hltPrescaleTableRun_(),
210 hltPrescaleTableLumi_(),
211 addPathModuleLabels_(
false),
212 packPathNames_(iConfig.existsAs<
bool>(
"packTriggerPathNames") ? iConfig.getParameter<
bool>(
"packTriggerPathNames")
214 packLabels_(iConfig.existsAs<
bool>(
"packTriggerLabels") ? iConfig.getParameter<
bool>(
"packTriggerLabels") :
true),
215 packPrescales_(iConfig.existsAs<
bool>(
"packTriggerPrescales") ? iConfig.getParameter<
bool>(
"packTriggerPrescales")
219 if (iConfig.exists(
"addL1Algos"))
220 addL1Algos_ = iConfig.getParameter<
bool>(
"addL1Algos");
221 if (iConfig.exists(
"l1GlobalTriggerObjectMaps"))
222 tagL1GlobalTriggerObjectMaps_ = iConfig.getParameter<
InputTag>(
"l1GlobalTriggerObjectMaps");
223 l1GlobalTriggerObjectMapsToken_ = mayConsume<L1GlobalTriggerObjectMaps>(tagL1GlobalTriggerObjectMaps_);
224 if (iConfig.exists(
"l1ExtraMu")) {
225 tagL1ExtraMu_ = iConfig.getParameter<
InputTag>(
"l1ExtraMu");
226 if (tagL1ExtraMu_.process() ==
"*") {
227 if (autoProcessName_)
228 autoProcessNameL1ExtraMu_ =
true;
230 tagL1ExtraMu_ =
InputTag(tagL1ExtraMu_.label(), tagL1ExtraMu_.instance(), nameProcess_);
235 if (iConfig.exists(
"l1ExtraNoIsoEG")) {
236 tagL1ExtraNoIsoEG_ = iConfig.getParameter<
InputTag>(
"l1ExtraNoIsoEG");
237 if (tagL1ExtraNoIsoEG_.process() ==
"*") {
238 if (autoProcessName_)
239 autoProcessNameL1ExtraNoIsoEG_ =
true;
241 tagL1ExtraNoIsoEG_ =
InputTag(tagL1ExtraNoIsoEG_.label(), tagL1ExtraNoIsoEG_.instance(), nameProcess_);
246 if (iConfig.exists(
"l1ExtraIsoEG")) {
247 tagL1ExtraIsoEG_ = iConfig.getParameter<
InputTag>(
"l1ExtraIsoEG");
248 if (tagL1ExtraIsoEG_.process() ==
"*") {
249 if (autoProcessName_)
250 autoProcessNameL1ExtraIsoEG_ =
true;
252 tagL1ExtraIsoEG_ =
InputTag(tagL1ExtraIsoEG_.label(), tagL1ExtraIsoEG_.instance(), nameProcess_);
257 if (iConfig.exists(
"l1ExtraCenJet")) {
258 tagL1ExtraCenJet_ = iConfig.getParameter<
InputTag>(
"l1ExtraCenJet");
259 if (tagL1ExtraCenJet_.process() ==
"*") {
260 if (autoProcessName_)
261 autoProcessNameL1ExtraCenJet_ =
true;
263 tagL1ExtraCenJet_ =
InputTag(tagL1ExtraCenJet_.label(), tagL1ExtraCenJet_.instance(), nameProcess_);
268 if (iConfig.exists(
"l1ExtraForJet")) {
269 tagL1ExtraForJet_ = iConfig.getParameter<
InputTag>(
"l1ExtraForJet");
270 if (tagL1ExtraForJet_.process() ==
"*") {
271 if (autoProcessName_)
272 autoProcessNameL1ExtraForJet_ =
true;
274 tagL1ExtraForJet_ =
InputTag(tagL1ExtraForJet_.label(), tagL1ExtraForJet_.instance(), nameProcess_);
279 if (iConfig.exists(
"l1ExtraTauJet")) {
280 tagL1ExtraTauJet_ = iConfig.getParameter<
InputTag>(
"l1ExtraTauJet");
281 if (tagL1ExtraTauJet_.process() ==
"*") {
282 if (autoProcessName_)
283 autoProcessNameL1ExtraTauJet_ =
true;
285 tagL1ExtraTauJet_ =
InputTag(tagL1ExtraTauJet_.label(), tagL1ExtraTauJet_.instance(), nameProcess_);
290 if (iConfig.exists(
"l1ExtraETM")) {
291 tagL1ExtraETM_ = iConfig.getParameter<
InputTag>(
"l1ExtraETM");
292 if (tagL1ExtraETM_.process() ==
"*") {
293 if (autoProcessName_)
294 autoProcessNameL1ExtraETM_ =
true;
296 tagL1ExtraETM_ =
InputTag(tagL1ExtraETM_.label(), tagL1ExtraETM_.instance(), nameProcess_);
301 if (iConfig.exists(
"l1ExtraHTM")) {
302 tagL1ExtraHTM_ = iConfig.getParameter<
InputTag>(
"l1ExtraHTM");
303 if (tagL1ExtraHTM_.process() ==
"*") {
304 if (autoProcessName_)
305 autoProcessNameL1ExtraHTM_ =
true;
307 tagL1ExtraHTM_ =
InputTag(tagL1ExtraHTM_.label(), tagL1ExtraHTM_.instance(), nameProcess_);
312 if (iConfig.exists(
"mainBxOnly"))
313 mainBxOnly_ = iConfig.getParameter<
bool>(
"mainBxOnly");
314 if (iConfig.exists(
"saveL1Refs"))
315 saveL1Refs_ = iConfig.getParameter<
bool>(
"saveL1Refs");
318 if (iConfig.exists(
"triggerResults"))
319 tagTriggerResults_ = iConfig.getParameter<
InputTag>(
"triggerResults");
320 triggerResultsGetter_ =
322 tagTriggerResults_.instance(),
323 autoProcessName_ ?
std::string(
"") : nameProcess_)),
325 if (iConfig.exists(
"triggerEvent"))
326 tagTriggerEvent_ = iConfig.getParameter<
InputTag>(
"triggerEvent");
329 if (iConfig.exists(
"hltPrescaleLabel"))
330 hltPrescaleLabel_ = iConfig.getParameter<
std::string>(
"hltPrescaleLabel");
331 if (iConfig.exists(
"hltPrescaleTable")) {
332 labelHltPrescaleTable_ = iConfig.getParameter<
std::string>(
"hltPrescaleTable");
337 hltPrescaleTableEventGetter_ =
340 if (iConfig.exists(
"addPathModuleLabels"))
341 addPathModuleLabels_ = iConfig.getParameter<
bool>(
"addPathModuleLabels");
342 exludeCollections_.clear();
343 if (iConfig.exists(
"exludeCollections"))
344 exludeCollections_ = iConfig.getParameter<std::vector<std::string> >(
"exludeCollections");
347 if (iConfig.exists(
"l1ExtraMu"))
348 l1ExtraMuGetter_(
bd);
349 if (iConfig.exists(
"l1ExtraNoIsoEG"))
350 l1ExtraNoIsoEGGetter_(
bd);
351 if (iConfig.exists(
"l1ExtraIsoEG"))
352 l1ExtraIsoEGGetter_(
bd);
353 if (iConfig.exists(
"l1ExtraCenJet"))
354 l1ExtraCenJetGetter_(
bd);
355 if (iConfig.exists(
"l1ExtraForJet"))
356 l1ExtraForJetGetter_(
bd);
357 if (iConfig.exists(
"l1ExtraTauJet"))
358 l1ExtraTauJetGetter_(
bd);
359 if (iConfig.exists(
"l1ExtraETM"))
360 l1ExtraETMGetter_(
bd);
361 if (iConfig.exists(
"l1ExtraHTM"))
362 l1ExtraHTMGetter_(
bd);
363 if (not(this->autoProcessName_ and
bd.processName() == this->moduleDescription().processName())) {
364 triggerResultsGetter_(
bd);
366 triggerEventGetter_(
bd);
367 if (iConfig.exists(
"hltPrescaleTable")) {
368 hltPrescaleTableRunGetter_(
bd);
369 hltPrescaleTableLumiGetter_(
bd);
370 hltPrescaleTableEventGetter_(
bd);
374 if (!onlyStandAlone_) {
375 produces<TriggerAlgorithmCollection>();
376 produces<TriggerConditionCollection>();
377 produces<TriggerPathCollection>();
378 produces<TriggerFilterCollection>();
379 produces<TriggerObjectCollection>();
381 if (packPrescales_) {
382 produces<PackedTriggerPrescales>();
383 produces<PackedTriggerPrescales>(
"l1max");
384 produces<PackedTriggerPrescales>(
"l1min");
386 produces<TriggerObjectStandAloneCollection>();
405 if (processHistory.getConfigurationForProcess(iHist->processName(), processConfiguration) &&
415 <<
"' not produced according to process history of input data\n"
416 <<
"No trigger information produced";
419 LogInfo(
"autoProcessName") <<
"HLT process name' " <<
nameProcess_ <<
"' used for PAT trigger information";
426 <<
"' differs from HLT process name '" <<
nameProcess_ <<
"'";
432 <<
"' differs from HLT process name '" <<
nameProcess_ <<
"'";
455 LogError(
"hltConfig") <<
"HLT config extraction error with process name '" <<
nameProcess_ <<
"'";
457 LogError(
"hltConfig") <<
"HLT config size error";
473 if (handleHltPrescaleTable.
isValid()) {
475 handleHltPrescaleTable->
set(), handleHltPrescaleTable->
labels(), handleHltPrescaleTable->
table());
495 if (handleHltPrescaleTable.
isValid()) {
497 handleHltPrescaleTable->
set(), handleHltPrescaleTable->
labels(), handleHltPrescaleTable->
table());
508 auto triggerObjects = std::make_unique<TriggerObjectCollection>();
509 auto triggerObjectsStandAlone = std::make_unique<TriggerObjectStandAloneCollection>();
510 std::unique_ptr<PackedTriggerPrescales> packedPrescales, packedPrescalesL1min, packedPrescalesL1max;
522 if (!handleTriggerResults.
isValid()) {
524 <<
"' not in event\n"
525 <<
"No HLT information produced";
527 }
else if (!handleTriggerEvent.
isValid()) {
529 <<
"' not in event\n"
530 <<
"No HLT information produced";
546 if (handleHltPrescaleTable.
isValid()) {
548 handleHltPrescaleTable->
set(), handleHltPrescaleTable->
labels(), handleHltPrescaleTable->
table());
552 if (hltPrescaleTable.size() == 0) {
556 <<
"Using default from event setup";
562 LogDebug(
"hltPrescaleTable") <<
"HLT prescale table found in event setup";
564 LogWarning(
"hltPrescaleSet") <<
"HLTPrescaleTable from event setup has error";
568 unsigned set(hltPrescaleTable.set());
569 if (hltPrescaleTable.size() > 0) {
571 bool foundPrescaleLabel(
false);
572 for (
unsigned iLabel = 0; iLabel < hltPrescaleTable.labels().size(); ++iLabel) {
575 foundPrescaleLabel =
true;
579 if (!foundPrescaleLabel) {
584 }
else if (
iEvent.isRealData()) {
586 LogError(
"hltPrescaleTable") <<
"No HLT prescale table found\n"
587 <<
"Using default empty table with all prescales 1";
591 const unsigned sizePaths(
hltConfig.size());
592 const unsigned sizeFilters(handleTriggerEvent->
sizeFilters());
593 const unsigned sizeObjects(handleTriggerEvent->
sizeObjects());
595 std::map<std::string, int> moduleStates;
598 auto triggerPaths = std::make_unique<TriggerPathCollection>();
600 const std::vector<std::string>& pathNames =
hltConfig.triggerNames();
601 for (
size_t indexPath = 0; indexPath < sizePaths; ++indexPath) {
602 const std::string& namePath = pathNames.at(indexPath);
603 unsigned indexLastFilterPathModules(handleTriggerResults->
index(indexPath) + 1);
604 const unsigned sizeModulesPath(
hltConfig.size(indexPath));
606 if (sizeModulesPath != 0) {
607 while (indexLastFilterPathModules > 0) {
608 --indexLastFilterPathModules;
609 const std::string& labelLastFilterPathModules(
hltConfig.moduleLabel(indexPath, indexLastFilterPathModules));
610 unsigned indexLastFilterFilters =
612 if (indexLastFilterFilters < sizeFilters) {
613 if (
hltConfig.moduleType(labelLastFilterPathModules) ==
"HLTBool")
619 indexLastFilterPathModules = 0;
624 handleTriggerResults->
wasrun(indexPath),
625 handleTriggerResults->
accept(indexPath),
626 handleTriggerResults->
error(indexPath),
627 indexLastFilterPathModules,
628 hltConfig.saveTagsModules(namePath).size());
631 assert(indexLastFilterPathModules < sizeModulesPath || sizeModulesPath == 0);
632 std::map<unsigned, std::string> indicesModules;
633 for (
size_t iM = 0; iM < sizeModulesPath; ++iM) {
639 if (indexFilter < sizeFilters) {
642 const unsigned slotModule(
hltConfig.moduleIndex(indexPath, nameModule));
643 indicesModules.insert(std::pair<unsigned, std::string>(slotModule, nameModule));
647 for (L1SeedCollection::const_iterator iSeed = l1Seeds.begin(); iSeed != l1Seeds.end(); ++iSeed) {
653 for (std::map<unsigned, std::string>::const_iterator iM = indicesModules.begin(); iM != indicesModules.end();
655 if (iM->first < indexLastFilterPathModules) {
656 moduleStates[iM->second] = 1;
657 }
else if (iM->first == indexLastFilterPathModules) {
658 moduleStates[iM->second] = handleTriggerResults->
accept(indexPath);
659 }
else if (moduleStates.find(iM->second) == moduleStates.end()) {
660 moduleStates[iM->second] = -1;
671 std::multimap<trigger::size_type, int>
objectTypes;
672 std::multimap<trigger::size_type, std::string> filterLabels;
674 for (
size_t iF = 0; iF < sizeFilters; ++iF) {
679 for (
size_t iK = 0; iK <
keys.size(); ++iK) {
680 filterLabels.insert(std::pair<trigger::size_type, std::string>(
keys[iK], nameFilter));
688 triggerObjectsStandAlone->reserve(sizeObjects);
691 std::map<trigger::size_type, trigger::size_type> newObjectKeys;
692 for (
size_t iO = 0, iC = 0, nC = handleTriggerEvent->
sizeCollections(); iO < sizeObjects && iC < nC; ++iO) {
697 while (iO >= collectionKeys[iC])
701 typedef std::multimap<trigger::size_type, int>::const_iterator it_type;
702 for (std::pair<it_type, it_type> trange =
objectTypes.equal_range(iO); trange.first != trange.second;
704 triggerObject.addTriggerObjectType(trange.first->second);
710 bool excluded(
false);
721 typedef std::multimap<trigger::size_type, std::string>::const_iterator it_fl;
722 for (std::pair<it_fl, it_fl> frange = filterLabels.equal_range(iO); frange.first != frange.second;
725 const std::vector<ModuleLabelToPathAndFlags::PathAndFlags>&
paths =
727 for (std::vector<ModuleLabelToPathAndFlags::PathAndFlags>::const_iterator iP =
paths.begin(); iP !=
paths.end();
729 bool pathFired = handleTriggerResults->
wasrun(iP->pathIndex) && handleTriggerResults->
accept(iP->pathIndex);
730 triggerObjectStandAlone.
addPathName(iP->pathName, pathFired && iP->lastFilter, pathFired && iP->l3Filter);
734 triggerObjectsStandAlone->push_back(triggerObjectStandAlone);
743 auto triggerFilters = std::make_unique<TriggerFilterCollection>();
744 triggerFilters->reserve(sizeFilters);
745 for (
size_t iF = 0; iF < sizeFilters; ++iF) {
755 for (
size_t iK = 0; iK <
keys.size(); ++iK) {
757 if (newObjectKeys.find(
keys.at(iK)) != newObjectKeys.end()) {
758 if (newObjectKeys[
keys.at(iK)] == sizeObjects)
763 LogWarning(
"triggerObjectKey") <<
"TriggerFilter '" << nameFilter
764 <<
"' requests non-existing TriggerObject key " <<
keys.at(iK) <<
"\n"
765 <<
"Skipping object assignment";
769 std::map<std::string, int>::iterator iS(moduleStates.find(nameFilter));
770 if (iS != moduleStates.end()) {
785 packedPrescales = std::make_unique<PackedTriggerPrescales>(handleTriggerResults);
786 packedPrescalesL1min = std::make_unique<PackedTriggerPrescales>(handleTriggerResults);
787 packedPrescalesL1max = std::make_unique<PackedTriggerPrescales>(handleTriggerResults);
790 for (
unsigned int i = 0,
n =
names.size();
i <
n; ++
i) {
793 if (pvdet.first.empty()) {
794 packedPrescalesL1max->addPrescaledTrigger(
i, 1);
795 packedPrescalesL1min->addPrescaledTrigger(
i, 1);
797 int pmin = -1, pmax = -1;
798 for (
const auto&
p : pvdet.first) {
800 if (
p.second > 0 && (
pmin == -1 ||
pmin >
p.second))
803 packedPrescalesL1max->addPrescaledTrigger(
i, pmax);
804 packedPrescalesL1min->addPrescaledTrigger(
i,
pmin);
807 packedPrescales->addPrescaledTrigger(
i, pvdet.second);
821 std::map<L1GtObject, std::vector<unsigned> > l1ObjectTypeMap;
825 if (handleL1ExtraMu.
isValid()) {
826 std::vector<unsigned> muKeys;
827 for (
size_t l1Mu = 0; l1Mu < handleL1ExtraMu->size(); ++l1Mu) {
828 if (
mainBxOnly_ && handleL1ExtraMu->at(l1Mu).bx() != 0)
835 const reco::LeafCandidate leafCandidate(*(handleL1ExtraMu->at(l1Mu).reco::LeafCandidate::clone()));
843 triggerObjectsStandAlone->push_back(triggerObjectStandAlone);
844 if (handleL1ExtraMu->at(l1Mu).bx() == 0)
845 muKeys.push_back(triggerObjectsStandAlone->size() - 1);
847 l1ObjectTypeMap.insert(std::make_pair(
Mu, muKeys));
855 if (handleL1ExtraNoIsoEG.
isValid()) {
856 std::vector<unsigned> noIsoEGKeys;
857 for (
size_t l1NoIsoEG = 0; l1NoIsoEG < handleL1ExtraNoIsoEG->size(); ++l1NoIsoEG) {
858 if (
mainBxOnly_ && handleL1ExtraNoIsoEG->at(l1NoIsoEG).bx() != 0)
865 const reco::LeafCandidate leafCandidate(*(handleL1ExtraNoIsoEG->at(l1NoIsoEG).reco::LeafCandidate::clone()));
873 triggerObjectsStandAlone->push_back(triggerObjectStandAlone);
874 if (handleL1ExtraNoIsoEG->at(l1NoIsoEG).bx() == 0)
875 noIsoEGKeys.push_back(triggerObjectsStandAlone->size() - 1);
877 l1ObjectTypeMap.insert(std::make_pair(
NoIsoEG, noIsoEGKeys));
879 LogError(
"l1ExtraValid") <<
"l1extra::L1EmParticleCollection product with InputTag '"
885 if (handleL1ExtraIsoEG.
isValid()) {
886 std::vector<unsigned> isoEGKeys;
887 for (
size_t l1IsoEG = 0; l1IsoEG < handleL1ExtraIsoEG->size(); ++l1IsoEG) {
888 if (
mainBxOnly_ && handleL1ExtraIsoEG->at(l1IsoEG).bx() != 0)
895 const reco::LeafCandidate leafCandidate(*(handleL1ExtraIsoEG->at(l1IsoEG).reco::LeafCandidate::clone()));
903 triggerObjectsStandAlone->push_back(triggerObjectStandAlone);
904 if (handleL1ExtraIsoEG->at(l1IsoEG).bx() == 0)
905 isoEGKeys.push_back(triggerObjectsStandAlone->size() - 1);
907 l1ObjectTypeMap.insert(std::make_pair(
IsoEG, isoEGKeys));
915 if (handleL1ExtraCenJet.
isValid()) {
916 std::vector<unsigned> cenJetKeys;
917 for (
size_t l1CenJet = 0; l1CenJet < handleL1ExtraCenJet->size(); ++l1CenJet) {
918 if (
mainBxOnly_ && handleL1ExtraCenJet->at(l1CenJet).bx() != 0)
925 const reco::LeafCandidate leafCandidate(*(handleL1ExtraCenJet->at(l1CenJet).reco::LeafCandidate::clone()));
933 triggerObjectsStandAlone->push_back(triggerObjectStandAlone);
934 if (handleL1ExtraCenJet->at(l1CenJet).bx() == 0)
935 cenJetKeys.push_back(triggerObjectsStandAlone->size() - 1);
937 l1ObjectTypeMap.insert(std::make_pair(
CenJet, cenJetKeys));
939 LogError(
"l1ExtraValid") <<
"l1extra::L1JetParticleCollection product with InputTag '"
945 if (handleL1ExtraForJet.
isValid()) {
946 std::vector<unsigned> forJetKeys;
947 for (
size_t l1ForJet = 0; l1ForJet < handleL1ExtraForJet->size(); ++l1ForJet) {
948 if (
mainBxOnly_ && handleL1ExtraForJet->at(l1ForJet).bx() != 0)
955 const reco::LeafCandidate leafCandidate(*(handleL1ExtraForJet->at(l1ForJet).reco::LeafCandidate::clone()));
963 triggerObjectsStandAlone->push_back(triggerObjectStandAlone);
964 if (handleL1ExtraForJet->at(l1ForJet).bx() == 0)
965 forJetKeys.push_back(triggerObjectsStandAlone->size() - 1);
967 l1ObjectTypeMap.insert(std::make_pair(
ForJet, forJetKeys));
969 LogError(
"l1ExtraValid") <<
"l1extra::L1JetParticleCollection product with InputTag '"
975 if (handleL1ExtraTauJet.
isValid()) {
976 std::vector<unsigned> tauJetKeys;
977 for (
size_t l1TauJet = 0; l1TauJet < handleL1ExtraTauJet->size(); ++l1TauJet) {
978 if (
mainBxOnly_ && handleL1ExtraTauJet->at(l1TauJet).bx() != 0)
985 const reco::LeafCandidate leafCandidate(*(handleL1ExtraTauJet->at(l1TauJet).reco::LeafCandidate::clone()));
993 triggerObjectsStandAlone->push_back(triggerObjectStandAlone);
994 if (handleL1ExtraTauJet->at(l1TauJet).bx() == 0)
995 tauJetKeys.push_back(triggerObjectsStandAlone->size() - 1);
997 l1ObjectTypeMap.insert(std::make_pair(
TauJet, tauJetKeys));
999 LogError(
"l1ExtraValid") <<
"l1extra::L1JetParticleCollection product with InputTag '"
1005 if (handleL1ExtraETM.
isValid()) {
1006 std::vector<unsigned> etmKeys;
1007 for (
size_t l1ETM = 0; l1ETM < handleL1ExtraETM->size(); ++l1ETM) {
1008 if (
mainBxOnly_ && handleL1ExtraETM->at(l1ETM).bx() != 0)
1015 const reco::LeafCandidate leafCandidate(*(handleL1ExtraETM->at(l1ETM).reco::LeafCandidate::clone()));
1023 triggerObjectsStandAlone->push_back(triggerObjectStandAlone);
1024 if (handleL1ExtraETM->at(l1ETM).bx() == 0)
1025 etmKeys.push_back(triggerObjectsStandAlone->size() - 1);
1027 l1ObjectTypeMap.insert(std::make_pair(
ETM, etmKeys));
1029 LogError(
"l1ExtraValid") <<
"l1extra::L1EtMissParticleCollection product with InputTag '"
1035 if (handleL1ExtraHTM.
isValid()) {
1036 std::vector<unsigned> htmKeys;
1037 for (
size_t l1HTM = 0; l1HTM < handleL1ExtraHTM->size(); ++l1HTM) {
1038 if (
mainBxOnly_ && handleL1ExtraHTM->at(l1HTM).bx() != 0)
1045 const reco::LeafCandidate leafCandidate(*(handleL1ExtraHTM->at(l1HTM).reco::LeafCandidate::clone()));
1053 triggerObjectsStandAlone->push_back(triggerObjectStandAlone);
1054 if (handleL1ExtraHTM->at(l1HTM).bx() == 0)
1055 htmKeys.push_back(triggerObjectsStandAlone->size() - 1);
1057 l1ObjectTypeMap.insert(std::make_pair(
HTM, htmKeys));
1059 LogError(
"l1ExtraValid") <<
"l1extra::L1EtMissParticleCollection product with InputTag '"
1069 auto triggerAlgos = std::make_unique<TriggerAlgorithmCollection>();
1073 std::map<L1GtObject, trigger::TriggerObjectType> mapObjectTypes;
1085 auto const& l1GtAlgorithms = handleL1GtTriggerMenu->gtAlgorithmMap();
1086 auto const& l1GtTechTriggers = handleL1GtTriggerMenu->gtTechnicalTriggerMap();
1087 auto const& l1GtConditionsVector = handleL1GtTriggerMenu->gtConditionMap();
1090 for (
size_t iCv = 0; iCv < l1GtConditionsVector.size(); ++iCv) {
1091 l1GtConditions.insert(l1GtConditionsVector.at(iCv).begin(), l1GtConditionsVector.at(iCv).end());
1093 triggerAlgos->reserve(l1GtAlgorithms.size() + l1GtTechTriggers.size());
1096 if (!handleL1GlobalTriggerObjectMaps.
isValid()) {
1097 LogError(
"l1ObjectMap") <<
"L1GlobalTriggerObjectMaps product with InputTag '"
1099 <<
"No L1 objects and GTL results available for physics algorithms";
1106 LogError(
"l1ObjectMap") <<
"ParameterSet registry not available\n"
1107 <<
"Skipping conditions for all L1 physics algorithm names in this run";
1111 LogInfo(
"l1ObjectMap") <<
"ParameterSet registry not available\n"
1112 <<
"Skipping conditions for all L1 physics algorithm names in this event";
1116 for (
CItAlgo iAlgo = l1GtAlgorithms.begin(); iAlgo != l1GtAlgorithms.end(); ++iAlgo) {
1119 LogError(
"l1Algo") <<
"L1 physics algorithm '" <<
algoName <<
"' has bit number "
1120 << iAlgo->second.algoBitNumber()
1128 LogError(
"l1Algo") <<
"L1 physics algorithm '" <<
algoName <<
"' not found in the L1 menu\n"
1134 <<
"' does not have category 'AlgorithmTrigger' from 'L1GtUtils'\n"
1138 bool decisionBeforeMask;
1139 bool decisionAfterMask;
1145 <<
" from 'L1GtUtils'\n"
1150 iAlgo->second.algoAlias(),
1159 if (!handleL1GlobalTriggerObjectMaps.
isValid()) {
1160 triggerAlgos->push_back(triggerAlgo);
1165 <<
"' is missing in L1GlobalTriggerObjectMaps\n"
1166 <<
"Skipping conditions and GTL result";
1167 triggerAlgos->push_back(triggerAlgo);
1170 bool algorithmResult = handleL1GlobalTriggerObjectMaps->
algorithmResult(bit);
1172 if ((algorithmResult != decisionBeforeMask) &&
1173 (decisionBeforeMask ==
true)) {
1174 LogInfo(
"l1ObjectMap") <<
"L1 physics algorithm '" <<
algoName <<
"' with different decisions in\n"
1175 <<
"L1GlobalTriggerObjectMaps (GTL result) : " << algorithmResult <<
"\n"
1176 <<
"L1GlobalTriggerReadoutRecord (decision before mask): " << decisionBeforeMask;
1183 triggerAlgos->push_back(triggerAlgo);
1189 <<
"' not available in ParameterSet registry\n"
1190 <<
"Skipping conditions for this algorithm in this run";
1193 <<
"' not available in ParameterSet registry\n"
1194 <<
"Skipping conditions for this algorithm in this event";
1196 triggerAlgos->push_back(triggerAlgo);
1201 for (
unsigned iT = 0; iT < conditionNames.size(); ++iT) {
1211 LogError(
"l1CondMap") <<
"More condition names from ParameterSet registry than the "
1212 <<
conditions.nConditions() <<
" conditions in L1GlobalTriggerObjectMaps\n"
1213 <<
"Skipping condition " << conditionNames.at(iT) <<
" in algorithm " <<
algoName;
1217 if (l1GtConditions.find(triggerCond.name()) != l1GtConditions.end()) {
1218 triggerCond.
setCategory(l1GtConditions[triggerCond.name()]->condCategory());
1219 triggerCond.setType(l1GtConditions[triggerCond.name()]->condType());
1220 const std::vector<L1GtObject> l1ObjectTypes(l1GtConditions[triggerCond.name()]->objectType());
1221 for (
size_t iType = 0; iType < l1ObjectTypes.size(); ++iType) {
1222 triggerCond.addTriggerObjectType(mapObjectTypes[l1ObjectTypes.at(iType)]);
1227 for (
size_t iVV = 0; iVV < combinations.
nCombinations(); ++iVV) {
1230 if (iV >= l1ObjectTypes.size()) {
1231 LogError(
"l1CondMap") <<
"Index " << iV <<
" in combinations vector overshoots size "
1232 << l1ObjectTypes.size() <<
" of types vector in conditions map\n"
1233 <<
"Skipping object key in condition " << triggerCond.name();
1234 }
else if (l1ObjectTypeMap.find(l1ObjectTypes.at(iV)) != l1ObjectTypeMap.end()) {
1235 if (objectIndex >= l1ObjectTypeMap[l1ObjectTypes.at(iV)].size()) {
1237 <<
"Index " << objectIndex <<
" in combination overshoots number "
1238 << l1ObjectTypeMap[l1ObjectTypes.at(iV)].size() <<
"of according trigger objects\n"
1239 <<
"Skipping object key in condition " << triggerCond.name();
1241 const unsigned objectKey(l1ObjectTypeMap[l1ObjectTypes.at(iV)].at(objectIndex));
1242 triggerCond.addObjectKey(objectKey);
1244 triggerObjectsStandAlone->at(objectKey).addAlgorithmName(
1245 triggerAlgo.
name(), (triggerAlgo.
decision() && triggerCond.wasAccept()));
1246 triggerObjectsStandAlone->at(objectKey).addConditionName(triggerCond.name());
1251 LogWarning(
"l1CondMap") <<
"L1 conditions '" << triggerCond.name() <<
"' not found in the L1 menu\n"
1252 <<
"Remains incomplete";
1258 triggerAlgos->push_back(triggerAlgo);
1261 for (
CItAlgo iAlgo = l1GtTechTriggers.begin(); iAlgo != l1GtTechTriggers.end(); ++iAlgo) {
1264 LogError(
"l1Algo") <<
"L1 technical trigger '" <<
algoName <<
"' has bit number "
1265 << iAlgo->second.algoBitNumber()
1273 LogError(
"l1Algo") <<
"L1 technical trigger '" <<
algoName <<
"' not found in the L1 menu\n"
1279 <<
"' does not have category 'TechnicalTrigger' from 'L1GtUtils'\n"
1283 bool decisionBeforeMask;
1284 bool decisionAfterMask;
1290 <<
" from 'L1GtUtils'\n"
1295 iAlgo->second.algoAlias(),
1303 triggerAlgos->push_back(triggerAlgo);
1321 obj.packFilterLabels(
iEvent, *handleTriggerResults);
1332 const std::vector<std::string>& pathNames =
hltConfig.triggerNames();
1333 unsigned int sizePaths = pathNames.size();
1334 for (
unsigned int indexPath = 0; indexPath < sizePaths; ++indexPath) {
1335 const std::string& namePath = pathNames[indexPath];
1337 const std::vector<std::string>& nameModules =
hltConfig.moduleLabels(indexPath);
1338 unsigned int sizeModulesPath = nameModules.size();
1339 bool lastFilter =
true;
1340 unsigned int iM = sizeModulesPath;
1342 const std::string& nameFilter = nameModules[--iM];
1343 if (
hltConfig.moduleEDMType(nameFilter) !=
"EDFilter")
1345 if (
hltConfig.moduleType(nameFilter) ==
"HLTBool")