Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-07-03 00:42:42

0001 #ifndef RecoTracker_PixelSeeding_plugins_alpaka_CAStructures_h
0002 #define RecoTracker_PixelSeeding_plugins_alpaka_CAStructures_h
0003 
0004 #include "HeterogeneousCore/AlpakaInterface/interface/SimpleVector.h"
0005 #include "HeterogeneousCore/AlpakaInterface/interface/VecArray.h"
0006 #include "HeterogeneousCore/AlpakaInterface/interface/HistoContainer.h"
0007 
0008 namespace caStructures {
0009 
0010   using Quality = ::pixelTrack::Quality;
0011 
0012   //Configuration params common to all topologies, for the algorithms
0013   struct AlgoParams {
0014     // Container sizes
0015     float avgHitsPerTrack_;
0016     float avgCellsPerHit_;
0017     float avgCellsPerCell_;
0018     float avgTracksPerCell_;
0019 
0020     // Algorithm Parameters
0021     uint16_t minHitsPerNtuplet_;
0022     uint16_t minHitsForSharingCut_;
0023     float ptmin_;
0024     float hardCurvCut_;
0025     float cellZ0Cut_;
0026     float cellPtCut_;
0027 
0028     // Pixel Cluster Cut Params
0029     float dzdrFact_;  // from dz/dr to "DY"
0030     int16_t minYsizeB1_;
0031     int16_t minYsizeB2_;
0032     int16_t maxDYsize12_;
0033     int16_t maxDYsize_;
0034     int16_t maxDYPred_;
0035 
0036     // Flags
0037     bool useRiemannFit_;
0038     bool fitNas4_;
0039     bool earlyFishbone_;
0040     bool lateFishbone_;
0041     bool doStats_;
0042     bool doSharedHitCut_;
0043     bool dupPassThrough_;
0044     bool useSimpleTripletCleaner_;
0045   };
0046 
0047   // Hits data formats
0048   using HitsView = ::reco::TrackingRecHitView;
0049   using HitModulesConstView = ::reco::HitModuleSoAConstView;
0050   using HitsConstView = ::reco::TrackingRecHitConstView;
0051 
0052   //Tracks data formats
0053   using TkSoAView = ::reco::TrackSoAView;
0054   using TkHitsSoAView = ::reco::TrackHitSoAView;
0055 
0056   //Indices for hits, tracks and cells
0057   using hindex_type = uint32_t;
0058   using tindex_type = uint32_t;
0059   using cindex_type = uint32_t;
0060 
0061   using GenericContainer = cms::alpakatools::OneToManyAssocRandomAccess<hindex_type, -1, -1>;
0062   using GenericContainerStorage = typename GenericContainer::index_type;
0063   using GenericContainerOffsets = typename GenericContainer::Counter;
0064   using GenericContainerView = typename GenericContainer::View;
0065 
0066   using SequentialContainer = cms::alpakatools::OneToManyAssocSequential<hindex_type, -1, -1>;
0067   using SequentialContainerStorage = typename SequentialContainer::index_type;
0068   using SequentialContainerOffsets = typename SequentialContainer::Counter;
0069   using SequentialContainerView = typename SequentialContainer::View;
0070 
0071   template <typename TrackerTraits>
0072   using PhiBinnerT =
0073       cms::alpakatools::HistoContainer<int16_t, 256, -1, 8 * sizeof(int16_t), hindex_type, TrackerTraits::numberOfLayers>;
0074 
0075   template <typename TrackerTraits>
0076   using CellNeighborsT =
0077       cms::alpakatools::VecArray<typename TrackerTraits::cindex_type, TrackerTraits::maxCellNeighbors>;
0078 
0079   template <typename TrackerTraits>
0080   using CellTracksT = cms::alpakatools::VecArray<tindex_type, TrackerTraits::maxCellTracks>;
0081 
0082   template <typename TrackerTraits>
0083   using CellNeighborsVectorT = cms::alpakatools::SimpleVector<CellNeighborsT<TrackerTraits>>;
0084 
0085   template <typename TrackerTraits>
0086   using CellTracksVectorT = cms::alpakatools::SimpleVector<CellTracksT<TrackerTraits>>;
0087 
0088   template <typename TrackerTraits>
0089   using OuterHitOfCellContainerT = cms::alpakatools::VecArray<uint32_t, TrackerTraits::maxCellsPerHit>;
0090 
0091   template <typename TrackerTraits>
0092   using TupleMultiplicityT = cms::alpakatools::
0093       OneToManyAssocRandomAccess<tindex_type, TrackerTraits::maxHitsOnTrack + 1, TrackerTraits::maxNumberOfTuples>;
0094 
0095   template <typename TrackerTraits>
0096   using HitContainerT =
0097       cms::alpakatools::OneToManyAssocSequential<uint32_t,
0098                                                  TrackerTraits::maxNumberOfTuples + 1,
0099                                                  TrackerTraits::avgHitsPerTrack * TrackerTraits::maxNumberOfTuples>;
0100 
0101   template <typename TrackerTraits>
0102   using HitToTupleT =
0103       cms::alpakatools::OneToManyAssocRandomAccess<tindex_type,
0104                                                    -1,
0105                                                    TrackerTraits::maxNumberOfTuples *
0106                                                        TrackerTraits::avgHitsPerTrack>;  // 3.5 should be enough
0107 
0108   template <typename TrackerTraits>
0109   using TuplesContainerT = cms::alpakatools::OneToManyAssocRandomAccess<typename TrackerTraits::hindex_type,
0110                                                                         TrackerTraits::maxNumberOfTuples,
0111                                                                         TrackerTraits::maxHitsForContainers>;
0112 
0113   template <typename TrackerTraits>
0114   struct OuterHitOfCellT {
0115     OuterHitOfCellContainerT<TrackerTraits>* container;
0116     int32_t offset;
0117     constexpr auto& operator[](int i) { return container[i - offset]; }
0118     constexpr auto const& operator[](int i) const { return container[i - offset]; }
0119   };
0120 
0121 }  // namespace caStructures
0122 
0123 #endif  // RecoTracker_PixelSeeding_plugins_alpaka_CAStructures_h