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.                  *
 **************************************************************************/
//
//
//
//
//-------------------------------------------------------
//          Implementation of the Cosmic tracker
//
//   Origin:  Xianguo Lu lu@physi.uni-heidelberg.de  Xianguo.Lu@cern.ch
//
//=========================================================================================
// Motivation:
// 
// In the default reconstruction in the ALICE the cosmic tracks are found  as two independent particles.
//
// In general any of  subtracks can be used for the physics studies. In order to avoid the double counting,
// the track from the upper hemisphere can be used. 
//
// The momentum resolution is determined by the lever arm (1/L^2) and by the number of clusters
// used for the track fitting (1/sqrt(Ncl)). 
// Combining/refitting  the two segments together significantly better momentum resolution can be obtained.
//    sigma_{1/pt} ~ 8x10^-3  - defaul tracking (e.g only upper track)
//    sigma_{1/pt} ~ 8x10^-4  - combined tracking
//===========================================================================================
// 
// Interface/Implementation:
// The class AliCosmicTracker provides functionality to find and refit the cosmic tracks. As a starting point, the events reconstruccted using standard tracking are used. 
// Input:  AliESDEvent
// Output: TClonesArray of the AliESDCosmicTrack
//         The array is stored as a data member of the tracker. 
//
// The cosmic tracker can be called in the user analysis code (standard analisys train, using the AliAnalysisTask, 
//    see e.g. AliAnalysisTaskCosmicTracker.h). In oreder to make an analysis simpler and faster it is planned to use the tracker already in the standard reconstruction (To be done).
//   
//===========================================================================================
// Algorithm:
// 1. Reads an ESD event      -  SetESDEvent() function
// 2. Loop over single tracks -  Process() function 
//    cuts are applied for individual ESD tracks (see function ESDtrckCut()). Only ESD tracks with TPCrefit, 
//    no kink and with ESDfriends will be selected. 
//    User defined cuts (as a pointer to the static function) can be used. (Expert usage)  

// 3. Double loop over tracks -  Process() function
//      a.) if not pair ( see function IsPair() ) continue; 
//         To accept the pair the tracks should be close together in the parameter space (AliExternalTrackParam - fP[0]-[4], also cut on ESD-phi and -theta)
//         Absolute, and relative (pull) cut are used
//         The cuts can be modified beyond default values via SetCut***().
//                  
//      b.) Each pair is fit via AliTPCCosmicTrackfit::CombineESDtracks
//      c.) For each pair one AliESDCosmicTrack object is stored in the fTrackStack, which can be passed out via TClonesArray *arr = fCosmicTracker->GetTrackStack();
//
//
//===========================================================================================
// Algorithm numerical debugging:
// The AliCosmicTracker can be used in the different debug/verbose level (see fDebugLevel) 
// Several intermediate variables can be stored in the trees, printout, or draw.
// Given functionality (dumping of variables to the tree) was also used for the tuning of the pair
// selection criterias, and for validation of the fit functionality. 
//
//===========================================================================================
// Usage:
// AliCosmicTracker *fCosmicTracker = new AliCosmicTracker(debuglevel, tag);
// fCosmicTracker->SetESDEvent(fESDEvent); //fTrackStack will be automatically cleared/emptied
// Int_t npair = fCosmicTracker->Process(processtag, kprint); //processtag only relavant if (debuglevel & 4) to draw the tracks in png; number of cosmic candidates are returned; if kprint the event is draw to png
//
//
// Advanced usage:
// fUserCut can be assigned externally so that additional ESDtrack cut can be applied in the very beginning together with those in ESDtrackCut()
//
// Example:
/*
//define static (important!!)  cut function in analysis task, e.g. AliAnalysisTaskCosmicTracker
//1) in AliAnalysisTaskCosmicTracker.h
static Bool_t TrackCut(AliESDtrack *trk);

//2) in AliAnalysisTaskCosmicTracker.cxx
Bool_t AliAnalysisTaskCosmicTracker::TrackCut(AliESDtrack *trk)
{
  //
  //external track cut in addition to the one in AliCosmicTracker (example)
  //
  if(!trk->GetTRDncls())
    return kFALSE;

  return kTRUE;
}
//set user cut function
fCosmicTracker = new AliCosmicTracker;
fCosmicTracker->SetUserESDtrackCut(AliAnalysisTaskCosmicTracker::TrackCut);
*/ 

#include <TTreeStream.h>

#include "AliESDEvent.h"
#include "AliTPCseed.h"
#include "AliTrackerBase.h"

#include "AliESDCosmicTrack.h"
#include "AliCosmicTracker.h"
#include "AliTPCCosmicUtils.h"
#include "AliTPCCosmicTrackfit.h"

AliCosmicTracker::AliCosmicTracker(const Int_t dlev, const TString tag): 
  fUserCut(0x0)
  , fStreamer(0x0), fDebugLevel(dlev)
  , fESDEvent(0x0)
  , fCosmicTrackfit(0x0)
  , fTrackStack(0x0)
  , fTrack0()
  , fTrack1()
  , fRawVtx(-999,-999,-999)
  , fRawDCA(-999)
  , fdPhi(-999)
  , fCutdPhi(-999)
  , fdTheta(-999)
  , fCutdTheta(-999)
  , fErrFlagESDtrackCut(-999)
  , fErrFlagIsPair(-999)
  , fErrFlagCosmicTrackfit(-999)
{
  //
  //constructor
  //

  if(fDebugLevel & 1)
    fStreamer = new TTreeSRedirector(Form("CosmicTracker_%s.root", tag.Data()));

  fCosmicTrackfit = new AliTPCCosmicTrackfit(0, "AliCosmicTracker");
  fTrackStack = new TClonesArray("AliESDCosmicTrack",100);
 
  for(Int_t ii=0; ii<5; ii++){
    fDelta[ii] = -999;
    fPull[ii] = -999;
  }

  fCutdPhi   = 19e-3*5;
  fCutdTheta = 10e-3*5;
  
  fCutPull[0] = 1.9 *10;
  fCutPull[1] = 1.5 *1e10;
  fCutPull[2] = 1.9 *10;//bug-fixed!
  fCutPull[3] = 0.4 *1e10;
  fCutPull[4] = 3.6 *10;

  fCutDelta[0] = 0.8   * 10;
  fCutDelta[1] = 2.7   * 10;
  fCutDelta[2] = 0.012 * 10;//bug-fixed!
  fCutDelta[3] = 0.007 * 10;
  fCutDelta[4] = 0.05  * 10;
}

