]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFtrack.cxx
Input number added to Print
[u/mrichter/AliRoot.git] / TOF / AliTOFtrack.cxx
index dfd513fb4eb2d5786a453619014e778d61291816..dfca90b9d9082498219ee713cb999181401be774 100644 (file)
@@ -55,6 +55,30 @@ AliTOFtrack::AliTOFtrack(const AliTOFtrack& t) :
   //
 }                                
 
+//____________________________________________________________________________
+AliTOFtrack& AliTOFtrack::operator=(const AliESDtrack& t)
+{
+  // ass. op.
+  SetLabel(t.GetLabel());
+  SetChi2(0.);
+  SetMass(t.GetMassForTracking());
+
+  Set(t.GetX(),t.GetAlpha(),t.GetParameter(),t.GetCovariance());
+
+  if ((t.GetStatus()&AliESDtrack::kTIME) == 0) return *this;
+  StartTimeIntegral();
+  Double_t times[10]; 
+  for(Int_t isp=0;isp<AliPID::kSPECIESC;isp++){
+    times[isp] = t.GetIntegratedTimesOld(isp); // in ps
+  }
+
+  SetIntegratedTimes(times);
+  SetIntegratedLength(t.GetIntegratedLengthOld());
+
+  return *this;
+
+}
+
 //_____________________________________________________________________________
 AliTOFtrack::AliTOFtrack(const AliESDtrack& t) :
   AliKalmanTrack(), 
@@ -66,14 +90,19 @@ AliTOFtrack::AliTOFtrack(const AliESDtrack& t) :
   //
   SetLabel(t.GetLabel());
   SetChi2(0.);
-  SetMass(t.GetMass());
+  SetMass(t.GetMassForTracking());
 
   Set(t.GetX(),t.GetAlpha(),t.GetParameter(),t.GetCovariance());
 
   if ((t.GetStatus()&AliESDtrack::kTIME) == 0) return;
   StartTimeIntegral();
-  Double_t times[10]; t.GetIntegratedTimes(times); SetIntegratedTimes(times);
-  SetIntegratedLength(t.GetIntegratedLength());
+  Double_t times[10]; 
+  for(Int_t isp=0;isp<AliPID::kSPECIESC;isp++){
+    times[isp] = t.GetIntegratedTimesOld(isp); // in ps
+  }
+
+  SetIntegratedTimes(times);
+  SetIntegratedLength(t.GetIntegratedLengthOld());
 
 }              
 
@@ -127,6 +156,10 @@ Bool_t AliTOFtrack::PropagateTo(Double_t xk,Double_t /*x0*/,Double_t /*rho*/)
   /* get material budget from tracker */
   AliTracker::MeanMaterialBudget(start, end, mparam);
   Double_t xTimesRho = mparam[4]*mparam[0];
+  if (oldX < xk) { // CZ
+    xTimesRho = -xTimesRho; // it should be negative in case of outward
+                            // propagation (--> energy decreases)
+  } // CZ
   Double_t xOverX0   = mparam[1];
 
   /* correct for mean material */
@@ -159,6 +192,77 @@ Bool_t AliTOFtrack::PropagateToInnerTOF()
   // Propagates a track of particle with mass=pm to a reference plane 
   // defined by x=xk through media of density=rho and radiationLength=x0
 
