File indexing completed on 2024-04-06 12:05:21
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/Portable/interface/PortableHostCollection.h"
0009 #include "DataFormats/TrackingRecHitSoA/interface/TrackingRecHitsSoA.h"
0010 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0011
0012 template <typename TrackerTraits>
0013 class TrackingRecHitHost : public PortableHostCollection<TrackingRecHitLayout<TrackerTraits>> {
0014 public:
0015 using hitSoA = TrackingRecHitSoA<TrackerTraits>;
0016
0017
0018 using PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>::view;
0019 using PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>::const_view;
0020 using PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>::buffer;
0021
0022 TrackingRecHitHost() = default;
0023
0024
0025 template <typename TQueue>
0026 explicit TrackingRecHitHost(TQueue queue, uint32_t nHits)
0027 : PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>(nHits, queue) {}
0028
0029
0030 template <typename TQueue>
0031 explicit TrackingRecHitHost(TQueue queue, uint32_t nHits, int32_t offsetBPIX2, uint32_t const* hitsModuleStart)
0032 : PortableHostCollection<TrackingRecHitLayout<TrackerTraits>>(nHits, queue) {
0033 std::copy(hitsModuleStart, hitsModuleStart + TrackerTraits::numberOfModules + 1, view().hitsModuleStart().data());
0034 view().offsetBPIX2() = offsetBPIX2;
0035 }
0036
0037 uint32_t nHits() const { return view().metadata().size(); }
0038
0039 int32_t offsetBPIX2() const { return view().offsetBPIX2(); }
0040
0041 uint32_t const* hitsModuleStart() const { return view().hitsModuleStart().data(); }
0042
0043
0044 template <typename TQueue>
0045 void updateFromDevice(TQueue) {}
0046 };
0047
0048 using TrackingRecHitHostPhase1 = TrackingRecHitHost<pixelTopology::Phase1>;
0049 using TrackingRecHitHostPhase2 = TrackingRecHitHost<pixelTopology::Phase2>;
0050 using TrackingRecHitHostHIonPhase1 = TrackingRecHitHost<pixelTopology::HIonPhase1>;
0051
0052 #endif