1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#ifndef DataFormats_SiPixelDigi_interface_SiPixelDigisSoA_h
#define DataFormats_SiPixelDigi_interface_SiPixelDigisSoA_h
#include <cstddef>
#include <cstdint>
#include <vector>
namespace legacy {
// The main purpose of this class is to deliver digi and cluster data
// from an EDProducer that transfers the data from GPU to host to an
// EDProducer that converts the SoA to legacy data products. The class
// is independent of any GPU technology, and in prunciple could be
// produced by host code, and be used for other purposes than
// conversion-to-legacy as well.
class SiPixelDigisSoA {
public:
SiPixelDigisSoA() = default;
explicit SiPixelDigisSoA(
size_t nDigis, const uint32_t* pdigi, const uint32_t* rawIdArr, const uint16_t* adc, const int32_t* clus)
: pdigi_(pdigi, pdigi + nDigis),
rawIdArr_(rawIdArr, rawIdArr + nDigis),
adc_(adc, adc + nDigis),
clus_(clus, clus + nDigis) {}
~SiPixelDigisSoA() = default;
auto size() const { return pdigi_.size(); }
uint32_t pdigi(size_t i) const { return pdigi_[i]; }
uint32_t rawIdArr(size_t i) const { return rawIdArr_[i]; }
uint16_t adc(size_t i) const { return adc_[i]; }
int32_t clus(size_t i) const { return clus_[i]; }
const std::vector<uint32_t>& pdigiVector() const { return pdigi_; }
const std::vector<uint32_t>& rawIdArrVector() const { return rawIdArr_; }
const std::vector<uint16_t>& adcVector() const { return adc_; }
const std::vector<int32_t>& clusVector() const { return clus_; }
private:
std::vector<uint32_t> pdigi_; // packed digi (row, col, adc) of each pixel
std::vector<uint32_t> rawIdArr_; // DetId of each pixel
std::vector<uint16_t> adc_; // ADC of each pixel
std::vector<int32_t> clus_; // cluster id of each pixel
};
} // namespace legacy
#endif // DataFormats_SiPixelDigi_interface_SiPixelDigisSoA_h
|