- SetChi2(0.);
- SetNumberOfClusters(0);
-
- fdEdx = 0.;
- fAlpha = alpha;
- if (fAlpha < -TMath::Pi()) fAlpha += 2*TMath::Pi();
- else if (fAlpha >= TMath::Pi()) fAlpha -= 2*TMath::Pi();
-
- //Conversion of the track parameters
- Double_t x,p[5]; t.GetExternalParameters(x,p);
- fX=x; x=GetConvConst();
- fP0=p[0];
- fP1=p[1];
- fP3=p[3];
- fP4=p[4]/x;
- fP2=fP4*fX - p[2];
-
- //Conversion of the covariance matrix
- Double_t c[15]; t.GetExternalCovariance(c);
- c[10]/=x; c[11]/=x; c[12]/=x; c[13]/=x; c[14]/=x*x;
-
- Double_t c22=fX*fX*c[14] - 2*fX*c[12] + c[5];
- Double_t c32=fX*c[13] - c[8];
- Double_t c20=fX*c[10] - c[3], c21=fX*c[11] - c[4], c42=fX*c[14] - c[12];
-
- fC00=c[0 ];
- fC10=c[1 ]; fC11=c[2 ];
- fC20=c20; fC21=c21; fC22=c22;
- fC30=c[6 ]; fC31=c[7 ]; fC32=c32; fC33=c[9 ];
- fC40=c[10]; fC41=c[11]; fC42=c42; fC43=c[13]; fC44=c[14];
+ const Double_t kmaxC[4]={10,10,0.1,0.1}; // cuts on the rms /fP0,fP1,fP2,fP3
+ SetNumberOfClusters(t.GetTPCclusters(fIndex));
+ SetLabel(t.GetLabel());
+ SetMass(t.GetMass());
+ for (Int_t i=0; i<4;i++) fPoints[i]=0.;
+ for (Int_t i=0; i<12;i++) fKinkPoint[i]=0.;
+ for (Int_t i=0; i<3;i++) fKinkIndexes[i]=0;
+ for (Int_t i=0; i<3;i++) fV0Indexes[i]=0;
+ //
+ // choose parameters to start
+ //
+ const AliTPCRecoParam * recoParam = AliTPCReconstructor::GetRecoParam();
+ Int_t reject=0;
+ AliExternalTrackParam param(t);
+
+ const AliExternalTrackParam *tpcout=(t.GetFriendTrack())? ((AliESDfriendTrack*)(t.GetFriendTrack()))->GetTPCOut():0;
+ const AliExternalTrackParam *tpcin = t.GetInnerParam();
+ const AliExternalTrackParam *tpc=(tpcout)?tpcout:tpcin;
+ if (!tpc) tpc=¶m;
+ Bool_t isOK=recoParam->GetUseOuterDetectors();
+ if (param.GetCovariance()[0]>kmaxC[0]*kmaxC[0]) isOK=kFALSE;
+ if (param.GetCovariance()[2]>kmaxC[1]*kmaxC[1]) isOK=kFALSE;
+ if (param.GetCovariance()[5]>kmaxC[2]*kmaxC[2]) isOK=kFALSE;
+ if (param.GetCovariance()[9]>kmaxC[3]*kmaxC[3]) isOK=kFALSE;
+ param.Rotate(tpc->GetAlpha());
+ Double_t oldX=param.GetX(), oldY=param.GetY(), oldZ=param.GetZ();
+ if (!isOK ){
+ param=*tpc;
+ isOK=kTRUE;
+ reject=1;
+ }
+ isOK=AliTracker::PropagateTrackToBxByBz(¶m,tpc->GetX(),t.GetMass(),2.,kFALSE);
+ if (param.GetCovariance()[0]>kmaxC[0]*kmaxC[0]) isOK=kFALSE;
+ if (param.GetCovariance()[2]>kmaxC[1]*kmaxC[1]) isOK=kFALSE;
+ if (param.GetCovariance()[5]>kmaxC[2]*kmaxC[2]) isOK=kFALSE;
+ if (param.GetCovariance()[9]>kmaxC[3]*kmaxC[3]) isOK=kFALSE;
+ if (!isOK){
+ param=*tpc;
+ isOK=kTRUE;
+ reject=2;
+ }
+ if (reject>0){
+ param.ResetCovariance(4.); // reset covariance if start from backup param
+ }
+ //
+ //
+ if (pcstream){
+ AliExternalTrackParam dummy;
+ AliExternalTrackParam *ptpc=(AliExternalTrackParam *)tpc;
+ if (!ptpc) ptpc=&dummy;
+ AliESDtrack *esd= (AliESDtrack *)&t;
+ (*pcstream)<<"trackP"<<
+ "reject="<<reject<< // flag - rejection of current esd track parameters
+ "esd.="<<esd<< // original esd track
+ "tr.="<<¶m<< // starting track parameters
+ "out.="<<ptpc<< // backup tpc parameters
+ "\n";
+ }
+
+ Set(param.GetX(),param.GetAlpha(),param.GetParameter(),param.GetCovariance());