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

////////////////////////////////////////////////////////////////////////////
//                                                                        //
// Surveyed Laser Track positions                                         //
// the position and direction information are stored in                   //
// the AliExternalTrackParam base class                                   //
// This class extends this information by identification parameters       //
/*

//Dump positions to a tree:
AliTPCLaserTrack::LoadTracks();
TObjArray *arr=AliTPCLaserTrack::GetTracks();
TTreeSRedirector *s=new TTreeSRedirector("LaserTracks.root");
TIter next(arr);
TObject *o=0x0;
while ( (o=next()) ) (*s) << "tracks" << "l.=" << o << "\n";
delete s;

//draw something
TFile f("LaserTracks.root");
TTree *tracks=(TTree*)f.Get("tracks");
tracks->Draw("fVecGY.fElements:fVecGX.fElements");

 tracks->Draw("fVecGY.fElements:fVecGX.fElements>>h(500,-250,250,500,-250,250)","fId<7")
*/
//                                                                        //
////////////////////////////////////////////////////////////////////////////


#include <TObjArray.h>
#include <TFile.h>
#include <TString.h>
#include <TSystem.h>

#include "AliLog.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#include "AliCDBPath.h"
#include "AliTPCLaserTrack.h"
#include "AliTPCROC.h"

ClassImp(AliTPCLaserTrack)

TObjArray *AliTPCLaserTrack::fgArrLaserTracks=0x0;

AliTPCLaserTrack::AliTPCLaserTrack() :
  AliExternalTrackParam(),
  fId(-1),
  fSide(-1),
  fRod(-1),
  fBundle(-1),
  fBeam(-1),
  fRayLength(0),
  fVecSec(0),       // points vectors - sector
  fVecP2(0),       // points vectors - snp
  fVecPhi(0),       // points vectors - global phi
  fVecGX(0),       // points vectors - globalX
  fVecGY(0),       // points vectors - globalY
  fVecGZ(0),       // points vectors - globalZ
  fVecLX(0),       // points vectors - localX
  fVecLY(0),       // points vectors - localY
  fVecLZ(0)        // points vectors - localZ
{
  //
//   // Default constructor
  //

}

AliTPCLaserTrack::AliTPCLaserTrack(const AliTPCLaserTrack &ltr) :
  AliExternalTrackParam(ltr),
  fId(ltr.fId),
  fSide(ltr.fSide),
  fRod(ltr.fRod),
  fBundle(ltr.fBundle),
  fBeam(ltr.fBeam),
  fRayLength(ltr.fRayLength),
  fVecSec(0),       // points vectors - sector
  fVecP2(0),       // points vectors - snp
  fVecPhi(0),       // points vectors - global phi
  fVecGX(0),       // points vectors - globalX
  fVecGY(0),       // points vectors - globalY
  fVecGZ(0),       // points vectors - globalZ
  fVecLX(0),       // points vectors - localX
  fVecLY(0),       // points vectors - localY
  fVecLZ(0)        // points vectors - localZ
{
  //
  // Default constructor
  //
  fVecSec=new TVectorD(*ltr.fVecSec);       // points vectors - sector
  fVecP2 =new TVectorD(*ltr.fVecP2);       // points vectors - snp
  fVecPhi=new TVectorD(*ltr.fVecPhi);       // points vectors - global phi
  fVecGX =new TVectorD(*ltr.fVecGX);       // points vectors - globalX
  fVecGY =new TVectorD(*ltr.fVecGY);       // points vectors - globalY
  fVecGZ =new TVectorD(*ltr.fVecGZ);       // points vectors - globalZ
  fVecLX =new TVectorD(*ltr.fVecLX);       // points vectors - localX
  fVecLY =new TVectorD(*ltr.fVecLY);       // points vectors - localY
  fVecLZ =new TVectorD(*ltr.fVecLZ);       // points vectors - localY

}

