ROOT logo

/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

#include "TVectorT.h"
#include "AliLog.h"
#include "AliESDtrack.h"
#include "AliTracker.h"

#include "AliTRDtrackV1.h"
#include "AliTRDcluster.h"
#include "AliTRDcalibDB.h"
#include "AliTRDReconstructor.h"
#include "AliTRDPIDResponse.h"
#include "AliTRDrecoParam.h"
#include "AliTRDdEdxBaseUtils.h"
#include "AliTRDdEdxCalibHistArray.h"
#include "AliTRDdEdxCalibUtils.h"
#include "AliTRDdEdxReconUtils.h"

ClassImp(AliTRDtrackV1)

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  Represents a reconstructed TRD track                                     //
//  Local TRD Kalman track                                                   //
//                                                                           //
//  Authors:                                                                 //
//    Alex Bercuci <A.Bercuci@gsi.de>                                        //
//    Markus Fasel <M.Fasel@gsi.de>                                          //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

//_______________________________________________________________
AliTRDtrackV1::AliTRDtrackV1() : AliKalmanTrack()
  ,fStatus(0)
  ,fESDid(0)
  ,fDE(0.)
  ,fTruncatedMean(0)
  ,fNchamberdEdx(0)
  ,fNclusterdEdx(0)
  ,fNdEdxSlices(0)
  ,fkReconstructor(NULL)
  ,fBackupTrack(NULL)
  ,fTrackLow(NULL)
  ,fTrackHigh(NULL)
{
  //
  // Default constructor
  //
  //printf("AliTRDtrackV1::AliTRDtrackV1()\n");

  for(int i =0; i<3; i++) fBudget[i] = 0.;
  
  Float_t pid = 1./AliPID::kSPECIES;
  for(int is =0; is<AliPID::kSPECIES; is++) fPID[is] = pid;

  for(int ip=0; ip<kNplane; ip++){
    fTrackletIndex[ip] = -1;
    fTracklet[ip]      = NULL;
  }
  SetLabel(-123456789); // reset label
}

//_______________________________________________________________
AliTRDtrackV1::AliTRDtrackV1(const AliTRDtrackV1 &ref) : AliKalmanTrack(ref)
  ,fStatus(ref.fStatus)
  ,fESDid(ref.fESDid)
  ,fDE(ref.fDE)
  ,fTruncatedMean(ref.fTruncatedMean)
  ,fNchamberdEdx(ref.fNchamberdEdx)
  ,fNclusterdEdx(ref.fNclusterdEdx)
  ,fNdEdxSlices(ref.fNdEdxSlices)
  ,fkReconstructor(ref.fkReconstructor)
  ,fBackupTrack(NULL)
  ,fTrackLow(NULL)
  ,fTrackHigh(NULL)
{
  //
  // Copy constructor
  //

  //printf("AliTRDtrackV1::AliTRDtrackV1(const AliTRDtrackV1 &)\n");
  SetBit(kOwner, kFALSE);
  for(int ip=0; ip<kNplane; ip++){ 
    fTrackletIndex[ip] = ref.fTrackletIndex[ip];
    fTracklet[ip]      = ref.fTracklet[ip];
  }
  if(ref.fTrackLow) fTrackLow = new AliExternalTrackParam(*ref.fTrackLow);
  if(ref.fTrackHigh) fTrackHigh = new AliExternalTrackParam(*ref.fTrackHigh);
 
  for (Int_t i = 0; i < 3;i++) fBudget[i]      = ref.fBudget[i];

	for(Int_t is = 0; is<AliPID::kSPECIES; is++) fPID[is] = ref.fPID[is];
  
  AliKalmanTrack::SetNumberOfClusters(ref.GetNumberOfClusters());
}

//_______________________________________________________________
AliTRDtrackV1::AliTRDtrackV1(const AliESDtrack &t) : AliKalmanTrack()
  ,fStatus(0)
  ,fESDid(0)
  ,fDE(0.)
  ,fTruncatedMean(0)
  ,fNchamberdEdx(0)                                                 
  ,fNclusterdEdx(0)
  ,fNdEdxSlices(0)
  ,fkReconstructor(NULL)
  ,fBackupTrack(NULL)
  ,fTrackLow(NULL)
  ,fTrackHigh(NULL)
{
  //
  // Constructor from AliESDtrack
  //

  SetESDid(t.GetID());
  SetLabel(t.GetLabel());
  SetChi2(0.0);

  SetMass(t.GetMassForTracking());
  AliKalmanTrack::SetNumberOfClusters(t.GetTRDncls()); 
  Int_t ti[]={-1, -1, -1, -1, -1, -1}; t.GetTRDtracklets(&ti[0]);
  for(int ip=0; ip<kNplane; ip++){ 
    fTrackletIndex[ip] = ti[ip];
    fTracklet[ip]      = NULL;
  }
  for(int i =0; i<3; i++) fBudget[i] = 0.;
  
  Float_t pid = 1./AliPID::kSPECIES;
  for(int is =0; is<AliPID::kSPECIES; is++) fPID[is] = pid;

  const AliExternalTrackParam *par = &t;
  /* RS
  if (t.GetStatus() & AliESDtrack::kTRDbackup) {
    par = t.GetOuterParam();
    if (!par) {
      AliError("No backup info!"); 
      par = &t;
    }
  }
  */
  Set(par->GetX() 
     ,par->GetAlpha()
     ,par->GetParameter()
     ,par->GetCovariance());

  if(t.GetStatus() & AliESDtrack::kTIME) {
    StartTimeIntegral();
    Double_t times[AliPID::kSPECIESC]; 
    t.GetIntegratedTimes(times,AliPID::kSPECIESC); 
    SetIntegratedTimes(times);
    SetIntegratedLength(t.GetIntegratedLength());
  }
}

//_______________________________________________________________
AliTRDtrackV1::AliTRDtrackV1(AliTRDseedV1 * const trklts, const Double_t p[5], const Double_t cov[15]
             , Double_t x, Double_t alpha) : AliKalmanTrack()
  ,fStatus(0)
  ,fESDid(0)
  ,fDE(0.)
  ,fTruncatedMean(0)
  ,fNchamberdEdx(0)                                                 
  ,fNclusterdEdx(0)
  ,fNdEdxSlices(0)
  ,fkReconstructor(NULL)
  ,fBackupTrack(NULL)
  ,fTrackLow(NULL)
  ,fTrackHigh(NULL)
{
  //
  // The stand alone tracking constructor
  // TEMPORARY !!!!!!!!!!!
  // to check :
  // 1. covariance matrix
  // 2. dQdl calculation
  //

  Double_t b(GetBz());
  Double_t cnv = (TMath::Abs(b) < 1.e-5) ? 1.e5 : 1./GetBz()/kB2C;
  
  Double_t pp[5] = { p[0]    
                    , p[1]
                    , p[2]
                    , p[3]
                    , p[4]*cnv      };
  
  Double_t c22 = x*x*cov[14] - 2*x*cov[12] + cov[ 5];
  Double_t c32 =   x*cov[13] -     cov[ 8];
  Double_t c20 =   x*cov[10] -     cov[ 3];
  Double_t c21 =   x*cov[11] -     cov[ 4];
  Double_t c42 =   x*cov[14] -     cov[12];
  
  Double_t cc[15] = { cov[ 0]
                    , cov[ 1],     cov[ 2]
                    , 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);
  AliDebug(3, Form("Pt mixing : w0[%4.2f] pt0[%5.3f] w1[%4.2f] pt[%5.3f]", w0, 1./p0, w1, 1./pp[4]));
  
  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);
  AliDebug(2, Form("Init @ x[%6.2f] pt[%5.3f]", x, 1./pp[4]));
  Int_t ncls = 0;
  for(int iplane=0; iplane<kNplane; iplane++){
    fTrackletIndex[iplane] = -1;
	  if(!trklts[iplane].IsOK()) fTracklet[iplane] = NULL;
    else{ 
      fTracklet[iplane] = &trklts[iplane];
      ncls += fTracklet[iplane]->GetN();
    }
  }
  AliKalmanTrack::SetNumberOfClusters(ncls);		
  for(int i =0; i<3; i++) fBudget[i] = 0.;
  
  Float_t pid = 1./AliPID::kSPECIES;
  for(int is =0; is<AliPID::kSPECIES; is++) fPID[is] = pid;
  SetLabel(-123456789); // reset label
}

//_______________________________________________________________
AliTRDtrackV1::~AliTRDtrackV1()
{
  // Clean up all objects allocated by the track during its lifetime.
  AliDebug(2, Form("Deleting track[%d]\n   fBackupTrack[%p] fTrackLow[%p] fTrackHigh[%p] Owner[%c].", fESDid, (void*)fBackupTrack, (void*)fTrackLow, (void*)fTrackHigh, TestBit(kOwner)?'y':'n'));

  if(fBackupTrack) delete fBackupTrack; fBackupTrack = NULL;

  if(fTrackLow) delete fTrackLow; fTrackLow = NULL;
  if(fTrackHigh) delete fTrackHigh; fTrackHigh = NULL;

  for(Int_t ip=0; ip<kNplane; ip++){
    if(TestBit(kOwner) && fTracklet[ip]) delete fTracklet[ip];
    fTracklet[ip] = NULL;
    fTrackletIndex[ip] = -1;
  }
}
	
//_______________________________________________________________
AliTRDtrackV1 &AliTRDtrackV1::operator=(const AliTRDtrackV1 &t)
{
  //
  // Assignment operator
  //

  if (this != &t) {
    AliKalmanTrack::operator=(t);
    ((AliTRDtrackV1 &) t).Copy(*this);
  }

  return *this;

}

//_____________________________________________________________________________
void AliTRDtrackV1::Copy(TObject &t) const
{
  //
  // Copy function
  //

  ((AliTRDtrackV1 &) t).fStatus         = fStatus;
  ((AliTRDtrackV1 &) t).fESDid          = fESDid;
  ((AliTRDtrackV1 &) t).fDE             = fDE;
  ((AliTRDtrackV1 &) t).fkReconstructor = fkReconstructor;
  ((AliTRDtrackV1 &) t).fBackupTrack    = 0x0;
  ((AliTRDtrackV1 &) t).fTrackLow       = 0x0;
  ((AliTRDtrackV1 &) t).fTrackHigh      = 0x0;

  for(Int_t ip = 0; ip < kNplane; ip++) { 
    ((AliTRDtrackV1 &) t).fTrackletIndex[ip] = fTrackletIndex[ip];
    ((AliTRDtrackV1 &) t).fTracklet[ip]      = fTracklet[ip];
  }
  if (fTrackLow) {
    ((AliTRDtrackV1 &) t).fTrackLow  = new AliExternalTrackParam(*fTrackLow);
  }
  if (fTrackHigh){
    ((AliTRDtrackV1 &) t).fTrackHigh = new AliExternalTrackParam(*fTrackHigh);
  }
 
  for (Int_t i = 0; i < 3; i++) {
    ((AliTRDtrackV1 &) t).fBudget[i] = fBudget[i];
  }
  for (Int_t is = 0; is < AliPID::kSPECIES; is++) {
    ((AliTRDtrackV1 &) t).fPID[is] = fPID[is];
  }  

}

