1 #ifndef RecoLocalTracker_SiPixelRecHits_alpaka_PixelRecHits_h 2 #define RecoLocalTracker_SiPixelRecHits_alpaka_PixelRecHits_h 9 #include <alpaka/alpaka.hpp> 27 template <
typename TrackerTraits>
30 template <
typename TAcc,
typename = std::enable_if_t<alpaka::isAccelerator<TAcc>>>
45 const uint32_t
blockIdx(alpaka::getIdx<alpaka::Grid, alpaka::Blocks>(acc)[0u]);
49 auto& agc =
hits.averageGeometry();
51 auto nLadders = TrackerTraits::numberOfLaddersInBarrel;
54 agc.ladderZ[il] = ag.ladderZ[il] -
bs->z;
55 agc.ladderX[il] = ag.ladderX[il] -
bs->x;
56 agc.ladderY[il] = ag.ladderY[il] -
bs->y;
57 agc.ladderR[il] =
sqrt(agc.ladderX[il] * agc.ladderX[il] + agc.ladderY[il] * agc.ladderY[il]);
58 agc.ladderMinZ[il] = ag.ladderMinZ[il] -
bs->z;
59 agc.ladderMaxZ[il] = ag.ladderMaxZ[il] -
bs->z;
63 agc.endCapZ[0] = ag.endCapZ[0] -
bs->z;
64 agc.endCapZ[1] = ag.endCapZ[1] -
bs->z;
75 auto& clusParams = alpaka::declareSharedVar<ClusParams, __COUNTER__>(acc);
93 "hitbuilder: %d clusters in module %d. will write at %d\n", nclus,
me,
clusters[
me].clusModuleStart());
96 for (
int startClus = 0, endClus = nclus; startClus < endClus; startClus +=
MaxHitsInIter) {
100 int lastClus = startClus + nClusInIter;
101 assert(nClusInIter <= nclus);
103 assert(lastClus <= nclus);
105 assert(nclus >
MaxHitsInIter || (0 == startClus && nClusInIter == nclus && lastClus == nclus));
110 clusParams.maxRow[ic] = 0;
112 clusParams.maxCol[ic] = 0;
113 clusParams.charge[ic] = 0;
114 clusParams.q_f_X[ic] = 0;
115 clusParams.q_l_X[ic] = 0;
116 clusParams.q_f_Y[ic] = 0;
117 clusParams.q_l_Y[ic] = 0;
120 alpaka::syncBlockThreads(acc);
123 const uint32_t blockDimension(alpaka::getWorkDiv<alpaka::Block, alpaka::Elems>(acc)[0u]);
124 const auto& [firstElementIdxNoStride, endElementIdxNoStride] =
126 uint32_t rowsColsFirstElementIdx = firstElementIdxNoStride;
127 uint32_t rowsColsEndElementIdx = endElementIdxNoStride;
128 for (uint32_t
i = rowsColsFirstElementIdx;
i <
numElements; ++
i) {
130 i, rowsColsFirstElementIdx, rowsColsEndElementIdx, blockDimension,
numElements))
132 auto id = digis[
i].moduleId();
137 auto cl = digis[
i].clus();
138 if (cl < startClus || cl >= lastClus)
143 auto x = digis[
i].xx();
144 auto y = digis[
i].yy();
151 alpaka::syncBlockThreads(acc);
154 uint32_t chargeFirstElementIdx = firstElementIdxNoStride;
155 uint32_t chargeEndElementIdx = endElementIdxNoStride;
158 i, chargeFirstElementIdx, chargeEndElementIdx, blockDimension,
numElements))
160 auto id = digis[
i].moduleId();
165 auto cl = digis[
i].clus();
166 if (cl < startClus || cl >= lastClus)
171 auto x = digis[
i].xx();
172 auto y = digis[
i].yy();
173 auto ch = digis[
i].adc();
176 if (clusParams.minRow[
cl] ==
x)
178 if (clusParams.maxRow[
cl] ==
x)
180 if (clusParams.minCol[
cl] == y)
182 if (clusParams.maxCol[
cl] == y)
186 alpaka::syncBlockThreads(acc);
196 pixelCPEforDevice::position<TrackerTraits>(
199 pixelCPEforDevice::errorFromDB<TrackerTraits>(
203 hits[
h].chargeAndStatus().charge = clusParams.charge[ic];
204 hits[
h].chargeAndStatus().status = clusParams.status[ic];
208 hits[
h].xLocal() = xl = clusParams.xpos[ic];
209 hits[
h].yLocal() = yl = clusParams.ypos[ic];
211 hits[
h].clusterSizeX() = clusParams.xsize[ic];
212 hits[
h].clusterSizeY() = clusParams.ysize[ic];
214 hits[
h].xerrLocal() = clusParams.xerr[ic] * clusParams.xerr[ic] + cpeParams->
detParams(
me).apeXX;
215 hits[
h].yerrLocal() = clusParams.yerr[ic] * clusParams.yerr[ic] + cpeParams->
detParams(
me).apeYY;
220 cpeParams->
detParams(
me).frame.toGlobal(xl, yl, xg, yg, zg);
226 hits[
h].xGlobal() = xg;
227 hits[
h].yGlobal() = yg;
228 hits[
h].zGlobal() = zg;
231 hits[
h].iphi() = unsafe_atan2s<7>(yg, xg);
233 alpaka::syncBlockThreads(acc);
241 #endif // RecoLocalTracker_SiPixelRecHits_plugins_alpaka_PixelRecHits_h T1 atomicMax(T1 *a, T2 b)
constexpr DetParams const &__restrict__ detParams(int i) const
ALPAKA_FN_ACC void operator()(const TAcc &acc, pixelCPEforDevice::ParamsOnDeviceT< TrackerTraits > const *__restrict__ cpeParams, BeamSpotPOD const *__restrict__ bs, SiPixelDigisSoAConstView digis, uint32_t numElements, SiPixelClustersSoAConstView clusters, TrackingRecHitSoAView< TrackerTraits > hits) const
constexpr int32_t MaxHitsInIter
ALPAKA_ASSERT_OFFLOAD(offsets)
ClusParamsT< MaxHitsInIter > ClusParams
constexpr CommonParams const &__restrict__ commonParams() const
constexpr uint16_t invalidModuleId
uint16_t *__restrict__ uint16_t const *__restrict__ uint32_t const *__restrict__ uint32_t *__restrict__ uint32_t const *__restrict__ int32_t *__restrict__ uint32_t numElements
constexpr AverageGeometry const &__restrict__ averageGeometry() const
uint16_t *__restrict__ uint16_t const *__restrict__ uint32_t const *__restrict__ uint32_t *__restrict__ uint32_t const *__restrict__ moduleId
typename TrackingRecHitSoA< TrackerTraits >::template TrackingRecHitSoALayout<>::View TrackingRecHitSoAView
T1 atomicMin(T1 *a, T2 b)
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
T1 atomicAdd(T1 *a, T2 b)
constexpr uint16_t invalidModuleId