AliTPCLaserTrack::AliTPCLaserTrack(const Int_t id, const Int_t side, const Int_t rod,
		     const Int_t bundle, const Int_t beam,
		     Double_t x, Double_t alpha,
		     const Double_t param[5],
		     const Double_t covar[15], const Float_t rayLength) :
  AliExternalTrackParam(x,alpha,param,covar),
  fId(id),
  fSide(side),
  fRod(rod),
  fBundle(bundle),
  fBeam(beam),
  fRayLength(rayLength),
  fVecSec(new TVectorD(159)),       // points vectors - sector
  fVecP2(new TVectorD(159)),       // points vectors - snp
  fVecPhi(new TVectorD(159)),       // points vectors - global phi
  fVecGX(new TVectorD(159)),       // points vectors - globalX
  fVecGY(new TVectorD(159)),       // points vectors - globalY
  fVecGZ(new TVectorD(159)),       // points vectors - globalZ
  fVecLX(new TVectorD(159)),       // points vectors - localX
  fVecLY(new TVectorD(159)),       // points vectors - localY
  fVecLZ(new TVectorD(159))        // points vectors - localZ

{
  //
  // create laser track from arguments
  //
  
}
//_____________________________________________________________________
AliTPCLaserTrack& AliTPCLaserTrack::operator = (const  AliTPCLaserTrack &source)
{
  //
  // assignment operator
  //
  if (&source == this) return *this;
  new (this) AliTPCLaserTrack(source);
  
  return *this;
}


AliTPCLaserTrack::~AliTPCLaserTrack(){
  //
  // destructor
  //
  delete fVecSec;      //                - sector numbers  
  delete fVecP2;       //                - P2  
  delete fVecPhi;       // points vectors - global phi
  delete fVecGX;       // points vectors - globalX
  delete fVecGY;       // points vectors - globalY
  delete fVecGZ;       // points vectors - globalZ
  delete fVecLX;       // points vectors - localX
  delete fVecLY;       // points vectors - localY
  delete fVecLZ;       // points vectors - localZ
}

void AliTPCLaserTrack::LoadTracks()
{
  //
  // Load all design positions from file into the static array fgArrLaserTracks
  //
  
  if ( fgArrLaserTracks ) return;
  TObjArray *arrLaserTracks = 0x0;
  
  AliCDBManager *man=AliCDBManager::Instance();
  if (!man->GetDefaultStorage() && gSystem->Getenv("ALICE_ROOT")) man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  if (man->GetDefaultStorage()){
    if (man->GetRun()<0) man->SetRun(0);
    AliCDBEntry *entry=man->Get(AliCDBPath("TPC/Calib/LaserTracks"));
    if (!entry) return;
    arrLaserTracks = (TObjArray*)entry->GetObject();
    entry->SetOwner(kTRUE);
  } else {
    if (!gSystem->AccessPathName("LaserTracks.root")){
      TFile f("LaserTracks.root");
      arrLaserTracks=(TObjArray*)f.Get("arrLaserTracks");
      f.Close();
    }
  }
  if ( !arrLaserTracks ) {
//	AliWarning(Form("Could not get laser position data from file: '%s'",fgkDataFileName));
    return;
  }
  
  arrLaserTracks->SetOwner();
  
  fgArrLaserTracks = new TObjArray(fgkNLaserTracks);
  fgArrLaserTracks->SetOwner();
  for (Int_t itrack=0; itrack<fgkNLaserTracks; itrack++){
    AliTPCLaserTrack *ltr = (AliTPCLaserTrack*)arrLaserTracks->At(itrack);
    if ( !ltr ){
//	    AliWarning(Form("No informatino found for Track %d!",itrack));
      continue;
    }
    ltr->UpdatePoints();
    fgArrLaserTracks->AddAt(new AliTPCLaserTrack(*ltr),itrack);
  }

  delete arrLaserTracks;
}


