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.                  *
 **************************************************************************/

//-----------------------------------------------------------------//
//                                                                 //
//   AliTOFtracker Class                                           //
//   Task: Perform association of the ESD tracks to TOF Clusters   //
//   and Update ESD track with associated TOF Cluster parameters   //
//                                                                 //
//-----------------------------------------------------------------//

#include <Rtypes.h>

#include "TClonesArray.h"
#include "TObjArray.h"
#include "TTree.h"
#include "TTreeStream.h"

#include "AliESDEvent.h"
#include "AliESDtrack.h"
#include "AliESDpid.h"

#include "AliTOFRecoParam.h"
#include "AliTOFReconstructor.h"
#include "AliTOFcluster.h"
#include "AliTOFGeometry.h"
#include "AliTOFtrackerMI.h"
#include "AliTOFtrack.h"

#include "AliMathBase.h"

class TGeoManager;

extern TGeoManager *gGeoManager;

ClassImp(AliTOFtrackerMI)

//_____________________________________________________________________________
AliTOFtrackerMI::AliTOFtrackerMI():
  fkRecoParam(0x0),
  fGeom(0x0),
  fN(0),
  fNseeds(0),
  fNseedsTOF(0),
  fngoodmatch(0),
  fnbadmatch(0),
  fnunmatch(0),
  fnmatch(0),
  fR(379.), 
  fTOFHeigth(15.3),  
  fdCut(3.), 
  fDx(1.5), 
  fDy(0), 
  fDz(0), 
  fTracks(new TClonesArray("AliTOFtrack")),
  fSeeds(new TObjArray(100)),
  fDebugStreamer(0x0)
 { 
  //AliTOFtrackerMI main Ctor

   for (Int_t ii=0; ii<kMaxCluster; ii++) fClusters[ii]=0x0;

   fDy=AliTOFGeometry::XPad(); 
   fDz=AliTOFGeometry::ZPad(); 
   fDebugStreamer = new TTreeSRedirector("TOFdebug.root");   
}

//_____________________________________________________________________________
AliTOFtrackerMI::~AliTOFtrackerMI(){
  //
  // Destructor
  //
  if (fDebugStreamer) {    
    //fDebugStreamer->Close();
    delete fDebugStreamer;
  }
  delete fkRecoParam;
  delete fGeom;
  if (fTracks){
    fTracks->Delete();
    delete fTracks;
    fTracks=0x0;
  }
  if (fSeeds){
    fSeeds->Delete();
    delete fSeeds;
    fSeeds=0x0;
  }

  for (Int_t ii=0; ii<kMaxCluster; ii++)
    if (fClusters[ii]) fClusters[ii]->Delete();

}
//_____________________________________________________________________________
void AliTOFtrackerMI::GetPidSettings(AliESDpid *esdPID) {
  // 
  // Sets TOF resolution from RecoParams
  //
  if (fkRecoParam)
    esdPID->GetTOFResponse().SetTimeResolution(fkRecoParam->GetTimeResolution());
  else
    AliWarning("fkRecoParam not yet set; cannot set PID settings");
}