//_______________________________________________________________
Int_t AliTRDtrackV1::CookLabel(Float_t wrong, Int_t *labs, Float_t *freq)
{
// Set MC label for this track
// On demand i.e. if arrays "labs" and "freq" are allocated by user returns :
//   nlabs = the no of distinct labels
//   labs  = array of distinct labels in decreasing order of frequency
//   freq  = frequency of each label  in decreasing order

  Int_t ncl(0);
  if(!(ncl = GetNumberOfClusters())) return 0;

  Int_t s[2][kMAXCLUSTERSPERTRACK];
  for (Int_t i = 0; i < kMAXCLUSTERSPERTRACK; i++) {
    s[0][i] = -1;
    s[1][i] =  0;
  }

  Int_t label(-123456789), nlabels(0);
  AliTRDcluster *c(NULL);
  for (Int_t ip(0); ip < AliTRDgeometry::kNlayer; ip++) {
    if(fTrackletIndex[ip]<0 || !fTracklet[ip]) continue;
    for (Int_t ic(0); ic < AliTRDseedV1::kNclusters; ic++) {
      if(!(c = fTracklet[ip]->GetClusters(ic))) continue;
      for (Int_t k(0); k < 3; k++) {
        if ((label = c->GetLabel(k)) < 0) continue;
        Int_t j(0);
        while(j < kMAXCLUSTERSPERTRACK){
          if(s[0][j]!=label && s[1][j]!=0){j++; continue;}
          if(!s[1][j]) nlabels++;
          s[0][j] = label; s[1][j]++;
          break;
        }
      }
    }
  }
  //printf("  Found %4d labels\n", nlabels);
  Float_t prob(1.);
  if(!nlabels){
    AliError(Form("No MC labels found for track %d.", fESDid));
    return 0;
  } else if(nlabels==1) {
    label = s[0][0];
    if(labs && freq){labs[0]=label; freq[0]=1.;}
  } else {
    Int_t idx[kMAXCLUSTERSPERTRACK];
    TMath::Sort(nlabels, s[1], idx);
    label = s[0][idx[0]]; prob = s[1][idx[0]]/Float_t(ncl);
    if(labs && freq){
      for (Int_t i(0); i<nlabels; i++){
        labs[i] = s[0][idx[i]];
        freq[i] = s[1][idx[i]]/Float_t(ncl);
      }
    }
  }
  SetLabel((1.-prob > wrong)?-label:label);
  return nlabels;
}

//_______________________________________________________________
Bool_t AliTRDtrackV1::CookPID()
{
//
// Cook the PID information for the track by delegating the omonim function of the tracklets. 
// Computes the number of tracklets used. The tracklet information are considered independent. 
// For the moment no global track measurement of PID is performed as for example to estimate 
// bremsstrahlung probability based on global chi2 of the track.
//
// The status bit AliESDtrack::kTRDpid is set during the call of AliTRDtrackV1::UpdateESDtrack().The PID performance of the 
//TRD for tracks with 6 tacklets is displayed below.
//Begin_Html
//<img src="TRD/trackPID.gif">
//End_Html
//
  const AliTRDPIDResponse *pidResponse = AliTRDcalibDB::Instance()->GetPIDResponse(fkReconstructor->GetRecoParam()->GetPIDmethod());
  if(!pidResponse){
    AliError("PID Response not available");
    return kFALSE;
  }
  Double_t dEdx[kNplane * (Int_t)AliTRDseedV1::kNdEdxSlices] = {0.};
  Float_t trackletP[kNplane] = {0.};

  fNdEdxSlices = pidResponse->GetNumberOfSlices();
  for(Int_t iseed = 0; iseed < kNplane; iseed++){
    if(!fTracklet[iseed]) continue;
    trackletP[iseed] = fTracklet[iseed]->GetMomentum();
//    if(pidResponse->GetPIDmethod() == AliTRDPIDResponse::kLQ1D){
      dEdx[iseed] = fTracklet[iseed]->GetdQdl();
/*    } else {
      fTracklet[iseed]->CookdEdx(fNdEdxSlices);
      const Float_t *trackletdEdx = fTracklet[iseed]->GetdEdx();
      for(Int_t islice = 0; islice < fNdEdxSlices; islice++){
        dEdx[iseed*fNdEdxSlices + islice] = trackletdEdx[islice];
      }
    }*/
  }
  pidResponse->GetResponse(fNdEdxSlices, dEdx, trackletP, fPID);

  static Int_t nprint = 0;
  if(!nprint){
    AliTRDdEdxBaseUtils::PrintControl();
    nprint++;
  }

  //do truncated mean
  AliTRDdEdxCalibUtils::SetObjArray(AliTRDcalibDB::Instance()->GetPHQ());
  const Double_t mag    = AliTRDdEdxBaseUtils::IsExBOn() ? GetBz()  : -1;
  const Double_t charge = AliTRDdEdxBaseUtils::IsExBOn() ? Charge() : -1;
  fTruncatedMean = CookTruncatedMean(0, mag, charge, kTRUE, fNchamberdEdx, fNclusterdEdx);

  return kTRUE;
}

//___________________________________________________________
UChar_t AliTRDtrackV1::GetNumberOfTrackletsPID() const
{
// Retrieve number of tracklets used for PID calculation. 

  UChar_t nPID = 0;
  for(int ip=0; ip<kNplane; ip++){
    if(fTrackletIndex[ip]<0 || !fTracklet[ip]) continue;
    if(!fTracklet[ip]->IsOK()) continue;
    
    nPID++;
  }
  return nPID;
}

//_______________________________________________________________
AliTRDcluster* AliTRDtrackV1::GetCluster(Int_t id)
{
  // Get the cluster at a certain position in the track
  Int_t n = 0;
  for(Int_t ip=0; ip<kNplane; ip++){
    if(!fTracklet[ip]) continue;
    if(n+fTracklet[ip]->GetN() <= id){ 
      n+=fTracklet[ip]->GetN();
      continue;
    }
    AliTRDcluster *c = NULL;
    for(Int_t ic=AliTRDseedV1::kNclusters; ic--;){
      if(!(c = fTracklet[ip]->GetClusters(ic))) continue;

      if(n<id){n++; continue;}
      return c;
    }
  }
  return NULL;
}

//_______________________________________________________________
Int_t  AliTRDtrackV1::GetClusterIndex(Int_t id) const
{
  // Get the cluster index at a certain position in the track
  Int_t n = 0;
  for(Int_t ip=0; ip<kNplane; ip++){
    if(!fTracklet[ip]) continue;
    if(n+fTracklet[ip]->GetN() <= id){ 
      n+=fTracklet[ip]->GetN();
      continue;
    }
    for(Int_t ic=AliTRDseedV1::kNclusters; ic--;){
      if(!(fTracklet[ip]->GetClusters(ic))) continue;
      if(n<id){n++; continue;}
      return fTracklet[ip]->GetIndexes(ic);
    }
  }
  return -1;
}

//_______________________________________________________________
Double_t AliTRDtrackV1::GetPredictedChi2(const AliTRDseedV1 *trklt, Double_t *cov) const
{
// Compute chi2 between tracklet and track. The value is calculated at the radial position of the track
// equal to the reference radial position of the tracklet (see AliTRDseedV1)
// 
// The chi2 estimator is computed according to the following formula
// BEGIN_LATEX
// #chi^{2}=(X_{trklt}-X_{track})(C_{trklt}+C_{track})^{-1}(X_{trklt}-X_{track})^{T}
// END_LATEX
// where X=(y z), the position of the track/tracklet in the yz plane
// 

  Double_t p[2]   = { trklt->GetY(), trklt->GetZ()};
  trklt->GetCovAt(trklt->GetX(), cov);
  return AliExternalTrackParam::GetPredictedChi2(p, cov);
}

//_______________________________________________________________
Int_t AliTRDtrackV1::GetSector() const
{
  return Int_t(GetAlpha()/AliTRDgeometry::GetAlpha() + (GetAlpha()>0. ? 0 : AliTRDgeometry::kNsector));
}

//_______________________________________________________________
Bool_t AliTRDtrackV1::IsEqual(const TObject *o) const
{
  // Checks whether two tracks are equal
  if (!o) return kFALSE;
  const AliTRDtrackV1 *inTrack = dynamic_cast<const AliTRDtrackV1*>(o);
  if (!inTrack) return kFALSE;
  
  //if ( fPIDquality != inTrack->GetPIDquality() ) return kFALSE;
  
  if(memcmp(fPID, inTrack->fPID, AliPID::kSPECIES*sizeof(Double32_t))) return kFALSE;
  if(memcmp(fBudget, inTrack->fBudget, 3*sizeof(Double32_t))) return kFALSE;
  if(memcmp(&fDE, &inTrack->fDE, sizeof(Double32_t))) return kFALSE;
  if(memcmp(&fFakeRatio, &inTrack->fFakeRatio, sizeof(Double32_t))) return kFALSE;
  if(memcmp(&fChi2, &inTrack->fChi2, sizeof(Double32_t))) return kFALSE;
  if(memcmp(&fMass, &inTrack->fMass, sizeof(Double32_t))) return kFALSE;
  if( fLab != inTrack->fLab ) return kFALSE;
  if( fN != inTrack->fN ) return kFALSE;
  Double32_t l(0.), in(0.);
  l = GetIntegratedLength(); in = inTrack->GetIntegratedLength();
  if(memcmp(&l, &in, sizeof(Double32_t))) return kFALSE;
  l=GetX(); in=inTrack->GetX();
  if(memcmp(&l, &in, sizeof(Double32_t))) return kFALSE;
  l = GetAlpha(); in = inTrack->GetAlpha();
  if(memcmp(&l, &in, sizeof(Double32_t))) return kFALSE;
  if(memcmp(GetParameter(), inTrack->GetParameter(), 5*sizeof(Double32_t))) return kFALSE;
  if(memcmp(GetCovariance(), inTrack->GetCovariance(), 15*sizeof(Double32_t))) return kFALSE;
  
  for (Int_t iTracklet = 0; iTracklet < kNplane; iTracklet++){
    AliTRDseedV1 *curTracklet = fTracklet[iTracklet];
    AliTRDseedV1 *inTracklet = inTrack->GetTracklet(iTracklet);
    if (curTracklet && inTracklet){
      if (! curTracklet->IsEqual(inTracklet) ) {
        curTracklet->Print();
        inTracklet->Print();
        return kFALSE;
      }
    } else {
      // if one tracklet exists, and corresponding 
      // in other track doesn't - return kFALSE
      if(inTracklet || curTracklet) return kFALSE;
    }
  }

  return kTRUE;
}