void AliTPCLaserTrack::UpdatePoints(){
  //
  // update track points
  //
  const Double_t kMaxSnp=0.97;
  AliTPCROC* roc = AliTPCROC::Instance();
  //
  //
  if (!fVecSec){
    fVecSec=new TVectorD(159);
    fVecP2 =new TVectorD(159);       //                - P2  
    fVecPhi=new TVectorD(159);       //                - Phi
    fVecGX=new TVectorD(159);       // points vectors - globalX
    fVecGY=new TVectorD(159);       // points vectors - globalY
    fVecGZ=new TVectorD(159);       // points vectors - globalZ
    fVecLX=new TVectorD(159);       // points vectors - localX
    fVecLY=new TVectorD(159);       // points vectors - localY
    fVecLZ=new TVectorD(159);       // points vectors - localZ

  }
  for (Int_t irow=158; irow>=0; irow--){
    (*fVecSec)[irow]= -1;       //                -
    (*fVecP2)[irow] = 0;       //                - P2  -snp
    (*fVecPhi)[irow]= 0;       //                - global phi
    (*fVecGX)[irow] = 0;       // points vectors - globalX
    (*fVecGY)[irow] = 0;       // points vectors - globalY
    (*fVecGZ)[irow] = 0;       // points vectors - globalZ
    (*fVecLX)[irow] = 0;       // points vectors - localX
    (*fVecLY)[irow] = 0;       // points vectors - localY
    (*fVecLZ)[irow] = 0;       // points vectors - localZ

  }
  Double_t gxyz[3];
  Double_t lxyz[3];
  AliTPCLaserTrack*ltrp=new AliTPCLaserTrack(*this);  //make temporary track

  for (Int_t irow=158; irow>=0; irow--){
    UInt_t srow = irow;
    Int_t sector=0;
   
    if (srow >=roc->GetNRows(0)) {
      srow-=roc->GetNRows(0);
      sector=36    ;
    }
    lxyz[0]= roc->GetPadRowRadii(sector,srow);
    if (!ltrp->PropagateTo(lxyz[0],5)) break;
    ltrp->GetXYZ(gxyz);
    //
    Double_t alpha=TMath::ATan2(gxyz[1],gxyz[0]);
    if (alpha<0) alpha+=2*TMath::Pi();
    sector      +=TMath::Nint(-0.5+9*alpha/TMath::Pi());
    if (gxyz[2]<0) sector+=18;
    Double_t salpha   = TMath::Pi()*(sector+0.5)/9.;    
    if (!ltrp->Rotate(salpha)) break;
    if (!ltrp->PropagateTo(lxyz[0],5)) break;
    if (TMath::Abs(ltrp->GetSnp())>kMaxSnp) break;
    ltrp->GetXYZ(gxyz);
    lxyz[1]=ltrp->GetY();
    lxyz[2]=ltrp->GetZ();
    (*fVecSec)[irow]= sector;
    (*fVecP2)[irow] = ltrp->GetSnp();                 //                - P2  -snp
    (*fVecPhi)[irow]= TMath::ATan2(gxyz[1],gxyz[0]);  //                - global phi
    (*fVecGX)[irow] = gxyz[0];       // points vectors - globalX
    (*fVecGY)[irow] = gxyz[1];       // points vectors - globalY
    (*fVecGZ)[irow] = gxyz[2];       // points vectors - globalZ
    (*fVecLX)[irow] = lxyz[0];       // points vectors - localX
    (*fVecLY)[irow] = lxyz[1];       // points vectors - localY
    (*fVecLZ)[irow] = lxyz[2];       // points vectors - localZ

  }
  delete ltrp;  // delete temporary track
}