//_____________________________________________________________________________
Int_t AliTOFtrackerMI::PropagateBack(AliESDEvent * const event) {
  //
  // Gets seeds from ESD event and Match with TOF Clusters
  //

  // initialize RecoParam for current event
  AliDebug(1,"Initializing params for TOF");

  fkRecoParam = AliTOFReconstructor::GetRecoParam();  // instantiate reco param from STEER...

  if (fkRecoParam == 0x0) { 
    AliFatal("No Reco Param found for TOF!!!");
  }
  //fkRecoParam->Dump();
  //if(fkRecoParam->GetApplyPbPbCuts())fkRecoParam=fkRecoParam->GetPbPbparam();
  //fkRecoParam->PrintParameters();

  //Initialise some counters

  fNseeds=0;
  fNseedsTOF=0;
  fngoodmatch=0;
  fnbadmatch=0;
  fnunmatch=0;
  fnmatch=0;

  Int_t ntrk=event->GetNumberOfTracks();
  fNseeds = ntrk;

  //Load ESD tracks into a local Array of ESD Seeds
  for (Int_t i=0; i<fNseeds; i++)
    fSeeds->AddLast(event->GetTrack(i));

  //Prepare ESD tracks candidates for TOF Matching
  CollectESD();

  //First Step with Strict Matching Criterion
  //MatchTracks(kFALSE);

  //Second Step with Looser Matching Criterion
  //MatchTracks(kTRUE);
  MatchTracksMI(kFALSE);  // assign track to clusters
  MatchTracksMI(kTRUE);   // assign clusters to esd
  
  AliInfo(Form("Number of matched tracks = %d (good = %d, bad = %d)",fnmatch,fngoodmatch,fnbadmatch));

  //Update the matched ESD tracks

  for (Int_t i=0; i<ntrk; i++) {
    AliESDtrack *t=event->GetTrack(i);
    AliESDtrack *seed =(AliESDtrack*)fSeeds->At(i);

    if ( (seed->GetStatus()&AliESDtrack::kTOFin)!=0 ) {
      t->SetStatus(AliESDtrack::kTOFin);
      //if(seed->GetTOFsignal()>0){
      if ( (seed->GetStatus()&AliESDtrack::kTOFout)!=0 ) {
	t->SetStatus(AliESDtrack::kTOFout);
	t->SetTOFsignal(seed->GetTOFsignal());
	t->SetTOFcluster(seed->GetTOFcluster());
	Int_t tlab[3]; seed->GetTOFLabel(tlab);    
	t->SetTOFLabel(tlab);

	// Check done:
	//       by calling the AliESDtrack::UpdateTrackParams,
	//       the current track parameters are changed
	//       and it could cause refit problems.
	//       We need to update only the following track parameters:
        //            the track length and expected times.
	//       Removed AliESDtrack::UpdateTrackParams call
	//       Called AliESDtrack::SetIntegratedTimes(...) and
	//       AliESDtrack::SetIntegratedLength() routines.
	/*
	AliTOFtrack *track = new AliTOFtrack(*seed);
	t->UpdateTrackParams(track,AliESDtrack::kTOFout);
	delete track;
	*/

	Double_t times[10]; seed->GetIntegratedTimes(times);
	t->SetIntegratedTimes(times);
	t->SetIntegratedLength(seed->GetIntegratedLength());
	t->SetTOFsignalToT(seed->GetTOFsignalToT());
	t->SetTOFCalChannel(seed->GetTOFCalChannel());
	t->SetTOFDeltaBC(seed->GetTOFDeltaBC());
	t->SetTOFL0L1(seed->GetTOFL0L1());
	//
	// Make attention, please:
	//      AliESDtrack::fTOFInfo array does not be stored in the AliESDs.root file
	//      it is there only for a check during the reconstruction step.
	Float_t info[10];
	seed->GetTOFInfo(info);
	t->SetTOFInfo(info);
      }
    }
  }


  //Make TOF PID

  fSeeds->Clear();
  fTracks->Delete();
  return 0;
  
}
//_________________________________________________________________________
void AliTOFtrackerMI::CollectESD() {
   //prepare the set of ESD tracks to be matched to clusters in TOF
 
  TClonesArray &aTOFTrack = *fTracks;
  Int_t c0=0;
  Int_t c1=0;
  for (Int_t i=0; i<fNseeds; i++) {

    AliESDtrack *t =(AliESDtrack*)fSeeds->At(i);
    if ((t->GetStatus()&AliESDtrack::kTPCout)==0)continue;

    AliTOFtrack *track = new AliTOFtrack(*t); // New
    Float_t x = (Float_t)track->GetX(); //New

    // TRD good tracks, already propagated at 371 cm
    if ( ( (t->GetStatus()&AliESDtrack::kTRDout)!=0 ) &&
	 ( x >= AliTOFGeometry::Rmin() ) ) {
      if  ( track->PropagateToInnerTOF() ) {
	track->SetSeedIndex(i);
	t->UpdateTrackParams(track,AliESDtrack::kTOFin);
	new(aTOFTrack[fNseedsTOF]) AliTOFtrack(*track);
	fNseedsTOF++;
	c0++;
	delete track;
      }
    }

    // Propagate the rest of TPCbp
    else {
      if ( track->PropagateToInnerTOF() ) { // temporary solution
      	track->SetSeedIndex(i);
	t->UpdateTrackParams(track,AliESDtrack::kTOFin);
 	new(aTOFTrack[fNseedsTOF]) AliTOFtrack(*track);
	fNseedsTOF++;
	c1++;
      }
      delete track;
    }
  }
  //
  //
  printf("TRD\tOn\t%d\tOff\t%d\n",c0,c1);

  // Sort according uncertainties on track position 
  fTracks->Sort();

}

