Modifications by Youri
authorcblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 17 Jul 2008 14:38:39 +0000 (14:38 +0000)
committercblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 17 Jul 2008 14:38:39 +0000 (14:38 +0000)
TRD/AliTRDtrackV1.cxx
TRD/AliTRDtrackerV1.cxx

index b30dec26fea93cbaddecb0d6e4d6f9e33571534e..6eba051aa3ef254f1d28089e37450d0339646089 100644 (file)
@@ -160,7 +160,13 @@ AliTRDtrackV1::AliTRDtrackV1(AliTRDseedV1 *trklts, const Double_t p[5], const Do
                     , c20,         c21,         c22
                     , cov[ 6],     cov[ 7],     c32,     cov[ 9]
                     , cov[10]*cnv, cov[11]*cnv, c42*cnv, cov[13]*cnv, cov[14]*cnv*cnv };
-  
+
+  Double_t mostProbablePt=AliExternalTrackParam::GetMostProbablePt();
+  Double_t p0=TMath::Sign(1/mostProbablePt,pp[4]);
+  Double_t w0=cc[14]/(cc[14] + p0*p0), w1=p0*p0/(cc[14] + p0*p0);
+  pp[4] = w0*p0 + w1*pp[4];
+  cc[10]*=w1; cc[11]*=w1; cc[12]*=w1; cc[13]*=w1; cc[14]*=w1;
+
        Set(x,alpha,pp,cc);
   Int_t ncls = 0;
        for(int iplane=0; iplane<kNplane; iplane++){
index d7e890dd13028cbb180c6db621cbdf32ad88cb13..53e3188d005058b795d15832c76650f6f2bebc32 100644 (file)
@@ -299,7 +299,11 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event)
     //track.SetSeedLabel(lbl);
     seed->UpdateTrackParams(&track, AliESDtrack::kTRDbackup); // Make backup
     Float_t p4          = track.GetC();
-    if((expectedClr = FollowBackProlongation(track))){
+    expectedClr = FollowBackProlongation(track);
+
+    if (expectedClr<0) continue; // Back prolongation failed
+
+    if(expectedClr){
       found++;  
       // computes PID for track
       track.CookPID();
@@ -375,7 +379,7 @@ Int_t AliTRDtrackerV1::PropagateBack(AliESDEvent *event)
       Double_t c2    = track.GetSnp() + track.GetC() * (xtof - track.GetX());
       if (TMath::Abs(c2) >= 0.99) continue;
       
-      PropagateToX(track, xTOF0, fgkMaxStep);
+      if (!PropagateToX(track, xTOF0, fgkMaxStep)) continue;
   
       // Energy losses taken to the account - check one more time
       c2 = track.GetSnp() + track.GetC() * (xtof - track.GetX());
@@ -623,7 +627,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
       
       if((x = fTrSec[sector].GetX(ilayer)) < 1.) continue;
     
-      if (!t.GetProlongation(x, y, z)) break;
+      if (!t.GetProlongation(x, y, z)) return -1;
       Int_t stack = fGeom->GetStack(z, ilayer);
       Int_t nCandidates = stack >= 0 ? 1 : 2;
       z -= stack >= 0 ? 0. : 4.; 
@@ -656,17 +660,17 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
     }
     if(!ptrTracklet->IsOK()){
       if(x < 1.) continue; //temporary
-      if(!PropagateToX(t, x-fgkMaxStep, fgkMaxStep)) break;
-      if(!AdjustSector(&t)) break;
-      if(TMath::Abs(t.GetSnp()) > fgkMaxSnp) break;
+      if(!PropagateToX(t, x-fgkMaxStep, fgkMaxStep)) return -1;
+      if(!AdjustSector(&t)) return -1;
+      if(TMath::Abs(t.GetSnp()) > fgkMaxSnp) return -1;
       continue;
     }
     
     // Propagate closer to the current chamber if neccessary 
     x -= clength;
-    if (x > (fgkMaxStep + t.GetX()) && !PropagateToX(t, x-fgkMaxStep, fgkMaxStep)) break;
-    if (!AdjustSector(&t)) break;
-    if (TMath::Abs(t.GetSnp()) > fgkMaxSnp) break;
+    if (x > (fgkMaxStep + t.GetX()) && !PropagateToX(t, x-fgkMaxStep, fgkMaxStep)) return -1;
+    if (!AdjustSector(&t)) return -1;
+    if (TMath::Abs(t.GetSnp()) > fgkMaxSnp) return -1;
     
     // load tracklet to the tracker and the track
     ptrTracklet = SetTracklet(ptrTracklet);
@@ -679,7 +683,7 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
     t.GetXYZ(xyz0);
     alpha = t.GetAlpha();
     x = ptrTracklet->GetX0();
-    if (!t.GetProlongation(x, y, z)) break;
+    if (!t.GetProlongation(x, y, z)) return -1;
     Double_t xyz1[3]; // exit point
     xyz1[0] =  x * TMath::Cos(alpha) - y * TMath::Sin(alpha); 
     xyz1[1] = +x * TMath::Sin(alpha) + y * TMath::Cos(alpha);
@@ -691,10 +695,11 @@ Int_t AliTRDtrackerV1::FollowBackProlongation(AliTRDtrackV1 &t)
     Double_t xx0  = param[1]; // radiation length
     
     // Propagate and update track
-    t.PropagateTo(x, xx0, xrho);
-    if (!AdjustSector(&t)) break;
+    if (!t.PropagateTo(x, xx0, xrho)) return -1;
+    if (!AdjustSector(&t)) return -1;
     Double_t maxChi2 = t.GetPredictedChi2(ptrTracklet);
-    if (maxChi2<1e+10 && t.Update(ptrTracklet, maxChi2)){ 
+    if (!t.Update(ptrTracklet, maxChi2)) return -1;
+    if (maxChi2<1e+10) { 
       nClustersExpected += ptrTracklet->GetN();
       //t.SetTracklet(&tracklet, index);
     }