Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:28:31

0001 #ifndef RecoTracker_PixelSeeding_plugins_alpaka_CAHitNtupletGenerator_h
0002 #define RecoTracker_PixelSeeding_plugins_alpaka_CAHitNtupletGenerator_h
0003 
0004 #include <alpaka/alpaka.hpp>
0005 
0006 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0007 #include "DataFormats/TrackSoA/interface/TrackDefinitions.h"
0008 #include "DataFormats/TrackSoA/interface/alpaka/TracksSoACollection.h"
0009 #include "DataFormats/TrackingRecHitSoA/interface/TrackingRecHitsSoA.h"
0010 #include "DataFormats/TrackingRecHitSoA/interface/alpaka/TrackingRecHitsSoACollection.h"
0011 #include "FWCore/Framework/interface/EventSetup.h"
0012 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0014 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0015 #include "RecoLocalTracker/SiPixelRecHits/interface/pixelCPEforDevice.h"
0016 
0017 #include "CACell.h"
0018 #include "CAHitNtupletGeneratorKernels.h"
0019 #include "HelixFit.h"
0020 
0021 namespace edm {
0022   class ParameterSetDescription;
0023 }  // namespace edm
0024 
0025 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0026 
0027   template <typename TrackerTraits>
0028   class CAHitNtupletGenerator {
0029   public:
0030     using HitsView = TrackingRecHitSoAView<TrackerTraits>;
0031     using HitsConstView = TrackingRecHitSoAConstView<TrackerTraits>;
0032     using HitsOnDevice = TrackingRecHitsSoACollection<TrackerTraits>;
0033     using HitsOnHost = TrackingRecHitHost<TrackerTraits>;
0034     using hindex_type = typename TrackingRecHitSoA<TrackerTraits>::hindex_type;
0035 
0036     using HitToTuple = caStructures::HitToTupleT<TrackerTraits>;
0037     using TupleMultiplicity = caStructures::TupleMultiplicityT<TrackerTraits>;
0038     using OuterHitOfCell = caStructures::OuterHitOfCellT<TrackerTraits>;
0039 
0040     using CACell = CACellT<TrackerTraits>;
0041     using TkSoAHost = TracksHost<TrackerTraits>;
0042     using TkSoADevice = TracksSoACollection<TrackerTraits>;
0043     using HitContainer = typename reco::TrackSoA<TrackerTraits>::HitContainer;
0044     using Tuple = HitContainer;
0045 
0046     using CellNeighborsVector = caStructures::CellNeighborsVectorT<TrackerTraits>;
0047     using CellTracksVector = caStructures::CellTracksVectorT<TrackerTraits>;
0048 
0049     using Quality = ::pixelTrack::Quality;
0050 
0051     using QualityCuts = ::pixelTrack::QualityCutsT<TrackerTraits>;
0052     using Params = caHitNtupletGenerator::ParamsT<TrackerTraits>;
0053     using Counters = caHitNtupletGenerator::Counters;
0054 
0055     using ParamsOnDevice = pixelCPEforDevice::ParamsOnDeviceT<TrackerTraits>;
0056 
0057   public:
0058     CAHitNtupletGenerator(const edm::ParameterSet& cfg);
0059 
0060     static void fillPSetDescription(edm::ParameterSetDescription& desc);
0061 
0062     // NOTE: beginJob and endJob were meant to be used
0063     // to fill the statistics. This is still not implemented in Alpaka
0064     // since we are missing the begin/endJob functionality for the Alpaka
0065     // producers.
0066     //
0067     // void beginJob();
0068     // void endJob();
0069 
0070     TkSoADevice makeTuplesAsync(HitsOnDevice const& hits_d,
0071                                 ParamsOnDevice const* cpeParams,
0072                                 float bfield,
0073                                 Queue& queue) const;
0074 
0075   private:
0076     void buildDoublets(const HitsConstView& hh, Queue& queue) const;
0077 
0078     void hitNtuplets(const HitsConstView& hh, const edm::EventSetup& es, bool useRiemannFit, Queue& queue);
0079 
0080     void launchKernels(const HitsConstView& hh, bool useRiemannFit, Queue& queue) const;
0081 
0082     Params m_params;
0083   };
0084 
0085 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
0086 
0087 #endif  // RecoTracker_PixelSeeding_plugins_alpaka_CAHitNtupletGenerator_h