+  //const Double_t kAlphac  = TMath::Pi()/9.0; // 20 degree
+  const Double_t kAlphac  = AliTOFGeometry::GetAlpha(); // 20 degree
+  const Double_t kTalphac = TMath::Tan(kAlphac*0.5);
+
+  //const Double_t kStepSize = 0.1; // [cm] Step size
+  const Double_t kStepSize = 0.5; // [cm] Step size
+
+  Double_t x = GetX();
+  //Double_t bz = GetBz();
+
+  //Double_t xyz0[3];
+  //Double_t xyz1[3];
+  //Double_t y;
+  //Double_t z;
+
+  Int_t nsteps = (Int_t)((AliTOFGeometry::Rmin()-x)/kStepSize);
+  for (Int_t istep=0; istep<nsteps; istep++){
+
+    // Critical alpha  - cross sector indication
+
+    Double_t dir = (GetX() > AliTOFGeometry::Rmin()) ? -1.0 : 1.0;
+
+    x = GetX()+dir*kStepSize;
+    if ( x<GetX() && GetX()<AliTOFGeometry::Rmin()) {
+      AliDebug(1,Form("Track doesn't reach rho=%f",AliTOFGeometry::Rmin()));
+      return kFALSE;
+    }
+
+    //GetXYZ(xyz0);
+    //bz = GetBz();
+    //GetXYZAt(x,bz,xyz1);
+    //AliExternalTrackParam::GetYAt(x,bz,y);
+    //AliExternalTrackParam::GetZAt(x,bz,z);
+    if (!(PropagateTo(x,0.,0.))) { /* passing 0.,0. as arguments since now
+                                     this method queries TGeo for material budget
+                                  */
+      return kFALSE;
+    }
+    
+    if (GetY() >  GetX()*kTalphac) {
+      if (!(Rotate(kAlphac))) return kFALSE;
+    } else if (GetY() < -GetX()*kTalphac) {
+      if (!(Rotate(-kAlphac))) return kFALSE;
+    }
+
+  }
+
+  //Bool_t check = PropagateTo(AliTOFGeometry::RinTOF());
+  Bool_t check = PropagateTo(AliTOFGeometry::RinTOF(),0.,0.); /* passing 0.,0. as arguments since now
+                                                                this method queries TGeo for material budget
+                                                             */
+
+  if (!check) return kFALSE;
+
+  if (GetY() >  GetX()*kTalphac) {
+    if (!(Rotate(kAlphac))) return kFALSE;
+  } else if (GetY() < -GetX()*kTalphac) {
+    if (!(Rotate(-kAlphac))) return kFALSE;
+  }
+
+  return kTRUE;
+  
+}     
+
+//_____________________________________________________________________________
+Bool_t AliTOFtrack::PropagateToInnerTOFold()
+{
+  // Propagates a track of particle with mass=pm to a reference plane 
+  // defined by x=xk through media of density=rho and radiationLength=x0
+
 
   Double_t ymax=AliTOFGeometry::RinTOF()*TMath::Tan(0.5*AliTOFGeometry::GetAlpha());
   Bool_t skip = kFALSE;
@@ -167,13 +271,9 @@ Bool_t AliTOFtrack::PropagateToInnerTOF()
     return kFALSE;
   }
   if (y > ymax) {
-    if (!Rotate(AliTOFGeometry::GetAlpha())) {
-      return kFALSE;
-    }
+    if (!Rotate(AliTOFGeometry::GetAlpha())) return kFALSE;
   } else if (y <-ymax) {
-    if (!Rotate(-AliTOFGeometry::GetAlpha())) {
-      return kFALSE;
-    }
+    if (!Rotate(-AliTOFGeometry::GetAlpha())) return kFALSE;
   }
   
   Double_t x = GetX();
@@ -181,14 +281,16 @@ Bool_t AliTOFtrack::PropagateToInnerTOF()
   for (Int_t istep=0;istep<nsteps;istep++){
     Float_t xp = x+istep*0.5; 
     //    GetPropagationParameters(param);  
-    PropagateTo(xp,0.,0.); /* passing 0.,0. as arguments since now
-                             this method queries TGeo for material budget
-                          */
+    if (!(PropagateTo(xp,0.,0.))) { /* passing 0.,0. as arguments since now
+                                      this method queries TGeo for material budget
+                                   */
+      return kFALSE;
+    }
     
   }
   
-  if(!PropagateTo(AliTOFGeometry::RinTOF()))return 0;
-  
+  if (!(PropagateTo(AliTOFGeometry::RinTOF()))) return kFALSE;
+
   return kTRUE;
   
 }     
@@ -221,7 +323,15 @@ Bool_t AliTOFtrack::PropagateTo(const AliCluster3D *c) {
                             (GetZ()-oldZ)*(GetZ()-oldZ));
     if (GetX()<oldX) d=-d;
     AddTimeStep(d);
+
   }
+
+  if (GetY() >  GetX()*TMath::Tan(0.5*AliTOFGeometry::GetAlpha())) {
+    if (!(Rotate(AliTOFGeometry::GetAlpha()))) return kFALSE;
+  } else if (GetY() < -GetX()*TMath::Tan(0.5*AliTOFGeometry::GetAlpha())) {
+    if (!(Rotate(-AliTOFGeometry::GetAlpha()))) return kFALSE;
+  }
+
   return kTRUE;
 }
 //_________________________________________________________________________