//_______________________________________________________________
Bool_t AliTRDtrackV1::IsElectron() const
{
  if(GetPID(0) > fkReconstructor->GetRecoParam()->GetPIDThreshold(GetP())) return kTRUE;
  return kFALSE;
}

	
//_____________________________________________________________________________
Int_t AliTRDtrackV1::MakeBackupTrack()
{
//
// Creates a backup track
// TO DO update quality check of the track.
//

  Float_t occupancy(0.); Int_t n(0), ncls(0);
  for(Int_t il(AliTRDgeometry::kNlayer); il--;){ 
    if(!fTracklet[il]) continue;
    n++; 
    occupancy+=fTracklet[il]->GetTBoccupancy()/AliTRDseedV1::kNtb;
    ncls += fTracklet[il]->GetN();
  }
  if(!n) return -1;
  occupancy/=n;

  //Float_t ratio1 = Float_t(t.GetNumberOfClusters()+1) / Float_t(t.GetNExpected()+1);  
  
  Int_t failedCutId(0);
  if(GetChi2()/n > 5.0) failedCutId=1; 
  if(occupancy < 0.7) failedCutId=2;
  //if(ratio1 >   0.6) && 
  //if(ratio0+ratio1  >   1.5) && 
  if(GetNCross() != 0)  failedCutId=3;
  if(TMath::Abs(GetSnp()) > 0.85) failedCutId=4;
  if(ncls < 20) failedCutId=5;

  if(failedCutId){ 
    AliDebug(2, Form("\n"
      "chi2/tracklet < 5.0   [%c] %5.2f\n"
      "occupancy > 0.7       [%c] %4.2f\n"
      "NCross == 0           [%c] %d\n"
      "Abs(snp) < 0.85       [%c] %4.2f\n"
      "NClusters > 20        [%c] %d"
      ,(GetChi2()/n<5.0)?'y':'n', GetChi2()/n
      ,(occupancy>0.7)?'y':'n', occupancy
      ,(GetNCross()==0)?'y':'n', GetNCross()
      ,(TMath::Abs(GetSnp())<0.85)?'y':'n', TMath::Abs(GetSnp())
      ,(ncls>20)?'y':'n', ncls
    ));
    return failedCutId;
  }

  if(fBackupTrack) {
    fBackupTrack->~AliTRDtrackV1();
    new(fBackupTrack) AliTRDtrackV1((AliTRDtrackV1&)(*this));
    return 0;
  }
  fBackupTrack = new AliTRDtrackV1((AliTRDtrackV1&)(*this));
  return 0;
}

//_____________________________________________________________________________
Int_t AliTRDtrackV1::GetProlongation(Double_t xk, Double_t &y, Double_t &z) const
{
  //
  // Find a prolongation at given x
  // Return -1 if it does not exist
  //  

  Double_t bz = GetBz();
  if (!AliExternalTrackParam::GetYAt(xk,bz,y)) return -1;
  if (!AliExternalTrackParam::GetZAt(xk,bz,z)) return -1;

  return 1;  

}

//_____________________________________________________________________________
Bool_t AliTRDtrackV1::PropagateTo(Double_t xk, Double_t xx0, Double_t xrho)
{
  //
  // Propagates this track to a reference plane defined by "xk" [cm] 
  // correcting for the mean crossed material.
  //
  // "xx0"  - thickness/rad.length [units of the radiation length] 
  // "xrho" - thickness*density    [g/cm^2] 
  // 

  if (TMath::Abs(xk - GetX())<AliTRDReconstructor::GetEpsilon()*0.1) return kTRUE; // 10% of the tracker precision

  Double_t xyz0[3] = {GetX(), GetY(), GetZ()}, // track position BEFORE propagation 
           b[3];    // magnetic field 
  GetBxByBz(b);
  if(!AliExternalTrackParam::PropagateToBxByBz(xk,b)) return kFALSE;
 
  // local track position AFTER propagation 
  Double_t xyz1[3] = {GetX(), GetY(), GetZ()};
//  printf("x0[%6.2f] -> x1[%6.2f] dx[%6.2f] rho[%f]\n", xyz0[0], xyz1[0], xyz0[0]-xk, xrho/TMath::Abs(xyz0[0]-xk));
  if(xyz0[0] < xk) {
    xrho = -xrho;
    if (IsStartedTimeIntegral()) {
      Double_t l2  = TMath::Sqrt((xyz1[0]-xyz0[0])*(xyz1[0]-xyz0[0]) 
                               + (xyz1[1]-xyz0[1])*(xyz1[1]-xyz0[1]) 
                               + (xyz1[2]-xyz0[2])*(xyz1[2]-xyz0[2]));
      Double_t crv = AliExternalTrackParam::GetC(b[2]);
      if (TMath::Abs(l2*crv) > 0.0001) {
        // Make correction for curvature if neccesary
        l2 = 0.5 * TMath::Sqrt((xyz1[0]-xyz0[0])*(xyz1[0]-xyz0[0]) 
                             + (xyz1[1]-xyz0[1])*(xyz1[1]-xyz0[1]));
        l2 = 2.0 * TMath::ASin(l2 * crv) / crv;
        l2 = TMath::Sqrt(l2*l2 + (xyz1[2]-xyz0[2])*(xyz1[2]-xyz0[2]));
      }
      AddTimeStep(l2);
    }
  }
  if (!AliExternalTrackParam::CorrectForMeanMaterial(xx0, xrho, fMass)) return kFALSE;


  {

    // Energy losses
    Double_t p2    = (1.0 + GetTgl()*GetTgl()) / (GetSigned1Pt()*GetSigned1Pt());
    if (fMass<0) p2 *= 4; // q=2
    Double_t beta2 = p2 / (p2 + fMass*fMass);
    if ((beta2 < 1.0e-10) || 
        ((5940.0 * beta2/(1.0 - beta2 + 1.0e-10) - beta2) < 0.0)) {
      return kFALSE;
    }

    Double_t dE    = 0.153e-3 / beta2 
                   * (TMath::Log(5940.0 * beta2/(1.0 - beta2 + 1.0e-10)) - beta2)
                   * xrho;
    if (fMass<0) dE *= 4; // q=2
    fBudget[0] += xrho;

    /*
    // Suspicious part - think about it ?
    Double_t kinE =  TMath::Sqrt(p2);
    if (dE > 0.8*kinE) dE = 0.8 * kinE;  //      
    if (dE < 0)        dE = 0.0;         // Not valid region for Bethe bloch 
    */
 
    fDE += dE;

    /*
    // Suspicious ! I.B.
    Double_t sigmade = 0.07 * TMath::Sqrt(TMath::Abs(dE));   // Energy loss fluctuation 
    Double_t sigmac2 = sigmade*sigmade*fC*fC*(p2+fMass*fMass)/(p2*p2);
    fCcc += sigmac2;
    fCee += fX*fX * sigmac2;  
    */

  }

  return kTRUE;
}

//_____________________________________________________________________________
Int_t   AliTRDtrackV1::PropagateToR(Double_t r,Double_t step)
{
  //
  // Propagate track to the radial position
  // Rotation always connected to the last track position
  //

  Double_t xyz0[3];
  Double_t xyz1[3];
  Double_t y;
  Double_t z; 

  Double_t radius = TMath::Sqrt(GetX()*GetX() + GetY()*GetY());
  // Direction +-
  Double_t dir    = (radius > r) ? -1.0 : 1.0;   

  for (Double_t x = radius+dir*step; dir*x < dir*r; x += dir*step) {

    GetXYZ(xyz0);	
    Double_t alpha = TMath::ATan2(xyz0[1],xyz0[0]);
    Rotate(alpha,kTRUE);
    GetXYZ(xyz0);	
    if(GetProlongation(x,y,z)<0) return -1;
    xyz1[0] = x * TMath::Cos(alpha) + y * TMath::Sin(alpha); 
    xyz1[1] = x * TMath::Sin(alpha) - y * TMath::Cos(alpha);
    xyz1[2] = z;
    Double_t param[7];
    if(AliTracker::MeanMaterialBudget(xyz0,xyz1,param)<=0.) return -1;
    if (param[1] <= 0) {
      param[1] = 100000000;
    }
    PropagateTo(x,param[1],param[0]*param[4]);

  } 

  GetXYZ(xyz0);	
  Double_t alpha = TMath::ATan2(xyz0[1],xyz0[0]);
  Rotate(alpha,kTRUE);
  GetXYZ(xyz0);	
  if(GetProlongation(r,y,z)<0) return -1;
  xyz1[0] = r * TMath::Cos(alpha) + y * TMath::Sin(alpha); 
  xyz1[1] = r * TMath::Sin(alpha) - y * TMath::Cos(alpha);
  xyz1[2] = z;
  Double_t param[7];
  if(AliTracker::MeanMaterialBudget(xyz0,xyz1,param) <= 0.) return -1;

  if (param[1] <= 0) {
    param[1] = 100000000;
  }
  PropagateTo(r,param[1],param[0]*param[4]);

  return 0;

}

//_____________________________________________________________________________
void AliTRDtrackV1::Print(Option_t *o) const
{
  // Print track status
  AliInfo(Form("PID [%4.1f %4.1f %4.1f %4.1f %4.1f]", 1.E2*fPID[0], 1.E2*fPID[1], 1.E2*fPID[2], 1.E2*fPID[3], 1.E2*fPID[4]));
  AliInfo(Form("Material[%5.2f %5.2f %5.2f]", fBudget[0], fBudget[1], fBudget[2]));

  AliInfo(Form("x[%7.2f] t[%7.4f] alpha[%f] mass[%f]", GetX(), GetIntegratedLength(), GetAlpha(), fMass));
  AliInfo(Form("Ntr[%1d] NtrPID[%1d] Ncl[%3d] lab[%3d]", GetNumberOfTracklets(), GetNumberOfTrackletsPID(), fN, fLab));

  printf("|X| = (");
  const Double_t *curP = GetParameter();
  for (Int_t i = 0; i < 5; i++) printf("%7.2f ", curP[i]);
  printf(")\n");

  printf("|V| = \n");
  const Double_t *curC = GetCovariance();
  for (Int_t i = 0, j=4, k=0; i<15; i++, k++){
    printf("%7.2f ", curC[i]);
    if(k==j){ 
      printf("\n");
      k=-1; j--;
    }
  }
  if(strcmp(o, "a")!=0) return;

  for(Int_t ip=0; ip<kNplane; ip++){
    if(!fTracklet[ip]) continue;
    fTracklet[ip]->Print(o);
  }
}