//_________________________________________________________________________
void AliTOFtrackerMI::MatchTracks( Bool_t /*mLastStep*/) const {
  return;
}
//
//
//_________________________________________________________________________
void AliTOFtrackerMI::MatchTracksMI(Bool_t mLastStep){

  //Match ESD tracks to clusters in TOF
  const Float_t kTofOffset   = 0;  // time offset
  const Float_t kMinQuality  = -6.; // minimal quality
  const Float_t kMaxQualityD = 1.;  // max delta quality if cluster used
  const Float_t kForbiddenR  = 0.1; // minimal PID according TPC

  static const Double_t kMasses[AliPID::kSPECIES+1]={
    0.000511, 0.105658, 0.139570, 0.493677, 0.938272, 1.875613
  };
  
  Int_t nSteps=(Int_t)(fTOFHeigth/0.1);

  //PH Arrays (moved outside of the loop)
  Float_t * trackPos[4];
  for (Int_t ii=0; ii<4; ii++) trackPos[ii] = new Float_t[nSteps];
  Int_t * clind = new Int_t[fN];

  // Some init 
  const Int_t kNclusterMax = 1000; // related to fN value  
  AliTOFcluster *clusters[kNclusterMax];
  Int_t         index[kNclusterMax];
  Float_t       quality[kNclusterMax];
  Float_t       dist3D[kNclusterMax][6];
  Double_t      times[kNclusterMax][6];
  Float_t       mintimedist[kNclusterMax];
  Float_t       likelihood[kNclusterMax];
  Float_t       length[kNclusterMax];
  Double_t      tpcpid[AliPID::kSPECIES+1]; // overrun_static - coverity warning
  dist3D[0][0]=1;
  
  for (Int_t i=0; i<fNseedsTOF; i++) {

    AliTOFtrack *track =(AliTOFtrack*)fTracks->UncheckedAt(i);
    AliESDtrack *t =(AliESDtrack*)fSeeds->At(track->GetSeedIndex());
    Bool_t hasTime = ( (t->GetStatus()& AliESDtrack::kTIME)>0) ? kTRUE:kFALSE;   // did we integrate time
    Float_t trdquality = t->GetTRDQuality();
    //
    // Normalize tpc pid
    //
    t->GetTPCpid(tpcpid);
    Double_t sumpid=0;
    for (Int_t ipid=0;ipid<AliPID::kSPECIES;ipid++){
      sumpid+=tpcpid[ipid];
    }
    for (Int_t ipid=0;ipid<AliPID::kSPECIES;ipid++){
      if (sumpid>0) tpcpid[ipid]/=sumpid;
      else{
	tpcpid[ipid]=0.2;
      }
    }

    if (trdquality<0) continue; // no chance 
    //
    AliTOFtrack *trackTOFin =new AliTOFtrack(*track);     
    //
    //propagat track to the middle of TOF
    //
    Float_t xs = 379.2;  // should be defined in the TOF geometry
    Double_t ymax=xs*TMath::Tan(0.5*AliTOFGeometry::GetAlpha());  
    Bool_t skip=kFALSE;
    Double_t ysect=trackTOFin->GetYat(xs,skip);
    if (skip){
      xs = 373.;
      ymax=xs*TMath::Tan(0.5*AliTOFGeometry::GetAlpha());
      ysect=trackTOFin->GetYat(xs,skip);
    }
    if (ysect > ymax) {
      if (!trackTOFin->Rotate(AliTOFGeometry::GetAlpha())) {
	continue;
      }
    } else if (ysect <-ymax) {
      if (!trackTOFin->Rotate(-AliTOFGeometry::GetAlpha())) {
	continue;
      }
    }    
    if(!trackTOFin->PropagateTo(xs)) {
      continue;
    }
    //
    // Determine a window around the track
    //
    Double_t x,par[5]; 
    trackTOFin->GetExternalParameters(x,par);
    Double_t cov[15]; 
    trackTOFin->GetExternalCovariance(cov);

    if (cov[0]<0. || cov[2]<0.) {
      AliWarning(Form("Very strange track (%d)! At least one of its covariance matrix diagonal elements is negative!",i));
      //delete trackTOFin;
      //continue;
    }

    Float_t scalefact=3.;    
    Double_t dphi=
      scalefact*
      ((5*TMath::Sqrt(TMath::Abs(cov[0])) + 3.*fDy + 10.*TMath::Abs(par[2]))/fR); 
    Double_t dz=
      scalefact*
      (5*TMath::Sqrt(TMath::Abs(cov[2])) + 3.*fDz + 10.*TMath::Abs(par[3]));
    
    Double_t phi=TMath::ATan2(par[0],x) + trackTOFin->GetAlpha();
    if (phi<-TMath::Pi())phi+=2*TMath::Pi();
    if (phi>=TMath::Pi())phi-=2*TMath::Pi();
    Double_t z=par[1];   

    Int_t nc     =0;
    Int_t nfound =0;
    // find the clusters in the window of the track

    for (Int_t k=FindClusterIndex(z-dz); k<fN; k++) {

      if (nc>=kNclusterMax) {
 	AliWarning("No more matchable clusters can be stored! Please, increase the corresponding vectors size.");
 	break;
      }

      AliTOFcluster *c=fClusters[k];
      if (c->GetZ() > z+dz) break;
      //      if (c->IsUsed()) continue;
      
      Double_t dph=TMath::Abs(c->GetPhi()-phi);
      if (dph>TMath::Pi()) dph-=2.*TMath::Pi();
      if (TMath::Abs(dph)>dphi) continue;

      clind[nc] = k;
      nc++;
    }

    AliDebug(1,Form(" Number of matchable TOF clusters for the track number %d: %d",i,nc));

    //
    // select close clusters
    //
    Double_t mom=t->GetP();
    //    Bool_t dump = kTRUE;
    for (Int_t icl=0; icl<nc; icl++){
      Float_t distances[5];

      index[nfound]=clind[icl];
      AliTOFcluster *cluster = fClusters[clind[icl]];
      GetLinearDistances(trackTOFin, cluster, distances);
      dist3D[nfound][0] = distances[4];
      dist3D[nfound][1] = distances[1];
      dist3D[nfound][2] = distances[2];
      // cut on distance
      if (TMath::Abs(dist3D[nfound][1])>20 || TMath::Abs(dist3D[nfound][2])>20) continue;
      //
      GetLikelihood(distances[1],distances[2],cov,trackTOFin, dist3D[nfound][3], dist3D[nfound][4]);   
      //
      // cut on likelihood      
      if (dist3D[nfound][3]*dist3D[nfound][4]<0.00000000000001) continue;  // log likelihood
      if (TMath::Log(dist3D[nfound][3]*dist3D[nfound][4])<-9) continue;  // log likelihood
      //
      clusters[nfound] = cluster;
      //
      //length and TOF updates 
      trackTOFin->GetIntegratedTimes(times[nfound]);
      length[nfound] = trackTOFin->GetIntegratedLength();
      length[nfound]+=distances[4];
      mintimedist[nfound]=1000; 
      Double_t tof2=AliTOFGeometry::TdcBinWidth()*cluster->GetTDC()+kTofOffset; // in ps
      // Float_t tgamma = TMath::Sqrt(cluster->GetR()*cluster->GetR()+cluster->GetZ()*cluster->GetZ())/0.03;  //time for "primary" gamma
      //if (trackTOFin->GetPt()<0.7 && TMath::Abs(tgamma-tof2)<350) continue;  // gamma conversion candidate - TEMPORARY
      for(Int_t j=0;j<AliPID::kSPECIES+1;j++){
	
	Double_t mass=kMasses[j];
	times[nfound][j]+=distances[4]/3e-2*TMath::Sqrt(mom*mom+mass*mass)/mom;   // add time distance
	if ( TMath::Abs(times[nfound][j]-tof2)<mintimedist[nfound] && tpcpid[j]>kForbiddenR){
	  mintimedist[nfound]=TMath::Abs(times[nfound][j]-tof2);
	}
      }
      //
      Float_t   liketime =  TMath::Exp(-mintimedist[nfound]/90.)+0.25*TMath::Exp(-mintimedist[nfound]/180.);
      if (!hasTime)  liketime=0.2;
      likelihood[nfound] = TMath::Log(dist3D[nfound][3]*dist3D[nfound][4]*liketime);
      
      if (TMath::Log(dist3D[nfound][3]*dist3D[nfound][4])<-1){
	if (likelihood[nfound]<-9.) continue;
      }
      //
      nfound++;
    }

    AliDebug(1,Form(" Number of track points for the track number %d: %d",i,nfound));

    if (nfound == 0 ) {
      fnunmatch++;
      delete trackTOFin;
      continue;
    } 
    //
    //choose the best cluster
    //
    //Float_t quality[kNclusterMax];
    //Int_t   index[kNclusterMax];
    for (Int_t kk=0; kk<kNclusterMax; kk++) quality[kk]=0;
    //
    AliTOFcluster * cgold=0;
    Int_t igold =-1;
    for (Int_t icl=0;icl<nfound;icl++){
      quality[icl] = dist3D[icl][3]*dist3D[icl][4];
    }
    TMath::Sort(nfound,quality,index,kTRUE);
    igold =  index[0];
    cgold =  clusters[igold];
    if (nfound>1 &&likelihood[index[1]]>likelihood[index[0]]){
      if ( quality[index[0]]<quality[index[1]]+0.5){
	igold = index[1];
	cgold =  clusters[igold];
      }
    }
    //
    //
    Float_t qualityGold = TMath::Log(0.0000001+(quality[igold]*(0.1+TMath::Exp(-mintimedist[igold]/80.))*(0.2+trdquality)));
    if (!mLastStep){
      if (cgold->GetQuality()<qualityGold) cgold->SetQuality(qualityGold);
      continue;
    }
    //
    if (mLastStep){
      //signed better cluster
      if (cgold->GetQuality()>qualityGold+kMaxQualityD) continue;
      if (2.*qualityGold-cgold->GetQuality()<kMinQuality) continue;
    }
 
    Int_t inonfake=-1;
    
    for (Int_t icl=0;icl<nfound;icl++){
      if (
	  (clusters[index[icl]]->GetLabel(0)==TMath::Abs(trackTOFin->GetLabel()))
	  ||
	  (clusters[index[icl]]->GetLabel(1)==TMath::Abs(trackTOFin->GetLabel()))
	  ||
	  (clusters[index[icl]]->GetLabel(2)==TMath::Abs(trackTOFin->GetLabel()))
	  ) {
	inonfake = icl;
	break;
      }
    }    
    fnmatch++;;
    if (inonfake==0) fngoodmatch++;
    else{
      fnbadmatch++;
    }

    Int_t tlab[3];
    tlab[0]=cgold->GetLabel(0);
    tlab[1]=cgold->GetLabel(1);
    tlab[2]=cgold->GetLabel(2);
    //    Double_t tof2=25.*cgold->GetTDC()-350; // in ps
    Double_t tof2=AliTOFGeometry::TdcBinWidth()*cgold->GetTDC()+kTofOffset; // in ps
    Float_t tgamma = TMath::Sqrt(cgold->GetR()*cgold->GetR()+cgold->GetZ()*cgold->GetZ())/0.03;
    Float_t info[10]={dist3D[igold][0],
		      dist3D[igold][1],
		      dist3D[igold][2],
		      dist3D[igold][3],
		      dist3D[igold][4],
		      mintimedist[igold],
		      -1,
		      tgamma,
		      qualityGold,
		      static_cast<Float_t>(cgold->GetQuality())};
    //    GetLinearDistances(trackTOFin,cgold,&info[6]);
    if (inonfake>=0){
      info[6] = inonfake;
      //      info[7] = mintimedist[index[inonfake]];
    }
    //
    //  Store quantities to be used for TOF Calibration
    Float_t tToT=cgold->GetToT(); // in ps
    t->SetTOFsignalToT(tToT);
    Int_t ind[5];
    ind[0]=cgold->GetDetInd(0);
    ind[1]=cgold->GetDetInd(1);
    ind[2]=cgold->GetDetInd(2);
    ind[3]=cgold->GetDetInd(3);
    ind[4]=cgold->GetDetInd(4);
    Int_t calindex = AliTOFGeometry::GetIndex(ind);
    t->SetTOFCalChannel(calindex);

    t->SetTOFInfo(info);
    t->SetTOFsignal(tof2);
    t->SetTOFcluster(cgold->GetIndex());  
    t->SetTOFDeltaBC(cgold->GetDeltaBC());
    t->SetTOFL0L1(cgold->GetL0L1Latency());

    AliDebug(2, Form("%7i     %7i     %10i     %10i  %10i  %10i      %7i",
		     i,
		     fnmatch-1,
		     TMath::Abs(trackTOFin->GetLabel()),
		     tlab[0], tlab[1], tlab[2],
		     igold)); // AdC

    AliTOFtrack *trackTOFout = new AliTOFtrack(*t); 
    trackTOFout->PropagateTo(379.);

    // Fill the track residual histograms.
    FillResiduals(trackTOFout,cgold,kFALSE);

    t->UpdateTrackParams(trackTOFout,AliESDtrack::kTOFout);    
    t->SetIntegratedLength(length[igold]);
    t->SetIntegratedTimes(times[igold]);
    t->SetTOFLabel(tlab);
    //
    delete trackTOFin;
    delete trackTOFout;
    //
  }
  //
  //
  //
  for (Int_t ii=0; ii<4; ii++) delete [] trackPos[ii];
  delete [] clind;
  //delete calib; // AdC
}
//_________________________________________________________________________