AliCosmicTracker::~AliCosmicTracker()
{
  //
  //destructor
  //
  delete fStreamer;
  delete fCosmicTrackfit;
  delete fTrackStack;
}

void AliCosmicTracker::SetESDEvent(AliESDEvent *esd)
{
  //
  //set esd event
  //
  fESDEvent = esd;
  fTrackStack->Clear();
}

Int_t AliCosmicTracker::Process(const TString tag, const Bool_t kprint)
{
  //
  //double loop over combinations of esd tracks, cosmic event candidates sotred in fTrackStack
  //

  Int_t npair=0;
  const Int_t ntrk = fESDEvent->GetNumberOfTracks();
  Int_t trkcounter[ntrk];
  for(Int_t ii=0; ii<ntrk; ii++){
    trkcounter[ii]=0;
  }

  Double_t findabler0 = -999;
  Double_t findabler1 = -999;

  fErrFlagESDtrackCut = 0;
  fErrFlagIsPair = 0;
  fErrFlagCosmicTrackfit = 0;

  for(Int_t itrk=0; itrk<ntrk; itrk++){
    if(!ESDtrackCut(fESDEvent->GetTrack(itrk), findabler0)){
      continue;
    }

    for(Int_t jtrk=itrk+1; jtrk<ntrk; jtrk++){
      if(!ESDtrackCut(fESDEvent->GetTrack(jtrk), findabler1))
        continue;

      AliESDtrack * trk0 = fESDEvent->GetTrack(itrk);
      AliESDtrack * trk1 = fESDEvent->GetTrack(jtrk);
      if( IsPair(trk0, trk1) ){
        const Bool_t kfit = fCosmicTrackfit->CombineESDtracks(trk0, trk1);
        fErrFlagCosmicTrackfit = fCosmicTrackfit->GetStatus();

        if(kfit){
          fRawVtx = fCosmicTrackfit->ImpactParameter3D();
          fRawDCA = fCosmicTrackfit->ImpactParameter2D().Mag();

          const Int_t ncls              = fCosmicTrackfit->GetFitNcls();
          const Double_t leverarm       = fCosmicTrackfit->GetFitLeverArm();
          const Double_t chi2percluster = fCosmicTrackfit->GetChi2PerCluster();
          const Double_t impactD        = fCosmicTrackfit->GetImpactD();
          const Double_t impactZ        = fCosmicTrackfit->GetImpactZ();

          const Double_t findableratio  = TMath::Min(findabler0, findabler1);

          trkcounter[itrk]++;
          trkcounter[jtrk]++;
          const Bool_t isreuse          = (trkcounter[itrk]>1 || trkcounter[jtrk]>1);

          const TVector3 icU = fCosmicTrackfit->GetInnerClusterUp();
          const TVector3 icD = fCosmicTrackfit->GetInnerClusterLow();

          Int_t idup = itrk;
          Int_t idlow = jtrk;
          if(fCosmicTrackfit->IsSwap()){
            const Int_t idtmp = idup;
            idup = idlow;
            idlow = idtmp;

            AliExternalTrackParam tptmp = fTrack0;
            fTrack0 = fTrack1;
            fTrack1 = tptmp;
          }

          if(
             (fDebugLevel & 4) && 
             ( (isreuse && ntrk<=4) || kprint )
             ){
            AliESDtrack * trks[]={fESDEvent->GetTrack(idup), fESDEvent->GetTrack(idlow)};
            AliTPCCosmicUtils::DrawTracks(trks, Form("reuse_%03d_%03d_%03d_%s", ntrk, itrk, jtrk, tag.Data()));
          }
          if(
             (fDebugLevel & 8) &&
             impactD > 160 && findableratio < 0.56
             ){
            AliESDtrack * trks[]={fESDEvent->GetTrack(idup), fESDEvent->GetTrack(idlow)};
            AliTPCCosmicUtils::DrawTracks(trks, Form("largevtd_%.f_%.f_%03d_%03d_%03d_%s", impactD, findableratio, ntrk, itrk, jtrk, tag.Data()));
          }

          AliESDCosmicTrack costrk(idup, idlow, fCosmicTrackfit->GetTrackParamUp(), fCosmicTrackfit->GetTrackParamLow(), &fTrack0, &fTrack1, ncls, leverarm, chi2percluster, impactD, impactZ, isreuse, findableratio, icU, icD);
          new((*fTrackStack)[npair]) AliESDCosmicTrack(costrk);
          npair++;

          if(fDebugLevel & 1)
            WriteStreamer(ntrk, &costrk);

        }
        else{
          if(fDebugLevel & 16){
            if(ntrk==2){
              AliESDtrack * trks[]={trk0, trk1};
              AliTPCCosmicUtils::DrawTracks(trks, Form("failCosmicFit_%02d_%03d_%03d_%03d_%s", fCosmicTrackfit->GetStatus(), ntrk, itrk, jtrk, tag.Data()));
            }
          }
        }
      }
      else{
        if(fDebugLevel & 32){
          if(ntrk==2){
            AliESDtrack * trks[]={trk0, trk1};
            AliTPCCosmicUtils::DrawTracks(trks, Form("failIsPair_%02d_%03d_%03d_%03d_%s", fErrFlagIsPair, ntrk, itrk, jtrk, tag.Data()));
          }
        }
      }
    }
  }
  
  return npair;
}