Int_t AliTPCLaserTrack::IdentifyTrack(AliExternalTrackParam *track, Int_t side)
{
  //
  // Find the laser track which is corresponding closest to 'track'
  // return its id
  //
  // 
  const  Float_t   kMaxdphi=0.2;
  const  Float_t   kMaxdphiP=0.05;
  const  Float_t   kMaxdz=40;

  if ( !fgArrLaserTracks ) LoadTracks();
  TObjArray *arrTracks = GetTracks();
  Double_t lxyz0[3];
  Double_t lxyz1[3];
  Double_t pxyz0[3];
  Double_t pxyz1[3];
  track->GetXYZ(lxyz0);
  track->GetDirection(pxyz0);
  //
  Float_t mindist=10; // maxima minimal distance
  Int_t id = -1;
  for (Int_t itrack=0; itrack<fgkNLaserTracks; itrack++){    
    AliTPCLaserTrack *ltr = (AliTPCLaserTrack*)arrTracks->UncheckedAt(itrack);
    if (side>=0) if (ltr->GetSide()!=side) continue;
    Double_t * kokot = (Double_t*)ltr->GetParameter();
    kokot[4]=-0.0000000001;
    //
    ltr->GetXYZ(lxyz1);
    if (TMath::Abs(lxyz1[2]-lxyz0[2])>kMaxdz) continue;
    // phi position
    Double_t phi0 = TMath::ATan2(lxyz0[1],lxyz0[0]);
    Double_t phi1 = TMath::ATan2(lxyz1[1],lxyz1[0]);
    if (TMath::Abs(phi0-phi1)>kMaxdphi) continue;
    // phi direction
    ltr->GetDirection(pxyz1);
    Float_t direction= pxyz0[0]*pxyz1[0] + pxyz0[1]*pxyz1[1] + pxyz0[2]*pxyz1[2];
    Float_t distdir = (1-TMath::Abs(direction))*90.; //distance at entrance
    if (1-TMath::Abs(direction)>kMaxdphiP)
      continue;
    //
    Float_t dist=0;
    dist+=TMath::Abs(lxyz1[0]-lxyz0[0]);
    dist+=TMath::Abs(lxyz1[1]-lxyz0[1]);
    //    dist+=TMath::Abs(lxyz1[2]-lxyz0[2]); //z is not used for distance calculation
    dist+=distdir;
    //    
    if (id<0)  {
      id =itrack; 
      mindist=dist; 
      continue;
    }
    if (dist>mindist) continue;
    id = itrack;
    mindist=dist;
  }
  return id;
}

 AliTPCLaserTrack.cxx:1
 AliTPCLaserTrack.cxx:2
 AliTPCLaserTrack.cxx:3
 AliTPCLaserTrack.cxx:4
 AliTPCLaserTrack.cxx:5
 AliTPCLaserTrack.cxx:6
 AliTPCLaserTrack.cxx:7
 AliTPCLaserTrack.cxx:8
 AliTPCLaserTrack.cxx:9
 AliTPCLaserTrack.cxx:10
 AliTPCLaserTrack.cxx:11
 AliTPCLaserTrack.cxx:12
 AliTPCLaserTrack.cxx:13
 AliTPCLaserTrack.cxx:14
 AliTPCLaserTrack.cxx:15
 AliTPCLaserTrack.cxx:16
 AliTPCLaserTrack.cxx:17
 AliTPCLaserTrack.cxx:18
 AliTPCLaserTrack.cxx:19
 AliTPCLaserTrack.cxx:20
 AliTPCLaserTrack.cxx:21
 AliTPCLaserTrack.cxx:22
 AliTPCLaserTrack.cxx:23
 AliTPCLaserTrack.cxx:24
 AliTPCLaserTrack.cxx:25
 AliTPCLaserTrack.cxx:26
 AliTPCLaserTrack.cxx:27
 AliTPCLaserTrack.cxx:28
 AliTPCLaserTrack.cxx:29
 AliTPCLaserTrack.cxx:30
 AliTPCLaserTrack.cxx:31
 AliTPCLaserTrack.cxx:32
 AliTPCLaserTrack.cxx:33
 AliTPCLaserTrack.cxx:34
 AliTPCLaserTrack.cxx:35
 AliTPCLaserTrack.cxx:36
 AliTPCLaserTrack.cxx:37
 AliTPCLaserTrack.cxx:38
 AliTPCLaserTrack.cxx:39
 AliTPCLaserTrack.cxx:40
 AliTPCLaserTrack.cxx:41
 AliTPCLaserTrack.cxx:42
 AliTPCLaserTrack.cxx:43
 AliTPCLaserTrack.cxx:44
 AliTPCLaserTrack.cxx:45
 AliTPCLaserTrack.cxx:46
 AliTPCLaserTrack.cxx:47
 AliTPCLaserTrack.cxx:48
 AliTPCLaserTrack.cxx:49
 AliTPCLaserTrack.cxx:50
 AliTPCLaserTrack.cxx:51
 AliTPCLaserTrack.cxx:52
 AliTPCLaserTrack.cxx:53
 AliTPCLaserTrack.cxx:54
 AliTPCLaserTrack.cxx:55
 AliTPCLaserTrack.cxx:56
 AliTPCLaserTrack.cxx:57
 AliTPCLaserTrack.cxx:58
 AliTPCLaserTrack.cxx:59
 AliTPCLaserTrack.cxx:60
 AliTPCLaserTrack.cxx:61
 AliTPCLaserTrack.cxx:62
 AliTPCLaserTrack.cxx:63
 AliTPCLaserTrack.cxx:64
 AliTPCLaserTrack.cxx:65
 AliTPCLaserTrack.cxx:66
 AliTPCLaserTrack.cxx:67
 AliTPCLaserTrack.cxx:68
 AliTPCLaserTrack.cxx:69
 AliTPCLaserTrack.cxx:70
 AliTPCLaserTrack.cxx:71
 AliTPCLaserTrack.cxx:72
 AliTPCLaserTrack.cxx:73
 AliTPCLaserTrack.cxx:74
 AliTPCLaserTrack.cxx:75
 AliTPCLaserTrack.cxx:76
 AliTPCLaserTrack.cxx:77
 AliTPCLaserTrack.cxx:78
 AliTPCLaserTrack.cxx:79
 AliTPCLaserTrack.cxx:80
 AliTPCLaserTrack.cxx:81
 AliTPCLaserTrack.cxx:82
 AliTPCLaserTrack.cxx:83
 AliTPCLaserTrack.cxx:84
 AliTPCLaserTrack.cxx:85
 AliTPCLaserTrack.cxx:86
 AliTPCLaserTrack.cxx:87
 AliTPCLaserTrack.cxx:88
 AliTPCLaserTrack.cxx:89
 AliTPCLaserTrack.cxx:90
 AliTPCLaserTrack.cxx:91
 AliTPCLaserTrack.cxx:92
 AliTPCLaserTrack.cxx:93
 AliTPCLaserTrack.cxx:94
 AliTPCLaserTrack.cxx:95
 AliTPCLaserTrack.cxx:96
 AliTPCLaserTrack.cxx:97
 AliTPCLaserTrack.cxx:98
 AliTPCLaserTrack.cxx:99
 AliTPCLaserTrack.cxx:100
 AliTPCLaserTrack.cxx:101
 AliTPCLaserTrack.cxx:102
 AliTPCLaserTrack.cxx:103
 AliTPCLaserTrack.cxx:104
 AliTPCLaserTrack.cxx:105
 AliTPCLaserTrack.cxx:106
 AliTPCLaserTrack.cxx:107
 AliTPCLaserTrack.cxx:108
 AliTPCLaserTrack.cxx:109
 AliTPCLaserTrack.cxx:110
 AliTPCLaserTrack.cxx:111
 AliTPCLaserTrack.cxx:112
 AliTPCLaserTrack.cxx:113
 AliTPCLaserTrack.cxx:114
 AliTPCLaserTrack.cxx:115
 AliTPCLaserTrack.cxx:116
 AliTPCLaserTrack.cxx:117
 AliTPCLaserTrack.cxx:118
 AliTPCLaserTrack.cxx:119
 AliTPCLaserTrack.cxx:120
 AliTPCLaserTrack.cxx:121
 AliTPCLaserTrack.cxx:122
 AliTPCLaserTrack.cxx:123
 AliTPCLaserTrack.cxx:124
 AliTPCLaserTrack.cxx:125
 AliTPCLaserTrack.cxx:126
 AliTPCLaserTrack.cxx:127
 AliTPCLaserTrack.cxx:128
 AliTPCLaserTrack.cxx:129
 AliTPCLaserTrack.cxx:130
 AliTPCLaserTrack.cxx:131
 AliTPCLaserTrack.cxx:132
 AliTPCLaserTrack.cxx:133
 AliTPCLaserTrack.cxx:134
 AliTPCLaserTrack.cxx:135
 AliTPCLaserTrack.cxx:136
 AliTPCLaserTrack.cxx:137
 AliTPCLaserTrack.cxx:138
 AliTPCLaserTrack.cxx:139
 AliTPCLaserTrack.cxx:140
 AliTPCLaserTrack.cxx:141
 AliTPCLaserTrack.cxx:142
 AliTPCLaserTrack.cxx:143
 AliTPCLaserTrack.cxx:144
 AliTPCLaserTrack.cxx:145
 AliTPCLaserTrack.cxx:146
 AliTPCLaserTrack.cxx:147
 AliTPCLaserTrack.cxx:148
 AliTPCLaserTrack.cxx:149
 AliTPCLaserTrack.cxx:150
 AliTPCLaserTrack.cxx:151
 AliTPCLaserTrack.cxx:152
 AliTPCLaserTrack.cxx:153
 AliTPCLaserTrack.cxx:154
 AliTPCLaserTrack.cxx:155
 AliTPCLaserTrack.cxx:156
 AliTPCLaserTrack.cxx:157
 AliTPCLaserTrack.cxx:158
 AliTPCLaserTrack.cxx:159
 AliTPCLaserTrack.cxx:160
 AliTPCLaserTrack.cxx:161
 AliTPCLaserTrack.cxx:162
 AliTPCLaserTrack.cxx:163
 AliTPCLaserTrack.cxx:164
 AliTPCLaserTrack.cxx:165
 AliTPCLaserTrack.cxx:166
 AliTPCLaserTrack.cxx:167
 AliTPCLaserTrack.cxx:168
 AliTPCLaserTrack.cxx:169
 AliTPCLaserTrack.cxx:170
 AliTPCLaserTrack.cxx:171
 AliTPCLaserTrack.cxx:172
 AliTPCLaserTrack.cxx:173
 AliTPCLaserTrack.cxx:174
 AliTPCLaserTrack.cxx:175
 AliTPCLaserTrack.cxx:176
 AliTPCLaserTrack.cxx:177
 AliTPCLaserTrack.cxx:178
 AliTPCLaserTrack.cxx:179
 AliTPCLaserTrack.cxx:180
 AliTPCLaserTrack.cxx:181
 AliTPCLaserTrack.cxx:182
 AliTPCLaserTrack.cxx:183
 AliTPCLaserTrack.cxx:184
 AliTPCLaserTrack.cxx:185
 AliTPCLaserTrack.cxx:186
 AliTPCLaserTrack.cxx:187
 AliTPCLaserTrack.cxx:188
 AliTPCLaserTrack.cxx:189
 AliTPCLaserTrack.cxx:190
 AliTPCLaserTrack.cxx:191
 AliTPCLaserTrack.cxx:192
 AliTPCLaserTrack.cxx:193
 AliTPCLaserTrack.cxx:194
 AliTPCLaserTrack.cxx:195
 AliTPCLaserTrack.cxx:196
 AliTPCLaserTrack.cxx:197
 AliTPCLaserTrack.cxx:198
 AliTPCLaserTrack.cxx:199
 AliTPCLaserTrack.cxx:200
 AliTPCLaserTrack.cxx:201
 AliTPCLaserTrack.cxx:202
 AliTPCLaserTrack.cxx:203
 AliTPCLaserTrack.cxx:204
 AliTPCLaserTrack.cxx:205
 AliTPCLaserTrack.cxx:206
 AliTPCLaserTrack.cxx:207
 AliTPCLaserTrack.cxx:208
 AliTPCLaserTrack.cxx:209
 AliTPCLaserTrack.cxx:210
 AliTPCLaserTrack.cxx:211
 AliTPCLaserTrack.cxx:212
 AliTPCLaserTrack.cxx:213
 AliTPCLaserTrack.cxx:214
 AliTPCLaserTrack.cxx:215
 AliTPCLaserTrack.cxx:216
 AliTPCLaserTrack.cxx:217
 AliTPCLaserTrack.cxx:218
 AliTPCLaserTrack.cxx:219
 AliTPCLaserTrack.cxx:220
 AliTPCLaserTrack.cxx:221
 AliTPCLaserTrack.cxx:222
 AliTPCLaserTrack.cxx:223
 AliTPCLaserTrack.cxx:224
 AliTPCLaserTrack.cxx:225
 AliTPCLaserTrack.cxx:226
 AliTPCLaserTrack.cxx:227
 AliTPCLaserTrack.cxx:228
 AliTPCLaserTrack.cxx:229
 AliTPCLaserTrack.cxx:230
 AliTPCLaserTrack.cxx:231
 AliTPCLaserTrack.cxx:232
 AliTPCLaserTrack.cxx:233
 AliTPCLaserTrack.cxx:234
 AliTPCLaserTrack.cxx:235
 AliTPCLaserTrack.cxx:236
 AliTPCLaserTrack.cxx:237
 AliTPCLaserTrack.cxx:238
 AliTPCLaserTrack.cxx:239
 AliTPCLaserTrack.cxx:240
 AliTPCLaserTrack.cxx:241
 AliTPCLaserTrack.cxx:242
 AliTPCLaserTrack.cxx:243
 AliTPCLaserTrack.cxx:244
 AliTPCLaserTrack.cxx:245
 AliTPCLaserTrack.cxx:246
 AliTPCLaserTrack.cxx:247
 AliTPCLaserTrack.cxx:248
 AliTPCLaserTrack.cxx:249
 AliTPCLaserTrack.cxx:250
 AliTPCLaserTrack.cxx:251
 AliTPCLaserTrack.cxx:252
 AliTPCLaserTrack.cxx:253
 AliTPCLaserTrack.cxx:254
 AliTPCLaserTrack.cxx:255
 AliTPCLaserTrack.cxx:256
 AliTPCLaserTrack.cxx:257
 AliTPCLaserTrack.cxx:258
 AliTPCLaserTrack.cxx:259
 AliTPCLaserTrack.cxx:260
 AliTPCLaserTrack.cxx:261
 AliTPCLaserTrack.cxx:262
 AliTPCLaserTrack.cxx:263
 AliTPCLaserTrack.cxx:264
 AliTPCLaserTrack.cxx:265
 AliTPCLaserTrack.cxx:266
 AliTPCLaserTrack.cxx:267
 AliTPCLaserTrack.cxx:268
 AliTPCLaserTrack.cxx:269
 AliTPCLaserTrack.cxx:270
 AliTPCLaserTrack.cxx:271
 AliTPCLaserTrack.cxx:272
 AliTPCLaserTrack.cxx:273
 AliTPCLaserTrack.cxx:274
 AliTPCLaserTrack.cxx:275
 AliTPCLaserTrack.cxx:276
 AliTPCLaserTrack.cxx:277
 AliTPCLaserTrack.cxx:278
 AliTPCLaserTrack.cxx:279
 AliTPCLaserTrack.cxx:280
 AliTPCLaserTrack.cxx:281
 AliTPCLaserTrack.cxx:282
 AliTPCLaserTrack.cxx:283
 AliTPCLaserTrack.cxx:284
 AliTPCLaserTrack.cxx:285
 AliTPCLaserTrack.cxx:286
 AliTPCLaserTrack.cxx:287
 AliTPCLaserTrack.cxx:288
 AliTPCLaserTrack.cxx:289
 AliTPCLaserTrack.cxx:290
 AliTPCLaserTrack.cxx:291
 AliTPCLaserTrack.cxx:292
 AliTPCLaserTrack.cxx:293
 AliTPCLaserTrack.cxx:294
 AliTPCLaserTrack.cxx:295
 AliTPCLaserTrack.cxx:296
 AliTPCLaserTrack.cxx:297
 AliTPCLaserTrack.cxx:298
 AliTPCLaserTrack.cxx:299
 AliTPCLaserTrack.cxx:300
 AliTPCLaserTrack.cxx:301
 AliTPCLaserTrack.cxx:302
 AliTPCLaserTrack.cxx:303
 AliTPCLaserTrack.cxx:304
 AliTPCLaserTrack.cxx:305
 AliTPCLaserTrack.cxx:306
 AliTPCLaserTrack.cxx:307
 AliTPCLaserTrack.cxx:308
 AliTPCLaserTrack.cxx:309
 AliTPCLaserTrack.cxx:310
 AliTPCLaserTrack.cxx:311
 AliTPCLaserTrack.cxx:312
 AliTPCLaserTrack.cxx:313
 AliTPCLaserTrack.cxx:314
 AliTPCLaserTrack.cxx:315
 AliTPCLaserTrack.cxx:316
 AliTPCLaserTrack.cxx:317
 AliTPCLaserTrack.cxx:318
 AliTPCLaserTrack.cxx:319
 AliTPCLaserTrack.cxx:320
 AliTPCLaserTrack.cxx:321
 AliTPCLaserTrack.cxx:322
 AliTPCLaserTrack.cxx:323
 AliTPCLaserTrack.cxx:324
 AliTPCLaserTrack.cxx:325
 AliTPCLaserTrack.cxx:326
 AliTPCLaserTrack.cxx:327
 AliTPCLaserTrack.cxx:328
 AliTPCLaserTrack.cxx:329
 AliTPCLaserTrack.cxx:330
 AliTPCLaserTrack.cxx:331
 AliTPCLaserTrack.cxx:332
 AliTPCLaserTrack.cxx:333
 AliTPCLaserTrack.cxx:334
 AliTPCLaserTrack.cxx:335
 AliTPCLaserTrack.cxx:336
 AliTPCLaserTrack.cxx:337
 AliTPCLaserTrack.cxx:338
 AliTPCLaserTrack.cxx:339
 AliTPCLaserTrack.cxx:340
 AliTPCLaserTrack.cxx:341
 AliTPCLaserTrack.cxx:342
 AliTPCLaserTrack.cxx:343
 AliTPCLaserTrack.cxx:344
 AliTPCLaserTrack.cxx:345
 AliTPCLaserTrack.cxx:346
 AliTPCLaserTrack.cxx:347
 AliTPCLaserTrack.cxx:348
 AliTPCLaserTrack.cxx:349
 AliTPCLaserTrack.cxx:350
 AliTPCLaserTrack.cxx:351