Int_t AliTOFtrackerMI::LoadClusters(TTree *cTree) {
  //--------------------------------------------------------------------
  //This function loads the TOF clusters
  //--------------------------------------------------------------------

  TBranch *branch=cTree->GetBranch("TOF");
  if (!branch) { 
    AliError("can't get the branch with the TOF clusters !");
    return 1;
  }

  static TClonesArray dummy("AliTOFcluster",10000);
  dummy.Clear();
  TClonesArray *clusters=&dummy;
  branch->SetAddress(&clusters);

  cTree->GetEvent(0);
  Int_t nc=clusters->GetEntriesFast();
  AliInfo(Form("Number of clusters: %d",nc));

  for (Int_t i=0; i<nc; i++) {
    AliTOFcluster *c=(AliTOFcluster*)clusters->UncheckedAt(i);

//PH    fClusters[i]=new AliTOFcluster(*c); fN++;
    fClusters[i]=c; fN++;

    //AliInfo(Form("%4i %4i  %f %f %f  %f %f   %2i %1i %2i %1i %2i",i, fClusters[i]->GetIndex(),fClusters[i]->GetZ(),fClusters[i]->GetR(),fClusters[i]->GetPhi(), fClusters[i]->GetTDC(),fClusters[i]->GetADC(),fClusters[i]->GetDetInd(0),fClusters[i]->GetDetInd(1),fClusters[i]->GetDetInd(2),fClusters[i]->GetDetInd(3),fClusters[i]->GetDetInd(4)));
    //AliInfo(Form("%i %f",i, fClusters[i]->GetZ()));
  }

  //AliInfo(Form("Number of clusters: %d",fN));

  return 0;
}
//_________________________________________________________________________
void AliTOFtrackerMI::UnloadClusters() {
  //--------------------------------------------------------------------
  //This function unloads TOF clusters
  //--------------------------------------------------------------------
  for (Int_t i=0; i<fN; i++) {
//PH    delete fClusters[i];
    fClusters[i] = 0x0;
  }
  fN=0;
}