Bool_t AliCosmicTracker::IsPair(AliESDtrack * trk0, AliESDtrack * trk1)
{
  //
  //check whether the two tracks come from one cosmic ray
  //

  //dphi + pi should = 0
  fdPhi   = AliTPCCosmicUtils::AngleInRange(trk0->Phi()   - trk1->Phi()   + TMath::Pi());
  if( TMath::Abs(fdPhi) > fCutdPhi ){
    fErrFlagIsPair = 1;
    return kFALSE;
  }

  fdTheta = AliTPCCosmicUtils::AngleInRange(trk0->Theta() + trk1->Theta() + TMath::Pi());
  if( TMath::Abs(fdTheta) > fCutdTheta ){
    fErrFlagIsPair = 2;
    return kFALSE;
  }

  //use fIp, the comments on the web is wrong (M. Ivanov)
  if(!trk0->GetInnerParam()){
    fErrFlagIsPair = 3;
    return kFALSE;
  }
  if(!trk1->GetInnerParam()){
    fErrFlagIsPair = 4;
    return kFALSE;
  }

  AliExternalTrackParam tmptrk[]={*(trk0->GetInnerParam()), *(trk1->GetInnerParam())};

  if(fDebugLevel & 2){
    printf("\n************************ raw ESD:\n");
    AliTPCCosmicUtils::PrintTrackParam(100, &(tmptrk[0]));
    AliTPCCosmicUtils::PrintTrackParam(101, &(tmptrk[1]));
    tmptrk[0].Print();
    tmptrk[1].Print();
  }

  Double_t xyz0[3], xyz1[3];
  tmptrk[0].GetXYZ(xyz0);
  tmptrk[1].GetXYZ(xyz1);
  const TVector3 gpos0(xyz0), gpos1(xyz1);

  //============================== rotate to common angle (M. Ivanov), since it is not possible to rotate from alpha1 to alpha0 via AliExternalTrackParam::Rotate
  const Double_t meanalpha = (gpos0-gpos1).Phi();
  const Double_t alpha0 = tmptrk[0].GetAlpha();

  //track0 closer to mean alpha
  if( TMath::Abs(AliTPCCosmicUtils::AngleInRange(meanalpha-alpha0)) <TMath::PiOver2() ){
    if( !AliTPCCosmicUtils::RotateSafe(&(tmptrk[0]), meanalpha) || 
        !AliTPCCosmicUtils::RotateSafe(&(tmptrk[1]), meanalpha+TMath::Pi()) ){
      fErrFlagIsPair = 5;
      return kFALSE;
    }
  }
  //track1 closer to mean alpha
  else{
    if( !AliTPCCosmicUtils::RotateSafe(&(tmptrk[1]), meanalpha) || 
        !AliTPCCosmicUtils::RotateSafe(&(tmptrk[0]), meanalpha+TMath::Pi()) ){
      fErrFlagIsPair = 6;
      return kFALSE;
    }
  }

  if(fDebugLevel & 2){
    printf("\n************************ after rotation!!\n");
    AliTPCCosmicUtils::PrintTrackParam(300, &(tmptrk[0]));
    AliTPCCosmicUtils::PrintTrackParam(301, &(tmptrk[1]));
    tmptrk[0].Print();
    tmptrk[1].Print();
  }

  //============================== propagate from TPC inner wall to x=0 with correct dedx
  const Double_t xTogo = 0.0;
  const Double_t maxStep = 1;
  const Bool_t rotateTo = kFALSE;
  const Double_t maxSnp = 0.8;
  Double_t eloss[2]={-1, 1};
  //default [0]=upper [1]=lower
  //tmptrk[0].phi<0 ==> [0]=lower
  if(AliTPCCosmicUtils::AngleInRange(tmptrk[0].Phi())<0){
    eloss[0]= 1;
    eloss[1]=-1;
  }

  for(Int_t ii=0; ii<2; ii++){
    if(!AliTrackerBase::PropagateTrackToBxByBz(&(tmptrk[ii]), xTogo, AliTPCCosmicUtils::Mass(), maxStep, rotateTo, maxSnp, (Int_t)(eloss[ii]))){
      fErrFlagIsPair = 7;
      return kFALSE;
    }
  }
  
  if(fDebugLevel & 2){
    printf("\n************************ after dedx corr:\n");
    AliTPCCosmicUtils::PrintTrackParam(200, &(tmptrk[0]));
    AliTPCCosmicUtils::PrintTrackParam(201, &(tmptrk[1]));
    tmptrk[0].Print();
    tmptrk[1].Print();
  }

  //____________________________________________________________________________________
  //____________________________________________________________________________________

  //ESD tracks after reconstruction all have x=0 and
  //TMath::Abs(alpha0 - alpha1)~ pi ==> back-to-back with angular resolution
  //[0]: local Y-coordinate of a track (cm);  9.945702e+01 -9.961257e+01 ==> opposite
  //[1]: local Z-coordinate of a track (cm); 2.677805e+01 2.711143e+01 ==> same
  //[2]: local sine of the track momentum azimuthal angle; should be the same!! bug-fixed
  //[3]: tangent of the track momentum dip angle; 1.563563e-01 -1.542005e-01 ==> opposite
  //[4]: 1/pt (1/(GeV/c)); -1.774935e-01 1.705480e-01 ==> opposite

  fDelta[0] = tmptrk[0].GetParameter()[0] + tmptrk[1].GetParameter()[0];
  fDelta[1] = tmptrk[0].GetParameter()[1] - tmptrk[1].GetParameter()[1];
  fDelta[2] = tmptrk[0].GetParameter()[2] - tmptrk[1].GetParameter()[2];//bug-fixed!! should use "-"
  fDelta[3] = tmptrk[0].GetParameter()[3] + tmptrk[1].GetParameter()[3];
  fDelta[4] = tmptrk[0].GetParameter()[4] + tmptrk[1].GetParameter()[4];

  fPull[0] = fDelta[0]/TMath::Sqrt(tmptrk[0].GetCovariance()[0] +tmptrk[1].GetCovariance()[0]);
  fPull[1] = fDelta[1]/TMath::Sqrt(tmptrk[0].GetCovariance()[2] +tmptrk[1].GetCovariance()[2]);
  fPull[2] = fDelta[2]/TMath::Sqrt(tmptrk[0].GetCovariance()[5] +tmptrk[1].GetCovariance()[5]);
  fPull[3] = fDelta[3]/TMath::Sqrt(tmptrk[0].GetCovariance()[9] +tmptrk[1].GetCovariance()[9]);
  fPull[4] = fDelta[4]/TMath::Sqrt(tmptrk[0].GetCovariance()[14]+tmptrk[1].GetCovariance()[14]);

  if(fDebugLevel & 2){
    for(Int_t ii=0; ii<5; ii++){
      printf("test %d %e %e -- %e\n", ii, tmptrk[0].GetParameter()[ii], tmptrk[1].GetParameter()[ii], fPull[ii]);
    }
  }

  for(Int_t ii=0; ii<5; ii++){
    if( TMath::Abs(fPull[ii])  > fCutPull[ii] ){
      fErrFlagIsPair = 10+ii;
      return kFALSE;
    }
    if( TMath::Abs(fDelta[ii]) > fCutDelta[ii] ){
      fErrFlagIsPair = 20+ii;
      return kFALSE;
    }
  }

  fTrack0 = tmptrk[0];
  fTrack1 = tmptrk[1];

  return kTRUE;
}

