Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:03:46

0001 #ifndef CUDADataFormats_RecHits_TrackingRecHitsUtilities_h
0002 #define CUDADataFormats_RecHits_TrackingRecHitsUtilities_h
0003 
0004 #include <Eigen/Dense>
0005 #include "Geometry/CommonTopologies/interface/SimplePixelTopology.h"
0006 #include "HeterogeneousCore/CUDAUtilities/interface/HistoContainer.h"
0007 #include "DataFormats/SoATemplate/interface/SoALayout.h"
0008 #include "RecoLocalTracker/SiPixelRecHits/interface/pixelCPEforGPU.h"
0009 #include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h"
0010 #include "SiPixelHitStatus.h"
0011 
0012 template <typename TrackerTraits>
0013 struct TrackingRecHitSoA {
0014   using hindex_type = typename TrackerTraits::hindex_type;
0015   using PhiBinner = cms::cuda::HistoContainer<int16_t,
0016                                               256,
0017                                               -1,
0018                                               8 * sizeof(int16_t),
0019                                               hindex_type,
0020                                               TrackerTraits::numberOfLayers>;  //28 for phase2 geometry
0021 
0022   using PhiBinnerStorageType = typename PhiBinner::index_type;
0023   using AverageGeometry = pixelTopology::AverageGeometryT<TrackerTraits>;
0024   using ParamsOnGPU = pixelCPEforGPU::ParamsOnGPUT<TrackerTraits>;
0025 
0026   using HitLayerStartArray = std::array<hindex_type, TrackerTraits::numberOfLayers + 1>;
0027   using HitModuleStartArray = std::array<hindex_type, TrackerTraits::numberOfModules + 1>;
0028 
0029   //Is it better to have two split?
0030   GENERATE_SOA_LAYOUT(TrackingRecHitSoALayout,
0031                       SOA_COLUMN(float, xLocal),
0032                       SOA_COLUMN(float, yLocal),
0033                       SOA_COLUMN(float, xerrLocal),
0034                       SOA_COLUMN(float, yerrLocal),
0035                       SOA_COLUMN(float, xGlobal),
0036                       SOA_COLUMN(float, yGlobal),
0037                       SOA_COLUMN(float, zGlobal),
0038                       SOA_COLUMN(float, rGlobal),
0039                       SOA_COLUMN(int16_t, iphi),
0040                       SOA_COLUMN(SiPixelHitStatusAndCharge, chargeAndStatus),
0041                       SOA_COLUMN(int16_t, clusterSizeX),
0042                       SOA_COLUMN(int16_t, clusterSizeY),
0043                       SOA_COLUMN(uint16_t, detectorIndex),
0044 
0045                       SOA_SCALAR(uint32_t, nHits),
0046                       SOA_SCALAR(int32_t, offsetBPIX2),
0047                       //These above could be separated in a specific
0048                       //layout since they don't depends on the template
0049                       //for the moment I'm keeping them here
0050                       SOA_COLUMN(PhiBinnerStorageType, phiBinnerStorage),
0051                       SOA_SCALAR(HitModuleStartArray, hitsModuleStart),
0052                       SOA_SCALAR(HitLayerStartArray, hitsLayerStart),
0053                       SOA_SCALAR(ParamsOnGPU, cpeParams),
0054                       SOA_SCALAR(AverageGeometry, averageGeometry),
0055                       SOA_SCALAR(PhiBinner, phiBinner));
0056 };
0057 
0058 template <typename TrackerTraits>
0059 using TrackingRecHitLayout = typename TrackingRecHitSoA<TrackerTraits>::template TrackingRecHitSoALayout<>;
0060 template <typename TrackerTraits>
0061 using TrackingRecHitSoAView = typename TrackingRecHitSoA<TrackerTraits>::template TrackingRecHitSoALayout<>::View;
0062 template <typename TrackerTraits>
0063 using TrackingRecHitSoAConstView =
0064     typename TrackingRecHitSoA<TrackerTraits>::template TrackingRecHitSoALayout<>::ConstView;
0065 
0066 #endif