@@ -310,38 +310,56 @@ void ITSTrackingInterface::run(framework::ProcessingContext& pc)
310310 // NOTE: we are not setting the BCData of these ROFs (should we?)
311311 const auto & clockLayer = mTimeFrame ->getROFOverlapTableView ().getClockLayer ();
312312 int highestROF{0 };
313- for ( const auto & trc : tracks) {
314- highestROF = std::max (highestROF, ( int )clockLayer. getROF (trc. getTimeStamp (). lower ()));
315- }
316- allTrackROFs. resize (highestROF);
317-
318- // Some conversions that needs to be moved in the tracker internals
319- std::vector< int > rofEntries (highestROF + 1 , 0 );
320- for ( unsigned int iTrk{ 0 }; iTrk < tracks. size (); ++ iTrk) {
321- auto & trc{tracks[iTrk]};
322- trc. setFirstClusterEntry (( int )allClusIdx. size ()); // before adding tracks, create final cluster indices
323- int ncl = trc. getNumberOfClusters (), nclf = 0 ;
324- for ( int ic = TrackITSExt::MaxClusters; ic--;) { // track internally keeps in->out cluster indices, but we want to store the references as out->in!!!
325- auto clid = trc. getClusterIndex (ic);
326- if (clid >= 0 ) {
327- trc. setClusterSize (ic, mTimeFrame -> getClusterSize (( mDoStaggering ) ? ic : 0 , clid) );
328- allClusIdx. push_back (clid) ;
329- nclf++;
313+ {
314+ for ( const auto & trc : tracks) {
315+ highestROF = std::max (highestROF, ( int )clockLayer. getROF (trc. getTimeStamp (). lower ()));
316+ }
317+ allTrackROFs. resize (highestROF);
318+ std::vector< int > rofEntries (highestROF + 1 , 0 );
319+ for ( unsigned int iTrk{ 0 }; iTrk < tracks. size (); ++iTrk) {
320+ auto & trc{ tracks[ iTrk]};
321+ trc. setFirstClusterEntry (( int )allClusIdx. size ()); // before adding tracks, create final cluster indices
322+ int ncl = trc. getNumberOfClusters (), nclf = 0 ;
323+ for ( int ic = TrackITSExt::MaxClusters; ic--;) { // track internally keeps in->out cluster indices, but we want to store the references as out->in!!!
324+ auto clid = trc. getClusterIndex (ic);
325+ if ( clid >= 0 ) {
326+ trc. setClusterSize (ic, mTimeFrame -> getClusterSize (( mDoStaggering ) ? ic : 0 , clid));
327+ allClusIdx. push_back ( clid);
328+ nclf++ ;
329+ }
330330 }
331+ assert (ncl == nclf);
332+ allTracks.emplace_back (trc);
333+ auto rof = clockLayer.getROF (trc.getTimeStamp ().lower ());
334+ ++rofEntries[rof];
335+ }
336+ std::exclusive_scan (rofEntries.begin (), rofEntries.end (), rofEntries.begin (), 0 );
337+ for (size_t iROF{0 }; iROF < allTrackROFs.size (); ++iROF) {
338+ allTrackROFs[iROF].setFirstEntry (rofEntries[iROF]);
339+ allTrackROFs[iROF].setNEntries (rofEntries[iROF + 1 ] - rofEntries[iROF]);
331340 }
332- assert (ncl == nclf);
333- allTracks.emplace_back (trc);
334- auto rof = clockLayer.getROF (trc.getTimeStamp ().lower ());
335- ++rofEntries[rof];
336341 }
337- std::exclusive_scan (rofEntries.begin (), rofEntries.end (), rofEntries.begin (), 0 );
338- for (size_t iROF{0 }; iROF < allTrackROFs.size (); ++iROF) {
339- allTrackROFs[iROF].setFirstEntry (rofEntries[iROF]);
340- allTrackROFs[iROF].setNEntries (rofEntries[iROF + 1 ] - rofEntries[iROF]);
342+ { // same thing for vertices rofs
343+ highestROF = 0 ;
344+ for (const auto & vtx : vertices) {
345+ highestROF = std::max (highestROF, (int )clockLayer.getROF (vtx.getTimeStamp ().lower ()));
346+ }
347+ vertROFvec.resize (highestROF);
348+ std::vector<int > rofEntries (highestROF + 1 , 0 );
349+ for (const auto & vtx : vertices) {
350+ auto rof = clockLayer.getROF (vtx.getTimeStamp ().lower ());
351+ ++rofEntries[rof];
352+ }
353+ std::exclusive_scan (rofEntries.begin (), rofEntries.end (), rofEntries.begin (), 0 );
354+
355+ for (size_t iROF{0 }; iROF < vertROFvec.size (); ++iROF) {
356+ vertROFvec[iROF].setFirstEntry (rofEntries[iROF]);
357+ vertROFvec[iROF].setNEntries (rofEntries[iROF + 1 ] - rofEntries[iROF]);
358+ }
341359 }
342360 }
343361
344- LOGP (info, " ITSTracker pushed {} tracks in {} rofs and {} vertices" , allTracks.size (), allTrackROFs.size (), vertices.size ());
362+ LOGP (info, " ITSTracker pushed {} tracks in {} rofs and {} vertices in {} rofs " , allTracks.size (), allTrackROFs.size (), vertices. size (), vertROFvec .size ());
345363 if (mIsMC ) {
346364 LOGP (info, " ITSTracker pushed {} track labels" , allTrackLabels.size ());
347365 LOGP (info, " ITSTracker pushed {} vertex labels" , allVerticesLabels.size ());
0 commit comments