Bool_t AliCosmicTracker::ESDtrackCut(AliESDtrack * trk, Double_t &findabler) 
{
  //
  //cut on track quality (kink, TPCrefit, findable ratio) and require TPC seed
  //

  if(fUserCut){
    if(!fUserCut(trk)){
      fErrFlagESDtrackCut = 1;
      return kFALSE;
    }
  }

  //reject kink
  if(trk->GetKinkIndex(0)>0){
    fErrFlagESDtrackCut = 2;
    return kFALSE;
  }

  //require refit
  if(!trk->IsOn(AliESDtrack::kTPCrefit)){
    fErrFlagESDtrackCut = 3;
    return kFALSE;
  }

  // due to drift velocity calibration, a track crossing Z=0 may be reconstructed as 2 ESD tracks, so two pairs are formed, each with one part of this track. Solution: cut on findable ratio (require > 0.5) to remove split tracks due to drift velocity calibration systematics on different sides
  //there is some remaining with isreuse = true, user should cut on findable ratio according to the fraction of isreuse
  findabler = -999;
  if(!trk->GetTPCNclsF()){
    fErrFlagESDtrackCut = 4;
    return kFALSE;
  }

  findabler = (Double_t)trk->GetTPCNcls()/(Double_t) trk->GetTPCNclsF();

  if(findabler < CutFindable() ){
    fErrFlagESDtrackCut = 5;
    return kFALSE;
  }

  //cut on # TPC ncls on each ESDtrack
  if(trk->GetTPCncls()<AliTPCCosmicUtils::NclsMin()){
    fErrFlagESDtrackCut = 6;
    return kFALSE;
  }

  //require ESDfriends
  if(!AliTPCCosmicUtils::GetTPCseed(trk)){
    fErrFlagESDtrackCut = 7;
    return kFALSE;
  }

  return kTRUE;
}

Int_t AliCosmicTracker::GetErrFlag() const
{
  //
  //return the error status in process
  //
  return fErrFlagESDtrackCut + fErrFlagIsPair*100 + fErrFlagCosmicTrackfit*10000;
}

void AliCosmicTracker::WriteStreamer(Int_t ntrk, AliESDCosmicTrack *costrk)
{
  //
  //output to streamer
  //

  (*fStreamer)<<"CosmicTracker_Streamer"<<
    "ntrk="<<ntrk<<

    "costrk="<<costrk<<

    "rawvtx="<<&fRawVtx<<
    "rawdca="<<fRawDCA<<

    "dphi="<<fdPhi<<
    "dtheta="<<fdTheta<<
    "pull0="<<fPull[0]<<
    "pull1="<<fPull[1]<<
    "pull2="<<fPull[2]<<
    "pull3="<<fPull[3]<<
    "pull4="<<fPull[4]<<
    "delta0="<<fDelta[0]<<
    "delta1="<<fDelta[1]<<
    "delta2="<<fDelta[2]<<
    "delta3="<<fDelta[3]<<
    "delta4="<<fDelta[4]<<
    "\n";
}

