- // - or if the removed cluster was the last one
- if (smoothed && nextTrackParam) RetracePartialTrack(track,nextTrackParam);
- else RetraceTrack(track,kTRUE);
+ // - or if the removed cluster was used to compute the tracking seed
+ Bool_t normalExtrap;
+ if (smoothed && nextTrackParam) {
+
+ nextChamber = nextTrackParam->GetClusterPtr()->GetChamberId();
+ next2nextTrackParam = nextTrackParam;
+ do {
+
+ next2nextChamber = next2nextTrackParam->GetClusterPtr()->GetChamberId();
+ next2nextTrackParam = (AliMUONTrackParam*) track.GetTrackParamAtCluster()->After(next2nextTrackParam);
+
+ } while (next2nextTrackParam && (next2nextChamber == nextChamber));
+
+ if (next2nextChamber == nextChamber) normalExtrap = RetraceTrack(track,kTRUE);
+ else normalExtrap = RetracePartialTrack(track,nextTrackParam);
+
+ } else normalExtrap = RetraceTrack(track,kTRUE);
+
+ // stop in case of extrapolation problem
+ if (!normalExtrap) {
+ AliWarning("track partially improved but problem occur during refitting --> stop improvement");
+ break;
+ }