CMS 3D CMS Logo

SiPixelRawToClusterKernel.h
Go to the documentation of this file.
1 #ifndef RecoLocalTracker_SiPixelClusterizer_SiPixelRawToClusterKernel_h
2 #define RecoLocalTracker_SiPixelClusterizer_SiPixelRawToClusterKernel_h
3 
4 #include <algorithm>
5 #include <optional>
6 #include <utility>
7 
10 
18 
22 
26 
27 namespace pixelDetails {
28 
32  // Phase 1 geometry constants
33  constexpr uint32_t layerStartBit = 20;
34  constexpr uint32_t ladderStartBit = 12;
35  constexpr uint32_t moduleStartBit = 2;
36 
37  constexpr uint32_t panelStartBit = 10;
38  constexpr uint32_t diskStartBit = 18;
39  constexpr uint32_t bladeStartBit = 12;
40 
41  constexpr uint32_t layerMask = 0xF;
42  constexpr uint32_t ladderMask = 0xFF;
43  constexpr uint32_t moduleMask = 0x3FF;
44  constexpr uint32_t panelMask = 0x3;
45  constexpr uint32_t diskMask = 0xF;
46  constexpr uint32_t bladeMask = 0x3F;
47 
48  constexpr uint32_t LINK_bits = 6;
49  constexpr uint32_t ROC_bits = 5;
50  constexpr uint32_t DCOL_bits = 5;
51  constexpr uint32_t PXID_bits = 8;
52  constexpr uint32_t ADC_bits = 8;
53 
54  // special for layer 1
55  constexpr uint32_t LINK_bits_l1 = 6;
56  constexpr uint32_t ROC_bits_l1 = 5;
57  constexpr uint32_t COL_bits_l1 = 6;
58  constexpr uint32_t ROW_bits_l1 = 7;
59  constexpr uint32_t OMIT_ERR_bits = 1;
60 
61  constexpr uint32_t maxROCIndex = 8;
62  constexpr uint32_t numRowsInRoc = 80;
63  constexpr uint32_t numColsInRoc = 52;
64 
65  constexpr uint32_t MAX_WORD = 2000;
66 
67  constexpr uint32_t ADC_shift = 0;
72  // special for layer 1 ROC
75  constexpr uint32_t OMIT_ERR_shift = 20;
76 
77  constexpr uint32_t LINK_mask = ~(~uint32_t(0) << LINK_bits_l1);
78  constexpr uint32_t ROC_mask = ~(~uint32_t(0) << ROC_bits_l1);
79  constexpr uint32_t COL_mask = ~(~uint32_t(0) << COL_bits_l1);
80  constexpr uint32_t ROW_mask = ~(~uint32_t(0) << ROW_bits_l1);
81  constexpr uint32_t DCOL_mask = ~(~uint32_t(0) << DCOL_bits);
82  constexpr uint32_t PXID_mask = ~(~uint32_t(0) << PXID_bits);
83  constexpr uint32_t ADC_mask = ~(~uint32_t(0) << ADC_bits);
84  constexpr uint32_t ERROR_mask = ~(~uint32_t(0) << ROC_bits_l1);
85  constexpr uint32_t OMIT_ERR_mask = ~(~uint32_t(0) << OMIT_ERR_bits);
86 
87  struct DetIdGPU {
88  uint32_t RawId;
89  uint32_t rocInDet;
90  uint32_t moduleId;
91  };
92 
93  struct Pixel {
94  uint32_t row;
95  uint32_t col;
96  };
97 
98  ALPAKA_FN_HOST_ACC ALPAKA_FN_INLINE constexpr pixelchannelidentifierimpl::Packing packing() {
100  }
101 
102  ALPAKA_FN_HOST_ACC ALPAKA_FN_INLINE constexpr uint32_t pack(uint32_t row,
103  uint32_t col,
104  uint32_t adc,
105  uint32_t flag = 0) {
107  adc = std::min(adc, uint32_t(thePacking.max_adc));
108 
109  return (row << thePacking.row_shift) | (col << thePacking.column_shift) | (adc << thePacking.adc_shift);
110  }
111 
112  constexpr uint32_t pixelToChannel(int row, int col) {
114  return (row << thePacking.column_width) | col;
115  }
116 
117 } // namespace pixelDetails
118 
120  namespace pixelDetails {
121 
123  public:
124  WordFedAppender();
125  ~WordFedAppender() = default;
126 
127  WordFedAppender(uint32_t words)
128  : word_{cms::alpakatools::make_host_buffer<unsigned int[], Platform>(words)},
129  fedId_{cms::alpakatools::make_host_buffer<unsigned char[], Platform>(words)} {};
130 
131  void initializeWordFed(int fedId, unsigned int wordCounterGPU, const uint32_t* src, unsigned int length) {
132  std::memcpy(word_.data() + wordCounterGPU, src, sizeof(uint32_t) * length);
133  std::memset(fedId_.data() + wordCounterGPU / 2, fedId - 1200, length / 2);
134  }
135  auto word() const { return word_; }
136  auto fedId() const { return fedId_; }
137 
138  private:
141  };
142 
143  template <typename TrackerTraits>
145  public:
146  SiPixelRawToClusterKernel() : nModules_Clusters_h{cms::alpakatools::make_host_buffer<uint32_t[], Platform>(3u)} {}
147 
148  ~SiPixelRawToClusterKernel() = default;
149 
154 
155  void makePhase1ClustersAsync(Queue& queue,
156  const SiPixelClusterThresholds clusterThresholds,
157  const SiPixelMappingSoAConstView& cablingMap,
158  const unsigned char* modToUnp,
160  const WordFedAppender& wordFed,
161  const uint32_t wordCounter,
162  const uint32_t fedCounter,
163  bool useQualityInfo,
164  bool includeErrors,
165  bool debug);
166 
167  void makePhase2ClustersAsync(Queue& queue,
168  const SiPixelClusterThresholds clusterThresholds,
169  SiPixelDigisSoAView& digis_view,
170  const uint32_t numDigis);
171 
173  digis_d->setNModulesDigis(nModules_Clusters_h[0], nDigis);
174  return std::move(*digis_d);
175  }
176 
178  clusters_d->setNClusters(nModules_Clusters_h[1], nModules_Clusters_h[2]);
179  return std::move(*clusters_d);
180  }
181 
183 
184  auto nModules() { return nModules_Clusters_h[0]; }
185 
186  private:
187  uint32_t nDigis = 0;
188 
189  // Data to be put in the event
191  std::optional<SiPixelDigisSoACollection> digis_d;
192  std::optional<SiPixelClustersSoACollection> clusters_d;
193  std::optional<SiPixelDigiErrorsSoACollection> digiErrors_d;
194  };
195 
196  } // namespace pixelDetails
197 } // namespace ALPAKA_ACCELERATOR_NAMESPACE
198 
199 #endif // plugin_SiPixelClusterizer_alpaka_SiPixelRawToClusterKernel_h
cms::alpakatools::host_buffer< unsigned char[]> fedId_
constexpr uint32_t bladeMask
void makePhase1ClustersAsync(Queue &queue, const SiPixelClusterThresholds clusterThresholds, const SiPixelMappingSoAConstView &cablingMap, const unsigned char *modToUnp, const SiPixelGainCalibrationForHLTSoAConstView &gains, const WordFedAppender &wordFed, const uint32_t wordCounter, const uint32_t fedCounter, bool useQualityInfo, bool includeErrors, bool debug)
constexpr uint32_t moduleStartBit
constexpr uint32_t DCOL_mask
constexpr uint32_t ERROR_mask
constexpr uint32_t ADC_bits
constexpr uint32_t ADC_mask
constexpr uint32_t LINK_bits_l1
constexpr auto MAX_LINK
constexpr uint32_t layerMask
constexpr uint32_t numRowsInRoc
constexpr uint32_t ROC_shift
ALPAKA_FN_HOST_ACC ALPAKA_FN_INLINE constexpr pixelchannelidentifierimpl::Packing packing()
void makePhase2ClustersAsync(Queue &queue, const SiPixelClusterThresholds clusterThresholds, SiPixelDigisSoAView &digis_view, const uint32_t numDigis)
constexpr uint32_t DCOL_bits
constexpr uint32_t panelMask
constexpr uint32_t OMIT_ERR_shift
constexpr uint32_t OMIT_ERR_mask
constexpr uint32_t PXID_bits
static constexpr Packing thePacking
std::conditional_t< std::is_same_v< Device, alpaka::DevCpu >, SiPixelDigisHost, SiPixelDigisDevice< Device > > SiPixelDigisSoACollection
constexpr uint32_t ADC_shift
constexpr uint32_t DCOL_shift
constexpr uint32_t OMIT_ERR_bits
constexpr uint32_t pixelToChannel(int row, int col)
constexpr unsigned int MAX_ROC
SiPixelRawToClusterKernel & operator=(const SiPixelRawToClusterKernel &)=delete
constexpr uint32_t PXID_shift
constexpr uint32_t ROC_bits
constexpr uint32_t ROC_mask
constexpr uint32_t moduleMask
constexpr uint32_t maxROCIndex
constexpr auto MAX_SIZE
constexpr uint32_t diskStartBit
constexpr auto MAX_ROC
constexpr float gains[NGAINS]
Definition: EcalConstants.h:20
typename detail::buffer_type< DevHost, T >::type host_buffer
Definition: memory.h:56
constexpr uint32_t ROW_bits_l1
#define debug
Definition: HDRShower.cc:19
constexpr uint32_t panelStartBit
constexpr uint32_t LINK_bits
constexpr uint32_t layerStartBit
constexpr uint32_t COL_shift
constexpr uint32_t LINK_shift
constexpr uint32_t bladeStartBit
constexpr uint32_t MAX_WORD
col
Definition: cuy.py:1009
constexpr uint32_t ladderMask
constexpr unsigned int MAX_SIZE
ALPAKA_FN_HOST_ACC ALPAKA_FN_INLINE constexpr uint32_t pack(uint32_t row, uint32_t col, uint32_t adc, uint32_t flag=0)
constexpr uint32_t COL_mask
constexpr uint32_t COL_bits_l1
std::conditional_t< std::is_same_v< Device, alpaka::DevCpu >, SiPixelDigiErrorsHost, SiPixelDigiErrorsDevice< Device > > SiPixelDigiErrorsSoACollection
constexpr uint32_t ROW_shift
void initializeWordFed(int fedId, unsigned int wordCounterGPU, const uint32_t *src, unsigned int length)
constexpr uint32_t numColsInRoc
constexpr uint32_t ROW_mask
constexpr uint32_t LINK_mask
constexpr uint32_t ladderStartBit
constexpr unsigned int MAX_LINK
constexpr uint32_t diskMask
def move(src, dest)
Definition: eostools.py:511
constexpr uint32_t PXID_mask
uint16_t *__restrict__ uint16_t const *__restrict__ adc
std::conditional_t< std::is_same_v< Device, alpaka::DevCpu >, SiPixelClustersHost, SiPixelClustersDevice< Device > > SiPixelClustersSoACollection
constexpr uint32_t ROC_bits_l1