File indexing completed on 2025-01-14 23:17:10
0001 #ifndef RecoParticleFlow_PFClusterProducer_PFClusterProducerAlpakaKernel_h
0002 #define RecoParticleFlow_PFClusterProducer_PFClusterProducerAlpakaKernel_h
0003
0004 #include "DataFormats/ParticleFlowReco/interface/alpaka/PFClusterDeviceCollection.h"
0005 #include "DataFormats/ParticleFlowReco/interface/alpaka/PFRecHitDeviceCollection.h"
0006 #include "DataFormats/ParticleFlowReco/interface/alpaka/PFRecHitFractionDeviceCollection.h"
0007 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0008 #include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringEdgeVarsDeviceCollection.h"
0009 #include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringVarsDeviceCollection.h"
0010 #include "RecoParticleFlow/PFRecHitProducer/interface/alpaka/PFRecHitTopologyDeviceCollection.h"
0011
0012 #include "PFClusterParamsSoA.h"
0013
0014 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0015
0016 namespace reco::pfClustering {
0017 struct Position4 {
0018 float x;
0019 float y;
0020 float z;
0021 float w;
0022 };
0023
0024 struct Position3 {
0025 float x;
0026 float y;
0027 float z;
0028 };
0029
0030 struct Neighbours4 {
0031 int x;
0032 int y;
0033 int z;
0034 int w;
0035 };
0036 }
0037
0038 class PFClusterProducerKernel {
0039 public:
0040 explicit PFClusterProducerKernel(Queue& queue);
0041
0042 void seedTopoAndContract(Queue& queue,
0043 const ::reco::PFClusterParamsSoA::ConstView params,
0044 const reco::PFRecHitHCALTopologyDeviceCollection& topology,
0045 reco::PFClusteringVarsDeviceCollection& pfClusteringVars,
0046 reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars,
0047 const reco::PFRecHitDeviceCollection& pfRecHits,
0048 int nRH,
0049 reco::PFClusterDeviceCollection& pfClusters,
0050 uint32_t* __restrict__ nRHF);
0051
0052 void cluster(Queue& queue,
0053 const ::reco::PFClusterParamsSoA::ConstView params,
0054 const reco::PFRecHitHCALTopologyDeviceCollection& topology,
0055 reco::PFClusteringVarsDeviceCollection& pfClusteringVars,
0056 reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars,
0057 const reco::PFRecHitDeviceCollection& pfRecHits,
0058 int nRH,
0059 reco::PFClusterDeviceCollection& pfClusters,
0060 reco::PFRecHitFractionDeviceCollection& pfrhFractions);
0061
0062 private:
0063 cms::alpakatools::device_buffer<Device, uint32_t> nSeeds;
0064 cms::alpakatools::device_buffer<Device, reco::pfClustering::Position4[]> globalClusterPos;
0065 cms::alpakatools::device_buffer<Device, reco::pfClustering::Position4[]> globalPrevClusterPos;
0066 cms::alpakatools::device_buffer<Device, float[]> globalClusterEnergy;
0067 cms::alpakatools::device_buffer<Device, float[]> globalRhFracSum;
0068 cms::alpakatools::device_buffer<Device, int[]> globalSeeds;
0069 cms::alpakatools::device_buffer<Device, int[]> globalRechits;
0070 };
0071
0072 }
0073
0074 #endif