//_________________________________________________________________________
Int_t AliTOFtrackerMI::InsertCluster(AliTOFcluster *c) {
  //--------------------------------------------------------------------
  //This function adds a cluster to the array of clusters sorted in Z
  //--------------------------------------------------------------------
  if (fN==kMaxCluster) {
    AliError("Too many clusters !");
    return 1;
  }

  if (fN==0) {fClusters[fN++]=c; return 0;}
  Int_t i=FindClusterIndex(c->GetZ());
  memmove(fClusters+i+1 ,fClusters+i,(fN-i)*sizeof(AliTOFcluster*));
  fClusters[i]=c; fN++;

  return 0;
}

//_________________________________________________________________________
Int_t AliTOFtrackerMI::FindClusterIndex(Double_t z) const {
  //--------------------------------------------------------------------
  // This function returns the index of the nearest cluster 
  //--------------------------------------------------------------------
  if (fN==0) return 0;
  if (z <= fClusters[0]->GetZ()) return 0;
  if (z > fClusters[fN-1]->GetZ()) return fN;
  Int_t b=0, e=fN-1, m=(b+e)/2;
  for (; b<e; m=(b+e)/2) {
    if (z > fClusters[m]->GetZ()) b=m+1;
    else e=m; 
  }
  return m;
}

