Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-12 03:12:13

0001 #ifndef DataFormats_TrackingRecHitSoA_interface_TrackingRecHitsHost_h
0002 #define DataFormats_TrackingRecHitSoA_interface_TrackingRecHitsHost_h
0003 
0004 #include <cstdint>
0005 
0006 #include <alpaka/alpaka.hpp>
0007 
0008 #include "DataFormats/Common/interface/Uninitialized.h"
0009 #include "DataFormats/Portable/interface/PortableHostCollection.h"
0010 #include "DataFormats/TrackingRecHitSoA/interface/TrackingRecHitsSoA.h"
0011 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0012 
0013 template <typename TrackerTraits>
0014 class TrackingRecHitHost : public PortableHostCollection<TrackingRecHitLayout<TrackerTraits>> {
0015 public:
0016   using hitSoA = TrackingRecHitSoA<TrackerTraits>;
0017 
0018   // Need to decorate the class with the inherited portable accessors being now a template
0019   using PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>::view;
0020   using PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>::const_view;
0021   using PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>::buffer;
0022 
0023   TrackingRecHitHost(edm::Uninitialized)
0024       : PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>{edm::kUninitialized} {}
0025 
0026   // Constructor which specifies only the SoA size, to be used when copying the results from the device to the host
0027   template <typename TQueue>
0028   explicit TrackingRecHitHost(TQueue queue, uint32_t nHits)
0029       : PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>(nHits, queue) {}
0030 
0031   // Constructor which specifies the SoA size, number of BPIX1 hits, and the modules entry points
0032   template <typename TQueue>
0033   explicit TrackingRecHitHost(TQueue queue, uint32_t nHits, int32_t offsetBPIX2, uint32_t const* hitsModuleStart)
0034       : PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>(nHits, queue) {
0035     std::copy(hitsModuleStart, hitsModuleStart + TrackerTraits::numberOfModules + 1, view().hitsModuleStart().data());
0036     view().offsetBPIX2() = offsetBPIX2;
0037   }
0038 
0039   uint32_t nHits() const { return view().metadata().size(); }
0040 
0041   int32_t offsetBPIX2() const { return view().offsetBPIX2(); }
0042 
0043   uint32_t const* hitsModuleStart() const { return view().hitsModuleStart().data(); }
0044 
0045   // do nothing for a host collection
0046   template <typename TQueue>
0047   void updateFromDevice(TQueue) {}
0048 };
0049 
0050 using TrackingRecHitHostPhase1 = TrackingRecHitHost<pixelTopology::Phase1>;
0051 using TrackingRecHitHostPhase2 = TrackingRecHitHost<pixelTopology::Phase2>;
0052 using TrackingRecHitHostHIonPhase1 = TrackingRecHitHost<pixelTopology::HIonPhase1>;
0053 
0054 #endif  // DataFormats_TrackingRecHitSoA_interface_TrackingRecHitsHost_h