CMS 3D CMS Logo

PFRecHitSoAProducer.cc
Go to the documentation of this file.
1 #include <utility>
2 #include <vector>
3 
4 #include <alpaka/alpaka.hpp>
5 
11 #include "CalorimeterDefinitions.h"
12 
13 #include "PFRecHitProducerKernel.h"
14 
16  using namespace particleFlowRecHitProducer;
17 
18  template <typename CAL>
20  public:
22  : topologyToken_(esConsumes(config.getParameter<edm::ESInputTag>("topology"))),
23  pfRecHitsToken_(produces()),
24  synchronise_(config.getUntrackedParameter<bool>("synchronise")) {
25  // Workaround until the ProductID problem in issue https://github.com/cms-sw/cmssw/issues/44643 is fixed
26 #ifdef ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED
27  producesTemporarily("edm::DeviceProduct<alpaka_cuda_async::reco::PFRecHitDeviceCollection>");
28 #endif
29 
30  const std::vector<edm::ParameterSet> producers = config.getParameter<std::vector<edm::ParameterSet>>("producers");
31  recHitsToken_.reserve(producers.size());
32  for (const edm::ParameterSet& producer : producers) {
33  recHitsToken_.emplace_back(consumes(producer.getParameter<edm::InputTag>("src")),
34  esConsumes(producer.getParameter<edm::ESInputTag>("params")));
35  }
36  }
37 
39  const typename CAL::TopologyTypeDevice& topology = setup.getData(topologyToken_);
40 
41  uint32_t num_recHits = 0;
42  for (const auto& token : recHitsToken_)
43  num_recHits += event.get(token.first)->metadata().size();
44 
45  reco::PFRecHitDeviceCollection pfRecHits{(int)num_recHits, event.queue()};
46 
47  if (num_recHits != 0) {
48  PFRecHitProducerKernel<CAL> kernel{event.queue(), num_recHits};
49  for (const auto& token : recHitsToken_)
50  kernel.processRecHits(
51  event.queue(), event.get(token.first), setup.getData(token.second), topology, pfRecHits);
52  kernel.associateTopologyInfo(event.queue(), topology, pfRecHits);
53  }
54 
55  if (synchronise_)
56  alpaka::wait(event.queue());
57 
58  event.emplace(pfRecHitsToken_, std::move(pfRecHits));
59  }
60 
61  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
64  producers.add<edm::InputTag>("src", edm::InputTag(""))->setComment("Input CaloRecHitSoA");
65  producers.add<edm::ESInputTag>("params", edm::ESInputTag(""))->setComment("Quality cut parameters");
66  std::vector<edm::ParameterSet> producersDefault(1);
67  producersDefault[0].addParameter<edm::InputTag>("src", edm::InputTag(""));
68  producersDefault[0].addParameter<edm::ESInputTag>("params", edm::ESInputTag(""));
69  desc.addVPSet("producers", producers, producersDefault)->setComment("List of inputs and quality cuts");
70  desc.add<edm::ESInputTag>("topology", edm::ESInputTag(""))->setComment("Topology information");
71  desc.addUntracked<bool>("synchronise", false)
72  ->setComment("Add synchronisation point after execution (for benchmarking asynchronous execution)");
73  descriptions.addWithDefaultLabel(desc);
74  }
75 
76  private:
78  std::vector<std::pair<device::EDGetToken<typename CAL::CaloRecHitSoATypeDevice>,
82  const bool synchronise_;
83  };
84 
87 } // namespace ALPAKA_ACCELERATOR_NAMESPACE
88 
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
Definition: config.py:1
PortableCollection<::reco::PFRecHitSoA > PFRecHitDeviceCollection
const device::EDPutToken< reco::PFRecHitDeviceCollection > pfRecHitsToken_
PFRecHitSoAProducer< HCAL > PFRecHitSoAProducerHCAL
void produce(edm::StreamID, device::Event &event, const device::EventSetup &setup) const override
const device::ESGetToken< typename CAL::TopologyTypeDevice, typename CAL::TopologyRecordType > topologyToken_
PFRecHitSoAProducer(edm::ParameterSet const &config)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
HLT enums.
void processRecHits(Queue &queue, const typename CAL::CaloRecHitSoATypeDevice &recHits, const typename CAL::ParameterType &params, const typename CAL::TopologyTypeDevice &topology, reco::PFRecHitDeviceCollection &pfRecHits)
#define DEFINE_FWK_ALPAKA_MODULE(name)
Definition: MakerMacros.h:16
std::vector< std::pair< device::EDGetToken< typename CAL::CaloRecHitSoATypeDevice >, device::ESGetToken< typename CAL::ParameterType, typename CAL::ParameterRecordType > > > recHitsToken_
def move(src, dest)
Definition: eostools.py:511
PFRecHitSoAProducer< ECAL > PFRecHitSoAProducerECAL
Definition: event.py:1