@@ -856,23 +856,52 @@ void TrackerTraits<NLayers>::markTracks(int iteration, bounded_vector<bounded_ve
856856 std::sort (sharedFirstClusters[iLayer].begin (), sharedFirstClusters[iLayer].end ());
857857 }
858858
859- for (auto & track : mTimeFrame ->getTracks ()) {
860- int firstLayer{mTrkParams [iteration].NLayers }, firstCluster{constants::UnusedIndex};
861- for (int iLayer{0 }; iLayer < mTrkParams [iteration].NLayers ; ++iLayer) {
862- if (track.getClusterIndex (iLayer) == constants::UnusedIndex) {
863- continue ;
864- }
865- firstLayer = iLayer;
866- firstCluster = track.getClusterIndex (iLayer);
867- break ;
868- }
859+ auto & tracks = mTimeFrame ->getTracks ();
860+ std::sort (tracks.begin (), tracks.end (), [](const auto & t1, const auto & t2) {
861+ return t1.getFirstLayerClusterIndex () < t2.getFirstLayerClusterIndex ();
862+ });
863+
864+ for (int i{0 }; i < static_cast <int >(tracks.size ()); ++i) {
865+ auto & track = tracks[i];
866+ int firstLayer{track.getFirstClusterLayer ()}, firstCluster{track.getFirstLayerClusterIndex ()};
869867 if (std::binary_search (sharedFirstClusters[firstLayer].begin (), sharedFirstClusters[firstLayer].end (), firstCluster)) {
870- track.setSharedClusters ();
868+ int j = i + 1 ;
869+ while (j < static_cast <int >(tracks.size ()) && tracks[j].getFirstLayerClusterIndex () == firstCluster) {
870+ auto & track2 = tracks[j];
871+ if (areTracksSelected (iteration, track, track2)) {
872+ for (int iLayer{track.getFirstClusterLayer ()}; iLayer < track.getFirstClusterLayer () + track.getNClusters (); ++iLayer) {
873+ }
874+ for (int iLayer{track2.getFirstClusterLayer ()}; iLayer < track2.getFirstClusterLayer () + track2.getNClusters (); ++iLayer) {
875+ }
876+ track.setSharedClusters ();
877+ track2.setSharedClusters ();
878+ }
879+ ++j;
880+ }
871881 }
872882 }
873883 }
874884}
875885
886+ template <int NLayers>
887+ bool TrackerTraits<NLayers>::areTracksSelected(int iteration, const TrackITSExt& t1, const TrackITSExt& t2)
888+ {
889+ const auto t1FirstLayer{t1.getFirstClusterLayer ()}, t2FirstLayer{t2.getFirstClusterLayer ()};
890+ if (mTimeFrame ->getClusterROF (t1FirstLayer, t1.getClusterIndex (t1FirstLayer)) != mTimeFrame ->getClusterROF (t2FirstLayer, t2.getClusterIndex (t2FirstLayer))) {
891+ return false ;
892+ }
893+ if (o2::math_utils::detail::deltaPhiSmall (t1.getPhi (), t2.getPhi ()) > mTrkParams [iteration].SharedClusterMaxDeltaPhi ) {
894+ return false ;
895+ }
896+ if (std::abs (t1.getEta () - t2.getEta ()) > mTrkParams [iteration].SharedClusterMaxDeltaEta ) {
897+ return false ;
898+ }
899+ if (mTrkParams [iteration].SharedClusterOppositeSign && t1.getSign () == t2.getSign ()) {
900+ return false ;
901+ }
902+ return true ;
903+ }
904+
876905template <int NLayers>
877906void TrackerTraits<NLayers>::setBz(float bz)
878907{
0 commit comments