@@ -308,6 +308,11 @@ void TrackerTraitsGPU<NLayers>::findRoads(const int iteration)
308308 firstClusters.resize (this ->mTrkParams [iteration].NLayers );
309309 sharedFirstClusters.resize (this ->mTrkParams [iteration].NLayers );
310310 const auto hostTopology = mTimeFrameGPU ->getTrackingTopologyView ();
311+ const bool extendTop = this ->mTrkParams [iteration].PassFlags [IterationStep::TrackFollowerTop];
312+ const bool extendBot = this ->mTrkParams [iteration].PassFlags [IterationStep::TrackFollowerBot];
313+ const bool extendTracks = extendTop || extendBot;
314+ size_t nExtendedTracks{0 };
315+ size_t nExtendedClusters{0 };
311316 for (int startLevel{this ->mTrkParams [iteration].CellsPerRoad ()}; startLevel >= this ->mTrkParams [iteration].CellMinimumLevel (); --startLevel) {
312317 bounded_vector<TrackSeed<NLayers>> trackSeeds (this ->getMemoryPool ().get ());
313318 for (int startCellTopologyId{0 }; startCellTopologyId < hostTopology.nCells ; ++startCellTopologyId) {
@@ -357,7 +362,6 @@ void TrackerTraitsGPU<NLayers>::findRoads(const int iteration)
357362 this ->mTrkParams [iteration].LayerxX0 ,
358363 trackSeeds.size (),
359364 this ->mBz ,
360- startLevel,
361365 this ->mTrkParams [iteration].MaxChi2ClusterAttachment ,
362366 this ->mTrkParams [iteration].MaxChi2NDF ,
363367 this ->mTrkParams [iteration].ReseedIfShorter ,
@@ -367,153 +371,57 @@ void TrackerTraitsGPU<NLayers>::findRoads(const int iteration)
367371 this ->mTrkParams [iteration].CorrType ,
368372 mTimeFrameGPU ->getFrameworkAllocator ());
369373 mTimeFrameGPU ->createTrackITSExtDevice (trackSeeds.size ());
374+ if (extendTracks) {
375+ mTimeFrameGPU ->createTrackExtensionScratchDevice (kTrackExtensionLaunchThreads , this ->mTrkParams [iteration].TrackFollowerBeamWidth );
376+ }
370377 computeTrackSeedHandler (mTimeFrameGPU ->getDeviceTrackSeeds (),
371378 mTimeFrameGPU ->getDeviceArrayTrackingFrameInfo (),
372379 mTimeFrameGPU ->getDeviceArrayUnsortedClusters (),
380+ mTimeFrameGPU ->getDeviceIndexTableUtils (),
381+ mTimeFrameGPU ->getDeviceROFMaskTableView (),
382+ mTimeFrameGPU ->getDeviceROFOverlapTableView (),
383+ mTimeFrameGPU ->getDeviceArrayClusters (),
384+ (const unsigned char **)mTimeFrameGPU ->getDeviceArrayUsedClusters (),
385+ mTimeFrameGPU ->getDeviceArrayClustersIndexTables (),
386+ mTimeFrameGPU ->getDeviceROFrameClusters (),
373387 mTimeFrameGPU ->getDeviceTrackITSExt (),
374388 mTimeFrameGPU ->getDeviceTrackSeedsLUT (),
389+ extendTracks ? mTimeFrameGPU ->getDeviceActiveTrackExtensionHypotheses () : nullptr ,
390+ extendTracks ? mTimeFrameGPU ->getDeviceNextTrackExtensionHypotheses () : nullptr ,
375391 this ->mTrkParams [iteration].LayerRadii ,
376392 this ->mTrkParams [iteration].MinPt ,
377393 this ->mTrkParams [iteration].LayerxX0 ,
378394 trackSeeds.size (),
379395 mTimeFrameGPU ->getNTrackSeeds (),
380396 this ->mBz ,
381- startLevel,
382397 this ->mTrkParams [iteration].MaxChi2ClusterAttachment ,
383398 this ->mTrkParams [iteration].MaxChi2NDF ,
384399 this ->mTrkParams [iteration].ReseedIfShorter ,
385400 this ->mTrkParams [iteration].RepeatRefitOut ,
386401 this ->mTrkParams [iteration].ShiftRefToCluster ,
402+ this ->mTrkParams [iteration].NLayers ,
403+ this ->mTrkParams [iteration].PhiBins ,
404+ this ->mTrkParams [iteration].TrackFollowerBeamWidth ,
405+ extendTop,
406+ extendBot,
407+ this ->mTrkParams [iteration].TrackFollowerNSigmaCutPhi ,
408+ this ->mTrkParams [iteration].TrackFollowerNSigmaCutZ ,
387409 mTimeFrameGPU ->getDevicePropagator (),
388410 this ->mTrkParams [iteration].CorrType ,
389411 mTimeFrameGPU ->getFrameworkAllocator ());
390412 mTimeFrameGPU ->downloadTrackITSExtDevice ();
391413
392414 auto & tracks = mTimeFrameGPU ->getTrackITSExt ();
393- this ->acceptTracks (iteration, tracks, firstClusters, sharedFirstClusters);
415+ this ->acceptTracks (iteration, tracks, firstClusters, sharedFirstClusters, &nExtendedTracks, &nExtendedClusters );
394416 mTimeFrameGPU ->loadUsedClustersDevice ();
395417 }
396- this ->markTracks (iteration, sharedFirstClusters);
397- if (!hasTrackFollower (iteration)) {
398- // wipe the artefact memory
399- mTimeFrameGPU ->popMemoryStack (iteration);
418+ if (extendTracks) {
419+ LOGP (info, " Integrated track extension accepted {} tracks using {} clusters in iteration {}" , nExtendedTracks, nExtendedClusters, iteration);
400420 }
401- };
402-
403- template <int NLayers>
404- void TrackerTraitsGPU<NLayers>::extendTracks(const int iteration)
405- {
406- TrackerTraits<NLayers>::extendTracks (iteration);
407- mTimeFrameGPU ->loadUsedClustersDevice ();
408- // wipe the artefact memory kept alive for the track follower
421+ this ->markTracks (iteration, sharedFirstClusters);
422+ // wipe the artefact memory
409423 mTimeFrameGPU ->popMemoryStack (iteration);
410- }
411-
412- template <int NLayers>
413- bool TrackerTraitsGPU<NLayers>::hasTrackFollower(const int iteration) const
414- {
415- return this ->mTrkParams [iteration].PassFlags [IterationStep::TrackFollowerTop] ||
416- this ->mTrkParams [iteration].PassFlags [IterationStep::TrackFollowerBot];
417- }
418-
419- template <int NLayers>
420- void TrackerTraitsGPU<NLayers>::buildTrackExtensionCandidates(const int iteration, typename TrackerTraits<NLayers>::TrackExtensionCandidates& candidatesPerTrack)
421- {
422- const auto nTracks = this ->mTimeFrame ->getTracks ().size ();
423- const int beamWidth = std::max (1 , this ->mTrkParams [iteration].TrackFollowerBeamWidth );
424- mTimeFrameGPU ->syncStreams ();
425- mTimeFrameGPU ->loadTrackExtensionStartTracksDevice ();
426- mTimeFrameGPU ->createTrackExtensionCandidatesDevice (nTracks);
427- mTimeFrameGPU ->createTrackExtensionScratchDevice (kTrackExtensionLaunchThreads , beamWidth);
428- std::array<float , NLayers> layerRadii{};
429- std::array<float , NLayers> layerxX0{};
430- for (int iLayer{0 }; iLayer < this ->mTrkParams [iteration].NLayers ; ++iLayer) {
431- layerRadii[iLayer] = this ->mTrkParams [iteration].LayerRadii [iLayer];
432- layerxX0[iLayer] = this ->mTrkParams [iteration].LayerxX0 [iLayer];
433- }
434- computeTrackExtensionCandidatesHandler<NLayers>(mTimeFrameGPU ->getDeviceTrackExtensionStartTracks (),
435- mTimeFrameGPU ->getDeviceIndexTableUtils (),
436- mTimeFrameGPU ->getDeviceROFMaskTableView (),
437- mTimeFrameGPU ->getDeviceROFOverlapTableView (),
438- mTimeFrameGPU ->getDeviceArrayClusters (),
439- (const uint8_t **)mTimeFrameGPU ->getDeviceArrayUsedClusters (),
440- mTimeFrameGPU ->getDeviceArrayClustersIndexTables (),
441- mTimeFrameGPU ->getDeviceROFrameClusters (),
442- mTimeFrameGPU ->getDeviceArrayTrackingFrameInfo (),
443- mTimeFrameGPU ->getDeviceTrackExtensionCandidates (),
444- mTimeFrameGPU ->getDeviceTrackExtensionCandidateOffsets (),
445- mTimeFrameGPU ->getDeviceActiveTrackExtensionHypotheses (),
446- mTimeFrameGPU ->getDeviceNextTrackExtensionHypotheses (),
447- layerRadii,
448- layerxX0,
449- static_cast <int >(nTracks),
450- this ->mTrkParams [iteration].NLayers ,
451- this ->mTrkParams [iteration].PhiBins ,
452- beamWidth,
453- this ->mTrkParams [iteration].PassFlags [IterationStep::TrackFollowerTop],
454- this ->mTrkParams [iteration].PassFlags [IterationStep::TrackFollowerBot],
455- this ->mBz ,
456- this ->mTrkParams [iteration].MaxChi2ClusterAttachment ,
457- this ->mTrkParams [iteration].MaxChi2NDF ,
458- this ->mTrkParams [iteration].TrackFollowerNSigmaCutPhi ,
459- this ->mTrkParams [iteration].TrackFollowerNSigmaCutZ ,
460- mTimeFrameGPU ->getDevicePropagator (),
461- this ->mTrkParams [iteration].CorrType ,
462- mTimeFrameGPU ->getStream (0 ));
463- mTimeFrameGPU ->createTrackExtensionResultsDevice (nTracks);
464- computeTrackExtensionResultsHandler<NLayers>(mTimeFrameGPU ->getDeviceTrackExtensionStartTracks (),
465- mTimeFrameGPU ->getDeviceTrackExtensionCandidates (),
466- mTimeFrameGPU ->getDeviceTrackExtensionCandidateOffsets (),
467- mTimeFrameGPU ->getDeviceTrackExtensionResults (),
468- mTimeFrameGPU ->getDeviceArrayTrackingFrameInfo (),
469- layerxX0,
470- static_cast <int >(nTracks),
471- this ->mTrkParams [iteration].NLayers ,
472- this ->mBz ,
473- this ->mTrkParams [iteration].MaxChi2ClusterAttachment ,
474- this ->mTrkParams [iteration].MaxChi2NDF ,
475- mTimeFrameGPU ->getDevicePropagator (),
476- this ->mTrkParams [iteration].CorrType ,
477- this ->mTrkParams [iteration].ShiftRefToCluster ,
478- mTimeFrameGPU ->getStream (0 ));
479- mTimeFrameGPU ->downloadTrackExtensionResultsDevice ();
480-
481- const auto & results = mTimeFrameGPU ->getTrackExtensionResults ();
482- for (int iResult{0 }; iResult < static_cast <int >(results.size ()); ++iResult) {
483- const auto & result = results[iResult];
484- if (!result.isValid ()) {
485- continue ;
486- }
487- auto candidate = result.candidate ;
488- candidate.resultIndex = iResult;
489- if (candidatesPerTrack.add (candidate.trackIndex , candidate) < 0 ) {
490- continue ;
491- }
492- }
493- }
494-
495- template <int NLayers>
496- bool TrackerTraitsGPU<NLayers>::materializeTrackExtensionCandidate(TrackITSExt& track, const typename TrackerTraits<NLayers>::TrackExtensionCandidateN& candidate, const int iteration)
497- {
498- const auto & results = mTimeFrameGPU ->getTrackExtensionResults ();
499- if (candidate.resultIndex < 0 || candidate.resultIndex >= static_cast <int >(results.size ())) {
500- return TrackerTraits<NLayers>::materializeTrackExtensionCandidate (track, candidate, iteration);
501- }
502- const auto & result = results[candidate.resultIndex ];
503- if (!result.isValid () || result.candidate .trackIndex != candidate.trackIndex ) {
504- return false ;
505- }
506- track = result.track ;
507- this ->updateExtendedTrackTimeStamp (track, iteration);
508- uint32_t diff{0 };
509- for (int iLayer{0 }; iLayer < this ->mTrkParams [iteration].NLayers ; ++iLayer) {
510- if (candidate.addedClusters [iLayer] != constants::UnusedIndex) {
511- diff |= (0x1u << iLayer);
512- }
513- }
514- applyExtendedClustersPattern<NLayers>(track, diff);
515- return true ;
516- }
424+ };
517425
518426template <int NLayers>
519427int TrackerTraitsGPU<NLayers>::getTFNumberOfClusters() const
0 commit comments