TClonesArray *AliCosmicTracker::FindCosmic(AliESDEvent *event, const Bool_t kadd)
{
  //
  //do cosmic combined trackfit
  //

  AliCosmicTracker cosmicTracker;
  cosmicTracker.SetESDEvent(event);
  const Int_t npair = cosmicTracker.Process();
  const TClonesArray *arr = cosmicTracker.GetTrackStack();

  TClonesArray *stackCosmic = 0x0;
  if(kadd){
    for(Int_t ip=0; ip<npair; ip++){
      const AliESDCosmicTrack * esdcos = (AliESDCosmicTrack*) arr->At(ip);
      event->AddCosmicTrack(esdcos);
    }
    printf("AliCosmicTracker::FindCosmic: event %d: Number of cosmic pairs by AliCosmicTracker %d out of %d tracks, err %d\n", event->GetEventNumberInFile(), npair, event->GetNumberOfTracks(), cosmicTracker.GetErrFlag());
  }
  else{
    stackCosmic = new TClonesArray(*arr);
  }

  return stackCosmic;
}

 AliCosmicTracker.cxx:1
 AliCosmicTracker.cxx:2
 AliCosmicTracker.cxx:3
 AliCosmicTracker.cxx:4
 AliCosmicTracker.cxx:5
 AliCosmicTracker.cxx:6
 AliCosmicTracker.cxx:7
 AliCosmicTracker.cxx:8
 AliCosmicTracker.cxx:9
 AliCosmicTracker.cxx:10
 AliCosmicTracker.cxx:11
 AliCosmicTracker.cxx:12
 AliCosmicTracker.cxx:13
 AliCosmicTracker.cxx:14
 AliCosmicTracker.cxx:15
 AliCosmicTracker.cxx:16
 AliCosmicTracker.cxx:17
 AliCosmicTracker.cxx:18
 AliCosmicTracker.cxx:19
 AliCosmicTracker.cxx:20
 AliCosmicTracker.cxx:21
 AliCosmicTracker.cxx:22
 AliCosmicTracker.cxx:23
 AliCosmicTracker.cxx:24
 AliCosmicTracker.cxx:25
 AliCosmicTracker.cxx:26
 AliCosmicTracker.cxx:27
 AliCosmicTracker.cxx:28
 AliCosmicTracker.cxx:29
 AliCosmicTracker.cxx:30
 AliCosmicTracker.cxx:31
 AliCosmicTracker.cxx:32
 AliCosmicTracker.cxx:33
 AliCosmicTracker.cxx:34
 AliCosmicTracker.cxx:35
 AliCosmicTracker.cxx:36
 AliCosmicTracker.cxx:37
 AliCosmicTracker.cxx:38
 AliCosmicTracker.cxx:39
 AliCosmicTracker.cxx:40
 AliCosmicTracker.cxx:41
 AliCosmicTracker.cxx:42
 AliCosmicTracker.cxx:43
 AliCosmicTracker.cxx:44
 AliCosmicTracker.cxx:45
 AliCosmicTracker.cxx:46
 AliCosmicTracker.cxx:47
 AliCosmicTracker.cxx:48
 AliCosmicTracker.cxx:49
 AliCosmicTracker.cxx:50
 AliCosmicTracker.cxx:51
 AliCosmicTracker.cxx:52
 AliCosmicTracker.cxx:53
 AliCosmicTracker.cxx:54
 AliCosmicTracker.cxx:55
 AliCosmicTracker.cxx:56
 AliCosmicTracker.cxx:57
 AliCosmicTracker.cxx:58
 AliCosmicTracker.cxx:59
 AliCosmicTracker.cxx:60
 AliCosmicTracker.cxx:61
 AliCosmicTracker.cxx:62
 AliCosmicTracker.cxx:63
 AliCosmicTracker.cxx:64
 AliCosmicTracker.cxx:65
 AliCosmicTracker.cxx:66
 AliCosmicTracker.cxx:67
 AliCosmicTracker.cxx:68
 AliCosmicTracker.cxx:69
 AliCosmicTracker.cxx:70
 AliCosmicTracker.cxx:71
 AliCosmicTracker.cxx:72
 AliCosmicTracker.cxx:73
 AliCosmicTracker.cxx:74
 AliCosmicTracker.cxx:75
 AliCosmicTracker.cxx:76
 AliCosmicTracker.cxx:77
 AliCosmicTracker.cxx:78
 AliCosmicTracker.cxx:79
 AliCosmicTracker.cxx:80
 AliCosmicTracker.cxx:81
 AliCosmicTracker.cxx:82
 AliCosmicTracker.cxx:83
 AliCosmicTracker.cxx:84
 AliCosmicTracker.cxx:85
 AliCosmicTracker.cxx:86
 AliCosmicTracker.cxx:87
 AliCosmicTracker.cxx:88
 AliCosmicTracker.cxx:89
 AliCosmicTracker.cxx:90
 AliCosmicTracker.cxx:91
 AliCosmicTracker.cxx:92
 AliCosmicTracker.cxx:93
 AliCosmicTracker.cxx:94
 AliCosmicTracker.cxx:95
 AliCosmicTracker.cxx:96
 AliCosmicTracker.cxx:97
 AliCosmicTracker.cxx:98
 AliCosmicTracker.cxx:99
 AliCosmicTracker.cxx:100
 AliCosmicTracker.cxx:101
 AliCosmicTracker.cxx:102
 AliCosmicTracker.cxx:103
 AliCosmicTracker.cxx:104
 AliCosmicTracker.cxx:105
 AliCosmicTracker.cxx:106
 AliCosmicTracker.cxx:107
 AliCosmicTracker.cxx:108
 AliCosmicTracker.cxx:109
 AliCosmicTracker.cxx:110
 AliCosmicTracker.cxx:111
 AliCosmicTracker.cxx:112
 AliCosmicTracker.cxx:113
 AliCosmicTracker.cxx:114
 AliCosmicTracker.cxx:115
 AliCosmicTracker.cxx:116
 AliCosmicTracker.cxx:117
 AliCosmicTracker.cxx:118
 AliCosmicTracker.cxx:119
 AliCosmicTracker.cxx:120
 AliCosmicTracker.cxx:121
 AliCosmicTracker.cxx:122
 AliCosmicTracker.cxx:123
 AliCosmicTracker.cxx:124
 AliCosmicTracker.cxx:125
 AliCosmicTracker.cxx:126
 AliCosmicTracker.cxx:127
 AliCosmicTracker.cxx:128
 AliCosmicTracker.cxx:129
 AliCosmicTracker.cxx:130
 AliCosmicTracker.cxx:131
 AliCosmicTracker.cxx:132
 AliCosmicTracker.cxx:133
 AliCosmicTracker.cxx:134
 AliCosmicTracker.cxx:135
 AliCosmicTracker.cxx:136
 AliCosmicTracker.cxx:137
 AliCosmicTracker.cxx:138
 AliCosmicTracker.cxx:139
 AliCosmicTracker.cxx:140
 AliCosmicTracker.cxx:141
 AliCosmicTracker.cxx:142
 AliCosmicTracker.cxx:143
 AliCosmicTracker.cxx:144
 AliCosmicTracker.cxx:145
 AliCosmicTracker.cxx:146
 AliCosmicTracker.cxx:147
 AliCosmicTracker.cxx:148
 AliCosmicTracker.cxx:149
 AliCosmicTracker.cxx:150
 AliCosmicTracker.cxx:151
 AliCosmicTracker.cxx:152
 AliCosmicTracker.cxx:153
 AliCosmicTracker.cxx:154
 AliCosmicTracker.cxx:155
 AliCosmicTracker.cxx:156
 AliCosmicTracker.cxx:157
 AliCosmicTracker.cxx:158
 AliCosmicTracker.cxx:159
 AliCosmicTracker.cxx:160
 AliCosmicTracker.cxx:161
 AliCosmicTracker.cxx:162
 AliCosmicTracker.cxx:163
 AliCosmicTracker.cxx:164
 AliCosmicTracker.cxx:165
 AliCosmicTracker.cxx:166
 AliCosmicTracker.cxx:167
 AliCosmicTracker.cxx:168
 AliCosmicTracker.cxx:169
 AliCosmicTracker.cxx:170
 AliCosmicTracker.cxx:171
 AliCosmicTracker.cxx:172
 AliCosmicTracker.cxx:173
 AliCosmicTracker.cxx:174
 AliCosmicTracker.cxx:175
 AliCosmicTracker.cxx:176
 AliCosmicTracker.cxx:177
 AliCosmicTracker.cxx:178
 AliCosmicTracker.cxx:179
 AliCosmicTracker.cxx:180
 AliCosmicTracker.cxx:181
 AliCosmicTracker.cxx:182
 AliCosmicTracker.cxx:183
 AliCosmicTracker.cxx:184
 AliCosmicTracker.cxx:185
 AliCosmicTracker.cxx:186
 AliCosmicTracker.cxx:187
 AliCosmicTracker.cxx:188
 AliCosmicTracker.cxx:189
 AliCosmicTracker.cxx:190
 AliCosmicTracker.cxx:191
 AliCosmicTracker.cxx:192
 AliCosmicTracker.cxx:193
 AliCosmicTracker.cxx:194
 AliCosmicTracker.cxx:195
 AliCosmicTracker.cxx:196
 AliCosmicTracker.cxx:197
 AliCosmicTracker.cxx:198
 AliCosmicTracker.cxx:199
 AliCosmicTracker.cxx:200
 AliCosmicTracker.cxx:201
 AliCosmicTracker.cxx:202
 AliCosmicTracker.cxx:203
 AliCosmicTracker.cxx:204
 AliCosmicTracker.cxx:205
 AliCosmicTracker.cxx:206
 AliCosmicTracker.cxx:207
 AliCosmicTracker.cxx:208
 AliCosmicTracker.cxx:209
 AliCosmicTracker.cxx:210
 AliCosmicTracker.cxx:211
 AliCosmicTracker.cxx:212
 AliCosmicTracker.cxx:213
 AliCosmicTracker.cxx:214
 AliCosmicTracker.cxx:215
 AliCosmicTracker.cxx:216
 AliCosmicTracker.cxx:217
 AliCosmicTracker.cxx:218
 AliCosmicTracker.cxx:219
 AliCosmicTracker.cxx:220
 AliCosmicTracker.cxx:221
 AliCosmicTracker.cxx:222
 AliCosmicTracker.cxx:223
 AliCosmicTracker.cxx:224
 AliCosmicTracker.cxx:225
 AliCosmicTracker.cxx:226
 AliCosmicTracker.cxx:227
 AliCosmicTracker.cxx:228
 AliCosmicTracker.cxx:229
 AliCosmicTracker.cxx:230
 AliCosmicTracker.cxx:231
 AliCosmicTracker.cxx:232
 AliCosmicTracker.cxx:233
 AliCosmicTracker.cxx:234
 AliCosmicTracker.cxx:235
 AliCosmicTracker.cxx:236
 AliCosmicTracker.cxx:237
 AliCosmicTracker.cxx:238
 AliCosmicTracker.cxx:239
 AliCosmicTracker.cxx:240
 AliCosmicTracker.cxx:241
 AliCosmicTracker.cxx:242
 AliCosmicTracker.cxx:243
 AliCosmicTracker.cxx:244
 AliCosmicTracker.cxx:245
 AliCosmicTracker.cxx:246
 AliCosmicTracker.cxx:247
 AliCosmicTracker.cxx:248
 AliCosmicTracker.cxx:249
 AliCosmicTracker.cxx:250
 AliCosmicTracker.cxx:251
 AliCosmicTracker.cxx:252
 AliCosmicTracker.cxx:253
 AliCosmicTracker.cxx:254
 AliCosmicTracker.cxx:255
 AliCosmicTracker.cxx:256
 AliCosmicTracker.cxx:257
 AliCosmicTracker.cxx:258
 AliCosmicTracker.cxx:259
 AliCosmicTracker.cxx:260
 AliCosmicTracker.cxx:261
 AliCosmicTracker.cxx:262
 AliCosmicTracker.cxx:263
 AliCosmicTracker.cxx:264
 AliCosmicTracker.cxx:265
 AliCosmicTracker.cxx:266
 AliCosmicTracker.cxx:267
 AliCosmicTracker.cxx:268
 AliCosmicTracker.cxx:269
 AliCosmicTracker.cxx:270
 AliCosmicTracker.cxx:271
 AliCosmicTracker.cxx:272
 AliCosmicTracker.cxx:273
 AliCosmicTracker.cxx:274
 AliCosmicTracker.cxx:275
 AliCosmicTracker.cxx:276
 AliCosmicTracker.cxx:277
 AliCosmicTracker.cxx:278
 AliCosmicTracker.cxx:279
 AliCosmicTracker.cxx:280
 AliCosmicTracker.cxx:281
 AliCosmicTracker.cxx:282
 AliCosmicTracker.cxx:283
 AliCosmicTracker.cxx:284
 AliCosmicTracker.cxx:285
 AliCosmicTracker.cxx:286
 AliCosmicTracker.cxx:287
 AliCosmicTracker.cxx:288
 AliCosmicTracker.cxx:289
 AliCosmicTracker.cxx:290
 AliCosmicTracker.cxx:291
 AliCosmicTracker.cxx:292
 AliCosmicTracker.cxx:293
 AliCosmicTracker.cxx:294
 AliCosmicTracker.cxx:295
 AliCosmicTracker.cxx:296
 AliCosmicTracker.cxx:297
 AliCosmicTracker.cxx:298
 AliCosmicTracker.cxx:299
 AliCosmicTracker.cxx:300
 AliCosmicTracker.cxx:301
 AliCosmicTracker.cxx:302
 AliCosmicTracker.cxx:303
 AliCosmicTracker.cxx:304
 AliCosmicTracker.cxx:305
 AliCosmicTracker.cxx:306
 AliCosmicTracker.cxx:307
 AliCosmicTracker.cxx:308
 AliCosmicTracker.cxx:309
 AliCosmicTracker.cxx:310
 AliCosmicTracker.cxx:311
 AliCosmicTracker.cxx:312
 AliCosmicTracker.cxx:313
 AliCosmicTracker.cxx:314
 AliCosmicTracker.cxx:315
 AliCosmicTracker.cxx:316
 AliCosmicTracker.cxx:317
 AliCosmicTracker.cxx:318
 AliCosmicTracker.cxx:319
 AliCosmicTracker.cxx:320
 AliCosmicTracker.cxx:321
 AliCosmicTracker.cxx:322
 AliCosmicTracker.cxx:323
 AliCosmicTracker.cxx:324
 AliCosmicTracker.cxx:325
 AliCosmicTracker.cxx:326
 AliCosmicTracker.cxx:327
 AliCosmicTracker.cxx:328
 AliCosmicTracker.cxx:329
 AliCosmicTracker.cxx:330
 AliCosmicTracker.cxx:331
 AliCosmicTracker.cxx:332
 AliCosmicTracker.cxx:333
 AliCosmicTracker.cxx:334
 AliCosmicTracker.cxx:335
 AliCosmicTracker.cxx:336
 AliCosmicTracker.cxx:337
 AliCosmicTracker.cxx:338
 AliCosmicTracker.cxx:339
 AliCosmicTracker.cxx:340
 AliCosmicTracker.cxx:341
 AliCosmicTracker.cxx:342
 AliCosmicTracker.cxx:343
 AliCosmicTracker.cxx:344
 AliCosmicTracker.cxx:345
 AliCosmicTracker.cxx:346
 AliCosmicTracker.cxx:347
 AliCosmicTracker.cxx:348
 AliCosmicTracker.cxx:349
 AliCosmicTracker.cxx:350
 AliCosmicTracker.cxx:351
 AliCosmicTracker.cxx:352
 AliCosmicTracker.cxx:353
 AliCosmicTracker.cxx:354
 AliCosmicTracker.cxx:355
 AliCosmicTracker.cxx:356
 AliCosmicTracker.cxx:357
 AliCosmicTracker.cxx:358
 AliCosmicTracker.cxx:359
 AliCosmicTracker.cxx:360
 AliCosmicTracker.cxx:361
 AliCosmicTracker.cxx:362
 AliCosmicTracker.cxx:363
 AliCosmicTracker.cxx:364
 AliCosmicTracker.cxx:365
 AliCosmicTracker.cxx:366
 AliCosmicTracker.cxx:367
 AliCosmicTracker.cxx:368
 AliCosmicTracker.cxx:369
 AliCosmicTracker.cxx:370
 AliCosmicTracker.cxx:371
 AliCosmicTracker.cxx:372
 AliCosmicTracker.cxx:373
 AliCosmicTracker.cxx:374
 AliCosmicTracker.cxx:375
 AliCosmicTracker.cxx:376
 AliCosmicTracker.cxx:377
 AliCosmicTracker.cxx:378
 AliCosmicTracker.cxx:379
 AliCosmicTracker.cxx:380
 AliCosmicTracker.cxx:381
 AliCosmicTracker.cxx:382
 AliCosmicTracker.cxx:383
 AliCosmicTracker.cxx:384
 AliCosmicTracker.cxx:385
 AliCosmicTracker.cxx:386
 AliCosmicTracker.cxx:387
 AliCosmicTracker.cxx:388
 AliCosmicTracker.cxx:389
 AliCosmicTracker.cxx:390
 AliCosmicTracker.cxx:391
 AliCosmicTracker.cxx:392
 AliCosmicTracker.cxx:393
 AliCosmicTracker.cxx:394
 AliCosmicTracker.cxx:395
 AliCosmicTracker.cxx:396
 AliCosmicTracker.cxx:397
 AliCosmicTracker.cxx:398
 AliCosmicTracker.cxx:399
 AliCosmicTracker.cxx:400
 AliCosmicTracker.cxx:401
 AliCosmicTracker.cxx:402
 AliCosmicTracker.cxx:403
 AliCosmicTracker.cxx:404
 AliCosmicTracker.cxx:405
 AliCosmicTracker.cxx:406
 AliCosmicTracker.cxx:407
 AliCosmicTracker.cxx:408
 AliCosmicTracker.cxx:409
 AliCosmicTracker.cxx:410
 AliCosmicTracker.cxx:411
 AliCosmicTracker.cxx:412
 AliCosmicTracker.cxx:413
 AliCosmicTracker.cxx:414
 AliCosmicTracker.cxx:415
 AliCosmicTracker.cxx:416
 AliCosmicTracker.cxx:417
 AliCosmicTracker.cxx:418
 AliCosmicTracker.cxx:419
 AliCosmicTracker.cxx:420
 AliCosmicTracker.cxx:421
 AliCosmicTracker.cxx:422
 AliCosmicTracker.cxx:423
 AliCosmicTracker.cxx:424
 AliCosmicTracker.cxx:425
 AliCosmicTracker.cxx:426
 AliCosmicTracker.cxx:427
 AliCosmicTracker.cxx:428
 AliCosmicTracker.cxx:429
 AliCosmicTracker.cxx:430
 AliCosmicTracker.cxx:431
 AliCosmicTracker.cxx:432
 AliCosmicTracker.cxx:433
 AliCosmicTracker.cxx:434
 AliCosmicTracker.cxx:435
 AliCosmicTracker.cxx:436
 AliCosmicTracker.cxx:437
 AliCosmicTracker.cxx:438
 AliCosmicTracker.cxx:439
 AliCosmicTracker.cxx:440
 AliCosmicTracker.cxx:441
 AliCosmicTracker.cxx:442
 AliCosmicTracker.cxx:443
 AliCosmicTracker.cxx:444
 AliCosmicTracker.cxx:445
 AliCosmicTracker.cxx:446
 AliCosmicTracker.cxx:447
 AliCosmicTracker.cxx:448
 AliCosmicTracker.cxx:449
 AliCosmicTracker.cxx:450
 AliCosmicTracker.cxx:451
 AliCosmicTracker.cxx:452
 AliCosmicTracker.cxx:453
 AliCosmicTracker.cxx:454
 AliCosmicTracker.cxx:455
 AliCosmicTracker.cxx:456
 AliCosmicTracker.cxx:457
 AliCosmicTracker.cxx:458
 AliCosmicTracker.cxx:459
 AliCosmicTracker.cxx:460
 AliCosmicTracker.cxx:461
 AliCosmicTracker.cxx:462
 AliCosmicTracker.cxx:463
 AliCosmicTracker.cxx:464
 AliCosmicTracker.cxx:465
 AliCosmicTracker.cxx:466
 AliCosmicTracker.cxx:467
 AliCosmicTracker.cxx:468
 AliCosmicTracker.cxx:469
 AliCosmicTracker.cxx:470
 AliCosmicTracker.cxx:471
 AliCosmicTracker.cxx:472
 AliCosmicTracker.cxx:473
 AliCosmicTracker.cxx:474
 AliCosmicTracker.cxx:475
 AliCosmicTracker.cxx:476
 AliCosmicTracker.cxx:477
 AliCosmicTracker.cxx:478
 AliCosmicTracker.cxx:479
 AliCosmicTracker.cxx:480
 AliCosmicTracker.cxx:481
 AliCosmicTracker.cxx:482
 AliCosmicTracker.cxx:483
 AliCosmicTracker.cxx:484
 AliCosmicTracker.cxx:485
 AliCosmicTracker.cxx:486
 AliCosmicTracker.cxx:487
 AliCosmicTracker.cxx:488
 AliCosmicTracker.cxx:489
 AliCosmicTracker.cxx:490
 AliCosmicTracker.cxx:491
 AliCosmicTracker.cxx:492
 AliCosmicTracker.cxx:493
 AliCosmicTracker.cxx:494
 AliCosmicTracker.cxx:495
 AliCosmicTracker.cxx:496
 AliCosmicTracker.cxx:497
 AliCosmicTracker.cxx:498
 AliCosmicTracker.cxx:499
 AliCosmicTracker.cxx:500
 AliCosmicTracker.cxx:501
 AliCosmicTracker.cxx:502
 AliCosmicTracker.cxx:503
 AliCosmicTracker.cxx:504
 AliCosmicTracker.cxx:505
 AliCosmicTracker.cxx:506
 AliCosmicTracker.cxx:507
 AliCosmicTracker.cxx:508
 AliCosmicTracker.cxx:509
 AliCosmicTracker.cxx:510
 AliCosmicTracker.cxx:511
 AliCosmicTracker.cxx:512
 AliCosmicTracker.cxx:513
 AliCosmicTracker.cxx:514
 AliCosmicTracker.cxx:515
 AliCosmicTracker.cxx:516
 AliCosmicTracker.cxx:517
 AliCosmicTracker.cxx:518
 AliCosmicTracker.cxx:519
 AliCosmicTracker.cxx:520
 AliCosmicTracker.cxx:521
 AliCosmicTracker.cxx:522
 AliCosmicTracker.cxx:523
 AliCosmicTracker.cxx:524
 AliCosmicTracker.cxx:525
 AliCosmicTracker.cxx:526
 AliCosmicTracker.cxx:527
 AliCosmicTracker.cxx:528
 AliCosmicTracker.cxx:529
 AliCosmicTracker.cxx:530
 AliCosmicTracker.cxx:531
 AliCosmicTracker.cxx:532
 AliCosmicTracker.cxx:533
 AliCosmicTracker.cxx:534
 AliCosmicTracker.cxx:535
 AliCosmicTracker.cxx:536
 AliCosmicTracker.cxx:537
 AliCosmicTracker.cxx:538
 AliCosmicTracker.cxx:539
 AliCosmicTracker.cxx:540
 AliCosmicTracker.cxx:541
 AliCosmicTracker.cxx:542
 AliCosmicTracker.cxx:543
 AliCosmicTracker.cxx:544
 AliCosmicTracker.cxx:545
 AliCosmicTracker.cxx:546
 AliCosmicTracker.cxx:547
 AliCosmicTracker.cxx:548
 AliCosmicTracker.cxx:549
 AliCosmicTracker.cxx:550
 AliCosmicTracker.cxx:551
 AliCosmicTracker.cxx:552
 AliCosmicTracker.cxx:553
 AliCosmicTracker.cxx:554
 AliCosmicTracker.cxx:555
 AliCosmicTracker.cxx:556
 AliCosmicTracker.cxx:557
 AliCosmicTracker.cxx:558
 AliCosmicTracker.cxx:559
 AliCosmicTracker.cxx:560