//_____________________________________________________________________________
Bool_t AliTRDtrackV1::Rotate(Double_t alpha, Bool_t absolute)
{
  //
  // Rotates track parameters in R*phi plane
  // if absolute rotation alpha is in global system
  // otherwise alpha rotation is relative to the current rotation angle
  //  

  if (absolute) alpha -= GetAlpha();
  //else fNRotate++;

  return AliExternalTrackParam::Rotate(GetAlpha()+alpha);
}

//___________________________________________________________
void AliTRDtrackV1::SetNumberOfClusters() 
{
// Calculate the number of clusters attached to this track
	
  Int_t ncls = 0;
  for(int ip=0; ip<kNplane; ip++){
    if(fTracklet[ip] && fTrackletIndex[ip] >= 0) ncls += fTracklet[ip]->GetN();
  }
  AliKalmanTrack::SetNumberOfClusters(ncls);	
}

	
//_______________________________________________________________
void AliTRDtrackV1::SetOwner()
{
  //
  // Toggle ownership of tracklets
  //

  if(TestBit(kOwner)) return;
  for (Int_t ip = 0; ip < kNplane; ip++) {
    if(fTrackletIndex[ip]<0 || !fTracklet[ip]) continue;
    fTracklet[ip] = new AliTRDseedV1(*fTracklet[ip]);
    fTracklet[ip]->SetOwner();
  }
  SetBit(kOwner);
}

//_______________________________________________________________
void AliTRDtrackV1::SetTracklet(AliTRDseedV1 *const trklt, Int_t index)
{
  //
  // Set the tracklets
  //
  Int_t plane = trklt->GetPlane();

  fTracklet[plane]      = trklt;
  fTrackletIndex[plane] = index;
}

//_______________________________________________________________
void AliTRDtrackV1::SetTrackIn()
{
//  Save location of birth for the TRD track
//  If the pointer is not valid allocate memory
//
  const AliExternalTrackParam *op = dynamic_cast<const AliExternalTrackParam*>(this);

  //printf("SetTrackIn() : fTrackLow[%p]\n", (void*)fTrackLow);
  if(fTrackLow){
    fTrackLow->~AliExternalTrackParam();
    new(fTrackLow) AliExternalTrackParam(*op);
  } else fTrackLow = new AliExternalTrackParam(*op);
}

//_______________________________________________________________
void AliTRDtrackV1::SetTrackOut(const AliExternalTrackParam *op)
{
//  Save location of death for the TRD track
//  If the pointer is not valid allocate memory
//
  if(!op) op = dynamic_cast<const AliExternalTrackParam*>(this);
  if(fTrackHigh){
    fTrackHigh->~AliExternalTrackParam();
    new(fTrackHigh) AliExternalTrackParam(*op);
  } else fTrackHigh = new AliExternalTrackParam(*op);
}

//_______________________________________________________________
void AliTRDtrackV1::UnsetTracklet(Int_t plane)
{
  if(plane<0) return;
  fTrackletIndex[plane] = -1;
  fTracklet[plane] = NULL;
}


//_______________________________________________________________
void AliTRDtrackV1::UpdateChi2(Float_t chi2)
{
// Update chi2/track with one tracklet contribution
  SetChi2(GetChi2() + chi2);
}

//_______________________________________________________________
void AliTRDtrackV1::UpdateESDtrack(AliESDtrack *track)
{
  //
  // Update the TRD PID information in the ESD track
  //

//   Int_t nslices = AliTRDcalibDB::Instance()->GetPIDResponse(fkReconstructor->GetRecoParam()->GetPIDmethod())->GetNumberOfSlices();
  // number of tracklets used for PID calculation
  UChar_t nPID = GetNumberOfTrackletsPID();
  // number of tracklets attached to the track
  UChar_t nTrk = GetNumberOfTracklets();
  // pack the two numbers together and store them in the ESD
  track->SetTRDntracklets(nPID | (nTrk<<3));
  // allocate space to store raw PID signals dEdx & momentum
  // independent of the method used to calculate PID (see below AliTRDPIDResponse)
  track->SetNumberOfTRDslices((AliTRDseedV1::kNdEdxSlices+2)*AliTRDgeometry::kNlayer);
  // store raw signals
  Float_t p, sp; Double_t spd;
  for (Int_t ip = 0; ip < kNplane; ip++) {
    if(fTrackletIndex[ip]<0 || !fTracklet[ip]) continue;
    // Fill TRD dEdx info into ESD track
    // a. Set Summed dEdx into the first slice
    track->SetTRDslice(fTracklet[ip]->GetdQdl(), ip, 0); 
    // b. Set NN dEdx slices
    fTracklet[ip]->CookdEdx(AliTRDPIDResponse::kNslicesNN);
    const Float_t *dedx = fTracklet[ip]->GetdEdx();
    for (Int_t js(0), ks(1); js < AliTRDPIDResponse::kNslicesNN; js++, ks++, dedx++){
      if(ks>=AliTRDseedV1::kNdEdxSlices){
        AliError(Form("Exceed allocated space for dEdx slices."));
        break;
      }
      track->SetTRDslice(*dedx, ip, ks);
    }
    // fill TRD momentum info into ESD track
    p = fTracklet[ip]->GetMomentum(&sp); spd = sp;
    track->SetTRDmomentum(p, ip, &spd);
    // store global quality per tracklet instead of momentum error
    // 26.09.11 A.Bercuci
    // first implementation store no. of time bins filled in tracklet (5bits  see "y" bits) and
    // no. of double clusters in case of pad row cross (4bits see "x" bits)
    // bit map for tracklet quality xxxxyyyyy
    // 27.10.11 A.Bercuci
    // add chamber status bit "z" bit
    // bit map for tracklet quality zxxxxyyyyy
    // 12.11.11 A.Bercuci
    // fit tracklet quality into the field fTRDTimeBin [Char_t]
    // bit map for tracklet quality zxxyyyyy
    // The information should be retrieved by the following functions of AliESDtrack for each TRD layer
    // GetTRDtrkltOccupancy(layer) -> no of TB filled in tracklet
    // GetTRDtrkltClCross(layer)   -> no of TB filled in crossing pad rows
    // IsTRDtrkltChmbGood(layer)   -> status of the chamber from which the tracklet is found
    Int_t nCross(fTracklet[ip]->IsRowCross()?fTracklet[ip]->GetTBcross():0); if(nCross>3) nCross = 3;
    Char_t trackletQ = Char_t(fTracklet[ip]->GetTBoccupancy() | (nCross<<5) | (fTracklet[ip]->IsChmbGood()<<7));
    track->SetTRDTimBin(trackletQ, ip);
  }
  // store PID probabilities
  track->SetTRDpid(fPID);

  //store truncated mean
  track->SetTRDsignal(fTruncatedMean);
  track->SetTRDNchamberdEdx(fNchamberdEdx);
  track->SetTRDNclusterdEdx(fNclusterdEdx);
}

//_______________________________________________________________
Double_t  AliTRDtrackV1::CookTruncatedMean(const Bool_t kinvq, const Double_t mag, const Int_t charge, const Int_t kcalib, Int_t &nch, Int_t &ncls, TVectorD *Qs, TVectorD *Xs, Int_t timeBin0, Int_t timeBin1, Int_t tstep) const
{
  //
  //Origin: Xianguo Lu <xianguo.lu@cern.ch>, Marian Ivanov <marian.ivanov@cern.ch>
  //

  TVectorD arrayQ(200), arrayX(200);
  ncls = AliTRDdEdxReconUtils::GetArrayClusterQ(kinvq, &arrayQ, &arrayX, this, timeBin0, timeBin1, tstep);

  const TObjArray *cobj = kcalib ? AliTRDdEdxCalibUtils::GetObj(kinvq, mag, charge) : NULL;
  
  const Double_t tmean = AliTRDdEdxReconUtils::ToyCook(kinvq, ncls, &arrayQ, &arrayX, cobj);

  nch = AliTRDdEdxReconUtils::UpdateArrayX(ncls, &arrayX);

  if(Qs && Xs){
    (*Qs)=arrayQ;
    (*Xs)=arrayX;
  }

  //printf("\ntest %.10f %d %d\n", tmean, nch, ncls);

  return tmean;
}

