]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCTracklet.cxx
Missing protection - check the presence of array
[u/mrichter/AliRoot.git] / TPC / AliTPCTracklet.cxx
index cba3a1f0722ac3050adb498d5df07e6c96a3b11a..9f9f4e86b834a3bea8a4b7ca646929f225f55038 100755 (executable)
@@ -324,13 +324,16 @@ void AliTPCTracklet::FitKalman(const AliTPCseed *seed,Int_t sector) {
   for (Int_t i=imin; i<=imax; i++){
     AliTPCclusterMI *c=track->GetClusterPointer(i);
     if (!c) continue;
-    if (RejectCluster(c,track)) continue;
     Double_t r[3]={c->GetX(),c->GetY(),c->GetZ()};
     Double_t cov[3]={0.01,0.,0.01}; //TODO: correct error parametrisation
+    AliTPCseed::GetError(c, track,cov[0],cov[2]);
+    cov[0]*=cov[0];
+    cov[2]*=cov[2];
     if (!track->PropagateTo(r[0])) {
       isOK=kFALSE;
       break;
     }
+    if (RejectCluster(c,track)) continue;
     if ( !((static_cast<AliExternalTrackParam*>(track)->Update(&r[1],cov)))) isOK=kFALSE;
   }
   if (!isOK) { delete track; return;}
@@ -341,13 +344,16 @@ void AliTPCTracklet::FitKalman(const AliTPCseed *seed,Int_t sector) {
   for (Int_t i=imax; i>=imin; i--){
     AliTPCclusterMI *c=track->GetClusterPointer(i);
     if (!c) continue;
-    if (RejectCluster(c,track)) continue;
     Double_t r[3]={c->GetX(),c->GetY(),c->GetZ()};
-    Double_t cov[3]={0.01,0.,0.01}; //TODO: correct error parametrisation
+    Double_t cov[3]={0.01,0.,0.01}; 
+    AliTPCseed::GetError(c, track,cov[0],cov[2]);
+    cov[0]*=cov[0];
+    cov[2]*=cov[2];
     if (!track->PropagateTo(r[0])) {
       isOK=kFALSE;
       break;
     }
+    if (RejectCluster(c,track)) continue;
     if ( !((static_cast<AliExternalTrackParam*>(track)->Update(&r[1],cov)))) isOK=kFALSE;
   }
   if (!isOK) { delete track; return;}
@@ -358,13 +364,16 @@ void AliTPCTracklet::FitKalman(const AliTPCseed *seed,Int_t sector) {
   for (Int_t i=imin; i<=imax; i++){
     AliTPCclusterMI *c=track->GetClusterPointer(i);
     if (!c) continue;
-    if (RejectCluster(c,track)) continue;
     Double_t r[3]={c->GetX(),c->GetY(),c->GetZ()};
-    Double_t cov[3]={0.01,0.,0.01}; //TODO: correct error parametrisation
+    Double_t cov[3]={0.01,0.,0.01}; 
+    AliTPCseed::GetError(c, track,cov[0],cov[2]);
+    cov[0]*=cov[0];
+    cov[2]*=cov[2];
     if (!track->PropagateTo(r[0])) {
       isOK=kFALSE;
       break;
     }
+    if (RejectCluster(c,track)) continue;
     if ( !((static_cast<AliExternalTrackParam*>(track)->Update(&r[1],cov)))) isOK=kFALSE;
   }
   if (!isOK) { delete track; return;}
@@ -608,7 +617,7 @@ Bool_t AliTPCTracklet::Riemann2Helix(Double_t *a,Double_t */*ca*/,
   Double_t R=.5*TMath::Sqrt(4.*a[0]+a[1]*a[1]+a[2]*a[2]);
   Double_t dx=x0-xr0;
   if (dx*dx>=R*R) return kFALSE;
-  Double_t dy=TMath::Sqrt(R*R-dx*dx); //sign!!
+  Double_t dy=TMath::Sqrt((R-dx)*(R+dx)); //sign!!
   if (TMath::Abs(yr0+dy)>TMath::Abs(yr0-dy))
     dy=-dy;
   Double_t y0=yr0+dy; 
@@ -710,19 +719,25 @@ Bool_t AliTPCTracklet::PropagateToMeanX(const AliTPCTracklet &t1,
       t2m=new AliExternalTrackParam(*t2.GetOuter());
     }
     Double_t mx=.5*(t1m->GetX()+t2m->GetX());
-    Double_t b1,b2;
+    //Double_t b1,b2;
     Double_t xyz[3];
     t1m->GetXYZ(xyz);
-    b1=GetBz(xyz);
+    //b1=GetBz(xyz);
+    Double_t b1[3]; AliTracker::GetBxByBz(xyz,b1);
     t2m->GetXYZ(xyz);
-    b2=GetBz(xyz);
+    //b2=GetBz(xyz);
+    Double_t b2[3]; AliTracker::GetBxByBz(xyz,b2);
     if (t1m->Rotate(t2m->GetAlpha()) 
-       && t1m->PropagateTo(mx,b1) 
-       && t2m->PropagateTo(mx,b2));
+       //&& t1m->PropagateTo(mx,b1) 
+       //&& t2m->PropagateTo(mx,b2));
+       && t1m->PropagateToBxByBz(mx,b1) 
+       && t2m->PropagateToBxByBz(mx,b2));
     else
       if (t2m->Rotate(t1m->GetAlpha())
-         && t1m->PropagateTo(mx,b1) 
-         && t2m->PropagateTo(mx,b2));
+         //&& t1m->PropagateTo(mx,b1) 
+         //&& t2m->PropagateTo(mx,b2));
+         && t1m->PropagateToBxByBz(mx,b1) 
+         && t2m->PropagateToBxByBz(mx,b2));
       else {
        delete t1m;
        delete t2m;
@@ -735,11 +750,9 @@ Bool_t AliTPCTracklet::PropagateToMeanX(const AliTPCTracklet &t1,
   return t1m&&t2m;
 }
 
-double AliTPCTracklet::GetBz(Double_t *xyz) {
-  if (AliTracker::UniformField())
-    return AliTracker::GetBz();
-  else
-    return AliTracker::GetBz(xyz);
+double AliTPCTracklet::GetBz(Double_t *xyz) 
+{
+  return AliTracker::GetBz(xyz);
 }
 
 void AliTPCTracklet::RandomND(Int_t ndim,const Double_t *p,const Double_t *c,