Skip to content

Commit 7f7c1bd

Browse files
committed
ITS: fix vertexer
Signed-off-by: Felix Schlepper <felix.schlepper@cern.ch>
1 parent 4897a6a commit 7f7c1bd

File tree

1 file changed

+38
-52
lines changed

1 file changed

+38
-52
lines changed

Detectors/ITSMFT/ITS/tracking/src/VertexerTraits.cxx

Lines changed: 38 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ static void trackleterKernelHost(
4242
gsl::span<int> foundTracklets,
4343
const IndexTableUtils<NLayers>& utils,
4444
const TimeEstBC& timErr,
45-
gsl::span<int> rofFoundTrackletsOffsets, // we want to change those, to keep track of the offset in deltaRof>0
45+
gsl::span<int> rofFoundTrackletsOffsets,
46+
const int globalOffsetNextLayer = 0,
47+
const int globalOffsetCurrentLayer = 0,
4648
const int maxTrackletsPerCluster = static_cast<int>(2e3))
4749
{
4850
const int PhiBins{utils.getNphiBins()};
@@ -72,9 +74,9 @@ static void trackleterKernelHost(
7274
if (storedTracklets < maxTrackletsPerCluster) {
7375
if constexpr (!EvalRun) {
7476
if constexpr (Mode == TrackletMode::Layer0Layer1) {
75-
tracklets[rofFoundTrackletsOffsets[iCurrentLayerClusterIndex] + storedTracklets] = Tracklet{iNextLayerClusterIndex, iCurrentLayerClusterIndex, nextCluster, currentCluster, timErr};
77+
tracklets[rofFoundTrackletsOffsets[iCurrentLayerClusterIndex] + storedTracklets] = Tracklet{globalOffsetNextLayer + iNextLayerClusterIndex, globalOffsetCurrentLayer + iCurrentLayerClusterIndex, nextCluster, currentCluster, timErr};
7678
} else {
77-
tracklets[rofFoundTrackletsOffsets[iCurrentLayerClusterIndex] + storedTracklets] = Tracklet{iCurrentLayerClusterIndex, iNextLayerClusterIndex, currentCluster, nextCluster, timErr};
79+
tracklets[rofFoundTrackletsOffsets[iCurrentLayerClusterIndex] + storedTracklets] = Tracklet{globalOffsetCurrentLayer + iCurrentLayerClusterIndex, globalOffsetNextLayer + iNextLayerClusterIndex, currentCluster, nextCluster, timErr};
7880
}
7981
}
8082
++storedTracklets;
@@ -92,10 +94,10 @@ static void trackleterKernelHost(
9294
}
9395

9496
static void trackletSelectionKernelHost(
95-
const gsl::span<const Cluster> clusters0, // 0
96-
const gsl::span<const Cluster> clusters1, // 1
97-
gsl::span<unsigned char> usedClusters0, // Layer 0
98-
gsl::span<unsigned char> usedClusters2, // Layer 2
97+
const Cluster* clusters0, // global layer 0 clusters
98+
const Cluster* clusters1, // global layer 1 clusters
99+
gsl::span<unsigned char> usedClusters0, // global layer 0 used clusters
100+
gsl::span<unsigned char> usedClusters2, // global layer 2 used clusters
99101
const gsl::span<const Tracklet>& tracklets01,
100102
const gsl::span<const Tracklet>& tracklets12,
101103
bounded_vector<bool>& usedTracklets,
@@ -104,14 +106,13 @@ static void trackletSelectionKernelHost(
104106
bounded_vector<Line>& lines,
105107
const gsl::span<const o2::MCCompLabel>& trackletLabels,
106108
bounded_vector<o2::MCCompLabel>& linesLabels,
107-
const TimeEstBC& targetRofTime0,
108-
const TimeEstBC& targetRofTime2,
109+
const int nLayer1Clusters,
109110
const float tanLambdaCut = 0.025f,
110111
const float phiCut = 0.005f,
111112
const int maxTracklets = 100)
112113
{
113114
int offset01{0}, offset12{0};
114-
for (unsigned int iCurrentLayerClusterIndex{0}; iCurrentLayerClusterIndex < clusters1.size(); ++iCurrentLayerClusterIndex) {
115+
for (int iCurrentLayerClusterIndex{0}; iCurrentLayerClusterIndex < nLayer1Clusters; ++iCurrentLayerClusterIndex) {
115116
int validTracklets{0};
116117
for (int iTracklet12{offset12}; iTracklet12 < offset12 + foundTracklets12[iCurrentLayerClusterIndex]; ++iTracklet12) {
117118
for (int iTracklet01{offset01}; iTracklet01 < offset01 + foundTracklets01[iCurrentLayerClusterIndex]; ++iTracklet01) {
@@ -121,9 +122,7 @@ static void trackletSelectionKernelHost(
121122

122123
const auto& tracklet01{tracklets01[iTracklet01]};
123124
const auto& tracklet12{tracklets12[iTracklet12]};
124-
if (!tracklet01.getTimeStamp().isCompatible(targetRofTime0) ||
125-
!tracklet12.getTimeStamp().isCompatible(targetRofTime2) ||
126-
!tracklet01.getTimeStamp().isCompatible(tracklet12.getTimeStamp())) {
125+
if (!tracklet01.getTimeStamp().isCompatible(tracklet12.getTimeStamp())) {
127126
continue;
128127
}
129128

@@ -133,7 +132,7 @@ static void trackletSelectionKernelHost(
133132
usedClusters0[tracklet01.firstClusterIndex] = 1;
134133
usedClusters2[tracklet12.secondClusterIndex] = 1;
135134
usedTracklets[iTracklet01] = true;
136-
lines.emplace_back(tracklet01, clusters0.data(), clusters1.data());
135+
lines.emplace_back(tracklet01, clusters0, clusters1);
137136
if (!trackletLabels.empty()) {
138137
linesLabels.emplace_back(trackletLabels[iTracklet01]);
139138
}
@@ -176,8 +175,7 @@ void VertexerTraits<NLayers>::computeTracklets(const int iteration)
176175
mTimeFrame->getNTrackletsCluster(pivotRofId, 0), // Span of the number of tracklets per each cluster in pivot rof
177176
mIndexTableUtils,
178177
timeErr,
179-
gsl::span<int>(), // Offset in the tracklet buffer
180-
mVrtParams[iteration].maxTrackletsPerCluster);
178+
gsl::span<int>()); // Offset in the tracklet buffer
181179
}
182180
const auto& rofRange12 = mTimeFrame->getROFOverlapTableView().getOverlap(1, 2, pivotRofId);
183181
for (auto targetRofId = rofRange12.getFirstEntry(); targetRofId < rofRange12.getEntriesBound(); ++targetRofId) {
@@ -192,8 +190,7 @@ void VertexerTraits<NLayers>::computeTracklets(const int iteration)
192190
mTimeFrame->getNTrackletsCluster(pivotRofId, 1), // Span of the number of tracklets per each cluster in pivot rof
193191
mIndexTableUtils,
194192
timeErr,
195-
gsl::span<int>(), // Offset in the tracklet buffer
196-
mVrtParams[iteration].maxTrackletsPerCluster);
193+
gsl::span<int>()); // Offset in the tracklet buffer
197194
}
198195
mTimeFrame->getNTrackletsROF(pivotRofId, 0) = std::accumulate(mTimeFrame->getNTrackletsCluster(pivotRofId, 0).begin(), mTimeFrame->getNTrackletsCluster(pivotRofId, 0).end(), 0);
199196
mTimeFrame->getNTrackletsROF(pivotRofId, 1) = std::accumulate(mTimeFrame->getNTrackletsCluster(pivotRofId, 1).begin(), mTimeFrame->getNTrackletsCluster(pivotRofId, 1).end(), 0);
@@ -209,6 +206,7 @@ void VertexerTraits<NLayers>::computeTracklets(const int iteration)
209206
}
210207

211208
tbb::parallel_for(0, mTimeFrame->getNrof(1), [&](const short pivotRofId) {
209+
const int globalOffsetPivot = mTimeFrame->getSortedStartIndex(pivotRofId, 1);
212210
const auto& rofRange01 = mTimeFrame->getROFOverlapTableView().getOverlap(1, 0, pivotRofId);
213211
for (auto targetRofId = rofRange01.getFirstEntry(); targetRofId < rofRange01.getEntriesBound(); ++targetRofId) {
214212
const auto timeErr = mTimeFrame->getROFOverlapTableView().getTimeStamp(0, targetRofId, 1, pivotRofId);
@@ -223,6 +221,8 @@ void VertexerTraits<NLayers>::computeTracklets(const int iteration)
223221
mIndexTableUtils,
224222
timeErr,
225223
mTimeFrame->getExclusiveNTrackletsCluster(pivotRofId, 0),
224+
mTimeFrame->getSortedStartIndex(targetRofId, 0),
225+
globalOffsetPivot,
226226
mVrtParams[iteration].maxTrackletsPerCluster);
227227
}
228228
const auto& rofRange12 = mTimeFrame->getROFOverlapTableView().getOverlap(1, 2, pivotRofId);
@@ -239,6 +239,8 @@ void VertexerTraits<NLayers>::computeTracklets(const int iteration)
239239
mIndexTableUtils,
240240
timeErr,
241241
mTimeFrame->getExclusiveNTrackletsCluster(pivotRofId, 1),
242+
mTimeFrame->getSortedStartIndex(targetRofId, 2),
243+
globalOffsetPivot,
242244
mVrtParams[iteration].maxTrackletsPerCluster);
243245
}
244246
});
@@ -249,11 +251,8 @@ void VertexerTraits<NLayers>::computeTracklets(const int iteration)
249251
for (const auto& trk : mTimeFrame->getTracklets()[0]) {
250252
o2::MCCompLabel label;
251253
if (!trk.isEmpty()) {
252-
// FIXME: !!!!!!!
253-
// int sortedId0{mTimeFrame->getSortedIndex(trk.rof[0], 0, trk.firstClusterIndex)};
254-
// int sortedId1{mTimeFrame->getSortedIndex(trk.rof[1], 1, trk.secondClusterIndex)};
255-
int sortedId0{0};
256-
int sortedId1{0};
254+
int sortedId0{trk.firstClusterIndex};
255+
int sortedId1{trk.secondClusterIndex};
257256
for (const auto& lab0 : mTimeFrame->getClusterLabels(0, mTimeFrame->getClusters()[0][sortedId0].clusterId)) {
258257
for (const auto& lab1 : mTimeFrame->getClusterLabels(1, mTimeFrame->getClusters()[1][sortedId1].clusterId)) {
259258
if (lab0 == lab1 && lab0.isValid()) {
@@ -285,35 +284,22 @@ void VertexerTraits<NLayers>::computeTrackletMatching(const int iteration)
285284
}
286285
mTimeFrame->getLines(pivotRofId).reserve(mTimeFrame->getNTrackletsCluster(pivotRofId, 0).size());
287286
bounded_vector<bool> usedTracklets(mTimeFrame->getFoundTracklets(pivotRofId, 0).size(), false, mMemoryPool.get());
288-
289-
const auto& rofRange01 = mTimeFrame->getROFOverlapTableView().getOverlap(1, 0, pivotRofId);
290-
const auto& rofRange12 = mTimeFrame->getROFOverlapTableView().getOverlap(1, 2, pivotRofId);
291-
for (uint32_t targetRofId0 = rofRange01.getFirstEntry(); targetRofId0 < rofRange01.getEntriesBound(); ++targetRofId0) {
292-
const auto targetRofTime0 = mTimeFrame->getROFOverlapTableView().getLayer(0).getROFTimeBounds(targetRofId0);
293-
for (uint32_t targetRofId2 = rofRange12.getFirstEntry(); targetRofId2 < rofRange12.getEntriesBound(); ++targetRofId2) {
294-
const auto targetRofTime2 = mTimeFrame->getROFOverlapTableView().getLayer(2).getROFTimeBounds(targetRofId2);
295-
if (!(mTimeFrame->getROFOverlapTableView().doROFsOverlap(0, targetRofId0, 2, targetRofId2))) {
296-
continue;
297-
}
298-
trackletSelectionKernelHost(
299-
mTimeFrame->getClustersOnLayer(targetRofId0, 0),
300-
mTimeFrame->getClustersOnLayer(pivotRofId, 1),
301-
mTimeFrame->getUsedClustersROF(targetRofId0, 0),
302-
mTimeFrame->getUsedClustersROF(targetRofId2, 2),
303-
mTimeFrame->getFoundTracklets(pivotRofId, 0),
304-
mTimeFrame->getFoundTracklets(pivotRofId, 1),
305-
usedTracklets,
306-
mTimeFrame->getNTrackletsCluster(pivotRofId, 0),
307-
mTimeFrame->getNTrackletsCluster(pivotRofId, 1),
308-
mTimeFrame->getLines(pivotRofId),
309-
mTimeFrame->getLabelsFoundTracklets(pivotRofId, 0),
310-
mTimeFrame->getLinesLabel(pivotRofId),
311-
targetRofTime0,
312-
targetRofTime2,
313-
mVrtParams[iteration].tanLambdaCut,
314-
mVrtParams[iteration].phiCut);
315-
}
316-
}
287+
trackletSelectionKernelHost(
288+
mTimeFrame->getClusters()[0].data(),
289+
mTimeFrame->getClusters()[1].data(),
290+
mTimeFrame->getUsedClusters(0),
291+
mTimeFrame->getUsedClusters(2),
292+
mTimeFrame->getFoundTracklets(pivotRofId, 0),
293+
mTimeFrame->getFoundTracklets(pivotRofId, 1),
294+
usedTracklets,
295+
mTimeFrame->getNTrackletsCluster(pivotRofId, 0),
296+
mTimeFrame->getNTrackletsCluster(pivotRofId, 1),
297+
mTimeFrame->getLines(pivotRofId),
298+
mTimeFrame->getLabelsFoundTracklets(pivotRofId, 0),
299+
mTimeFrame->getLinesLabel(pivotRofId),
300+
static_cast<int>(mTimeFrame->getClustersOnLayer(pivotRofId, 1).size()),
301+
mVrtParams[iteration].tanLambdaCut,
302+
mVrtParams[iteration].phiCut);
317303
totalLines.local() += mTimeFrame->getLines(pivotRofId).size();
318304
}
319305
});

0 commit comments

Comments
 (0)