Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:05:12

0001 #ifndef DataFormats_SiPixelDigi_interface_SiPixelDigisSoA_h
0002 #define DataFormats_SiPixelDigi_interface_SiPixelDigisSoA_h
0003 
0004 #include <cstddef>
0005 #include <cstdint>
0006 #include <vector>
0007 
0008 namespace legacy {
0009 
0010   // The main purpose of this class is to deliver digi and cluster data
0011   // from an EDProducer that transfers the data from GPU to host to an
0012   // EDProducer that converts the SoA to legacy data products. The class
0013   // is independent of any GPU technology, and in prunciple could be
0014   // produced by host code, and be used for other purposes than
0015   // conversion-to-legacy as well.
0016 
0017   class SiPixelDigisSoA {
0018   public:
0019     SiPixelDigisSoA() = default;
0020     explicit SiPixelDigisSoA(
0021         size_t nDigis, const uint32_t* pdigi, const uint32_t* rawIdArr, const uint16_t* adc, const int32_t* clus)
0022         : pdigi_(pdigi, pdigi + nDigis),
0023           rawIdArr_(rawIdArr, rawIdArr + nDigis),
0024           adc_(adc, adc + nDigis),
0025           clus_(clus, clus + nDigis) {}
0026 
0027     ~SiPixelDigisSoA() = default;
0028 
0029     auto size() const { return pdigi_.size(); }
0030 
0031     uint32_t pdigi(size_t i) const { return pdigi_[i]; }
0032     uint32_t rawIdArr(size_t i) const { return rawIdArr_[i]; }
0033     uint16_t adc(size_t i) const { return adc_[i]; }
0034     int32_t clus(size_t i) const { return clus_[i]; }
0035 
0036     const std::vector<uint32_t>& pdigiVector() const { return pdigi_; }
0037     const std::vector<uint32_t>& rawIdArrVector() const { return rawIdArr_; }
0038     const std::vector<uint16_t>& adcVector() const { return adc_; }
0039     const std::vector<int32_t>& clusVector() const { return clus_; }
0040 
0041   private:
0042     std::vector<uint32_t> pdigi_;     // packed digi (row, col, adc) of each pixel
0043     std::vector<uint32_t> rawIdArr_;  // DetId of each pixel
0044     std::vector<uint16_t> adc_;       // ADC of each pixel
0045     std::vector<int32_t> clus_;       // cluster id of each pixel
0046   };
0047 
0048 }  // namespace legacy
0049 
0050 #endif  // DataFormats_SiPixelDigi_interface_SiPixelDigisSoA_h