//_________________________________________________________________________
Float_t AliTOFtrackerMI::GetLinearDistances(AliTOFtrack * track, AliTOFcluster *cluster, Float_t distances[5])
{
  //
  // calclates distance between cluster and track
  // use linear aproximation
  //
  //const Float_t kRaddeg = 180/3.14159265358979312;
  const Float_t kRaddeg = TMath::RadToDeg();
  //
  //  Float_t tiltangle  = fGeom->GetAngles(cluster->fdetIndex[1],cluster->fdetIndex[2])/kRaddeg;  //tiltangle  
  Int_t cind[5];
  cind[0]= cluster->GetDetInd(0);
  cind[1]= cluster->GetDetInd(1);
  cind[2]= cluster->GetDetInd(2);
  cind[3]= cluster->GetDetInd(3);
  cind[4]= cluster->GetDetInd(4);
  Float_t tiltangle  = AliTOFGeometry::GetAngles(cluster->GetDetInd(1),cluster->GetDetInd(2))/kRaddeg;  //tiltangle  

  Float_t cpos[3];  //cluster position
  Float_t cpos0[3];  //cluster position
  //  fGeom->GetPos(cluster->fdetIndex,cpos);  
  //fGeom->GetPos(cluster->fdetIndex,cpos0);  
  //
  fGeom->GetPos(cind,cpos);  
  fGeom->GetPos(cind,cpos0);  

  Float_t phi = TMath::ATan2(cpos[1],cpos[0]);	
  if(phi<0) phi=2.*TMath::Pi()+phi;
  //  Get the local angle in the sector philoc
  Float_t phiangle = (Int_t (phi*kRaddeg/20.) + 0.5)*20./kRaddeg;
  //
  Double_t v0[3];
  Double_t dir[3];
  track->GetXYZ(v0);
  track->GetPxPyPz(dir);
  dir[0]/=track->GetP();
  dir[1]/=track->GetP();
  dir[2]/=track->GetP();
  //
  //
  //rotate 0
  Float_t sinphi = TMath::Sin(phiangle);
  Float_t cosphi = TMath::Cos(phiangle);
  Float_t sinth  = TMath::Sin(tiltangle);
  Float_t costh  = TMath::Cos(tiltangle);
  //
  Float_t temp;
  temp    =  cpos[0]*cosphi+cpos[1]*sinphi;
  cpos[1] = -cpos[0]*sinphi+cpos[1]*cosphi;
  cpos[0] = temp;
  temp  =  v0[0]*cosphi+v0[1]*sinphi;
  v0[1] = -v0[0]*sinphi+v0[1]*cosphi;
  v0[0] = temp;
  //  
  temp    =  cpos[0]*costh+cpos[2]*sinth;
  cpos[2] = -cpos[0]*sinth+cpos[2]*costh;
  cpos[0] = temp;
  temp   =  v0[0]*costh+v0[2]*sinth;
  v0[2]  = -v0[0]*sinth+v0[2]*costh;
  v0[0]  = temp;
  //
  //
  //rotate direction vector
  //
  temp   =  dir[0]*cosphi+dir[1]*sinphi;
  dir[1] = -dir[0]*sinphi+dir[1]*cosphi;
  dir[0] = temp;
  //
  temp   =  dir[0]*costh+dir[2]*sinth;
  dir[2] = -dir[0]*sinth+dir[2]*costh;
  dir[0] = temp;
  //
  Float_t v3[3];
  Float_t k = (cpos[0]-v0[0])/dir[0];
  v3[0] = v0[0]+k*dir[0];
  v3[1] = v0[1]+k*dir[1];
  v3[2] = v0[2]+k*dir[2];
  //
  distances[0] = v3[0]-cpos[0];
  distances[1] = v3[1]-cpos[1];
  distances[2] = v3[2]-cpos[2];
  distances[3] = TMath::Sqrt( distances[0]*distances[0]+distances[1]*distances[1]+distances[2]*distances[2]); //distance
  distances[4] = k;  //length

  //
  // Debuging part of the matching
  //
  if (track->GetLabel()==cluster->GetLabel(0) ||
      track->GetLabel()==cluster->GetLabel(1) ||
      track->GetLabel()==cluster->GetLabel(2) ){
    TTreeSRedirector& cstream = *fDebugStreamer;
    Float_t tdc = cluster->GetTDC();
    cstream<<"Tracks"<<
      "TOF.="<<track<<
      "Cx="<<cpos0[0]<<
      "Cy="<<cpos0[1]<<
      "Cz="<<cpos0[2]<<
      "Dist="<<k<<
      "Dist0="<<distances[0]<<
      "Dist1="<<distances[1]<<
      "Dist2="<<distances[2]<<
      "TDC="<<tdc<<
      "\n";
  }
  return distances[3];
}

