@@ -876,23 +876,52 @@ void TrackerTraits<NLayers>::markTracks(int iteration, bounded_vector<bounded_ve
876876 std::sort (sharedFirstClusters[iLayer].begin (), sharedFirstClusters[iLayer].end ());
877877 }
878878
879- for (auto & track : mTimeFrame ->getTracks ()) {
880- int firstLayer{mTrkParams [iteration].NLayers }, firstCluster{constants::UnusedIndex};
881- for (int iLayer{0 }; iLayer < mTrkParams [iteration].NLayers ; ++iLayer) {
882- if (track.getClusterIndex (iLayer) == constants::UnusedIndex) {
883- continue ;
884- }
885- firstLayer = iLayer;
886- firstCluster = track.getClusterIndex (iLayer);
887- break ;
888- }
879+ auto & tracks = mTimeFrame ->getTracks ();
880+ std::sort (tracks.begin (), tracks.end (), [](const auto & t1, const auto & t2) {
881+ return t1.getFirstLayerClusterIndex () < t2.getFirstLayerClusterIndex ();
882+ });
883+
884+ for (int i{0 }; i < static_cast <int >(tracks.size ()); ++i) {
885+ auto & track = tracks[i];
886+ int firstLayer{track.getFirstClusterLayer ()}, firstCluster{track.getFirstLayerClusterIndex ()};
889887 if (std::binary_search (sharedFirstClusters[firstLayer].begin (), sharedFirstClusters[firstLayer].end (), firstCluster)) {
890- track.setSharedClusters ();
888+ int j = i + 1 ;
889+ while (j < static_cast <int >(tracks.size ()) && tracks[j].getFirstLayerClusterIndex () == firstCluster) {
890+ auto & track2 = tracks[j];
891+ if (areTracksSelected (iteration, track, track2)) {
892+ for (int iLayer{track.getFirstClusterLayer ()}; iLayer < track.getFirstClusterLayer () + track.getNClusters (); ++iLayer) {
893+ }
894+ for (int iLayer{track2.getFirstClusterLayer ()}; iLayer < track2.getFirstClusterLayer () + track2.getNClusters (); ++iLayer) {
895+ }
896+ track.setSharedClusters ();
897+ track2.setSharedClusters ();
898+ }
899+ ++j;
900+ }
891901 }
892902 }
893903 }
894904}
895905
906+ template <int NLayers>
907+ bool TrackerTraits<NLayers>::areTracksSelected(int iteration, const TrackITSExt& t1, const TrackITSExt& t2)
908+ {
909+ const auto t1FirstLayer{t1.getFirstClusterLayer ()}, t2FirstLayer{t2.getFirstClusterLayer ()};
910+ if (mTimeFrame ->getClusterROF (t1FirstLayer, t1.getClusterIndex (t1FirstLayer)) != mTimeFrame ->getClusterROF (t2FirstLayer, t2.getClusterIndex (t2FirstLayer))) {
911+ return false ;
912+ }
913+ if (o2::math_utils::detail::deltaPhiSmall (t1.getPhi (), t2.getPhi ()) > mTrkParams [iteration].SharedClusterMaxDeltaPhi ) {
914+ return false ;
915+ }
916+ if (std::abs (t1.getEta () - t2.getEta ()) > mTrkParams [iteration].SharedClusterMaxDeltaEta ) {
917+ return false ;
918+ }
919+ if (mTrkParams [iteration].SharedClusterOppositeSign && t1.getSign () == t2.getSign ()) {
920+ return false ;
921+ }
922+ return true ;
923+ }
924+
896925template <int NLayers>
897926void TrackerTraits<NLayers>::setBz(float bz)
898927{
0 commit comments