@@ -168,15 +168,15 @@ void VertexerTraits<NLayers>::computeTracklets(const int iteration)
168168{
169169 mTaskArena ->execute ([&] {
170170 tbb::parallel_for (0 , mTimeFrame ->getNrof (1 ), [&](const short pivotRofId) {
171- bool skipROF = ! mTimeFrame -> getROFMaskView (). isROFEnabled ( 1 , pivotRofId);
171+ bool skip = skipROF (iteration , pivotRofId);
172172 const auto & rofRange01 = mTimeFrame ->getROFOverlapTableView ().getOverlap (1 , 0 , pivotRofId);
173173 for (auto targetRofId = rofRange01.getFirstEntry (); targetRofId < rofRange01.getEntriesBound (); ++targetRofId) {
174174 const auto timeErr = mTimeFrame ->getROFOverlapTableView ().getTimeStamp (0 , targetRofId, 1 , pivotRofId);
175175 trackleterKernelHost<TrackletMode::Layer0Layer1, true >(
176- !skipROF ? mTimeFrame ->getClustersOnLayer (targetRofId, 0 ) : gsl::span<Cluster>(), // Clusters to be matched with the next layer in target rof
177- !skipROF ? mTimeFrame ->getClustersOnLayer (pivotRofId, 1 ) : gsl::span<Cluster>(), // Clusters to be matched with the current layer in pivot rof
178- mTimeFrame ->getUsedClustersROF (targetRofId, 0 ), // Span of the used clusters in the target rof
179- mTimeFrame ->getIndexTable (targetRofId, 0 ).data (), // Index table to access the data on the next layer in target rof
176+ !skip ? mTimeFrame ->getClustersOnLayer (targetRofId, 0 ) : gsl::span<Cluster>(), // Clusters to be matched with the next layer in target rof
177+ !skip ? mTimeFrame ->getClustersOnLayer (pivotRofId, 1 ) : gsl::span<Cluster>(), // Clusters to be matched with the current layer in pivot rof
178+ mTimeFrame ->getUsedClustersROF (targetRofId, 0 ), // Span of the used clusters in the target rof
179+ mTimeFrame ->getIndexTable (targetRofId, 0 ).data (), // Index table to access the data on the next layer in target rof
180180 mVrtParams [iteration].phiCut ,
181181 mTimeFrame ->getTracklets ()[0 ], // Flat tracklet buffer
182182 mTimeFrame ->getNTrackletsCluster (pivotRofId, 0 ), // Span of the number of tracklets per each cluster in pivot rof
@@ -191,8 +191,8 @@ void VertexerTraits<NLayers>::computeTracklets(const int iteration)
191191 for (auto targetRofId = rofRange12.getFirstEntry (); targetRofId < rofRange12.getEntriesBound (); ++targetRofId) {
192192 const auto timeErr = mTimeFrame ->getROFOverlapTableView ().getTimeStamp (2 , targetRofId, 1 , pivotRofId);
193193 trackleterKernelHost<TrackletMode::Layer1Layer2, true >(
194- !skipROF ? mTimeFrame ->getClustersOnLayer (targetRofId, 2 ) : gsl::span<Cluster>(),
195- !skipROF ? mTimeFrame ->getClustersOnLayer (pivotRofId, 1 ) : gsl::span<Cluster>(),
194+ !skip ? mTimeFrame ->getClustersOnLayer (targetRofId, 2 ) : gsl::span<Cluster>(),
195+ !skip ? mTimeFrame ->getClustersOnLayer (pivotRofId, 1 ) : gsl::span<Cluster>(),
196196 mTimeFrame ->getUsedClustersROF (targetRofId, 2 ),
197197 mTimeFrame ->getIndexTable (targetRofId, 2 ).data (),
198198 mVrtParams [iteration].phiCut ,
@@ -219,14 +219,14 @@ void VertexerTraits<NLayers>::computeTracklets(const int iteration)
219219 }
220220
221221 tbb::parallel_for (0 , mTimeFrame ->getNrof (1 ), [&](const short pivotRofId) {
222- bool skipROF = ! mTimeFrame -> getROFMaskView (). isROFEnabled ( 1 , pivotRofId);
222+ bool skip = skipROF (iteration , pivotRofId);
223223 const int globalOffsetPivot = mTimeFrame ->getSortedStartIndex (pivotRofId, 1 );
224224 const auto & rofRange01 = mTimeFrame ->getROFOverlapTableView ().getOverlap (1 , 0 , pivotRofId);
225225 for (auto targetRofId = rofRange01.getFirstEntry (); targetRofId < rofRange01.getEntriesBound (); ++targetRofId) {
226226 const auto timeErr = mTimeFrame ->getROFOverlapTableView ().getTimeStamp (0 , targetRofId, 1 , pivotRofId);
227227 trackleterKernelHost<TrackletMode::Layer0Layer1, false >(
228- !skipROF ? mTimeFrame ->getClustersOnLayer (targetRofId, 0 ) : gsl::span<Cluster>(),
229- !skipROF ? mTimeFrame ->getClustersOnLayer (pivotRofId, 1 ) : gsl::span<Cluster>(),
228+ !skip ? mTimeFrame ->getClustersOnLayer (targetRofId, 0 ) : gsl::span<Cluster>(),
229+ !skip ? mTimeFrame ->getClustersOnLayer (pivotRofId, 1 ) : gsl::span<Cluster>(),
230230 mTimeFrame ->getUsedClustersROF (targetRofId, 0 ),
231231 mTimeFrame ->getIndexTable (targetRofId, 0 ).data (),
232232 mVrtParams [iteration].phiCut ,
@@ -243,8 +243,8 @@ void VertexerTraits<NLayers>::computeTracklets(const int iteration)
243243 for (auto targetRofId = rofRange12.getFirstEntry (); targetRofId < rofRange12.getEntriesBound (); ++targetRofId) {
244244 const auto timeErr = mTimeFrame ->getROFOverlapTableView ().getTimeStamp (2 , targetRofId, 1 , pivotRofId);
245245 trackleterKernelHost<TrackletMode::Layer1Layer2, false >(
246- !skipROF ? mTimeFrame ->getClustersOnLayer (targetRofId, 2 ) : gsl::span<Cluster>(),
247- !skipROF ? mTimeFrame ->getClustersOnLayer (pivotRofId, 1 ) : gsl::span<Cluster>(),
246+ !skip ? mTimeFrame ->getClustersOnLayer (targetRofId, 2 ) : gsl::span<Cluster>(),
247+ !skip ? mTimeFrame ->getClustersOnLayer (pivotRofId, 1 ) : gsl::span<Cluster>(),
248248 mTimeFrame ->getUsedClustersROF (targetRofId, 2 ),
249249 mTimeFrame ->getIndexTable (targetRofId, 2 ).data (),
250250 mVrtParams [iteration].phiCut ,
@@ -293,7 +293,7 @@ void VertexerTraits<NLayers>::computeTrackletMatching(const int iteration)
293293 tbb::blocked_range<short >(0 , (short )mTimeFrame ->getNrof (1 )),
294294 [&](const tbb::blocked_range<short >& Rofs) {
295295 for (short pivotRofId = Rofs.begin (); pivotRofId < Rofs.end (); ++pivotRofId) {
296- if (mTimeFrame ->getFoundTracklets (pivotRofId, 0 ).empty ()) {
296+ if (mTimeFrame ->getFoundTracklets (pivotRofId, 0 ).empty () || skipROF (iteration, pivotRofId) ) {
297297 continue ;
298298 }
299299 mTimeFrame ->getLines (pivotRofId).reserve (mTimeFrame ->getNTrackletsCluster (pivotRofId, 0 ).size ());
@@ -352,6 +352,9 @@ void VertexerTraits<NLayers>::computeVertices(const int iteration)
352352 settings.memoryPool = mMemoryPool ;
353353
354354 const auto processROF = [&](const int rofId) {
355+ if (skipROF (iteration, rofId)) {
356+ return ;
357+ }
355358 auto & lines = mTimeFrame ->getLines (rofId);
356359 auto clusters = line_vertexer::buildClusters (std::span<const Line>{lines.data (), lines.size ()}, settings);
357360 deepVectorClear (lines); // not needed after
@@ -620,5 +623,11 @@ void VertexerTraits<NLayers>::setNThreads(int n, std::shared_ptr<tbb::task_arena
620623 }
621624}
622625
626+ template <int NLayers>
627+ bool VertexerTraits<NLayers>::skipROF(int iteration, int rof) const
628+ {
629+ return iteration && (int )mTimeFrame ->getROFVertexLookupTableView ().getVertices (1 , rof).getEntries () > mVrtParams [iteration].vertPerRofThreshold ;
630+ }
631+
623632template class VertexerTraits <7 >;
624633} // namespace o2::its
0 commit comments