//_________________________________________________________________________
void AliTOFtrackerMI::GetLikelihood(Float_t dy, Float_t dz, const Double_t *cov, AliTOFtrack * /*track*/, Float_t & py, Float_t &pz) const
{
  //
  //  get likelihood - track covariance taken
  //  75 % of gauss with expected sigma
  //  25 % of gauss with extended sigma
  
  Double_t kMaxSigmaY  = 0.6;  // ~ 90% of TRD tracks  
  Double_t kMaxSigmaZ  = 1.2;  // ~ 90% of TRD tracks 
  Double_t kMeanSigmaY = 0.25; // mean TRD sigma  
  Double_t kMeanSigmaZ = 0.5;  // mean TRD sigma 

  
  Float_t normwidth, normd, p0,p1;  
  Float_t sigmay = TMath::Max(TMath::Sqrt(TMath::Abs(cov[0])+kMeanSigmaY*kMeanSigmaY),kMaxSigmaY);
  Float_t sigmaz = TMath::Max(TMath::Sqrt(TMath::Abs(cov[2])+kMeanSigmaZ*kMeanSigmaZ),kMaxSigmaZ);

  py=0;
  pz=0;  
  // 
  // py calculation   - 75% admixture of original sigma - 25% tails 
  //
  normwidth = fDy/sigmay;
  normd     = dy/sigmay;
  p0 = 0.5*(1+AliMathBase::ErfFast(normd-normwidth*0.5));
  p1 = 0.5*(1+AliMathBase::ErfFast(normd+normwidth*0.5));  
  py+= 0.75*(p1-p0);
  //
  normwidth = fDy/(3.*sigmay);
  normd     = dy/(3.*sigmay);
  p0 = 0.5*(1+AliMathBase::ErfFast(normd-normwidth*0.5));
  p1 = 0.5*(1+AliMathBase::ErfFast(normd+normwidth*0.5));  
  py+= 0.25*(p1-p0);
  // 
  // pz calculation   - 75% admixture of original sigma - 25% tails 
  //
  normwidth = fDz/sigmaz;
  normd     = dz/sigmaz;
  p0 = 0.5*(1+AliMathBase::ErfFast(normd-normwidth*0.5));
  p1 = 0.5*(1+AliMathBase::ErfFast(normd+normwidth*0.5));  
  pz+= 0.75*(p1-p0);
  //
  normwidth = fDz/(3.*sigmaz);
  normd     = dz/(3.*sigmaz);
  p0 = 0.5*(1+AliMathBase::ErfFast(normd-normwidth*0.5));
  p1 = 0.5*(1+AliMathBase::ErfFast(normd+normwidth*0.5));  
  pz+= 0.25*(p1-p0);
}
//_________________________________________________________________________

void AliTOFtrackerMI::FillClusterArray(TObjArray* arr) const
{
  //
  // Returns the TOF cluster array
  //

  if (fN==0)
    arr = 0x0;
  else
    for (Int_t i=0; i<fN; ++i) arr->Add(fClusters[i]);

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