+ //
+ // Refit in
+ //
+ for (Int_t irow=159; irow>0; irow--){
+ AliTPCclusterMI *cl=seed->GetClusterPointer(irow);
+ if (!cl) continue;
+ if (cl->GetX()<80) continue;
+ Int_t sector = cl->GetDetector();
+ Float_t dalpha = TMath::DegToRad()*(sector%18*20.+10.)-trackIn.GetAlpha();
+ if (TMath::Abs(dalpha)>0.01){
+ if (!trackIn.Rotate(TMath::DegToRad()*(sector%18*20.+10.))) break;
+ }
+ Double_t r[3]={cl->GetX(),cl->GetY(),cl->GetZ()};
+ Double_t cov[3]={0.01,0.,0.01}; //TODO: correct error parametrisation
+ AliTPCseed::GetError(cl, &trackIn,cov[0],cov[2]);
+ cov[0]*=cov[0];
+ cov[2]*=cov[2];
+ cov[0]+= kaFC*(TMath::Exp(-TMath::Abs(cl->GetX()-kxIFC)/ktFC)+TMath::Exp(-TMath::Abs(cl->GetX()-kxOFC)/ktFC));
+ cov[2]+= kaFC*(TMath::Exp(-TMath::Abs(cl->GetX()-kxIFC)/ktFC)+TMath::Exp(-TMath::Abs(cl->GetX()-kxOFC)/ktFC));
+ trackIn.GetXYZ(xyz);
+ // Double_t bz = AliTracker::GetBz(xyz);
+
+ // if (!trackIn.PropagateTo(r[0],bz)) continue;
+ if (!AliTracker::PropagateTrackToBxByBz(&trackIn, r[0],mass,1.,kFALSE)) continue;
+
+ if (RejectCluster(cl,&trackIn)) continue;
+ nclIn++;
+ trackIn.Update(&r[1],cov);
+ }
+ //
+ AliExternalTrackParam trackOut = trackIn;
+ trackOut.ResetCovariance(kResetCov);
+ trackOut.AddCovariance(covar);
+ if (TMath::Abs(magesd)<0.05) {
+ ((Double_t&)(trackOut.GetParameter()[4]))=0.000000001;
+ ((Double_t&)(trackOut.GetCovariance()[14]))=covar[14]; // fix the line
+ }
+