//_______________________________________________________________
TObject* AliTRDtrackV1::Clone(const char* newname) const
{
  // temporary override TObject::Clone to avoid crashes in reco
  AliTRDtrackV1* src = (AliTRDtrackV1*)this;
  Bool_t isown = src->IsOwner();
  AliInfo(Form("src_owner %d",isown));
  AliTRDtrackV1* dst = new AliTRDtrackV1(*src);
  if (isown) {
    src->SetBit(kOwner);
    dst->SetOwner();
  }
  return dst;
}
 AliTRDtrackV1.cxx:1
 AliTRDtrackV1.cxx:2
 AliTRDtrackV1.cxx:3
 AliTRDtrackV1.cxx:4
 AliTRDtrackV1.cxx:5
 AliTRDtrackV1.cxx:6
 AliTRDtrackV1.cxx:7
 AliTRDtrackV1.cxx:8
 AliTRDtrackV1.cxx:9
 AliTRDtrackV1.cxx:10
 AliTRDtrackV1.cxx:11
 AliTRDtrackV1.cxx:12
 AliTRDtrackV1.cxx:13
 AliTRDtrackV1.cxx:14
 AliTRDtrackV1.cxx:15
 AliTRDtrackV1.cxx:16
 AliTRDtrackV1.cxx:17
 AliTRDtrackV1.cxx:18
 AliTRDtrackV1.cxx:19
 AliTRDtrackV1.cxx:20
 AliTRDtrackV1.cxx:21
 AliTRDtrackV1.cxx:22
 AliTRDtrackV1.cxx:23
 AliTRDtrackV1.cxx:24
 AliTRDtrackV1.cxx:25
 AliTRDtrackV1.cxx:26
 AliTRDtrackV1.cxx:27
 AliTRDtrackV1.cxx:28
 AliTRDtrackV1.cxx:29
 AliTRDtrackV1.cxx:30
 AliTRDtrackV1.cxx:31
 AliTRDtrackV1.cxx:32
 AliTRDtrackV1.cxx:33
 AliTRDtrackV1.cxx:34
 AliTRDtrackV1.cxx:35
 AliTRDtrackV1.cxx:36
 AliTRDtrackV1.cxx:37
 AliTRDtrackV1.cxx:38
 AliTRDtrackV1.cxx:39
 AliTRDtrackV1.cxx:40
 AliTRDtrackV1.cxx:41
 AliTRDtrackV1.cxx:42
 AliTRDtrackV1.cxx:43
 AliTRDtrackV1.cxx:44
 AliTRDtrackV1.cxx:45
 AliTRDtrackV1.cxx:46
 AliTRDtrackV1.cxx:47
 AliTRDtrackV1.cxx:48
 AliTRDtrackV1.cxx:49
 AliTRDtrackV1.cxx:50
 AliTRDtrackV1.cxx:51
 AliTRDtrackV1.cxx:52
 AliTRDtrackV1.cxx:53
 AliTRDtrackV1.cxx:54
 AliTRDtrackV1.cxx:55
 AliTRDtrackV1.cxx:56
 AliTRDtrackV1.cxx:57
 AliTRDtrackV1.cxx:58
 AliTRDtrackV1.cxx:59
 AliTRDtrackV1.cxx:60
 AliTRDtrackV1.cxx:61
 AliTRDtrackV1.cxx:62
 AliTRDtrackV1.cxx:63
 AliTRDtrackV1.cxx:64
 AliTRDtrackV1.cxx:65
 AliTRDtrackV1.cxx:66
 AliTRDtrackV1.cxx:67
 AliTRDtrackV1.cxx:68
 AliTRDtrackV1.cxx:69
 AliTRDtrackV1.cxx:70
 AliTRDtrackV1.cxx:71
 AliTRDtrackV1.cxx:72
 AliTRDtrackV1.cxx:73
 AliTRDtrackV1.cxx:74
 AliTRDtrackV1.cxx:75
 AliTRDtrackV1.cxx:76
 AliTRDtrackV1.cxx:77
 AliTRDtrackV1.cxx:78
 AliTRDtrackV1.cxx:79
 AliTRDtrackV1.cxx:80
 AliTRDtrackV1.cxx:81
 AliTRDtrackV1.cxx:82
 AliTRDtrackV1.cxx:83
 AliTRDtrackV1.cxx:84
 AliTRDtrackV1.cxx:85
 AliTRDtrackV1.cxx:86
 AliTRDtrackV1.cxx:87
 AliTRDtrackV1.cxx:88
 AliTRDtrackV1.cxx:89
 AliTRDtrackV1.cxx:90
 AliTRDtrackV1.cxx:91
 AliTRDtrackV1.cxx:92
 AliTRDtrackV1.cxx:93
 AliTRDtrackV1.cxx:94
 AliTRDtrackV1.cxx:95
 AliTRDtrackV1.cxx:96
 AliTRDtrackV1.cxx:97
 AliTRDtrackV1.cxx:98
 AliTRDtrackV1.cxx:99
 AliTRDtrackV1.cxx:100
 AliTRDtrackV1.cxx:101
 AliTRDtrackV1.cxx:102
 AliTRDtrackV1.cxx:103
 AliTRDtrackV1.cxx:104
 AliTRDtrackV1.cxx:105
 AliTRDtrackV1.cxx:106
 AliTRDtrackV1.cxx:107
 AliTRDtrackV1.cxx:108
 AliTRDtrackV1.cxx:109
 AliTRDtrackV1.cxx:110
 AliTRDtrackV1.cxx:111
 AliTRDtrackV1.cxx:112
 AliTRDtrackV1.cxx:113
 AliTRDtrackV1.cxx:114
 AliTRDtrackV1.cxx:115
 AliTRDtrackV1.cxx:116
 AliTRDtrackV1.cxx:117
 AliTRDtrackV1.cxx:118
 AliTRDtrackV1.cxx:119
 AliTRDtrackV1.cxx:120
 AliTRDtrackV1.cxx:121
 AliTRDtrackV1.cxx:122
 AliTRDtrackV1.cxx:123
 AliTRDtrackV1.cxx:124
 AliTRDtrackV1.cxx:125
 AliTRDtrackV1.cxx:126
 AliTRDtrackV1.cxx:127
 AliTRDtrackV1.cxx:128
 AliTRDtrackV1.cxx:129
 AliTRDtrackV1.cxx:130
 AliTRDtrackV1.cxx:131
 AliTRDtrackV1.cxx:132
 AliTRDtrackV1.cxx:133
 AliTRDtrackV1.cxx:134
 AliTRDtrackV1.cxx:135
 AliTRDtrackV1.cxx:136
 AliTRDtrackV1.cxx:137
 AliTRDtrackV1.cxx:138
 AliTRDtrackV1.cxx:139
 AliTRDtrackV1.cxx:140
 AliTRDtrackV1.cxx:141
 AliTRDtrackV1.cxx:142
 AliTRDtrackV1.cxx:143
 AliTRDtrackV1.cxx:144
 AliTRDtrackV1.cxx:145
 AliTRDtrackV1.cxx:146
 AliTRDtrackV1.cxx:147
 AliTRDtrackV1.cxx:148
 AliTRDtrackV1.cxx:149
 AliTRDtrackV1.cxx:150
 AliTRDtrackV1.cxx:151
 AliTRDtrackV1.cxx:152
 AliTRDtrackV1.cxx:153
 AliTRDtrackV1.cxx:154
 AliTRDtrackV1.cxx:155
 AliTRDtrackV1.cxx:156
 AliTRDtrackV1.cxx:157
 AliTRDtrackV1.cxx:158
 AliTRDtrackV1.cxx:159
 AliTRDtrackV1.cxx:160
 AliTRDtrackV1.cxx:161
 AliTRDtrackV1.cxx:162
 AliTRDtrackV1.cxx:163
 AliTRDtrackV1.cxx:164
 AliTRDtrackV1.cxx:165
 AliTRDtrackV1.cxx:166
 AliTRDtrackV1.cxx:167
 AliTRDtrackV1.cxx:168
 AliTRDtrackV1.cxx:169
 AliTRDtrackV1.cxx:170
 AliTRDtrackV1.cxx:171
 AliTRDtrackV1.cxx:172
 AliTRDtrackV1.cxx:173
 AliTRDtrackV1.cxx:174
 AliTRDtrackV1.cxx:175
 AliTRDtrackV1.cxx:176
 AliTRDtrackV1.cxx:177
 AliTRDtrackV1.cxx:178
 AliTRDtrackV1.cxx:179
 AliTRDtrackV1.cxx:180
 AliTRDtrackV1.cxx:181
 AliTRDtrackV1.cxx:182
 AliTRDtrackV1.cxx:183
 AliTRDtrackV1.cxx:184
 AliTRDtrackV1.cxx:185
 AliTRDtrackV1.cxx:186
 AliTRDtrackV1.cxx:187
 AliTRDtrackV1.cxx:188
 AliTRDtrackV1.cxx:189
 AliTRDtrackV1.cxx:190
 AliTRDtrackV1.cxx:191
 AliTRDtrackV1.cxx:192
 AliTRDtrackV1.cxx:193
 AliTRDtrackV1.cxx:194
 AliTRDtrackV1.cxx:195
 AliTRDtrackV1.cxx:196
 AliTRDtrackV1.cxx:197
 AliTRDtrackV1.cxx:198
 AliTRDtrackV1.cxx:199
 AliTRDtrackV1.cxx:200
 AliTRDtrackV1.cxx:201
 AliTRDtrackV1.cxx:202
 AliTRDtrackV1.cxx:203
 AliTRDtrackV1.cxx:204
 AliTRDtrackV1.cxx:205
 AliTRDtrackV1.cxx:206
 AliTRDtrackV1.cxx:207
 AliTRDtrackV1.cxx:208
 AliTRDtrackV1.cxx:209
 AliTRDtrackV1.cxx:210
 AliTRDtrackV1.cxx:211
 AliTRDtrackV1.cxx:212
 AliTRDtrackV1.cxx:213
 AliTRDtrackV1.cxx:214
 AliTRDtrackV1.cxx:215
 AliTRDtrackV1.cxx:216
 AliTRDtrackV1.cxx:217
 AliTRDtrackV1.cxx:218
 AliTRDtrackV1.cxx:219
 AliTRDtrackV1.cxx:220
 AliTRDtrackV1.cxx:221
 AliTRDtrackV1.cxx:222
 AliTRDtrackV1.cxx:223
 AliTRDtrackV1.cxx:224
 AliTRDtrackV1.cxx:225
 AliTRDtrackV1.cxx:226
 AliTRDtrackV1.cxx:227
 AliTRDtrackV1.cxx:228
 AliTRDtrackV1.cxx:229
 AliTRDtrackV1.cxx:230
 AliTRDtrackV1.cxx:231
 AliTRDtrackV1.cxx:232
 AliTRDtrackV1.cxx:233
 AliTRDtrackV1.cxx:234
 AliTRDtrackV1.cxx:235
 AliTRDtrackV1.cxx:236
 AliTRDtrackV1.cxx:237
 AliTRDtrackV1.cxx:238
 AliTRDtrackV1.cxx:239
 AliTRDtrackV1.cxx:240
 AliTRDtrackV1.cxx:241
 AliTRDtrackV1.cxx:242
 AliTRDtrackV1.cxx:243
 AliTRDtrackV1.cxx:244
 AliTRDtrackV1.cxx:245
 AliTRDtrackV1.cxx:246
 AliTRDtrackV1.cxx:247
 AliTRDtrackV1.cxx:248
 AliTRDtrackV1.cxx:249
 AliTRDtrackV1.cxx:250
 AliTRDtrackV1.cxx:251
 AliTRDtrackV1.cxx:252
 AliTRDtrackV1.cxx:253
 AliTRDtrackV1.cxx:254
 AliTRDtrackV1.cxx:255
 AliTRDtrackV1.cxx:256
 AliTRDtrackV1.cxx:257
 AliTRDtrackV1.cxx:258
 AliTRDtrackV1.cxx:259
 AliTRDtrackV1.cxx:260
 AliTRDtrackV1.cxx:261
 AliTRDtrackV1.cxx:262
 AliTRDtrackV1.cxx:263
 AliTRDtrackV1.cxx:264
 AliTRDtrackV1.cxx:265
 AliTRDtrackV1.cxx:266
 AliTRDtrackV1.cxx:267
 AliTRDtrackV1.cxx:268
 AliTRDtrackV1.cxx:269
 AliTRDtrackV1.cxx:270
 AliTRDtrackV1.cxx:271
 AliTRDtrackV1.cxx:272
 AliTRDtrackV1.cxx:273
 AliTRDtrackV1.cxx:274
 AliTRDtrackV1.cxx:275
 AliTRDtrackV1.cxx:276
 AliTRDtrackV1.cxx:277
 AliTRDtrackV1.cxx:278
 AliTRDtrackV1.cxx:279
 AliTRDtrackV1.cxx:280
 AliTRDtrackV1.cxx:281
 AliTRDtrackV1.cxx:282
 AliTRDtrackV1.cxx:283
 AliTRDtrackV1.cxx:284
 AliTRDtrackV1.cxx:285
 AliTRDtrackV1.cxx:286
 AliTRDtrackV1.cxx:287
 AliTRDtrackV1.cxx:288
 AliTRDtrackV1.cxx:289
 AliTRDtrackV1.cxx:290
 AliTRDtrackV1.cxx:291
 AliTRDtrackV1.cxx:292
 AliTRDtrackV1.cxx:293
 AliTRDtrackV1.cxx:294
 AliTRDtrackV1.cxx:295
 AliTRDtrackV1.cxx:296
 AliTRDtrackV1.cxx:297
 AliTRDtrackV1.cxx:298
 AliTRDtrackV1.cxx:299
 AliTRDtrackV1.cxx:300
 AliTRDtrackV1.cxx:301
 AliTRDtrackV1.cxx:302
 AliTRDtrackV1.cxx:303
 AliTRDtrackV1.cxx:304
 AliTRDtrackV1.cxx:305
 AliTRDtrackV1.cxx:306
 AliTRDtrackV1.cxx:307
 AliTRDtrackV1.cxx:308
 AliTRDtrackV1.cxx:309
 AliTRDtrackV1.cxx:310
 AliTRDtrackV1.cxx:311
 AliTRDtrackV1.cxx:312
 AliTRDtrackV1.cxx:313
 AliTRDtrackV1.cxx:314
 AliTRDtrackV1.cxx:315
 AliTRDtrackV1.cxx:316
 AliTRDtrackV1.cxx:317
 AliTRDtrackV1.cxx:318
 AliTRDtrackV1.cxx:319
 AliTRDtrackV1.cxx:320
 AliTRDtrackV1.cxx:321
 AliTRDtrackV1.cxx:322
 AliTRDtrackV1.cxx:323
 AliTRDtrackV1.cxx:324
 AliTRDtrackV1.cxx:325
 AliTRDtrackV1.cxx:326
 AliTRDtrackV1.cxx:327
 AliTRDtrackV1.cxx:328
 AliTRDtrackV1.cxx:329
 AliTRDtrackV1.cxx:330
 AliTRDtrackV1.cxx:331
 AliTRDtrackV1.cxx:332
 AliTRDtrackV1.cxx:333
 AliTRDtrackV1.cxx:334
 AliTRDtrackV1.cxx:335
 AliTRDtrackV1.cxx:336
 AliTRDtrackV1.cxx:337
 AliTRDtrackV1.cxx:338
 AliTRDtrackV1.cxx:339
 AliTRDtrackV1.cxx:340
 AliTRDtrackV1.cxx:341
 AliTRDtrackV1.cxx:342
 AliTRDtrackV1.cxx:343
 AliTRDtrackV1.cxx:344
 AliTRDtrackV1.cxx:345
 AliTRDtrackV1.cxx:346
 AliTRDtrackV1.cxx:347
 AliTRDtrackV1.cxx:348
 AliTRDtrackV1.cxx:349
 AliTRDtrackV1.cxx:350
 AliTRDtrackV1.cxx:351
 AliTRDtrackV1.cxx:352
 AliTRDtrackV1.cxx:353
 AliTRDtrackV1.cxx:354
 AliTRDtrackV1.cxx:355
 AliTRDtrackV1.cxx:356
 AliTRDtrackV1.cxx:357
 AliTRDtrackV1.cxx:358
 AliTRDtrackV1.cxx:359
 AliTRDtrackV1.cxx:360
 AliTRDtrackV1.cxx:361
 AliTRDtrackV1.cxx:362
 AliTRDtrackV1.cxx:363
 AliTRDtrackV1.cxx:364
 AliTRDtrackV1.cxx:365
 AliTRDtrackV1.cxx:366
 AliTRDtrackV1.cxx:367
 AliTRDtrackV1.cxx:368
 AliTRDtrackV1.cxx:369
 AliTRDtrackV1.cxx:370
 AliTRDtrackV1.cxx:371
 AliTRDtrackV1.cxx:372
 AliTRDtrackV1.cxx:373
 AliTRDtrackV1.cxx:374
 AliTRDtrackV1.cxx:375
 AliTRDtrackV1.cxx:376
 AliTRDtrackV1.cxx:377
 AliTRDtrackV1.cxx:378
 AliTRDtrackV1.cxx:379
 AliTRDtrackV1.cxx:380
 AliTRDtrackV1.cxx:381
 AliTRDtrackV1.cxx:382
 AliTRDtrackV1.cxx:383
 AliTRDtrackV1.cxx:384
 AliTRDtrackV1.cxx:385
 AliTRDtrackV1.cxx:386
 AliTRDtrackV1.cxx:387
 AliTRDtrackV1.cxx:388
 AliTRDtrackV1.cxx:389
 AliTRDtrackV1.cxx:390
 AliTRDtrackV1.cxx:391
 AliTRDtrackV1.cxx:392
 AliTRDtrackV1.cxx:393
 AliTRDtrackV1.cxx:394
 AliTRDtrackV1.cxx:395
 AliTRDtrackV1.cxx:396
 AliTRDtrackV1.cxx:397
 AliTRDtrackV1.cxx:398
 AliTRDtrackV1.cxx:399
 AliTRDtrackV1.cxx:400
 AliTRDtrackV1.cxx:401
 AliTRDtrackV1.cxx:402
 AliTRDtrackV1.cxx:403
 AliTRDtrackV1.cxx:404
 AliTRDtrackV1.cxx:405
 AliTRDtrackV1.cxx:406
 AliTRDtrackV1.cxx:407
 AliTRDtrackV1.cxx:408
 AliTRDtrackV1.cxx:409
 AliTRDtrackV1.cxx:410
 AliTRDtrackV1.cxx:411
 AliTRDtrackV1.cxx:412
 AliTRDtrackV1.cxx:413
 AliTRDtrackV1.cxx:414
 AliTRDtrackV1.cxx:415
 AliTRDtrackV1.cxx:416
 AliTRDtrackV1.cxx:417
 AliTRDtrackV1.cxx:418
 AliTRDtrackV1.cxx:419
 AliTRDtrackV1.cxx:420
 AliTRDtrackV1.cxx:421
 AliTRDtrackV1.cxx:422
 AliTRDtrackV1.cxx:423
 AliTRDtrackV1.cxx:424
 AliTRDtrackV1.cxx:425
 AliTRDtrackV1.cxx:426
 AliTRDtrackV1.cxx:427
 AliTRDtrackV1.cxx:428
 AliTRDtrackV1.cxx:429
 AliTRDtrackV1.cxx:430
 AliTRDtrackV1.cxx:431
 AliTRDtrackV1.cxx:432
 AliTRDtrackV1.cxx:433
 AliTRDtrackV1.cxx:434
 AliTRDtrackV1.cxx:435
 AliTRDtrackV1.cxx:436
 AliTRDtrackV1.cxx:437
 AliTRDtrackV1.cxx:438
 AliTRDtrackV1.cxx:439
 AliTRDtrackV1.cxx:440
 AliTRDtrackV1.cxx:441
 AliTRDtrackV1.cxx:442
 AliTRDtrackV1.cxx:443
 AliTRDtrackV1.cxx:444
 AliTRDtrackV1.cxx:445
 AliTRDtrackV1.cxx:446
 AliTRDtrackV1.cxx:447
 AliTRDtrackV1.cxx:448
 AliTRDtrackV1.cxx:449
 AliTRDtrackV1.cxx:450
 AliTRDtrackV1.cxx:451
 AliTRDtrackV1.cxx:452
 AliTRDtrackV1.cxx:453
 AliTRDtrackV1.cxx:454
 AliTRDtrackV1.cxx:455
 AliTRDtrackV1.cxx:456
 AliTRDtrackV1.cxx:457
 AliTRDtrackV1.cxx:458
 AliTRDtrackV1.cxx:459
 AliTRDtrackV1.cxx:460
 AliTRDtrackV1.cxx:461
 AliTRDtrackV1.cxx:462
 AliTRDtrackV1.cxx:463
 AliTRDtrackV1.cxx:464
 AliTRDtrackV1.cxx:465
 AliTRDtrackV1.cxx:466
 AliTRDtrackV1.cxx:467
 AliTRDtrackV1.cxx:468
 AliTRDtrackV1.cxx:469
 AliTRDtrackV1.cxx:470
 AliTRDtrackV1.cxx:471
 AliTRDtrackV1.cxx:472
 AliTRDtrackV1.cxx:473
 AliTRDtrackV1.cxx:474
 AliTRDtrackV1.cxx:475
 AliTRDtrackV1.cxx:476
 AliTRDtrackV1.cxx:477
 AliTRDtrackV1.cxx:478
 AliTRDtrackV1.cxx:479
 AliTRDtrackV1.cxx:480
 AliTRDtrackV1.cxx:481
 AliTRDtrackV1.cxx:482
 AliTRDtrackV1.cxx:483
 AliTRDtrackV1.cxx:484
 AliTRDtrackV1.cxx:485
 AliTRDtrackV1.cxx:486
 AliTRDtrackV1.cxx:487
 AliTRDtrackV1.cxx:488
 AliTRDtrackV1.cxx:489
 AliTRDtrackV1.cxx:490
 AliTRDtrackV1.cxx:491
 AliTRDtrackV1.cxx:492
 AliTRDtrackV1.cxx:493
 AliTRDtrackV1.cxx:494
 AliTRDtrackV1.cxx:495
 AliTRDtrackV1.cxx:496
 AliTRDtrackV1.cxx:497
 AliTRDtrackV1.cxx:498
 AliTRDtrackV1.cxx:499
 AliTRDtrackV1.cxx:500
 AliTRDtrackV1.cxx:501
 AliTRDtrackV1.cxx:502
 AliTRDtrackV1.cxx:503
 AliTRDtrackV1.cxx:504
 AliTRDtrackV1.cxx:505
 AliTRDtrackV1.cxx:506
 AliTRDtrackV1.cxx:507
 AliTRDtrackV1.cxx:508
 AliTRDtrackV1.cxx:509
 AliTRDtrackV1.cxx:510
 AliTRDtrackV1.cxx:511
 AliTRDtrackV1.cxx:512
 AliTRDtrackV1.cxx:513
 AliTRDtrackV1.cxx:514
 AliTRDtrackV1.cxx:515
 AliTRDtrackV1.cxx:516
 AliTRDtrackV1.cxx:517
 AliTRDtrackV1.cxx:518
 AliTRDtrackV1.cxx:519
 AliTRDtrackV1.cxx:520
 AliTRDtrackV1.cxx:521
 AliTRDtrackV1.cxx:522
 AliTRDtrackV1.cxx:523
 AliTRDtrackV1.cxx:524
 AliTRDtrackV1.cxx:525
 AliTRDtrackV1.cxx:526
 AliTRDtrackV1.cxx:527
 AliTRDtrackV1.cxx:528
 AliTRDtrackV1.cxx:529
 AliTRDtrackV1.cxx:530
 AliTRDtrackV1.cxx:531
 AliTRDtrackV1.cxx:532
 AliTRDtrackV1.cxx:533
 AliTRDtrackV1.cxx:534
 AliTRDtrackV1.cxx:535
 AliTRDtrackV1.cxx:536
 AliTRDtrackV1.cxx:537
 AliTRDtrackV1.cxx:538
 AliTRDtrackV1.cxx:539
 AliTRDtrackV1.cxx:540
 AliTRDtrackV1.cxx:541
 AliTRDtrackV1.cxx:542
 AliTRDtrackV1.cxx:543
 AliTRDtrackV1.cxx:544
 AliTRDtrackV1.cxx:545
 AliTRDtrackV1.cxx:546
 AliTRDtrackV1.cxx:547
 AliTRDtrackV1.cxx:548
 AliTRDtrackV1.cxx:549
 AliTRDtrackV1.cxx:550
 AliTRDtrackV1.cxx:551
 AliTRDtrackV1.cxx:552
 AliTRDtrackV1.cxx:553
 AliTRDtrackV1.cxx:554
 AliTRDtrackV1.cxx:555
 AliTRDtrackV1.cxx:556
 AliTRDtrackV1.cxx:557
 AliTRDtrackV1.cxx:558
 AliTRDtrackV1.cxx:559
 AliTRDtrackV1.cxx:560
 AliTRDtrackV1.cxx:561
 AliTRDtrackV1.cxx:562
 AliTRDtrackV1.cxx:563
 AliTRDtrackV1.cxx:564
 AliTRDtrackV1.cxx:565
 AliTRDtrackV1.cxx:566
 AliTRDtrackV1.cxx:567
 AliTRDtrackV1.cxx:568
 AliTRDtrackV1.cxx:569
 AliTRDtrackV1.cxx:570
 AliTRDtrackV1.cxx:571
 AliTRDtrackV1.cxx:572
 AliTRDtrackV1.cxx:573
 AliTRDtrackV1.cxx:574
 AliTRDtrackV1.cxx:575
 AliTRDtrackV1.cxx:576
 AliTRDtrackV1.cxx:577
 AliTRDtrackV1.cxx:578
 AliTRDtrackV1.cxx:579
 AliTRDtrackV1.cxx:580
 AliTRDtrackV1.cxx:581
 AliTRDtrackV1.cxx:582
 AliTRDtrackV1.cxx:583
 AliTRDtrackV1.cxx:584
 AliTRDtrackV1.cxx:585
 AliTRDtrackV1.cxx:586
 AliTRDtrackV1.cxx:587
 AliTRDtrackV1.cxx:588
 AliTRDtrackV1.cxx:589
 AliTRDtrackV1.cxx:590
 AliTRDtrackV1.cxx:591
 AliTRDtrackV1.cxx:592
 AliTRDtrackV1.cxx:593
 AliTRDtrackV1.cxx:594
 AliTRDtrackV1.cxx:595
 AliTRDtrackV1.cxx:596
 AliTRDtrackV1.cxx:597
 AliTRDtrackV1.cxx:598
 AliTRDtrackV1.cxx:599
 AliTRDtrackV1.cxx:600
 AliTRDtrackV1.cxx:601
 AliTRDtrackV1.cxx:602
 AliTRDtrackV1.cxx:603
 AliTRDtrackV1.cxx:604
 AliTRDtrackV1.cxx:605
 AliTRDtrackV1.cxx:606
 AliTRDtrackV1.cxx:607
 AliTRDtrackV1.cxx:608
 AliTRDtrackV1.cxx:609
 AliTRDtrackV1.cxx:610
 AliTRDtrackV1.cxx:611
 AliTRDtrackV1.cxx:612
 AliTRDtrackV1.cxx:613
 AliTRDtrackV1.cxx:614
 AliTRDtrackV1.cxx:615
 AliTRDtrackV1.cxx:616
 AliTRDtrackV1.cxx:617
 AliTRDtrackV1.cxx:618
 AliTRDtrackV1.cxx:619
 AliTRDtrackV1.cxx:620
 AliTRDtrackV1.cxx:621
 AliTRDtrackV1.cxx:622
 AliTRDtrackV1.cxx:623
 AliTRDtrackV1.cxx:624
 AliTRDtrackV1.cxx:625
 AliTRDtrackV1.cxx:626
 AliTRDtrackV1.cxx:627
 AliTRDtrackV1.cxx:628
 AliTRDtrackV1.cxx:629
 AliTRDtrackV1.cxx:630
 AliTRDtrackV1.cxx:631
 AliTRDtrackV1.cxx:632
 AliTRDtrackV1.cxx:633
 AliTRDtrackV1.cxx:634
 AliTRDtrackV1.cxx:635
 AliTRDtrackV1.cxx:636
 AliTRDtrackV1.cxx:637
 AliTRDtrackV1.cxx:638
 AliTRDtrackV1.cxx:639
 AliTRDtrackV1.cxx:640
 AliTRDtrackV1.cxx:641
 AliTRDtrackV1.cxx:642
 AliTRDtrackV1.cxx:643
 AliTRDtrackV1.cxx:644
 AliTRDtrackV1.cxx:645
 AliTRDtrackV1.cxx:646
 AliTRDtrackV1.cxx:647
 AliTRDtrackV1.cxx:648
 AliTRDtrackV1.cxx:649
 AliTRDtrackV1.cxx:650
 AliTRDtrackV1.cxx:651
 AliTRDtrackV1.cxx:652
 AliTRDtrackV1.cxx:653
 AliTRDtrackV1.cxx:654
 AliTRDtrackV1.cxx:655
 AliTRDtrackV1.cxx:656
 AliTRDtrackV1.cxx:657
 AliTRDtrackV1.cxx:658
 AliTRDtrackV1.cxx:659
 AliTRDtrackV1.cxx:660
 AliTRDtrackV1.cxx:661
 AliTRDtrackV1.cxx:662
 AliTRDtrackV1.cxx:663
 AliTRDtrackV1.cxx:664
 AliTRDtrackV1.cxx:665
 AliTRDtrackV1.cxx:666
 AliTRDtrackV1.cxx:667
 AliTRDtrackV1.cxx:668
 AliTRDtrackV1.cxx:669
 AliTRDtrackV1.cxx:670
 AliTRDtrackV1.cxx:671
 AliTRDtrackV1.cxx:672
 AliTRDtrackV1.cxx:673
 AliTRDtrackV1.cxx:674
 AliTRDtrackV1.cxx:675
 AliTRDtrackV1.cxx:676
 AliTRDtrackV1.cxx:677
 AliTRDtrackV1.cxx:678
 AliTRDtrackV1.cxx:679
 AliTRDtrackV1.cxx:680
 AliTRDtrackV1.cxx:681
 AliTRDtrackV1.cxx:682
 AliTRDtrackV1.cxx:683
 AliTRDtrackV1.cxx:684
 AliTRDtrackV1.cxx:685
 AliTRDtrackV1.cxx:686
 AliTRDtrackV1.cxx:687
 AliTRDtrackV1.cxx:688
 AliTRDtrackV1.cxx:689
 AliTRDtrackV1.cxx:690
 AliTRDtrackV1.cxx:691
 AliTRDtrackV1.cxx:692
 AliTRDtrackV1.cxx:693
 AliTRDtrackV1.cxx:694
 AliTRDtrackV1.cxx:695
 AliTRDtrackV1.cxx:696
 AliTRDtrackV1.cxx:697
 AliTRDtrackV1.cxx:698
 AliTRDtrackV1.cxx:699
 AliTRDtrackV1.cxx:700
 AliTRDtrackV1.cxx:701
 AliTRDtrackV1.cxx:702
 AliTRDtrackV1.cxx:703
 AliTRDtrackV1.cxx:704
 AliTRDtrackV1.cxx:705
 AliTRDtrackV1.cxx:706
 AliTRDtrackV1.cxx:707
 AliTRDtrackV1.cxx:708
 AliTRDtrackV1.cxx:709
 AliTRDtrackV1.cxx:710
 AliTRDtrackV1.cxx:711
 AliTRDtrackV1.cxx:712
 AliTRDtrackV1.cxx:713
 AliTRDtrackV1.cxx:714
 AliTRDtrackV1.cxx:715
 AliTRDtrackV1.cxx:716
 AliTRDtrackV1.cxx:717
 AliTRDtrackV1.cxx:718
 AliTRDtrackV1.cxx:719
 AliTRDtrackV1.cxx:720
 AliTRDtrackV1.cxx:721
 AliTRDtrackV1.cxx:722
 AliTRDtrackV1.cxx:723
 AliTRDtrackV1.cxx:724
 AliTRDtrackV1.cxx:725
 AliTRDtrackV1.cxx:726
 AliTRDtrackV1.cxx:727
 AliTRDtrackV1.cxx:728
 AliTRDtrackV1.cxx:729
 AliTRDtrackV1.cxx:730
 AliTRDtrackV1.cxx:731
 AliTRDtrackV1.cxx:732
 AliTRDtrackV1.cxx:733
 AliTRDtrackV1.cxx:734
 AliTRDtrackV1.cxx:735
 AliTRDtrackV1.cxx:736
 AliTRDtrackV1.cxx:737
 AliTRDtrackV1.cxx:738
 AliTRDtrackV1.cxx:739
 AliTRDtrackV1.cxx:740
 AliTRDtrackV1.cxx:741
 AliTRDtrackV1.cxx:742
 AliTRDtrackV1.cxx:743
 AliTRDtrackV1.cxx:744
 AliTRDtrackV1.cxx:745
 AliTRDtrackV1.cxx:746
 AliTRDtrackV1.cxx:747
 AliTRDtrackV1.cxx:748
 AliTRDtrackV1.cxx:749
 AliTRDtrackV1.cxx:750
 AliTRDtrackV1.cxx:751
 AliTRDtrackV1.cxx:752
 AliTRDtrackV1.cxx:753
 AliTRDtrackV1.cxx:754
 AliTRDtrackV1.cxx:755
 AliTRDtrackV1.cxx:756
 AliTRDtrackV1.cxx:757
 AliTRDtrackV1.cxx:758
 AliTRDtrackV1.cxx:759
 AliTRDtrackV1.cxx:760
 AliTRDtrackV1.cxx:761
 AliTRDtrackV1.cxx:762
 AliTRDtrackV1.cxx:763
 AliTRDtrackV1.cxx:764
 AliTRDtrackV1.cxx:765
 AliTRDtrackV1.cxx:766
 AliTRDtrackV1.cxx:767
 AliTRDtrackV1.cxx:768
 AliTRDtrackV1.cxx:769
 AliTRDtrackV1.cxx:770
 AliTRDtrackV1.cxx:771
 AliTRDtrackV1.cxx:772
 AliTRDtrackV1.cxx:773
 AliTRDtrackV1.cxx:774
 AliTRDtrackV1.cxx:775
 AliTRDtrackV1.cxx:776
 AliTRDtrackV1.cxx:777
 AliTRDtrackV1.cxx:778
 AliTRDtrackV1.cxx:779
 AliTRDtrackV1.cxx:780
 AliTRDtrackV1.cxx:781
 AliTRDtrackV1.cxx:782
 AliTRDtrackV1.cxx:783
 AliTRDtrackV1.cxx:784
 AliTRDtrackV1.cxx:785
 AliTRDtrackV1.cxx:786
 AliTRDtrackV1.cxx:787
 AliTRDtrackV1.cxx:788
 AliTRDtrackV1.cxx:789
 AliTRDtrackV1.cxx:790
 AliTRDtrackV1.cxx:791
 AliTRDtrackV1.cxx:792
 AliTRDtrackV1.cxx:793
 AliTRDtrackV1.cxx:794
 AliTRDtrackV1.cxx:795
 AliTRDtrackV1.cxx:796
 AliTRDtrackV1.cxx:797
 AliTRDtrackV1.cxx:798
 AliTRDtrackV1.cxx:799
 AliTRDtrackV1.cxx:800
 AliTRDtrackV1.cxx:801
 AliTRDtrackV1.cxx:802
 AliTRDtrackV1.cxx:803
 AliTRDtrackV1.cxx:804
 AliTRDtrackV1.cxx:805
 AliTRDtrackV1.cxx:806
 AliTRDtrackV1.cxx:807
 AliTRDtrackV1.cxx:808
 AliTRDtrackV1.cxx:809
 AliTRDtrackV1.cxx:810
 AliTRDtrackV1.cxx:811
 AliTRDtrackV1.cxx:812
 AliTRDtrackV1.cxx:813
 AliTRDtrackV1.cxx:814
 AliTRDtrackV1.cxx:815
 AliTRDtrackV1.cxx:816
 AliTRDtrackV1.cxx:817
 AliTRDtrackV1.cxx:818
 AliTRDtrackV1.cxx:819
 AliTRDtrackV1.cxx:820
 AliTRDtrackV1.cxx:821
 AliTRDtrackV1.cxx:822
 AliTRDtrackV1.cxx:823
 AliTRDtrackV1.cxx:824
 AliTRDtrackV1.cxx:825
 AliTRDtrackV1.cxx:826
 AliTRDtrackV1.cxx:827
 AliTRDtrackV1.cxx:828
 AliTRDtrackV1.cxx:829
 AliTRDtrackV1.cxx:830
 AliTRDtrackV1.cxx:831
 AliTRDtrackV1.cxx:832
 AliTRDtrackV1.cxx:833
 AliTRDtrackV1.cxx:834
 AliTRDtrackV1.cxx:835
 AliTRDtrackV1.cxx:836
 AliTRDtrackV1.cxx:837
 AliTRDtrackV1.cxx:838
 AliTRDtrackV1.cxx:839
 AliTRDtrackV1.cxx:840
 AliTRDtrackV1.cxx:841
 AliTRDtrackV1.cxx:842
 AliTRDtrackV1.cxx:843
 AliTRDtrackV1.cxx:844
 AliTRDtrackV1.cxx:845
 AliTRDtrackV1.cxx:846
 AliTRDtrackV1.cxx:847
 AliTRDtrackV1.cxx:848
 AliTRDtrackV1.cxx:849
 AliTRDtrackV1.cxx:850
 AliTRDtrackV1.cxx:851
 AliTRDtrackV1.cxx:852
 AliTRDtrackV1.cxx:853
 AliTRDtrackV1.cxx:854
 AliTRDtrackV1.cxx:855
 AliTRDtrackV1.cxx:856
 AliTRDtrackV1.cxx:857
 AliTRDtrackV1.cxx:858
 AliTRDtrackV1.cxx:859
 AliTRDtrackV1.cxx:860
 AliTRDtrackV1.cxx:861
 AliTRDtrackV1.cxx:862
 AliTRDtrackV1.cxx:863
 AliTRDtrackV1.cxx:864
 AliTRDtrackV1.cxx:865
 AliTRDtrackV1.cxx:866
 AliTRDtrackV1.cxx:867
 AliTRDtrackV1.cxx:868
 AliTRDtrackV1.cxx:869
 AliTRDtrackV1.cxx:870
 AliTRDtrackV1.cxx:871
 AliTRDtrackV1.cxx:872
 AliTRDtrackV1.cxx:873
 AliTRDtrackV1.cxx:874
 AliTRDtrackV1.cxx:875
 AliTRDtrackV1.cxx:876
 AliTRDtrackV1.cxx:877
 AliTRDtrackV1.cxx:878
 AliTRDtrackV1.cxx:879
 AliTRDtrackV1.cxx:880
 AliTRDtrackV1.cxx:881
 AliTRDtrackV1.cxx:882
 AliTRDtrackV1.cxx:883
 AliTRDtrackV1.cxx:884
 AliTRDtrackV1.cxx:885
 AliTRDtrackV1.cxx:886
 AliTRDtrackV1.cxx:887
 AliTRDtrackV1.cxx:888
 AliTRDtrackV1.cxx:889
 AliTRDtrackV1.cxx:890
 AliTRDtrackV1.cxx:891
 AliTRDtrackV1.cxx:892
 AliTRDtrackV1.cxx:893
 AliTRDtrackV1.cxx:894
 AliTRDtrackV1.cxx:895
 AliTRDtrackV1.cxx:896
 AliTRDtrackV1.cxx:897
 AliTRDtrackV1.cxx:898
 AliTRDtrackV1.cxx:899
 AliTRDtrackV1.cxx:900
 AliTRDtrackV1.cxx:901
 AliTRDtrackV1.cxx:902
 AliTRDtrackV1.cxx:903
 AliTRDtrackV1.cxx:904
 AliTRDtrackV1.cxx:905
 AliTRDtrackV1.cxx:906
 AliTRDtrackV1.cxx:907
 AliTRDtrackV1.cxx:908
 AliTRDtrackV1.cxx:909
 AliTRDtrackV1.cxx:910
 AliTRDtrackV1.cxx:911
 AliTRDtrackV1.cxx:912
 AliTRDtrackV1.cxx:913
 AliTRDtrackV1.cxx:914
 AliTRDtrackV1.cxx:915
 AliTRDtrackV1.cxx:916
 AliTRDtrackV1.cxx:917
 AliTRDtrackV1.cxx:918
 AliTRDtrackV1.cxx:919
 AliTRDtrackV1.cxx:920
 AliTRDtrackV1.cxx:921
 AliTRDtrackV1.cxx:922
 AliTRDtrackV1.cxx:923
 AliTRDtrackV1.cxx:924
 AliTRDtrackV1.cxx:925
 AliTRDtrackV1.cxx:926
 AliTRDtrackV1.cxx:927
 AliTRDtrackV1.cxx:928
 AliTRDtrackV1.cxx:929
 AliTRDtrackV1.cxx:930
 AliTRDtrackV1.cxx:931
 AliTRDtrackV1.cxx:932
 AliTRDtrackV1.cxx:933
 AliTRDtrackV1.cxx:934
 AliTRDtrackV1.cxx:935
 AliTRDtrackV1.cxx:936
 AliTRDtrackV1.cxx:937
 AliTRDtrackV1.cxx:938
 AliTRDtrackV1.cxx:939
 AliTRDtrackV1.cxx:940
 AliTRDtrackV1.cxx:941
 AliTRDtrackV1.cxx:942
 AliTRDtrackV1.cxx:943
 AliTRDtrackV1.cxx:944
 AliTRDtrackV1.cxx:945
 AliTRDtrackV1.cxx:946
 AliTRDtrackV1.cxx:947
 AliTRDtrackV1.cxx:948
 AliTRDtrackV1.cxx:949
 AliTRDtrackV1.cxx:950
 AliTRDtrackV1.cxx:951
 AliTRDtrackV1.cxx:952
 AliTRDtrackV1.cxx:953
 AliTRDtrackV1.cxx:954
 AliTRDtrackV1.cxx:955
 AliTRDtrackV1.cxx:956
 AliTRDtrackV1.cxx:957
 AliTRDtrackV1.cxx:958
 AliTRDtrackV1.cxx:959
 AliTRDtrackV1.cxx:960
 AliTRDtrackV1.cxx:961
 AliTRDtrackV1.cxx:962
 AliTRDtrackV1.cxx:963
 AliTRDtrackV1.cxx:964
 AliTRDtrackV1.cxx:965
 AliTRDtrackV1.cxx:966
 AliTRDtrackV1.cxx:967
 AliTRDtrackV1.cxx:968
 AliTRDtrackV1.cxx:969
 AliTRDtrackV1.cxx:970
 AliTRDtrackV1.cxx:971
 AliTRDtrackV1.cxx:972
 AliTRDtrackV1.cxx:973
 AliTRDtrackV1.cxx:974
 AliTRDtrackV1.cxx:975
 AliTRDtrackV1.cxx:976
 AliTRDtrackV1.cxx:977
 AliTRDtrackV1.cxx:978
 AliTRDtrackV1.cxx:979
 AliTRDtrackV1.cxx:980
 AliTRDtrackV1.cxx:981
 AliTRDtrackV1.cxx:982
 AliTRDtrackV1.cxx:983
 AliTRDtrackV1.cxx:984
 AliTRDtrackV1.cxx:985
 AliTRDtrackV1.cxx:986
 AliTRDtrackV1.cxx:987
 AliTRDtrackV1.cxx:988
 AliTRDtrackV1.cxx:989
 AliTRDtrackV1.cxx:990
 AliTRDtrackV1.cxx:991
 AliTRDtrackV1.cxx:992
 AliTRDtrackV1.cxx:993
 AliTRDtrackV1.cxx:994
 AliTRDtrackV1.cxx:995
 AliTRDtrackV1.cxx:996
 AliTRDtrackV1.cxx:997
 AliTRDtrackV1.cxx:998
 AliTRDtrackV1.cxx:999
 AliTRDtrackV1.cxx:1000
 AliTRDtrackV1.cxx:1001
 AliTRDtrackV1.cxx:1002