From ed4373d97a84efdebda63c43553b142a144918c2 Mon Sep 17 00:00:00 2001 From: Marino Missiroli Date: Sun, 30 Apr 2023 10:58:40 +0200 Subject: [PATCH] guard HLTRecHitInAllL1RegionsProducer against empty collection of L1T candidates --- .../EgammaHLTProducers/plugins/BuildFile.xml | 2 ++ .../plugins/HLTRecHitInAllL1RegionsProducer.cc | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml b/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml index 316e3225f8d14..82da66d4300bb 100644 --- a/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml +++ b/RecoEgamma/EgammaHLTProducers/plugins/BuildFile.xml @@ -1,5 +1,7 @@ + + diff --git a/RecoEgamma/EgammaHLTProducers/plugins/HLTRecHitInAllL1RegionsProducer.cc b/RecoEgamma/EgammaHLTProducers/plugins/HLTRecHitInAllL1RegionsProducer.cc index fd82e24904568..b24ac1caa0aca 100644 --- a/RecoEgamma/EgammaHLTProducers/plugins/HLTRecHitInAllL1RegionsProducer.cc +++ b/RecoEgamma/EgammaHLTProducers/plugins/HLTRecHitInAllL1RegionsProducer.cc @@ -7,8 +7,9 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/ESHandle.h" - +#include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/TypeDemangler.h" // Reco candidates (might not need) #include "DataFormats/RecoCandidate/interface/RecoCandidate.h" @@ -80,6 +81,10 @@ class L1RegionData : public L1RegionDataBase { const edm::EventSetup&, std::vector&) const override; template + bool isEmpty(const T2& coll) const { + return coll.empty(); + } + template static typename T2::const_iterator beginIt(const T2& coll) { return coll.begin(); } @@ -88,6 +93,10 @@ class L1RegionData : public L1RegionDataBase { return coll.end(); } template + bool isEmpty(const BXVector& coll) const { + return (coll.size() == 0 or coll.isEmpty(0)); + } + template static typename BXVector::const_iterator beginIt(const BXVector& coll) { return coll.begin(0); } @@ -286,6 +295,13 @@ void L1RegionData::getEtaPhiRegions(const edm::Event& event, edm::Handle l1Cands; event.getByToken(token_, l1Cands); + if (isEmpty(*l1Cands)) { + LogDebug("HLTRecHitInAllL1RegionsProducerL1RegionData") + << "The input collection of L1T candidates is empty (L1CollType = \"" + << edm::typeDemangle(typeid(L1CollType).name()) << "\"). No regions selected."; + return; + } + for (auto l1CandIt = beginIt(*l1Cands); l1CandIt != endIt(*l1Cands); ++l1CandIt) { if (l1CandIt->et() >= minEt_ && l1CandIt->et() < maxEt_) { double etaLow = l1CandIt->eta() - regionEtaMargin_;