From 618f781de73ece2fc28990efeeb62d814d510c80 Mon Sep 17 00:00:00 2001 From: Jonathan Samudio Date: Wed, 10 Apr 2024 00:12:40 +0200 Subject: [PATCH 1/3] Fix PF crash due to empty HCAL RecHits collection --- .../plugins/LegacyPFClusterProducer.cc | 58 ++++++++++--------- .../plugins/alpaka/PFClusterSoAProducer.cc | 12 ++-- .../plugins/LegacyPFRecHitProducer.cc | 35 ++++++----- .../plugins/alpaka/PFRecHitSoAProducer.cc | 12 ++-- 4 files changed, 66 insertions(+), 51 deletions(-) diff --git a/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc b/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc index 7b87809b2e478..56517e1850ef7 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc @@ -197,41 +197,45 @@ void LegacyPFClusterProducer::produce(edm::Event& event, const edm::EventSetup& auto const& pfClusterSoA = event.get(pfClusterSoAToken_).const_view(); auto const& pfRecHitFractionSoA = event.get(pfRecHitFractionSoAToken_).const_view(); - int nRH = pfRecHits.view().size(); + int nRH = 0; + if (pfRecHits->metadata().size() != 0) + nRH = pfRecHits.view().size(); reco::PFClusterCollection out; out.reserve(nRH); auto const rechitsHandle = event.getHandle(recHitsLabel_); + + if (nRH != 0) { + // Build PFClusters in legacy format + std::vector nTopoSeeds(nRH, 0); - // Build PFClusters in legacy format - std::vector nTopoSeeds(nRH, 0); + for (int i = 0; i < pfClusterSoA.nSeeds(); i++) { + nTopoSeeds[pfClusterSoA[i].topoId()]++; + } - for (int i = 0; i < pfClusterSoA.nSeeds(); i++) { - nTopoSeeds[pfClusterSoA[i].topoId()]++; - } + // Looping over SoA PFClusters to produce legacy PFCluster collection + for (int i = 0; i < pfClusterSoA.nSeeds(); i++) { + unsigned int n = pfClusterSoA[i].seedRHIdx(); + reco::PFCluster temp; + temp.setSeed((*rechitsHandle)[n].detId()); // Pulling the detId of this PFRecHit from the legacy format input + int offset = pfClusterSoA[i].rhfracOffset(); + for (int k = offset; k < (offset + pfClusterSoA[i].rhfracSize()) && k >= 0; + k++) { // Looping over PFRecHits in the same topo cluster + if (pfRecHitFractionSoA[k].pfrhIdx() < nRH && pfRecHitFractionSoA[k].pfrhIdx() > -1 && + pfRecHitFractionSoA[k].frac() > 0.0) { + const reco::PFRecHitRef& refhit = reco::PFRecHitRef(rechitsHandle, pfRecHitFractionSoA[k].pfrhIdx()); + temp.addRecHitFraction(reco::PFRecHitFraction(refhit, pfRecHitFractionSoA[k].frac())); + } + } - // Looping over SoA PFClusters to produce legacy PFCluster collection - for (int i = 0; i < pfClusterSoA.nSeeds(); i++) { - unsigned int n = pfClusterSoA[i].seedRHIdx(); - reco::PFCluster temp; - temp.setSeed((*rechitsHandle)[n].detId()); // Pulling the detId of this PFRecHit from the legacy format input - int offset = pfClusterSoA[i].rhfracOffset(); - for (int k = offset; k < (offset + pfClusterSoA[i].rhfracSize()) && k >= 0; - k++) { // Looping over PFRecHits in the same topo cluster - if (pfRecHitFractionSoA[k].pfrhIdx() < nRH && pfRecHitFractionSoA[k].pfrhIdx() > -1 && - pfRecHitFractionSoA[k].frac() > 0.0) { - const reco::PFRecHitRef& refhit = reco::PFRecHitRef(rechitsHandle, pfRecHitFractionSoA[k].pfrhIdx()); - temp.addRecHitFraction(reco::PFRecHitFraction(refhit, pfRecHitFractionSoA[k].frac())); + // Now PFRecHitFraction of this PFCluster is set. Now compute calculateAndSetPosition (energy, position etc) + if (nTopoSeeds[pfClusterSoA[i].topoId()] == 1 && allCellsPositionCalc_) { + allCellsPositionCalc_->calculateAndSetPosition(temp, paramPF); + } else { + positionCalc_->calculateAndSetPosition(temp, paramPF); + } + out.emplace_back(std::move(temp)); } - } - - // Now PFRecHitFraction of this PFCluster is set. Now compute calculateAndSetPosition (energy, position etc) - if (nTopoSeeds[pfClusterSoA[i].topoId()] == 1 && allCellsPositionCalc_) { - allCellsPositionCalc_->calculateAndSetPosition(temp, paramPF); - } else { - positionCalc_->calculateAndSetPosition(temp, paramPF); - } - out.emplace_back(std::move(temp)); } event.emplace(legacyPfClustersToken_, std::move(out)); diff --git a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc index 78af328dc6c15..27c4997dcb92b 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc @@ -29,16 +29,20 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { const reco::PFClusterParamsDeviceCollection& params = setup.getData(pfClusParamsToken); const reco::PFRecHitHCALTopologyDeviceCollection& topology = setup.getData(topologyToken_); const reco::PFRecHitHostCollection& pfRecHits = event.get(inputPFRecHitSoA_Token_); - const int nRH = pfRecHits->size(); + int nRH = 0; + if (pfRecHits->metadata().size() != 0) + nRH = pfRecHits->size(); reco::PFClusteringVarsDeviceCollection pfClusteringVars{nRH, event.queue()}; reco::PFClusteringEdgeVarsDeviceCollection pfClusteringEdgeVars{(nRH * 8), event.queue()}; reco::PFClusterDeviceCollection pfClusters{nRH, event.queue()}; reco::PFRecHitFractionDeviceCollection pfrhFractions{nRH * pfRecHitFractionAllocation_, event.queue()}; - PFClusterProducerKernel kernel(event.queue(), pfRecHits); - kernel.execute( - event.queue(), params, topology, pfClusteringVars, pfClusteringEdgeVars, pfRecHits, pfClusters, pfrhFractions); + if (nRH != 0) { + PFClusterProducerKernel kernel(event.queue(), pfRecHits); + kernel.execute( + event.queue(), params, topology, pfClusteringVars, pfClusteringEdgeVars, pfRecHits, pfClusters, pfrhFractions); + } if (synchronise_) alpaka::wait(event.queue()); diff --git a/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc b/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc index cf4bb49eff850..600f3b945a45d 100644 --- a/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc +++ b/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc @@ -54,23 +54,28 @@ void LegacyPFRecHitProducer::produce(edm::Event& event, const edm::EventSetup& s const reco::PFRecHitHostCollection::ConstView& alpakaPfRecHits = pfRecHitsAlpakaSoA.const_view(); reco::PFRecHitCollection out; - out.reserve(alpakaPfRecHits.size()); + int reserveSize = 0; + if (alpakaPfRecHits.metadata().size() != 0) + reserveSize = alpakaPfRecHits.size(); + out.reserve(reserveSize); - for (size_t i = 0; i < alpakaPfRecHits.size(); i++) { - reco::PFRecHit& pfrh = - out.emplace_back(caloGeo_.at(alpakaPfRecHits[i].layer())->getGeometry(alpakaPfRecHits[i].detId()), - alpakaPfRecHits[i].detId(), - alpakaPfRecHits[i].layer(), - alpakaPfRecHits[i].energy()); - pfrh.setTime(alpakaPfRecHits[i].time()); - pfrh.setDepth(alpakaPfRecHits[i].depth()); + if (alpakaPfRecHits.metadata().size() != 0) { + for (size_t i = 0; i < alpakaPfRecHits.size(); i++) { + reco::PFRecHit& pfrh = + out.emplace_back(caloGeo_.at(alpakaPfRecHits[i].layer())->getGeometry(alpakaPfRecHits[i].detId()), + alpakaPfRecHits[i].detId(), + alpakaPfRecHits[i].layer(), + alpakaPfRecHits[i].energy()); + pfrh.setTime(alpakaPfRecHits[i].time()); + pfrh.setDepth(alpakaPfRecHits[i].depth()); - // order in Alpaka: N, S, E, W,NE,SW,SE,NW - const short eta[8] = {0, 0, 1, -1, 1, -1, 1, -1}; - const short phi[8] = {1, -1, 0, 0, 1, -1, -1, 1}; - for (size_t k = 0; k < 8; k++) - if (alpakaPfRecHits[i].neighbours()(k) != -1) - pfrh.addNeighbour(eta[k], phi[k], 0, alpakaPfRecHits[i].neighbours()(k)); + // order in Alpaka: N, S, E, W,NE,SW,SE,NW + const short eta[8] = {0, 0, 1, -1, 1, -1, 1, -1}; + const short phi[8] = {1, -1, 0, 0, 1, -1, -1, 1}; + for (size_t k = 0; k < 8; k++) + if (alpakaPfRecHits[i].neighbours()(k) != -1) + pfrh.addNeighbour(eta[k], phi[k], 0, alpakaPfRecHits[i].neighbours()(k)); + } } event.emplace(legacyPfRecHitsToken_, out); diff --git a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc index ab191cb54c0fb..9f0f2e07ea92c 100644 --- a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc +++ b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc @@ -38,11 +38,13 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { num_recHits += event.get(token.first)->metadata().size(); reco::PFRecHitDeviceCollection pfRecHits{(int)num_recHits, event.queue()}; - - PFRecHitProducerKernel kernel{event.queue(), num_recHits}; - for (const auto& token : recHitsToken_) - kernel.processRecHits(event.queue(), event.get(token.first), setup.getData(token.second), topology, pfRecHits); - kernel.associateTopologyInfo(event.queue(), topology, pfRecHits); + + if (pfRecHits->metadata().size() != 0) { + PFRecHitProducerKernel kernel{event.queue(), num_recHits}; + for (const auto& token : recHitsToken_) + kernel.processRecHits(event.queue(), event.get(token.first), setup.getData(token.second), topology, pfRecHits); + kernel.associateTopologyInfo(event.queue(), topology, pfRecHits); + } if (synchronise_) alpaka::wait(event.queue()); From 141e0b4ddc483f4b96fdeb5f88421d9ac66a7e77 Mon Sep 17 00:00:00 2001 From: Jonathan Samudio Date: Wed, 10 Apr 2024 17:18:54 +0200 Subject: [PATCH 2/3] Formatting changes --- .../plugins/LegacyPFClusterProducer.cc | 56 +++++++++---------- .../plugins/alpaka/PFClusterSoAProducer.cc | 10 +++- .../plugins/LegacyPFRecHitProducer.cc | 34 +++++------ .../plugins/alpaka/PFRecHitSoAProducer.cc | 5 +- 4 files changed, 56 insertions(+), 49 deletions(-) diff --git a/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc b/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc index 56517e1850ef7..21a589918ee1e 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc @@ -198,44 +198,44 @@ void LegacyPFClusterProducer::produce(edm::Event& event, const edm::EventSetup& auto const& pfRecHitFractionSoA = event.get(pfRecHitFractionSoAToken_).const_view(); int nRH = 0; - if (pfRecHits->metadata().size() != 0) - nRH = pfRecHits.view().size(); + if (pfRecHits->metadata().size() != 0) + nRH = pfRecHits.view().size(); reco::PFClusterCollection out; out.reserve(nRH); auto const rechitsHandle = event.getHandle(recHitsLabel_); - + if (nRH != 0) { - // Build PFClusters in legacy format - std::vector nTopoSeeds(nRH, 0); + // Build PFClusters in legacy format + std::vector nTopoSeeds(nRH, 0); - for (int i = 0; i < pfClusterSoA.nSeeds(); i++) { - nTopoSeeds[pfClusterSoA[i].topoId()]++; - } + for (int i = 0; i < pfClusterSoA.nSeeds(); i++) { + nTopoSeeds[pfClusterSoA[i].topoId()]++; + } - // Looping over SoA PFClusters to produce legacy PFCluster collection - for (int i = 0; i < pfClusterSoA.nSeeds(); i++) { - unsigned int n = pfClusterSoA[i].seedRHIdx(); - reco::PFCluster temp; - temp.setSeed((*rechitsHandle)[n].detId()); // Pulling the detId of this PFRecHit from the legacy format input - int offset = pfClusterSoA[i].rhfracOffset(); - for (int k = offset; k < (offset + pfClusterSoA[i].rhfracSize()) && k >= 0; - k++) { // Looping over PFRecHits in the same topo cluster - if (pfRecHitFractionSoA[k].pfrhIdx() < nRH && pfRecHitFractionSoA[k].pfrhIdx() > -1 && - pfRecHitFractionSoA[k].frac() > 0.0) { - const reco::PFRecHitRef& refhit = reco::PFRecHitRef(rechitsHandle, pfRecHitFractionSoA[k].pfrhIdx()); - temp.addRecHitFraction(reco::PFRecHitFraction(refhit, pfRecHitFractionSoA[k].frac())); - } + // Looping over SoA PFClusters to produce legacy PFCluster collection + for (int i = 0; i < pfClusterSoA.nSeeds(); i++) { + unsigned int n = pfClusterSoA[i].seedRHIdx(); + reco::PFCluster temp; + temp.setSeed((*rechitsHandle)[n].detId()); // Pulling the detId of this PFRecHit from the legacy format input + int offset = pfClusterSoA[i].rhfracOffset(); + for (int k = offset; k < (offset + pfClusterSoA[i].rhfracSize()) && k >= 0; + k++) { // Looping over PFRecHits in the same topo cluster + if (pfRecHitFractionSoA[k].pfrhIdx() < nRH && pfRecHitFractionSoA[k].pfrhIdx() > -1 && + pfRecHitFractionSoA[k].frac() > 0.0) { + const reco::PFRecHitRef& refhit = reco::PFRecHitRef(rechitsHandle, pfRecHitFractionSoA[k].pfrhIdx()); + temp.addRecHitFraction(reco::PFRecHitFraction(refhit, pfRecHitFractionSoA[k].frac())); } + } - // Now PFRecHitFraction of this PFCluster is set. Now compute calculateAndSetPosition (energy, position etc) - if (nTopoSeeds[pfClusterSoA[i].topoId()] == 1 && allCellsPositionCalc_) { - allCellsPositionCalc_->calculateAndSetPosition(temp, paramPF); - } else { - positionCalc_->calculateAndSetPosition(temp, paramPF); - } - out.emplace_back(std::move(temp)); + // Now PFRecHitFraction of this PFCluster is set. Now compute calculateAndSetPosition (energy, position etc) + if (nTopoSeeds[pfClusterSoA[i].topoId()] == 1 && allCellsPositionCalc_) { + allCellsPositionCalc_->calculateAndSetPosition(temp, paramPF); + } else { + positionCalc_->calculateAndSetPosition(temp, paramPF); } + out.emplace_back(std::move(temp)); + } } event.emplace(legacyPfClustersToken_, std::move(out)); diff --git a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc index 27c4997dcb92b..51e0237c29fed 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc @@ -40,8 +40,14 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { if (nRH != 0) { PFClusterProducerKernel kernel(event.queue(), pfRecHits); - kernel.execute( - event.queue(), params, topology, pfClusteringVars, pfClusteringEdgeVars, pfRecHits, pfClusters, pfrhFractions); + kernel.execute(event.queue(), + params, + topology, + pfClusteringVars, + pfClusteringEdgeVars, + pfRecHits, + pfClusters, + pfrhFractions); } if (synchronise_) diff --git a/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc b/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc index 600f3b945a45d..2e256ca761a56 100644 --- a/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc +++ b/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc @@ -55,27 +55,27 @@ void LegacyPFRecHitProducer::produce(edm::Event& event, const edm::EventSetup& s reco::PFRecHitCollection out; int reserveSize = 0; - if (alpakaPfRecHits.metadata().size() != 0) - reserveSize = alpakaPfRecHits.size(); + if (alpakaPfRecHits.metadata().size() != 0) + reserveSize = alpakaPfRecHits.size(); out.reserve(reserveSize); if (alpakaPfRecHits.metadata().size() != 0) { - for (size_t i = 0; i < alpakaPfRecHits.size(); i++) { - reco::PFRecHit& pfrh = - out.emplace_back(caloGeo_.at(alpakaPfRecHits[i].layer())->getGeometry(alpakaPfRecHits[i].detId()), - alpakaPfRecHits[i].detId(), - alpakaPfRecHits[i].layer(), - alpakaPfRecHits[i].energy()); - pfrh.setTime(alpakaPfRecHits[i].time()); - pfrh.setDepth(alpakaPfRecHits[i].depth()); + for (size_t i = 0; i < alpakaPfRecHits.size(); i++) { + reco::PFRecHit& pfrh = + out.emplace_back(caloGeo_.at(alpakaPfRecHits[i].layer())->getGeometry(alpakaPfRecHits[i].detId()), + alpakaPfRecHits[i].detId(), + alpakaPfRecHits[i].layer(), + alpakaPfRecHits[i].energy()); + pfrh.setTime(alpakaPfRecHits[i].time()); + pfrh.setDepth(alpakaPfRecHits[i].depth()); - // order in Alpaka: N, S, E, W,NE,SW,SE,NW - const short eta[8] = {0, 0, 1, -1, 1, -1, 1, -1}; - const short phi[8] = {1, -1, 0, 0, 1, -1, -1, 1}; - for (size_t k = 0; k < 8; k++) - if (alpakaPfRecHits[i].neighbours()(k) != -1) - pfrh.addNeighbour(eta[k], phi[k], 0, alpakaPfRecHits[i].neighbours()(k)); - } + // order in Alpaka: N, S, E, W,NE,SW,SE,NW + const short eta[8] = {0, 0, 1, -1, 1, -1, 1, -1}; + const short phi[8] = {1, -1, 0, 0, 1, -1, -1, 1}; + for (size_t k = 0; k < 8; k++) + if (alpakaPfRecHits[i].neighbours()(k) != -1) + pfrh.addNeighbour(eta[k], phi[k], 0, alpakaPfRecHits[i].neighbours()(k)); + } } event.emplace(legacyPfRecHitsToken_, out); diff --git a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc index 9f0f2e07ea92c..c3d0692944ce1 100644 --- a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc +++ b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc @@ -38,11 +38,12 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { num_recHits += event.get(token.first)->metadata().size(); reco::PFRecHitDeviceCollection pfRecHits{(int)num_recHits, event.queue()}; - + if (pfRecHits->metadata().size() != 0) { PFRecHitProducerKernel kernel{event.queue(), num_recHits}; for (const auto& token : recHitsToken_) - kernel.processRecHits(event.queue(), event.get(token.first), setup.getData(token.second), topology, pfRecHits); + kernel.processRecHits( + event.queue(), event.get(token.first), setup.getData(token.second), topology, pfRecHits); kernel.associateTopologyInfo(event.queue(), topology, pfRecHits); } From 0398bdc44aa0b6cac13c0b1a37ee479bc7d52ff9 Mon Sep 17 00:00:00 2001 From: Jonathan Samudio Date: Wed, 10 Apr 2024 19:02:11 +0200 Subject: [PATCH 3/3] Simplify size checks --- .../PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc | 5 +---- .../PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc b/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc index 2e256ca761a56..b71478ce3781a 100644 --- a/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc +++ b/RecoParticleFlow/PFRecHitProducer/plugins/LegacyPFRecHitProducer.cc @@ -54,12 +54,9 @@ void LegacyPFRecHitProducer::produce(edm::Event& event, const edm::EventSetup& s const reco::PFRecHitHostCollection::ConstView& alpakaPfRecHits = pfRecHitsAlpakaSoA.const_view(); reco::PFRecHitCollection out; - int reserveSize = 0; - if (alpakaPfRecHits.metadata().size() != 0) - reserveSize = alpakaPfRecHits.size(); - out.reserve(reserveSize); if (alpakaPfRecHits.metadata().size() != 0) { + out.reserve(alpakaPfRecHits.size()); for (size_t i = 0; i < alpakaPfRecHits.size(); i++) { reco::PFRecHit& pfrh = out.emplace_back(caloGeo_.at(alpakaPfRecHits[i].layer())->getGeometry(alpakaPfRecHits[i].detId()), diff --git a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc index c3d0692944ce1..34cb54d550333 100644 --- a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc +++ b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc @@ -39,7 +39,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { reco::PFRecHitDeviceCollection pfRecHits{(int)num_recHits, event.queue()}; - if (pfRecHits->metadata().size() != 0) { + if (num_recHits != 0) { PFRecHitProducerKernel kernel{event.queue(), num_recHits}; for (const auto& token : recHitsToken_) kernel.processRecHits(