@@ -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
9496static 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