Back to home page

Project CMSSW displayed by LXR

 
 

    


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   }  // namespace reco::pfClustering
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 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
0073 
0074 #endif