ROOT logo
////////////////////////////////////////////////////////////////////////
//
// name: AliTPCCmpNG.C 
//
// date: 24.09.2002
// author: Jiri Chudoba
// version: 1.0
// description: 
//        define a class TPCGenTrack
//        save TPC related properties of tracks into a single tree
//
// input: 
//        Int_t nEvents      ... nr of events to process
//        Int_t firstEventNr ... first event number (starts from 0)
//        char* fnRecTracks .. name of file with reconstructed tracks
//        char* fnHits ... name of file with hits and Kine Tree
//        char* fnDigits  ... name of file with digits
//        char* fnTracks .. output file name, default genTracks.root
//
// How to use:
//  Typical usage:
//    .L AliTPCCmpNG.C+
//    TPCFindGenTracks *t = new TPCFindGenTracks("galice.root","tpc.digits.root")
//    t->Exec();
//    .q
//    aliroot
//    .L  AliTPCCmpNG.C+
//    TPCCmpTr *t2 = new TPCCmpTr("tpc.tracks.root","genTracks.root","cmpTracks.root");
//    t2->Exec();
//
//  Details:
//  ========
//
//  Step 1 - summurize information from simulation
//  ===============================================
//  Compile macro with ACLIC:
//     .L AliTPCCmpNG.C+
//  create an object TPCFindGenTracks, which processes information
//  from simulations. As input it needs:
//     object gAlice: to get magnetic field
//     TreeK: to get parameters of generated particles
//     TreeTR: to get track parameters at the TPC entry
//     TreeD: to get number of digits and digits pattern
//                for a given track in TPC
//  These input objects can be in different files, gAlice, TreeK and
//  TreeTR are in the file fnHits, TreeD in the file fnDigits (can be
//  the same as fnHits. Output is written to the file fnRes 
//  ("genTracks.root" by default). Use can specify number of 
//  events to process and the first event number:
//    TPCFindGenTracks *t = new TPCFindGenTracks("galice.root","tpc.digits.root","genTracks.root",1,0)
//  The filenames in the example on previous line are defaults, user can 
//  specify just the file name with gAlice object (and TreeTR and TreeK), 
//  so equivalent shorter initialization is:
//    TPCFindGenTracks *t = new TPCFindGenTracks("galice.root")
//  The task is done by calling Exec() method:
//    t->Exec();
//  User can set different debug levels by invoking:
//    t->SetDebug(debugLevel)
//  Number of events to process and the first event number can be
//  specified as parameters to Exec:
//    t->Exec(nEvents, firstEvent)
//  Then you have to quit root to get rid of problems with deleting gAlice
//  object (it is not deleted, but read again in the following step):
//
//  Step 2 - compare reconstructed tracks with simulated
//  ====================================================
//
//  Load (and compile) the macro:
//   .L AliTPCCmpNG.C+
//  Create object TPCCmpTr, which does the comparison. As input it requires 
//  name of the file with reconstructed TPC tracks. You can specify 
//  name of the file with genTrack tree (summarized info about simulation),
//  file with gAlice object, output file name, number of events to process
//  and first event number:
//  TPCCmpTr *t2 = new TPCCmpTr("tpc.tracks.root","genTracks.root","cmpTracks.root","galice.root",1,0);
//  The interface is quite similar to the TPCFindGenTracks class.
//  Then just invoke Exec() method:
//  t2->Exec();
//
//  Step 3 - study the results
//  ==========================
//  Load the outoput TTree and you can do Draw(), Scan() or other
//  usual things to do with TTree:
//  TFile *f = new TFile("cmpTracks.root")
//  TTree *t = (TTree*)f->Get("TPCcmpTracks")
//  t->Draw("fVDist[3]","fReconstructed")
//
// History:
//
// 24.09.02 - first version
// 24.01.03 - v7, before change from TPC Special Hits to TrackReferences
// 26.01.03 - change from TPC Special Hits to TrackReferences
//            (loop over TreeTR instead of TreeH)
// 28.01.03 - v8 last version before removing TPC special point
// 28.01.03 - remove TPC special point, loop over TreeH 
//            store TParticle and AliTrack
// 29.01.03 - v9 last version before moving the loop over rec. tracks
//            into separate step
// 03.02.03 - rename to AliTPCCmpNG.C, remove the part with rec. tracks
//            (will be addded in a macro AliTPCCmpTr.C
//
//
////////////////////////////////////////////////////////////////////////

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "iostream.h"
#include <stdio.h>
#include <string.h>
#include "Rtypes.h"
#include "TFile.h"
#include "TTree.h"
#include "TString.h"
#include "TBenchmark.h"
#include "TStopwatch.h"
#include "TParticle.h"
#include "AliRun.h"
#include "AliStack.h"
#include "AliTPCtrack.h"
#include "AliSimDigits.h"
#include "AliTPCParam.h"
#include "TParticle.h"
#include "AliTPC.h"
#include "AliDetector.h"
#include "AliTrackReference.h"
#include "TSystem.h"
#include "TTimer.h"
// #include "AliConst.h"
#endif

#include "AliTPCTracking.C"

// include ML.C:
////////////////////////////////////////////////////////////////////////
//
// name: ML.C  (Macro Library - collection of functions used in diff macros
// date: 08.05.2002
// last update: 08.05.2002
// author: Jiri Chudoba
// version: 1.0
// description: 
//
// History:
//
// 08.05.02 - first version
//
////////////////////////////////////////////////////////////////////////

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "iostream.h"
#include "Rtypes.h"
#include "TSystem.h"
#include "TTimer.h"
#include "Getline.h"
#include "TChain.h"
#include "TString.h"
#include "TFile.h"
#include "AliRun.h"

void WaitForReturn();
Bool_t ImportgAlice(TFile *file);
TFile* OpenAliceFile(char *fn, Bool_t importgAlice = kFALSE, char *mode = "read");
Int_t Chain(TString baseDir, TString subDirNameMask, TString fn, TChain& chain);

#endif

////////////////////////////////////////////////////////////////////////
void WaitForReturn() 
{
//
// wait until user press return;
//
  char    *input;
  Bool_t done = kFALSE;
  TTimer  *timer = new TTimer("gSystem->ProcessEvents();", 50, kFALSE);

  do {
    timer->TurnOn();
    timer->Reset();
    // Now let's read the input, we can use here any
    // stdio or iostream reading methods. like std::cin >> myinputl;
    input = Getline("Type <return> to continue: "); 
    timer->TurnOff();
    if (input) done = kTRUE;
  } while (!done);
}

////////////////////////////////////////////////////////////////////////

Int_t Chain(TString baseDir, TString subDirNameMask, TString fn, TChain& chain) {
// chain all files fn in the subdirectories which match subDirName
// return number of chained files

// open baseDir, loop over subdirs

  void *dirp = gSystem->OpenDirectory(baseDir); 
  if (!dirp) {
    cerr<<"Could not open base directory "<<baseDir.Data()<<endl;
    return 0;
  }
  const char *afile;
  Long_t id, size, flag, modTime;
  Int_t rc = 0;
  char relName[100];
  while((afile = gSystem->GetDirEntry(dirp))) {
//    printf("file: %s\n",afile);
    if (strstr(afile,subDirNameMask.Data())) {
      sprintf(relName,"%s/%s/%s",baseDir.Data(),afile,fn.Data());
//      cerr<<"relName = "<<relName<<endl;
      if(!gSystem->GetPathInfo(relName, &id, &size, &flag, &modTime)) { 
	rc += chain.Add(relName);      
      }
    }
  }
  gSystem->FreeDirectory(dirp);
//  cerr<<"rc = "<<rc<<endl;
  return rc;
}
////////////////////////////////////////////////////////////////////////
Bool_t ImportgAlice(TFile *file) {
// read in gAlice object from the file
  gAlice = (AliRun*)file->Get("gAlice");
  if (!gAlice)  return kFALSE;
  return kTRUE;
}
////////////////////////////////////////////////////////////////////////
TFile* OpenAliceFile(char *fn, Bool_t importgAlice, char *mode) {
  TFile *file = TFile::Open(fn,mode);
  if (!file->IsOpen()) {
    cerr<<"OpenAliceFile: cannot open file "<<fn<<" in mode "
	<<mode<<endl;
    return 0;
  }
  if (!importgAlice) return file;
  if (ImportgAlice(file)) return file;
  return 0;
}
////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////
//
// Start of implementation of the class TPCGenInfo
//
////////////////////////////////////////////////////////////////////////
class TPCGenInfo: public TObject {

public:
  TPCGenInfo();
  AliTrackReference *fTrackRef;   // track reference saved in the output tree
  TParticle *fParticle;           // generated particle 
  Int_t fLabel;                   // track label

  Int_t fRowsWithDigitsInn;    // number of rows with digits in the inner sectors
  Int_t fRowsWithDigits;       // number of rows with digits in the outer sectors
  Int_t fRowsTrackLength;      // last - first row with digit
  Int_t fDigitsInSeed;         // digits in the default seed rows

  ClassDef(TPCGenInfo,1)  // container for 
};
ClassImp(TPCGenInfo)
////////////////////////////////////////////////////////////////////////
TPCGenInfo::TPCGenInfo()
{
  fTrackRef = 0;
  fParticle = 0;
}
////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////
//
// End of implementation of the class TPCGenInfo
//
////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////
//
// Start of implementation of the class digitRow
//
////////////////////////////////////////////////////////////////////////
const Int_t kgRowBytes = 32;

class digitRow: public TObject {

public:
  digitRow();
//  digitRow(){;}
  virtual ~digitRow(){;}
  void SetRow(Int_t row);
  Bool_t TestRow(Int_t row);
  digitRow & operator=(const digitRow &digOld);
  Int_t RowsOn(Int_t upto=8*kgRowBytes);
  Int_t Last();
  Int_t First();
  void Reset();

//private:
  UChar_t fDig[kgRowBytes];

  ClassDef(digitRow,1)  // container for digit pattern
};
ClassImp(digitRow)
////////////////////////////////////////////////////////////////////////
digitRow::digitRow()
{
  Reset();
}
////////////////////////////////////////////////////////////////////////
digitRow & digitRow::operator=(const digitRow &digOld)
{
  for (Int_t i = 0; i<kgRowBytes; i++) fDig[i] = digOld.fDig[i];
  return (*this);
}
////////////////////////////////////////////////////////////////////////
void digitRow::SetRow(Int_t row) 
{
  if (row >= 8*kgRowBytes) {
    cerr<<"digitRow::SetRow: index "<<row<<" out of bounds."<<endl;
    return;
  }
  Int_t iC = row/8;
  Int_t iB = row%8;
  SETBIT(fDig[iC],iB);
}

////////////////////////////////////////////////////////////////////////
Bool_t digitRow::TestRow(Int_t row)
{
//
// return kTRUE if row is on
//
  Int_t iC = row/8;
  Int_t iB = row%8;
  return TESTBIT(fDig[iC],iB);
}
////////////////////////////////////////////////////////////////////////
Int_t digitRow::RowsOn(Int_t upto)
{
//
// returns number of rows with a digit  
// count only rows less equal row number upto
//
  Int_t total = 0;
  for (Int_t i = 0; i<kgRowBytes; i++) {
    for (Int_t j = 0; j < 8; j++) {
      if (i*8+j > upto) return total;
      if (TESTBIT(fDig[i],j))  total++;
    }
  }
  return total;
}
////////////////////////////////////////////////////////////////////////
void digitRow::Reset()
{
//
// resets all rows to zero
//
  for (Int_t i = 0; i<kgRowBytes; i++) {
    fDig[i] <<= 8;
  }
}
////////////////////////////////////////////////////////////////////////
Int_t digitRow::Last()
{
//
// returns the last row number with a digit
// returns -1 if now digits 
//
  for (Int_t i = kgRowBytes-1; i>=0; i--) {
    for (Int_t j = 7; j >= 0; j--) {
      if TESTBIT(fDig[i],j) return i*8+j;
    }
  }
  return -1;
}
////////////////////////////////////////////////////////////////////////
Int_t digitRow::First()
{
//
// returns the first row number with a digit
// returns -1 if now digits 
//
  for (Int_t i = 0; i<kgRowBytes; i++) {
    for (Int_t j = 0; j < 8; j++) {
      if (TESTBIT(fDig[i],j)) return i*8+j;
    }
  }
  return -1;
}

////////////////////////////////////////////////////////////////////////
//
// end of implementation of a class digitRow
//
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// 
// Start of implementation of the class TPCFindGenTracks
//
////////////////////////////////////////////////////////////////////////

class TPCFindGenTracks {

public:
  TPCFindGenTracks();
  TPCFindGenTracks(char* fnHits,
		   char* fnDigits ="tpc.digits.root",
		   char* fnRes    ="genTracks.root",
		   Int_t nEvents=1, Int_t firstEvent=0);
  virtual ~TPCFindGenTracks();
  void Reset();
  Int_t Exec();
  Int_t Exec(Int_t nEvents, Int_t firstEventNr);
  void CreateTreeGenTracks();
  void CloseOutputFile();
  Int_t TreeKLoop();
  Int_t TreeTRLoop();
  Int_t TreeDLoop();
  void SetFirstEventNr(Int_t i) {fFirstEventNr = i;}
  void SetNEvents(Int_t i) {fNEvents = i;}
  void SetDebug(Int_t level) {fDebug = level;}

  Float_t TR2LocalX(AliTrackReference *trackRef,
		    AliTPCParam *paramTPC);

public:
  Int_t fDebug;                   //! debug flag  
  Int_t fEventNr;                 //! current event number
  Int_t fLabel;                   //! track label
  Int_t fNEvents;                 //! number of events to process
  Int_t fFirstEventNr;            //! first event to process
  Int_t fNParticles;              //! number of particles in TreeK
  TTree *fTreeGenTracks;          //! output tree with generated tracks
  char *fFnRes;                   //! output file name with stored tracks
  char *fFnHits;                  //! input file name with hits
  char *fFnDigits;                //! input file name with digits
  TFile *fFileGenTracks;             //! output file with stored fTreeGenTracks
  TFile *fFileHits;               //! input file with hits
  TFile *fFileTreeD;              //! input file with digits
  digitRow *fDigitRow;            //! pointer to the object saved in Branch
  digitRow *fContainerDigitRow;   //! big container for partial information
  AliTrackReference *fTrackRef;   //! track reference saved in the output tree
  AliTrackReference *fContainerTR;//! big container for partial information
  Int_t *fIndexTR;                //! index of particle label in the fContainerTR
  Int_t fLastIndexTR;             //! last used index in fIndexTR

  AliTPCParam* fParamTPC;         //! AliTPCParam

  Double_t fVPrim[3];             //! primary vertex position
  Double_t fVDist[4];             //! distance of the particle vertex from primary vertex
                                  // the fVDist[3] contains size of the 3-vector
  TParticle *fParticle;           //! generated particle 

  Int_t fRowsWithDigitsInn;       //! number of rows with digits in the inner sectors
  Int_t fRowsWithDigits;          //! number of rows with digits in the outer sectors
  Int_t fRowsTrackLength;         //! last - first row with digit
  Int_t fDigitsInSeed;            //! digits in the default seed rows

private:

// some constants for the original non-pareller tracking (by Y.Belikov)
  static const Int_t seedRow11 = 158;  // nRowUp - 1
  static const Int_t seedRow12 = 139;  // nRowUp - 1 - (Int_t) 0.125*nRowUp
  static const Int_t seedRow21 = 149;  // seedRow11 - shift
  static const Int_t seedRow22 = 130;  // seedRow12 - shift
  static const Double_t kRaddeg = 180./TMath::Pi();

  static const Int_t fgMaxIndexTR = 50000; // maximum number of tracks with a track ref
  static const Int_t fgMaxParticles = 2000000; // maximum number of generated particles
  static const Double_t fgPtCut = .001; // do not store particles with generated pT less than this
  static const Float_t fgTrackRefLocalXMax = 82.95;
  static const Float_t fgTrackRefLocalXMaxDelta = 500.; 

  ClassDef(TPCFindGenTracks,1)    // class which creates and fills tree with TPCGenTrack objects
};
ClassImp(TPCFindGenTracks)
  
////////////////////////////////////////////////////////////////////////
TPCFindGenTracks::TPCFindGenTracks()
{
  Reset();
}

////////////////////////////////////////////////////////////////////////
TPCFindGenTracks::TPCFindGenTracks(char* fnHits, char* fnDigits, 
				   char* fnRes,
				   Int_t nEvents, Int_t firstEvent)
{
  Reset();
  fFirstEventNr = firstEvent;
  fEventNr = firstEvent;
  fNEvents = nEvents;
  fFnRes = fnRes;
  fFnHits = fnHits;
  fFnDigits = fnDigits;  
}
////////////////////////////////////////////////////////////////////////
void TPCFindGenTracks::Reset()
{
  fDigitRow = 0;
  fEventNr = 0;
  fNEvents = 0;
  fTreeGenTracks = 0;
  fFnRes = "genTracks.root";
  fFnHits = "rfio:galice.root";
  fFnDigits = "rfio:its.tpc.trd.digits.root";
  fFileGenTracks = 0;
  fFileHits =0;
  fFileTreeD =0;
  fContainerDigitRow = 0;
  fContainerTR = 0;
  fIndexTR = 0;
  fLastIndexTR = -1;
  fParticle = 0;
  fTrackRef = 0;
  fDebug = 0;
  fVPrim[0] = -1000.;
  fVPrim[1] = -1000.;
  fVPrim[2] = -1000.;
  fParamTPC = 0;

}
////////////////////////////////////////////////////////////////////////
TPCFindGenTracks::~TPCFindGenTracks()
{
  ;
}
////////////////////////////////////////////////////////////////////////
Int_t TPCFindGenTracks::Exec(Int_t nEvents, Int_t firstEventNr)
{
  fNEvents = nEvents;
  fFirstEventNr = firstEventNr;
  return Exec();
}

////////////////////////////////////////////////////////////////////////
Int_t TPCFindGenTracks::Exec()
{
  TStopwatch timer;
  timer.Start();

  fDigitRow = new digitRow();
  CreateTreeGenTracks();
  if (!fTreeGenTracks) return 1;
  fFileHits = OpenAliceFile(fFnHits,kTRUE,"read"); //gAlice is read here
  if (!fFileHits) return 1;  
  fFileHits->cd();
  SetFieldFactor(); 

  fFileTreeD = TFile::Open(fFnDigits,"read");
  if (!fFileTreeD->IsOpen()) {
    cerr<<"Cannot open file "<<fFnDigits<<endl;
    return 1;
  }

  fParamTPC = LoadTPCParam(fFileTreeD);
  if (!fParamTPC) {
    cerr<<"TPC parameters not found and could not be created"<<endl;
    return 1;
  }

  for (fEventNr = fFirstEventNr; fEventNr < fFirstEventNr+fNEvents;
       fEventNr++) {
    fNParticles = gAlice->GetEvent(fEventNr);
    fContainerDigitRow = new digitRow[fNParticles];
    fContainerTR = new AliTrackReference[fgMaxIndexTR];
    fIndexTR = new Int_t[fNParticles];
    for (Int_t i = 0; i<fNParticles; i++) {
      fIndexTR[i] = -1;
    }
  
    cout<<"Start to process event "<<fEventNr<<endl;
    cout<<"\tfNParticles = "<<fNParticles<<endl;
    if (fDebug>2) cout<<"\tStart loop over TreeD"<<endl;
    if (TreeDLoop()>0) return 1;
    if (fDebug>2) cout<<"\tStart loop over TreeTR"<<endl;
    if (TreeTRLoop()>0) return 1;
    if (fDebug>2) cout<<"\tStart loop over TreeK"<<endl;
    if (TreeKLoop()>0) return 1;
    if (fDebug>2) cout<<"\tEnd loop over TreeK"<<endl;

    delete [] fContainerDigitRow;
    delete [] fContainerTR;
    delete [] fIndexTR;
  }

  CloseOutputFile();

  cerr<<"Exec finished"<<endl;
  fFileHits->cd();
  delete gAlice;
  fFileHits->Close();
  delete fFileHits;

  timer.Stop();
  timer.Print();
  return 0;
}
////////////////////////////////////////////////////////////////////////
void TPCFindGenTracks::CreateTreeGenTracks() 
{
  fFileGenTracks = TFile::Open(fFnRes,"RECREATE");
  if (!fFileGenTracks) {
    cerr<<"Error in CreateTreeGenTracks: cannot open file "<<fFnRes<<endl;
    return;
  }
  fTreeGenTracks = new TTree("genTracksTree","genTracksTree");
  TBranch *branchBits = fTreeGenTracks->Branch("bitsBranch", "digitRow", &fDigitRow, 4000, 0);
  if (!branchBits) {
    cerr<<"Error in CreateTreeGenTracks: cannot create branch."<<endl;
    return;
  }
  fTreeGenTracks->Branch("fEventNr",&fEventNr,"fEventNr/I");
  fTreeGenTracks->Branch("fLabel",&fLabel,"fLabel/I");
  fTreeGenTracks->Branch("fRowsWithDigitsInn",&fRowsWithDigitsInn,"fRowsWithDigitsInn/I");
  fTreeGenTracks->Branch("fRowsWithDigits",&fRowsWithDigits,"fRowsWithDigits/I");
  fTreeGenTracks->Branch("fRowsTrackLength",&fRowsTrackLength,"fRowsTrackLength/I");
  fTreeGenTracks->Branch("fDigitsInSeed",&fDigitsInSeed,"fDigitsInSeed/I");

  fTreeGenTracks->Branch("Particle","TParticle",&fParticle);
  fTreeGenTracks->Branch("fVDist",&fVDist,"fVDist[4]/D");
  fTreeGenTracks->Branch("TR","AliTrackReference",&fTrackRef);

  fTreeGenTracks->AutoSave();
}
////////////////////////////////////////////////////////////////////////
void TPCFindGenTracks::CloseOutputFile() 
{
  if (!fFileGenTracks) {
    cerr<<"File "<<fFnRes<<" not found as an open file."<<endl;
    return;
  }
  fFileGenTracks->cd();
  fTreeGenTracks->Write();  
  delete fTreeGenTracks;
  fFileGenTracks->Close();
  delete fFileGenTracks;
  return;
}

////////////////////////////////////////////////////////////////////////
Int_t TPCFindGenTracks::TreeKLoop()
{
//
// open the file with treeK
// loop over all entries there and save information about some tracks
//
  
  fFileHits->cd();
  if (fDebug > 0) {
    cout<<"There are "<<fNParticles<<" primary and secondary particles in event "
	<<fEventNr<<endl;
  }
  AliStack * stack = gAlice->Stack();
  if (!stack) {cerr<<"Stack was not found!\n"; return 1;}

// not all generators give primary vertex position. Take the vertex
// of the particle 0 as primary vertex.
  fParticle = stack->ParticleFromTreeK(0);
  fVPrim[0] = fParticle->Vx();
  fVPrim[1] = fParticle->Vy();
  fVPrim[2] = fParticle->Vz();

  for (Int_t iParticle = 0; iParticle < fNParticles; iParticle++) {
//  for (Int_t iParticle = 0; iParticle < fDebug; iParticle++) {

// load only particles with TR
    if (fIndexTR[iParticle] < 0) continue;
    fParticle = stack->ParticleFromTreeK(iParticle);
    if (fDebug > 3 && iParticle < 10) {
      cout<<"processing particle "<<iParticle<<" ";
      fParticle->Print();
    }

// fill the tree

    fLabel = iParticle;
    fVDist[0] = fParticle->Vx()-fVPrim[0];
    fVDist[1] = fParticle->Vy()-fVPrim[1];
    fVDist[2] = fParticle->Vz()-fVPrim[2];
    fVDist[3] = TMath::Sqrt(fVDist[0]*fVDist[0]+fVDist[1]*fVDist[1]+fVDist[2]*fVDist[2]);
    fDigitRow = &(fContainerDigitRow[iParticle]);
    fRowsWithDigitsInn = fDigitRow->RowsOn(63); // 63 = number of inner rows
    fRowsWithDigits = fDigitRow->RowsOn();    
    fRowsTrackLength = fDigitRow->Last() - fDigitRow->First();
    if (fDebug > 2 && iParticle < 10) {
      cerr<<"Fill track with a label "<<iParticle<<endl;
    }
    fDigitsInSeed = 0;
    if (fDigitRow->TestRow(seedRow11) && fDigitRow->TestRow(seedRow12)) 
      fDigitsInSeed = 1;
    if (fDigitRow->TestRow(seedRow21) && fDigitRow->TestRow(seedRow22)) 
      fDigitsInSeed += 10;

    if (fIndexTR[iParticle] >= 0) {
      fTrackRef = &(fContainerTR[fIndexTR[iParticle]]);
//      cerr<<"Debug: fTrackRef->X() = "<<fTrackRef->X()<<endl;
    } else {
      fTrackRef->SetTrack(-1);
    }

    fTreeGenTracks->Fill();

  }
  fTreeGenTracks->AutoSave();
//  delete gAlice; gAlice = 0;
//  fFileHits->Close();

  if (fDebug > 2) cerr<<"end of TreeKLoop"<<endl;

  return 0;
}
////////////////////////////////////////////////////////////////////////
Int_t TPCFindGenTracks::TreeDLoop()
{
//
// open the file with treeD
// loop over all entries there and save information about some tracks
//


//  Int_t nrow_up=fParamTPC->GetNRowUp();
//  Int_t nrows=fParamTPC->GetNRowLow()+nrow_up;
  Int_t nInnerSector = fParamTPC->GetNInnerSector();
  Int_t rowShift = 0;
  Int_t zero=fParamTPC->GetZeroSup();
//  Int_t gap=Int_t(0.125*nrows), shift=Int_t(0.5*gap);
  
  char treeDName[100]; 
  sprintf(treeDName,"TreeD_75x40_100x60_150x60_%d",fEventNr);
  TTree *treeD=(TTree*)fFileTreeD->Get(treeDName);
  AliSimDigits digitsAddress, *digits=&digitsAddress;
  treeD->GetBranch("Segment")->SetAddress(&digits);

  Int_t sectorsByRows=(Int_t)treeD->GetEntries();
  if (fDebug > 1) cout<<"\tsectorsByRows = "<<sectorsByRows<<endl;
  for (Int_t i=0; i<sectorsByRows; i++) {
//  for (Int_t i=5720; i<sectorsByRows; i++) {
    if (!treeD->GetEvent(i)) continue;
    Int_t sec,row;
    fParamTPC->AdjustSectorRow(digits->GetID(),sec,row);
    if (fDebug > 1) cout<<sec<<' '<<row<<"                          \r";
//    cerr<<sec<<' '<<row<<endl;

// here I expect that upper sectors follow lower sectors
    if (sec > nInnerSector) rowShift = fParamTPC->GetNRowLow();
    digits->First();
    do {
      Int_t iRow=digits->CurrentRow();
      Int_t iColumn=digits->CurrentColumn();
      Short_t digitValue = digits->CurrentDigit();
//      cout<<"Inner loop: sector, iRow, iColumn "
//	  <<sec<<" "<<iRow<<" "<<iColumn<<endl;
      if (digitValue >= zero) {
	Int_t label;
	for (Int_t j = 0; j<3; j++) {
	  label = digits->GetTrackID(iRow,iColumn,j); 
	  if (label >= fNParticles) {
	    cerr<<"particle label too big: fNParticles, label "
		<<fNParticles<<" "<<label<<endl;
	  }
	  if (label >= 0 && label <= fNParticles) {
//	  if (label >= 0 && label <= fDebug) {
	    if (fDebug > 6 ) {
	      cout<<"Inner loop: sector, iRow, iColumn, label, value, row "
		  <<sec<<" "
		  <<iRow<<" "<<iColumn<<" "<<label<<" "<<digitValue
		  <<" "<<row<<endl;
	    }	
	    fContainerDigitRow[label].SetRow(row+rowShift);
	  }
	}
      }
    } while (digits->Next());
  }

  if (fDebug > 2) cerr<<"end of TreeDLoop"<<endl;

  return 0;
}

////////////////////////////////////////////////////////////////////////
Int_t TPCFindGenTracks::TreeTRLoop()
{
//
// loop over TrackReferences and store the first one for each track
//
  
  TTree *treeTR=gAlice->TreeTR();
  if (!treeTR) {
    cerr<<"TreeTR not found"<<endl;
    return 1;
  }
  Int_t nPrimaries = (Int_t) treeTR->GetEntries();
  if (fDebug > 1) cout<<"There are "<<nPrimaries<<" entries in TreeTR"<<endl;
  TBranch *TPCBranchTR  = treeTR->GetBranch("TPC");
  if (!TPCBranchTR) {
    cerr<<"TPC branch in TR not found"<<endl;
    return 1;
  }
  TClonesArray* TPCArrayTR = new TClonesArray("AliTrackReference");
  TPCBranchTR->SetAddress(&TPCArrayTR);
  for (Int_t iPrimPart = 0; iPrimPart<nPrimaries; iPrimPart++) {
    TPCBranchTR->GetEntry(iPrimPart);
    for (Int_t iTrackRef = 0; iTrackRef < TPCArrayTR->GetEntriesFast(); iTrackRef++) {
      AliTrackReference *trackRef = (AliTrackReference*)TPCArrayTR->At(iTrackRef);
      Int_t label = trackRef->GetTrack();
      
// save info in the fContainerTR
      if (label<0  || label > fNParticles) {
	cerr<<"Wrong label: "<<label<<endl;
	continue;
//	return 1;
      }

// store only if we do not have any track reference yet for this label
      if (fIndexTR[label] >= 0) continue;

// store only references with localX < fgTrackRefLocalXMax +- fgTrackRefLocalXMaxDelta
// and the pT > fgPtCut
      Float_t localX = TR2LocalX(trackRef,fParamTPC);
      if (TMath::Abs(localX-fgTrackRefLocalXMax)>fgTrackRefLocalXMaxDelta) continue;
      if (trackRef->Pt() < fgPtCut) continue;


//      cout<<"label, xg "<<label<<" "<<xg<<endl;
      if (fLastIndexTR >= fgMaxIndexTR-1) {
	cerr<<"Too many tracks with track reference. Increase the constant"
	    <<" fgMaxIndexTR"<<endl;
	return 1;
      }
      fIndexTR[label] =  ++fLastIndexTR;

// someone was lazy to implement copy ctor in AliTrackReference, so we have to do
//  it here "manually"
      fContainerTR[fIndexTR[label]].SetPosition(trackRef->X(),trackRef->Y(),trackRef->Z());

      fContainerTR[fIndexTR[label]].SetMomentum(trackRef->Px(),trackRef->Py(),trackRef->Pz());
      fContainerTR[fIndexTR[label]].SetTrack(trackRef->GetTrack());
      fContainerTR[fIndexTR[label]].SetLength(trackRef->GetLength());
//      cerr<<"Debug: trackRef->X(), stored: "<<trackRef->X()<<" "
//	  << fContainerTR[fIndexTR[label]].X()<<endl;

    }
  }
  return 0;
}
////////////////////////////////////////////////////////////////////////
Float_t TPCFindGenTracks::TR2LocalX(AliTrackReference *trackRef,
				    AliTPCParam *paramTPC) {

  Float_t x[3] = { trackRef->X(),trackRef->Y(),trackRef->Z()};
  Int_t index[4];
  paramTPC->Transform0to1(x,index);
  paramTPC->Transform1to2(x,index);
  return x[0];
}
////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////
// 
// Start of implementation of the class TPCCmpTr
//
////////////////////////////////////////////////////////////////////////

class TPCCmpTr {

public:
  TPCCmpTr();
  TPCCmpTr(char* fnRecTracks,
	   char* fnGenTracks   ="genTracks.root",
	   char* fnCmpRes      ="cmpTracks.root", 
	   char* fnGalice      ="galice.root",
	   Int_t nEvents=1, Int_t firstEvent=0);
  virtual ~TPCCmpTr();
  void Reset();
  Int_t Exec();
  Int_t Exec(Int_t nEvents, Int_t firstEventNr);
  void CreateTreeCmp();
  void CloseOutputFile();
  Bool_t ConnectGenTree();
  Int_t TreeGenLoop(Int_t eventNr);
  Int_t TreeTLoop(Int_t eventNr);
  void SetFirstEventNr(Int_t i) {fFirstEventNr = i;}
  void SetNEvents(Int_t i) {fNEvents = i;}
  void SetDebug(Int_t level) {fDebug = level;}

// tmp method, should go to TrackReferenceTPC
  Float_t TR2LocalX(AliTrackReference *trackRef,
		    AliTPCParam *paramTPC);

private:
  digitRow *fDigitRow;            //! pointer to the object saved in Branch
  Int_t fEventNr;                 //! current event number
  Int_t fLabel;                   //! track label
  Int_t fNEvents;                 //! number of events to process
  Int_t fFirstEventNr;            //! first event to process

  char *fFnCmp;                   //! output file name with cmp tracks
  TFile *fFileCmp;                //! output file with cmp tracks
  TTree *fTreeCmp;                //! output tree with cmp tracks

  char *fFnGenTracks;             //! input file name with gen tracks
  TFile *fFileGenTracks;
  TTree *fTreeGenTracks;

  char *fFnHits;                  //! input file name with gAlice object (needed for B)
  TFile *fFileHits;               //! input file with gAlice

  char *fFnRecTracks;             //! input file name with tpc rec. tracks
  TFile *fFileRecTracks;          //! input file with reconstructed tracks
  TTree *fTreeRecTracks;          //! tree with reconstructed tracks

  AliTPCtrack *fTPCTrack;         //! pointer to TPC track to connect branch
  Int_t *fIndexRecTracks;         //! index of particle label in the TreeT_TPC

  Int_t fRowsWithDigitsInn;       //! number of rows with digits in the inner sectors
  Int_t fRowsWithDigits;          //! number of rows with digits in the outer sectors
  Int_t fRowsTrackLength;         //! last - first row with digit
  Int_t fDigitsInSeed;            //! digits in the default seed rows
  TParticle *fParticle;           //! generated particle 
  Double_t fVDist[4];             //! distance of the particle vertex from primary vertex
                                  // the fVDist[3] contains size of the 3-vector
  AliTrackReference *fTrackRef;   //! track reference saved in the output tree
  Int_t   fReconstructed;         //! flag if track was reconstructed
  AliTPCParam* fParamTPC;         //! AliTPCParam

  Int_t fNParticles;              //! number of particles in the input tree genTracks
  Int_t fDebug;                   //! debug flag  

  Int_t fNextTreeGenEntryToRead;    //! last entry already read from genTracks tree
  TPCGenInfo *fGenInfo;           //! container for all the details

  Double_t fRecPhi;         // reconstructed phi angle (0;2*kPI)
  Double_t fLambda;         // reconstructed 
  Double_t fRecPt_1;        // reconstructed 
  Float_t fdEdx;           // reconstructed  dEdx      


  ClassDef(TPCCmpTr,1)    // class which creates and fills tree with TPCGenTrack objects
};
ClassImp(TPCCmpTr)
  
////////////////////////////////////////////////////////////////////////
TPCCmpTr::TPCCmpTr()
{
  Reset();
}

////////////////////////////////////////////////////////////////////////
TPCCmpTr::TPCCmpTr(char* fnRecTracks,
		   char* fnGenTracks,
		   char* fnCmp,
		   char* fnGalice,
		   Int_t nEvents, Int_t firstEvent)
{
  Reset();
  fFnRecTracks = fnRecTracks;
  fFnGenTracks = fnGenTracks;
  fFnCmp = fnCmp;
  fFnHits = fnGalice;
  fFirstEventNr = firstEvent;
  fEventNr = firstEvent;
  fNEvents = nEvents;
}
////////////////////////////////////////////////////////////////////////
void TPCCmpTr::Reset()
{
  fDigitRow = 0;
  fEventNr = 0;
  fNEvents = 0;
  fTreeCmp = 0;
  fFnCmp = "cmpTracks.root";
  fFnHits = "galice.root";
  fFileGenTracks = 0;
  fFileHits =0;
  fParticle = 0;
  fTrackRef = 0;

  fRowsWithDigitsInn = 0;
  fRowsWithDigits = 0;
  fRowsTrackLength = 0;
  fDigitsInSeed = 0;

  fDebug = 0;

  fParamTPC = 0;
  fFnRecTracks = "tpc.tracks.root";
  fTreeRecTracks = 0;
  fFileRecTracks = 0;
  fTPCTrack = 0; 
  fGenInfo = 0; 
}
////////////////////////////////////////////////////////////////////////
TPCCmpTr::~TPCCmpTr()
{
  ;
}
////////////////////////////////////////////////////////////////////////
Int_t TPCCmpTr::Exec(Int_t nEvents, Int_t firstEventNr)
{
  fNEvents = nEvents;
  fFirstEventNr = firstEventNr;
  return Exec();
}

////////////////////////////////////////////////////////////////////////
Int_t TPCCmpTr::Exec()
{
  TStopwatch timer;
  timer.Start();

  fDigitRow = new digitRow();
  CreateTreeCmp();
  if (!fTreeCmp) {
    cerr<<"output tree not created"<<endl;
    return 1;
  }
  fFileHits = OpenAliceFile(fFnHits,kTRUE,"read"); //gAlice is read here
  if (!fFileHits) {
    cerr<<"Cannot open file with gAlice object "<<fFnHits<<endl;
    return 1;  
  }
  fFileHits->cd();
  SetFieldFactor(); 

  fParamTPC = LoadTPCParam(fFileHits);
  if (!fParamTPC) {
    cerr<<"TPC parameters not found and could not be created"<<endl;
    return 1;
  }

  if (!ConnectGenTree()) {
    cerr<<"Cannot connect tree with generated tracks"<<endl;
    return 1;
  }
  fFileHits->cd();
  fNextTreeGenEntryToRead = 0;
  cerr<<"fFirstEventNr, fNEvents: "<<fFirstEventNr<<" "<<fNEvents<<endl;
  for (Int_t eventNr = fFirstEventNr; eventNr < fFirstEventNr+fNEvents;
       eventNr++) {
    fNParticles = gAlice->GetEvent(fEventNr);    
    fIndexRecTracks = new Int_t[fNParticles];
    for (Int_t i = 0; i<fNParticles; i++) {
      fIndexRecTracks[i] = -1;
    }
  
    cout<<"Start to process event "<<fEventNr<<endl;
    cout<<"\tfNParticles = "<<fNParticles<<endl;
    if (fDebug>2) cout<<"\tStart loop over TreeT"<<endl;
    if (TreeTLoop(eventNr)>0) return 1;

    if (fDebug>2) cout<<"\tStart loop over tree genTracks"<<endl;
    if (TreeGenLoop(eventNr)>0) return 1;
    if (fDebug>2) cout<<"\tEnd loop over tree genTracks"<<endl;

    delete fTreeRecTracks;

    delete [] fIndexRecTracks;
  }

  CloseOutputFile();

  cerr<<"Exec finished"<<endl;
  fFileHits->cd();
  delete gAlice;
  fFileHits->Close();
  delete fFileHits;

  timer.Stop();
  timer.Print();
  return 0;
}
////////////////////////////////////////////////////////////////////////
Bool_t TPCCmpTr::ConnectGenTree()
{
//
// connect all branches from the genTracksTree
// use the same variables as for the new cmp tree, it may work
//
  fFileGenTracks = TFile::Open(fFnGenTracks,"READ");
  if (!fFileGenTracks) {
    cerr<<"Error in ConnectGenTree: cannot open file "<<fFnGenTracks<<endl;
    return kFALSE;
  }
  fTreeGenTracks = (TTree*)fFileGenTracks->Get("genTracksTree");
  if (!fTreeGenTracks) {
    cerr<<"Error in ConnectGenTree: cannot find genTracksTree in the file "
	<<fFnGenTracks<<endl;
    return kFALSE;
  }
  fTreeGenTracks->SetBranchAddress("fEventNr",&fEventNr);
  fTreeGenTracks->SetBranchAddress("fLabel",&fLabel);
  fTreeGenTracks->SetBranchAddress("fRowsWithDigitsInn",&fRowsWithDigitsInn);
  fTreeGenTracks->SetBranchAddress("fRowsWithDigits",&fRowsWithDigits);
  fTreeGenTracks->SetBranchAddress("fRowsTrackLength",&fRowsTrackLength);
  fTreeGenTracks->SetBranchAddress("fDigitsInSeed",&fDigitsInSeed);
  fTreeGenTracks->SetBranchAddress("Particle",&fParticle);
  fTreeGenTracks->SetBranchAddress("fVDist",fVDist);
  fTreeGenTracks->SetBranchAddress("TR",&fTrackRef);

  if (fDebug > 1) {
    cout<<"Number of gen. tracks with TR: "<<fTreeGenTracks->GetEntries()<<endl;
  }
  return kTRUE;
}


////////////////////////////////////////////////////////////////////////
void TPCCmpTr::CreateTreeCmp() 
{
  fFileCmp = TFile::Open(fFnCmp,"RECREATE");
  if (!fFileCmp) {
    cerr<<"Error in CreateTreeCmp: cannot open file "<<fFnCmp<<endl;
    return;
  }
  fTreeCmp = new TTree("TPCcmpTracks","TPCcmpTracks");
  TBranch *branchBits = fTreeCmp->Branch("bitsBranch", "digitRow", &fDigitRow, 4000, 0);
  if (!branchBits) {
    cerr<<"Error in CreateTreeCmp: cannot create branch."<<endl;
    return;
  }
  fTreeCmp->Branch("fEventNr",&fEventNr,"fEventNr/I");
  fTreeCmp->Branch("fLabel",&fLabel,"fLabel/I");
  fTreeCmp->Branch("fRowsWithDigitsInn",&fRowsWithDigitsInn,"fRowsWithDigitsInn/I");
  fTreeCmp->Branch("fRowsWithDigits",&fRowsWithDigits,"fRowsWithDigits/I");
  fTreeCmp->Branch("fRowsTrackLength",&fRowsTrackLength,"fRowsTrackLength/I");
  fTreeCmp->Branch("fDigitsInSeed",&fDigitsInSeed,"fDigitsInSeed/I");

  fTreeCmp->Branch("fReconstructed",&fReconstructed,"fReconstructed/I");
  fTreeCmp->Branch("fTPCTrack","AliTPCtrack",&fTPCTrack);

  fTreeCmp->Branch("Particle","TParticle",&fParticle);
  fTreeCmp->Branch("fVDist",&fVDist,"fVDist[4]/D");
  fTreeCmp->Branch("TR","AliTrackReference",&fTrackRef);

  fTreeCmp->AutoSave();
}
////////////////////////////////////////////////////////////////////////
void TPCCmpTr::CloseOutputFile() 
{
  if (!fFileCmp) {
    cerr<<"File "<<fFnCmp<<" not found as an open file."<<endl;
    return;
  }
  fFileCmp->cd();
  fTreeCmp->Write();  
  delete fTreeCmp;
  fFileCmp->Close();
  delete fFileCmp;
  return;
}
////////////////////////////////////////////////////////////////////////

Float_t TPCCmpTr::TR2LocalX(AliTrackReference *trackRef,
			    AliTPCParam *paramTPC) {

  Float_t x[3] = { trackRef->X(),trackRef->Y(),trackRef->Z()};
  Int_t index[4];
  paramTPC->Transform0to1(x,index);
  paramTPC->Transform1to2(x,index);
  return x[0];
}
////////////////////////////////////////////////////////////////////////

Int_t TPCCmpTr::TreeTLoop(Int_t eventNr)
{
//
// loop over all TPC reconstructed tracks and store info in memory
//

  
  if (!fFileRecTracks) fFileRecTracks = TFile::Open(fFnRecTracks,"read");
  if (!fFileRecTracks->IsOpen()) {
    cerr<<"Cannot open file "<<fFnRecTracks<<endl;
    return 1;
  }

  char treeNameBase[11] = "TreeT_TPC_";
  char treeName[20];
  sprintf(treeName,"%s%d",treeNameBase,eventNr);

  fTreeRecTracks=(TTree*)fFileRecTracks->Get(treeName);
  if (!fTreeRecTracks) {
    cerr<<"Can't get a tree with TPC rec. tracks named "<<treeName<<endl;
    return 1;
  }
  
  Int_t nEntries = (Int_t) fTreeRecTracks->GetEntries();
  if (fDebug > 2) cout<<"Event, rec. tracks: "<<eventNr<<" "
		      <<nEntries<<endl;
  TBranch * br= fTreeRecTracks->GetBranch("tracks");
  br->SetAddress(&fTPCTrack);

  for (Int_t iEntry=0; iEntry<nEntries;iEntry++){
    br->GetEntry(iEntry);
    Int_t label = fTPCTrack->GetLabel();
    fIndexRecTracks[label] =  iEntry; 
  }  

  if (fDebug > 2) cerr<<"end of TreeTLoop"<<endl;

  return 0;
}
////////////////////////////////////////////////////////////////////////
Int_t TPCCmpTr::TreeGenLoop(Int_t eventNr)
{
//
// loop over all entries for a given event, find corresponding 
// rec. track and store in the fTreeCmp
//
  
  fFileGenTracks->cd();
  Int_t entry = fNextTreeGenEntryToRead;
  Double_t nParticlesTR = fTreeGenTracks->GetEntriesFast();
  cerr<<"fNParticles, nParticlesTR, fNextTreeGenEntryToRead: "<<fNParticles<<" "
      <<nParticlesTR<<" "<<fNextTreeGenEntryToRead<<endl;
  while (entry < nParticlesTR) {
    fTreeGenTracks->GetEntry(entry);
    entry++;
    if (fEventNr < eventNr) continue;
    if (fEventNr > eventNr) break;
    fNextTreeGenEntryToRead = entry-1;
    if (fDebug > 2 && fLabel < 10) {
      cerr<<"Fill track with a label "<<fLabel<<endl;
    }

    fReconstructed = 0;
    fdEdx = 0.;
    fRecPhi = fLambda = fRecPt_1 = 0.;

    if (fDebug > 2) {
      cerr<<"fLabel, fIndexRecTracks[fLabel] "<<fLabel<<" "<<fIndexRecTracks[fLabel]<<endl;
    }
    if (fIndexRecTracks[fLabel] >= 0) {
      Int_t nBytes = fTreeRecTracks->GetEvent(fIndexRecTracks[fLabel]);
      if (nBytes > 0) {
	fReconstructed = 1;
	fdEdx = fTPCTrack->GetdEdx();
	Double_t Localx = TR2LocalX(fTrackRef,fParamTPC);
	if (fDebug > 3) {
	  cerr<<"Track local X before prolongation: "<<fTPCTrack->GetX()<<endl;
	}
	fTPCTrack->PropagateTo(Localx);
	Double_t par[5];
	if (fDebug > 3) {
	  cerr<<"Track local X after prolongation: "<<fTPCTrack->GetX()<<endl;
	}
	fTPCTrack->GetExternalParameters(Localx,par);
	fRecPhi=TMath::ASin(par[2]) + fTPCTrack->GetAlpha();
	if (fRecPhi<0) fRecPhi+=2*TMath::Pi();
	if (fRecPhi>=2*TMath::Pi()) fRecPhi-=2*TMath::Pi();
//	  fRecPhi = (fRecPhi)*kRaddeg;
	fLambda = TMath::ATan(par[3]);
	fRecPt_1 = TMath::Abs(par[4]);
      }
    }


    fTreeCmp->Fill();

  }
  fTreeCmp->AutoSave();
//  delete gAlice; gAlice = 0;
//  fFileHits->Close();

  if (fDebug > 2) cerr<<"end of TreeKLoop"<<endl;

  return 0;
}
////////////////////////////////////////////////////////////////////////
 AliTPCCmpNG.C:1
 AliTPCCmpNG.C:2
 AliTPCCmpNG.C:3
 AliTPCCmpNG.C:4
 AliTPCCmpNG.C:5
 AliTPCCmpNG.C:6
 AliTPCCmpNG.C:7
 AliTPCCmpNG.C:8
 AliTPCCmpNG.C:9
 AliTPCCmpNG.C:10
 AliTPCCmpNG.C:11
 AliTPCCmpNG.C:12
 AliTPCCmpNG.C:13
 AliTPCCmpNG.C:14
 AliTPCCmpNG.C:15
 AliTPCCmpNG.C:16
 AliTPCCmpNG.C:17
 AliTPCCmpNG.C:18
 AliTPCCmpNG.C:19
 AliTPCCmpNG.C:20
 AliTPCCmpNG.C:21
 AliTPCCmpNG.C:22
 AliTPCCmpNG.C:23
 AliTPCCmpNG.C:24
 AliTPCCmpNG.C:25
 AliTPCCmpNG.C:26
 AliTPCCmpNG.C:27
 AliTPCCmpNG.C:28
 AliTPCCmpNG.C:29
 AliTPCCmpNG.C:30
 AliTPCCmpNG.C:31
 AliTPCCmpNG.C:32
 AliTPCCmpNG.C:33
 AliTPCCmpNG.C:34
 AliTPCCmpNG.C:35
 AliTPCCmpNG.C:36
 AliTPCCmpNG.C:37
 AliTPCCmpNG.C:38
 AliTPCCmpNG.C:39
 AliTPCCmpNG.C:40
 AliTPCCmpNG.C:41
 AliTPCCmpNG.C:42
 AliTPCCmpNG.C:43
 AliTPCCmpNG.C:44
 AliTPCCmpNG.C:45
 AliTPCCmpNG.C:46
 AliTPCCmpNG.C:47
 AliTPCCmpNG.C:48
 AliTPCCmpNG.C:49
 AliTPCCmpNG.C:50
 AliTPCCmpNG.C:51
 AliTPCCmpNG.C:52
 AliTPCCmpNG.C:53
 AliTPCCmpNG.C:54
 AliTPCCmpNG.C:55
 AliTPCCmpNG.C:56
 AliTPCCmpNG.C:57
 AliTPCCmpNG.C:58
 AliTPCCmpNG.C:59
 AliTPCCmpNG.C:60
 AliTPCCmpNG.C:61
 AliTPCCmpNG.C:62
 AliTPCCmpNG.C:63
 AliTPCCmpNG.C:64
 AliTPCCmpNG.C:65
 AliTPCCmpNG.C:66
 AliTPCCmpNG.C:67
 AliTPCCmpNG.C:68
 AliTPCCmpNG.C:69
 AliTPCCmpNG.C:70
 AliTPCCmpNG.C:71
 AliTPCCmpNG.C:72
 AliTPCCmpNG.C:73
 AliTPCCmpNG.C:74
 AliTPCCmpNG.C:75
 AliTPCCmpNG.C:76
 AliTPCCmpNG.C:77
 AliTPCCmpNG.C:78
 AliTPCCmpNG.C:79
 AliTPCCmpNG.C:80
 AliTPCCmpNG.C:81
 AliTPCCmpNG.C:82
 AliTPCCmpNG.C:83
 AliTPCCmpNG.C:84
 AliTPCCmpNG.C:85
 AliTPCCmpNG.C:86
 AliTPCCmpNG.C:87
 AliTPCCmpNG.C:88
 AliTPCCmpNG.C:89
 AliTPCCmpNG.C:90
 AliTPCCmpNG.C:91
 AliTPCCmpNG.C:92
 AliTPCCmpNG.C:93
 AliTPCCmpNG.C:94
 AliTPCCmpNG.C:95
 AliTPCCmpNG.C:96
 AliTPCCmpNG.C:97
 AliTPCCmpNG.C:98
 AliTPCCmpNG.C:99
 AliTPCCmpNG.C:100
 AliTPCCmpNG.C:101
 AliTPCCmpNG.C:102
 AliTPCCmpNG.C:103
 AliTPCCmpNG.C:104
 AliTPCCmpNG.C:105
 AliTPCCmpNG.C:106
 AliTPCCmpNG.C:107
 AliTPCCmpNG.C:108
 AliTPCCmpNG.C:109
 AliTPCCmpNG.C:110
 AliTPCCmpNG.C:111
 AliTPCCmpNG.C:112
 AliTPCCmpNG.C:113
 AliTPCCmpNG.C:114
 AliTPCCmpNG.C:115
 AliTPCCmpNG.C:116
 AliTPCCmpNG.C:117
 AliTPCCmpNG.C:118
 AliTPCCmpNG.C:119
 AliTPCCmpNG.C:120
 AliTPCCmpNG.C:121
 AliTPCCmpNG.C:122
 AliTPCCmpNG.C:123
 AliTPCCmpNG.C:124
 AliTPCCmpNG.C:125
 AliTPCCmpNG.C:126
 AliTPCCmpNG.C:127
 AliTPCCmpNG.C:128
 AliTPCCmpNG.C:129
 AliTPCCmpNG.C:130
 AliTPCCmpNG.C:131
 AliTPCCmpNG.C:132
 AliTPCCmpNG.C:133
 AliTPCCmpNG.C:134
 AliTPCCmpNG.C:135
 AliTPCCmpNG.C:136
 AliTPCCmpNG.C:137
 AliTPCCmpNG.C:138
 AliTPCCmpNG.C:139
 AliTPCCmpNG.C:140
 AliTPCCmpNG.C:141
 AliTPCCmpNG.C:142
 AliTPCCmpNG.C:143
 AliTPCCmpNG.C:144
 AliTPCCmpNG.C:145
 AliTPCCmpNG.C:146
 AliTPCCmpNG.C:147
 AliTPCCmpNG.C:148
 AliTPCCmpNG.C:149
 AliTPCCmpNG.C:150
 AliTPCCmpNG.C:151
 AliTPCCmpNG.C:152
 AliTPCCmpNG.C:153
 AliTPCCmpNG.C:154
 AliTPCCmpNG.C:155
 AliTPCCmpNG.C:156
 AliTPCCmpNG.C:157
 AliTPCCmpNG.C:158
 AliTPCCmpNG.C:159
 AliTPCCmpNG.C:160
 AliTPCCmpNG.C:161
 AliTPCCmpNG.C:162
 AliTPCCmpNG.C:163
 AliTPCCmpNG.C:164
 AliTPCCmpNG.C:165
 AliTPCCmpNG.C:166
 AliTPCCmpNG.C:167
 AliTPCCmpNG.C:168
 AliTPCCmpNG.C:169
 AliTPCCmpNG.C:170
 AliTPCCmpNG.C:171
 AliTPCCmpNG.C:172
 AliTPCCmpNG.C:173
 AliTPCCmpNG.C:174
 AliTPCCmpNG.C:175
 AliTPCCmpNG.C:176
 AliTPCCmpNG.C:177
 AliTPCCmpNG.C:178
 AliTPCCmpNG.C:179
 AliTPCCmpNG.C:180
 AliTPCCmpNG.C:181
 AliTPCCmpNG.C:182
 AliTPCCmpNG.C:183
 AliTPCCmpNG.C:184
 AliTPCCmpNG.C:185
 AliTPCCmpNG.C:186
 AliTPCCmpNG.C:187
 AliTPCCmpNG.C:188
 AliTPCCmpNG.C:189
 AliTPCCmpNG.C:190
 AliTPCCmpNG.C:191
 AliTPCCmpNG.C:192
 AliTPCCmpNG.C:193
 AliTPCCmpNG.C:194
 AliTPCCmpNG.C:195
 AliTPCCmpNG.C:196
 AliTPCCmpNG.C:197
 AliTPCCmpNG.C:198
 AliTPCCmpNG.C:199
 AliTPCCmpNG.C:200
 AliTPCCmpNG.C:201
 AliTPCCmpNG.C:202
 AliTPCCmpNG.C:203
 AliTPCCmpNG.C:204
 AliTPCCmpNG.C:205
 AliTPCCmpNG.C:206
 AliTPCCmpNG.C:207
 AliTPCCmpNG.C:208
 AliTPCCmpNG.C:209
 AliTPCCmpNG.C:210
 AliTPCCmpNG.C:211
 AliTPCCmpNG.C:212
 AliTPCCmpNG.C:213
 AliTPCCmpNG.C:214
 AliTPCCmpNG.C:215
 AliTPCCmpNG.C:216
 AliTPCCmpNG.C:217
 AliTPCCmpNG.C:218
 AliTPCCmpNG.C:219
 AliTPCCmpNG.C:220
 AliTPCCmpNG.C:221
 AliTPCCmpNG.C:222
 AliTPCCmpNG.C:223
 AliTPCCmpNG.C:224
 AliTPCCmpNG.C:225
 AliTPCCmpNG.C:226
 AliTPCCmpNG.C:227
 AliTPCCmpNG.C:228
 AliTPCCmpNG.C:229
 AliTPCCmpNG.C:230
 AliTPCCmpNG.C:231
 AliTPCCmpNG.C:232
 AliTPCCmpNG.C:233
 AliTPCCmpNG.C:234
 AliTPCCmpNG.C:235
 AliTPCCmpNG.C:236
 AliTPCCmpNG.C:237
 AliTPCCmpNG.C:238
 AliTPCCmpNG.C:239
 AliTPCCmpNG.C:240
 AliTPCCmpNG.C:241
 AliTPCCmpNG.C:242
 AliTPCCmpNG.C:243
 AliTPCCmpNG.C:244
 AliTPCCmpNG.C:245
 AliTPCCmpNG.C:246
 AliTPCCmpNG.C:247
 AliTPCCmpNG.C:248
 AliTPCCmpNG.C:249
 AliTPCCmpNG.C:250
 AliTPCCmpNG.C:251
 AliTPCCmpNG.C:252
 AliTPCCmpNG.C:253
 AliTPCCmpNG.C:254
 AliTPCCmpNG.C:255
 AliTPCCmpNG.C:256
 AliTPCCmpNG.C:257
 AliTPCCmpNG.C:258
 AliTPCCmpNG.C:259
 AliTPCCmpNG.C:260
 AliTPCCmpNG.C:261
 AliTPCCmpNG.C:262
 AliTPCCmpNG.C:263
 AliTPCCmpNG.C:264
 AliTPCCmpNG.C:265
 AliTPCCmpNG.C:266
 AliTPCCmpNG.C:267
 AliTPCCmpNG.C:268
 AliTPCCmpNG.C:269
 AliTPCCmpNG.C:270
 AliTPCCmpNG.C:271
 AliTPCCmpNG.C:272
 AliTPCCmpNG.C:273
 AliTPCCmpNG.C:274
 AliTPCCmpNG.C:275
 AliTPCCmpNG.C:276
 AliTPCCmpNG.C:277
 AliTPCCmpNG.C:278
 AliTPCCmpNG.C:279
 AliTPCCmpNG.C:280
 AliTPCCmpNG.C:281
 AliTPCCmpNG.C:282
 AliTPCCmpNG.C:283
 AliTPCCmpNG.C:284
 AliTPCCmpNG.C:285
 AliTPCCmpNG.C:286
 AliTPCCmpNG.C:287
 AliTPCCmpNG.C:288
 AliTPCCmpNG.C:289
 AliTPCCmpNG.C:290
 AliTPCCmpNG.C:291
 AliTPCCmpNG.C:292
 AliTPCCmpNG.C:293
 AliTPCCmpNG.C:294
 AliTPCCmpNG.C:295
 AliTPCCmpNG.C:296
 AliTPCCmpNG.C:297
 AliTPCCmpNG.C:298
 AliTPCCmpNG.C:299
 AliTPCCmpNG.C:300
 AliTPCCmpNG.C:301
 AliTPCCmpNG.C:302
 AliTPCCmpNG.C:303
 AliTPCCmpNG.C:304
 AliTPCCmpNG.C:305
 AliTPCCmpNG.C:306
 AliTPCCmpNG.C:307
 AliTPCCmpNG.C:308
 AliTPCCmpNG.C:309
 AliTPCCmpNG.C:310
 AliTPCCmpNG.C:311
 AliTPCCmpNG.C:312
 AliTPCCmpNG.C:313
 AliTPCCmpNG.C:314
 AliTPCCmpNG.C:315
 AliTPCCmpNG.C:316
 AliTPCCmpNG.C:317
 AliTPCCmpNG.C:318
 AliTPCCmpNG.C:319
 AliTPCCmpNG.C:320
 AliTPCCmpNG.C:321
 AliTPCCmpNG.C:322
 AliTPCCmpNG.C:323
 AliTPCCmpNG.C:324
 AliTPCCmpNG.C:325
 AliTPCCmpNG.C:326
 AliTPCCmpNG.C:327
 AliTPCCmpNG.C:328
 AliTPCCmpNG.C:329
 AliTPCCmpNG.C:330
 AliTPCCmpNG.C:331
 AliTPCCmpNG.C:332
 AliTPCCmpNG.C:333
 AliTPCCmpNG.C:334
 AliTPCCmpNG.C:335
 AliTPCCmpNG.C:336
 AliTPCCmpNG.C:337
 AliTPCCmpNG.C:338
 AliTPCCmpNG.C:339
 AliTPCCmpNG.C:340
 AliTPCCmpNG.C:341
 AliTPCCmpNG.C:342
 AliTPCCmpNG.C:343
 AliTPCCmpNG.C:344
 AliTPCCmpNG.C:345
 AliTPCCmpNG.C:346
 AliTPCCmpNG.C:347
 AliTPCCmpNG.C:348
 AliTPCCmpNG.C:349
 AliTPCCmpNG.C:350
 AliTPCCmpNG.C:351
 AliTPCCmpNG.C:352
 AliTPCCmpNG.C:353
 AliTPCCmpNG.C:354
 AliTPCCmpNG.C:355
 AliTPCCmpNG.C:356
 AliTPCCmpNG.C:357
 AliTPCCmpNG.C:358
 AliTPCCmpNG.C:359
 AliTPCCmpNG.C:360
 AliTPCCmpNG.C:361
 AliTPCCmpNG.C:362
 AliTPCCmpNG.C:363
 AliTPCCmpNG.C:364
 AliTPCCmpNG.C:365
 AliTPCCmpNG.C:366
 AliTPCCmpNG.C:367
 AliTPCCmpNG.C:368
 AliTPCCmpNG.C:369
 AliTPCCmpNG.C:370
 AliTPCCmpNG.C:371
 AliTPCCmpNG.C:372
 AliTPCCmpNG.C:373
 AliTPCCmpNG.C:374
 AliTPCCmpNG.C:375
 AliTPCCmpNG.C:376
 AliTPCCmpNG.C:377
 AliTPCCmpNG.C:378
 AliTPCCmpNG.C:379
 AliTPCCmpNG.C:380
 AliTPCCmpNG.C:381
 AliTPCCmpNG.C:382
 AliTPCCmpNG.C:383
 AliTPCCmpNG.C:384
 AliTPCCmpNG.C:385
 AliTPCCmpNG.C:386
 AliTPCCmpNG.C:387
 AliTPCCmpNG.C:388
 AliTPCCmpNG.C:389
 AliTPCCmpNG.C:390
 AliTPCCmpNG.C:391
 AliTPCCmpNG.C:392
 AliTPCCmpNG.C:393
 AliTPCCmpNG.C:394
 AliTPCCmpNG.C:395
 AliTPCCmpNG.C:396
 AliTPCCmpNG.C:397
 AliTPCCmpNG.C:398
 AliTPCCmpNG.C:399
 AliTPCCmpNG.C:400
 AliTPCCmpNG.C:401
 AliTPCCmpNG.C:402
 AliTPCCmpNG.C:403
 AliTPCCmpNG.C:404
 AliTPCCmpNG.C:405
 AliTPCCmpNG.C:406
 AliTPCCmpNG.C:407
 AliTPCCmpNG.C:408
 AliTPCCmpNG.C:409
 AliTPCCmpNG.C:410
 AliTPCCmpNG.C:411
 AliTPCCmpNG.C:412
 AliTPCCmpNG.C:413
 AliTPCCmpNG.C:414
 AliTPCCmpNG.C:415
 AliTPCCmpNG.C:416
 AliTPCCmpNG.C:417
 AliTPCCmpNG.C:418
 AliTPCCmpNG.C:419
 AliTPCCmpNG.C:420
 AliTPCCmpNG.C:421
 AliTPCCmpNG.C:422
 AliTPCCmpNG.C:423
 AliTPCCmpNG.C:424
 AliTPCCmpNG.C:425
 AliTPCCmpNG.C:426
 AliTPCCmpNG.C:427
 AliTPCCmpNG.C:428
 AliTPCCmpNG.C:429
 AliTPCCmpNG.C:430
 AliTPCCmpNG.C:431
 AliTPCCmpNG.C:432
 AliTPCCmpNG.C:433
 AliTPCCmpNG.C:434
 AliTPCCmpNG.C:435
 AliTPCCmpNG.C:436
 AliTPCCmpNG.C:437
 AliTPCCmpNG.C:438
 AliTPCCmpNG.C:439
 AliTPCCmpNG.C:440
 AliTPCCmpNG.C:441
 AliTPCCmpNG.C:442
 AliTPCCmpNG.C:443
 AliTPCCmpNG.C:444
 AliTPCCmpNG.C:445
 AliTPCCmpNG.C:446
 AliTPCCmpNG.C:447
 AliTPCCmpNG.C:448
 AliTPCCmpNG.C:449
 AliTPCCmpNG.C:450
 AliTPCCmpNG.C:451
 AliTPCCmpNG.C:452
 AliTPCCmpNG.C:453
 AliTPCCmpNG.C:454
 AliTPCCmpNG.C:455
 AliTPCCmpNG.C:456
 AliTPCCmpNG.C:457
 AliTPCCmpNG.C:458
 AliTPCCmpNG.C:459
 AliTPCCmpNG.C:460
 AliTPCCmpNG.C:461
 AliTPCCmpNG.C:462
 AliTPCCmpNG.C:463
 AliTPCCmpNG.C:464
 AliTPCCmpNG.C:465
 AliTPCCmpNG.C:466
 AliTPCCmpNG.C:467
 AliTPCCmpNG.C:468
 AliTPCCmpNG.C:469
 AliTPCCmpNG.C:470
 AliTPCCmpNG.C:471
 AliTPCCmpNG.C:472
 AliTPCCmpNG.C:473
 AliTPCCmpNG.C:474
 AliTPCCmpNG.C:475
 AliTPCCmpNG.C:476
 AliTPCCmpNG.C:477
 AliTPCCmpNG.C:478
 AliTPCCmpNG.C:479
 AliTPCCmpNG.C:480
 AliTPCCmpNG.C:481
 AliTPCCmpNG.C:482
 AliTPCCmpNG.C:483
 AliTPCCmpNG.C:484
 AliTPCCmpNG.C:485
 AliTPCCmpNG.C:486
 AliTPCCmpNG.C:487
 AliTPCCmpNG.C:488
 AliTPCCmpNG.C:489
 AliTPCCmpNG.C:490
 AliTPCCmpNG.C:491
 AliTPCCmpNG.C:492
 AliTPCCmpNG.C:493
 AliTPCCmpNG.C:494
 AliTPCCmpNG.C:495
 AliTPCCmpNG.C:496
 AliTPCCmpNG.C:497
 AliTPCCmpNG.C:498
 AliTPCCmpNG.C:499
 AliTPCCmpNG.C:500
 AliTPCCmpNG.C:501
 AliTPCCmpNG.C:502
 AliTPCCmpNG.C:503
 AliTPCCmpNG.C:504
 AliTPCCmpNG.C:505
 AliTPCCmpNG.C:506
 AliTPCCmpNG.C:507
 AliTPCCmpNG.C:508
 AliTPCCmpNG.C:509
 AliTPCCmpNG.C:510
 AliTPCCmpNG.C:511
 AliTPCCmpNG.C:512
 AliTPCCmpNG.C:513
 AliTPCCmpNG.C:514
 AliTPCCmpNG.C:515
 AliTPCCmpNG.C:516
 AliTPCCmpNG.C:517
 AliTPCCmpNG.C:518
 AliTPCCmpNG.C:519
 AliTPCCmpNG.C:520
 AliTPCCmpNG.C:521
 AliTPCCmpNG.C:522
 AliTPCCmpNG.C:523
 AliTPCCmpNG.C:524
 AliTPCCmpNG.C:525
 AliTPCCmpNG.C:526
 AliTPCCmpNG.C:527
 AliTPCCmpNG.C:528
 AliTPCCmpNG.C:529
 AliTPCCmpNG.C:530
 AliTPCCmpNG.C:531
 AliTPCCmpNG.C:532
 AliTPCCmpNG.C:533
 AliTPCCmpNG.C:534
 AliTPCCmpNG.C:535
 AliTPCCmpNG.C:536
 AliTPCCmpNG.C:537
 AliTPCCmpNG.C:538
 AliTPCCmpNG.C:539
 AliTPCCmpNG.C:540
 AliTPCCmpNG.C:541
 AliTPCCmpNG.C:542
 AliTPCCmpNG.C:543
 AliTPCCmpNG.C:544
 AliTPCCmpNG.C:545
 AliTPCCmpNG.C:546
 AliTPCCmpNG.C:547
 AliTPCCmpNG.C:548
 AliTPCCmpNG.C:549
 AliTPCCmpNG.C:550
 AliTPCCmpNG.C:551
 AliTPCCmpNG.C:552
 AliTPCCmpNG.C:553
 AliTPCCmpNG.C:554
 AliTPCCmpNG.C:555
 AliTPCCmpNG.C:556
 AliTPCCmpNG.C:557
 AliTPCCmpNG.C:558
 AliTPCCmpNG.C:559
 AliTPCCmpNG.C:560
 AliTPCCmpNG.C:561
 AliTPCCmpNG.C:562
 AliTPCCmpNG.C:563
 AliTPCCmpNG.C:564
 AliTPCCmpNG.C:565
 AliTPCCmpNG.C:566
 AliTPCCmpNG.C:567
 AliTPCCmpNG.C:568
 AliTPCCmpNG.C:569
 AliTPCCmpNG.C:570
 AliTPCCmpNG.C:571
 AliTPCCmpNG.C:572
 AliTPCCmpNG.C:573
 AliTPCCmpNG.C:574
 AliTPCCmpNG.C:575
 AliTPCCmpNG.C:576
 AliTPCCmpNG.C:577
 AliTPCCmpNG.C:578
 AliTPCCmpNG.C:579
 AliTPCCmpNG.C:580
 AliTPCCmpNG.C:581
 AliTPCCmpNG.C:582
 AliTPCCmpNG.C:583
 AliTPCCmpNG.C:584
 AliTPCCmpNG.C:585
 AliTPCCmpNG.C:586
 AliTPCCmpNG.C:587
 AliTPCCmpNG.C:588
 AliTPCCmpNG.C:589
 AliTPCCmpNG.C:590
 AliTPCCmpNG.C:591
 AliTPCCmpNG.C:592
 AliTPCCmpNG.C:593
 AliTPCCmpNG.C:594
 AliTPCCmpNG.C:595
 AliTPCCmpNG.C:596
 AliTPCCmpNG.C:597
 AliTPCCmpNG.C:598
 AliTPCCmpNG.C:599
 AliTPCCmpNG.C:600
 AliTPCCmpNG.C:601
 AliTPCCmpNG.C:602
 AliTPCCmpNG.C:603
 AliTPCCmpNG.C:604
 AliTPCCmpNG.C:605
 AliTPCCmpNG.C:606
 AliTPCCmpNG.C:607
 AliTPCCmpNG.C:608
 AliTPCCmpNG.C:609
 AliTPCCmpNG.C:610
 AliTPCCmpNG.C:611
 AliTPCCmpNG.C:612
 AliTPCCmpNG.C:613
 AliTPCCmpNG.C:614
 AliTPCCmpNG.C:615
 AliTPCCmpNG.C:616
 AliTPCCmpNG.C:617
 AliTPCCmpNG.C:618
 AliTPCCmpNG.C:619
 AliTPCCmpNG.C:620
 AliTPCCmpNG.C:621
 AliTPCCmpNG.C:622
 AliTPCCmpNG.C:623
 AliTPCCmpNG.C:624
 AliTPCCmpNG.C:625
 AliTPCCmpNG.C:626
 AliTPCCmpNG.C:627
 AliTPCCmpNG.C:628
 AliTPCCmpNG.C:629
 AliTPCCmpNG.C:630
 AliTPCCmpNG.C:631
 AliTPCCmpNG.C:632
 AliTPCCmpNG.C:633
 AliTPCCmpNG.C:634
 AliTPCCmpNG.C:635
 AliTPCCmpNG.C:636
 AliTPCCmpNG.C:637
 AliTPCCmpNG.C:638
 AliTPCCmpNG.C:639
 AliTPCCmpNG.C:640
 AliTPCCmpNG.C:641
 AliTPCCmpNG.C:642
 AliTPCCmpNG.C:643
 AliTPCCmpNG.C:644
 AliTPCCmpNG.C:645
 AliTPCCmpNG.C:646
 AliTPCCmpNG.C:647
 AliTPCCmpNG.C:648
 AliTPCCmpNG.C:649
 AliTPCCmpNG.C:650
 AliTPCCmpNG.C:651
 AliTPCCmpNG.C:652
 AliTPCCmpNG.C:653
 AliTPCCmpNG.C:654
 AliTPCCmpNG.C:655
 AliTPCCmpNG.C:656
 AliTPCCmpNG.C:657
 AliTPCCmpNG.C:658
 AliTPCCmpNG.C:659
 AliTPCCmpNG.C:660
 AliTPCCmpNG.C:661
 AliTPCCmpNG.C:662
 AliTPCCmpNG.C:663
 AliTPCCmpNG.C:664
 AliTPCCmpNG.C:665
 AliTPCCmpNG.C:666
 AliTPCCmpNG.C:667
 AliTPCCmpNG.C:668
 AliTPCCmpNG.C:669
 AliTPCCmpNG.C:670
 AliTPCCmpNG.C:671
 AliTPCCmpNG.C:672
 AliTPCCmpNG.C:673
 AliTPCCmpNG.C:674
 AliTPCCmpNG.C:675
 AliTPCCmpNG.C:676
 AliTPCCmpNG.C:677
 AliTPCCmpNG.C:678
 AliTPCCmpNG.C:679
 AliTPCCmpNG.C:680
 AliTPCCmpNG.C:681
 AliTPCCmpNG.C:682
 AliTPCCmpNG.C:683
 AliTPCCmpNG.C:684
 AliTPCCmpNG.C:685
 AliTPCCmpNG.C:686
 AliTPCCmpNG.C:687
 AliTPCCmpNG.C:688
 AliTPCCmpNG.C:689
 AliTPCCmpNG.C:690
 AliTPCCmpNG.C:691
 AliTPCCmpNG.C:692
 AliTPCCmpNG.C:693
 AliTPCCmpNG.C:694
 AliTPCCmpNG.C:695
 AliTPCCmpNG.C:696
 AliTPCCmpNG.C:697
 AliTPCCmpNG.C:698
 AliTPCCmpNG.C:699
 AliTPCCmpNG.C:700
 AliTPCCmpNG.C:701
 AliTPCCmpNG.C:702
 AliTPCCmpNG.C:703
 AliTPCCmpNG.C:704
 AliTPCCmpNG.C:705
 AliTPCCmpNG.C:706
 AliTPCCmpNG.C:707
 AliTPCCmpNG.C:708
 AliTPCCmpNG.C:709
 AliTPCCmpNG.C:710
 AliTPCCmpNG.C:711
 AliTPCCmpNG.C:712
 AliTPCCmpNG.C:713
 AliTPCCmpNG.C:714
 AliTPCCmpNG.C:715
 AliTPCCmpNG.C:716
 AliTPCCmpNG.C:717
 AliTPCCmpNG.C:718
 AliTPCCmpNG.C:719
 AliTPCCmpNG.C:720
 AliTPCCmpNG.C:721
 AliTPCCmpNG.C:722
 AliTPCCmpNG.C:723
 AliTPCCmpNG.C:724
 AliTPCCmpNG.C:725
 AliTPCCmpNG.C:726
 AliTPCCmpNG.C:727
 AliTPCCmpNG.C:728
 AliTPCCmpNG.C:729
 AliTPCCmpNG.C:730
 AliTPCCmpNG.C:731
 AliTPCCmpNG.C:732
 AliTPCCmpNG.C:733
 AliTPCCmpNG.C:734
 AliTPCCmpNG.C:735
 AliTPCCmpNG.C:736
 AliTPCCmpNG.C:737
 AliTPCCmpNG.C:738
 AliTPCCmpNG.C:739
 AliTPCCmpNG.C:740
 AliTPCCmpNG.C:741
 AliTPCCmpNG.C:742
 AliTPCCmpNG.C:743
 AliTPCCmpNG.C:744
 AliTPCCmpNG.C:745
 AliTPCCmpNG.C:746
 AliTPCCmpNG.C:747
 AliTPCCmpNG.C:748
 AliTPCCmpNG.C:749
 AliTPCCmpNG.C:750
 AliTPCCmpNG.C:751
 AliTPCCmpNG.C:752
 AliTPCCmpNG.C:753
 AliTPCCmpNG.C:754
 AliTPCCmpNG.C:755
 AliTPCCmpNG.C:756
 AliTPCCmpNG.C:757
 AliTPCCmpNG.C:758
 AliTPCCmpNG.C:759
 AliTPCCmpNG.C:760
 AliTPCCmpNG.C:761
 AliTPCCmpNG.C:762
 AliTPCCmpNG.C:763
 AliTPCCmpNG.C:764
 AliTPCCmpNG.C:765
 AliTPCCmpNG.C:766
 AliTPCCmpNG.C:767
 AliTPCCmpNG.C:768
 AliTPCCmpNG.C:769
 AliTPCCmpNG.C:770
 AliTPCCmpNG.C:771
 AliTPCCmpNG.C:772
 AliTPCCmpNG.C:773
 AliTPCCmpNG.C:774
 AliTPCCmpNG.C:775
 AliTPCCmpNG.C:776
 AliTPCCmpNG.C:777
 AliTPCCmpNG.C:778
 AliTPCCmpNG.C:779
 AliTPCCmpNG.C:780
 AliTPCCmpNG.C:781
 AliTPCCmpNG.C:782
 AliTPCCmpNG.C:783
 AliTPCCmpNG.C:784
 AliTPCCmpNG.C:785
 AliTPCCmpNG.C:786
 AliTPCCmpNG.C:787
 AliTPCCmpNG.C:788
 AliTPCCmpNG.C:789
 AliTPCCmpNG.C:790
 AliTPCCmpNG.C:791
 AliTPCCmpNG.C:792
 AliTPCCmpNG.C:793
 AliTPCCmpNG.C:794
 AliTPCCmpNG.C:795
 AliTPCCmpNG.C:796
 AliTPCCmpNG.C:797
 AliTPCCmpNG.C:798
 AliTPCCmpNG.C:799
 AliTPCCmpNG.C:800
 AliTPCCmpNG.C:801
 AliTPCCmpNG.C:802
 AliTPCCmpNG.C:803
 AliTPCCmpNG.C:804
 AliTPCCmpNG.C:805
 AliTPCCmpNG.C:806
 AliTPCCmpNG.C:807
 AliTPCCmpNG.C:808
 AliTPCCmpNG.C:809
 AliTPCCmpNG.C:810
 AliTPCCmpNG.C:811
 AliTPCCmpNG.C:812
 AliTPCCmpNG.C:813
 AliTPCCmpNG.C:814
 AliTPCCmpNG.C:815
 AliTPCCmpNG.C:816
 AliTPCCmpNG.C:817
 AliTPCCmpNG.C:818
 AliTPCCmpNG.C:819
 AliTPCCmpNG.C:820
 AliTPCCmpNG.C:821
 AliTPCCmpNG.C:822
 AliTPCCmpNG.C:823
 AliTPCCmpNG.C:824
 AliTPCCmpNG.C:825
 AliTPCCmpNG.C:826
 AliTPCCmpNG.C:827
 AliTPCCmpNG.C:828
 AliTPCCmpNG.C:829
 AliTPCCmpNG.C:830
 AliTPCCmpNG.C:831
 AliTPCCmpNG.C:832
 AliTPCCmpNG.C:833
 AliTPCCmpNG.C:834
 AliTPCCmpNG.C:835
 AliTPCCmpNG.C:836
 AliTPCCmpNG.C:837
 AliTPCCmpNG.C:838
 AliTPCCmpNG.C:839
 AliTPCCmpNG.C:840
 AliTPCCmpNG.C:841
 AliTPCCmpNG.C:842
 AliTPCCmpNG.C:843
 AliTPCCmpNG.C:844
 AliTPCCmpNG.C:845
 AliTPCCmpNG.C:846
 AliTPCCmpNG.C:847
 AliTPCCmpNG.C:848
 AliTPCCmpNG.C:849
 AliTPCCmpNG.C:850
 AliTPCCmpNG.C:851
 AliTPCCmpNG.C:852
 AliTPCCmpNG.C:853
 AliTPCCmpNG.C:854
 AliTPCCmpNG.C:855
 AliTPCCmpNG.C:856
 AliTPCCmpNG.C:857
 AliTPCCmpNG.C:858
 AliTPCCmpNG.C:859
 AliTPCCmpNG.C:860
 AliTPCCmpNG.C:861
 AliTPCCmpNG.C:862
 AliTPCCmpNG.C:863
 AliTPCCmpNG.C:864
 AliTPCCmpNG.C:865
 AliTPCCmpNG.C:866
 AliTPCCmpNG.C:867
 AliTPCCmpNG.C:868
 AliTPCCmpNG.C:869
 AliTPCCmpNG.C:870
 AliTPCCmpNG.C:871
 AliTPCCmpNG.C:872
 AliTPCCmpNG.C:873
 AliTPCCmpNG.C:874
 AliTPCCmpNG.C:875
 AliTPCCmpNG.C:876
 AliTPCCmpNG.C:877
 AliTPCCmpNG.C:878
 AliTPCCmpNG.C:879
 AliTPCCmpNG.C:880
 AliTPCCmpNG.C:881
 AliTPCCmpNG.C:882
 AliTPCCmpNG.C:883
 AliTPCCmpNG.C:884
 AliTPCCmpNG.C:885
 AliTPCCmpNG.C:886
 AliTPCCmpNG.C:887
 AliTPCCmpNG.C:888
 AliTPCCmpNG.C:889
 AliTPCCmpNG.C:890
 AliTPCCmpNG.C:891
 AliTPCCmpNG.C:892
 AliTPCCmpNG.C:893
 AliTPCCmpNG.C:894
 AliTPCCmpNG.C:895
 AliTPCCmpNG.C:896
 AliTPCCmpNG.C:897
 AliTPCCmpNG.C:898
 AliTPCCmpNG.C:899
 AliTPCCmpNG.C:900
 AliTPCCmpNG.C:901
 AliTPCCmpNG.C:902
 AliTPCCmpNG.C:903
 AliTPCCmpNG.C:904
 AliTPCCmpNG.C:905
 AliTPCCmpNG.C:906
 AliTPCCmpNG.C:907
 AliTPCCmpNG.C:908
 AliTPCCmpNG.C:909
 AliTPCCmpNG.C:910
 AliTPCCmpNG.C:911
 AliTPCCmpNG.C:912
 AliTPCCmpNG.C:913
 AliTPCCmpNG.C:914
 AliTPCCmpNG.C:915
 AliTPCCmpNG.C:916
 AliTPCCmpNG.C:917
 AliTPCCmpNG.C:918
 AliTPCCmpNG.C:919
 AliTPCCmpNG.C:920
 AliTPCCmpNG.C:921
 AliTPCCmpNG.C:922
 AliTPCCmpNG.C:923
 AliTPCCmpNG.C:924
 AliTPCCmpNG.C:925
 AliTPCCmpNG.C:926
 AliTPCCmpNG.C:927
 AliTPCCmpNG.C:928
 AliTPCCmpNG.C:929
 AliTPCCmpNG.C:930
 AliTPCCmpNG.C:931
 AliTPCCmpNG.C:932
 AliTPCCmpNG.C:933
 AliTPCCmpNG.C:934
 AliTPCCmpNG.C:935
 AliTPCCmpNG.C:936
 AliTPCCmpNG.C:937
 AliTPCCmpNG.C:938
 AliTPCCmpNG.C:939
 AliTPCCmpNG.C:940
 AliTPCCmpNG.C:941
 AliTPCCmpNG.C:942
 AliTPCCmpNG.C:943
 AliTPCCmpNG.C:944
 AliTPCCmpNG.C:945
 AliTPCCmpNG.C:946
 AliTPCCmpNG.C:947
 AliTPCCmpNG.C:948
 AliTPCCmpNG.C:949
 AliTPCCmpNG.C:950
 AliTPCCmpNG.C:951
 AliTPCCmpNG.C:952
 AliTPCCmpNG.C:953
 AliTPCCmpNG.C:954
 AliTPCCmpNG.C:955
 AliTPCCmpNG.C:956
 AliTPCCmpNG.C:957
 AliTPCCmpNG.C:958
 AliTPCCmpNG.C:959
 AliTPCCmpNG.C:960
 AliTPCCmpNG.C:961
 AliTPCCmpNG.C:962
 AliTPCCmpNG.C:963
 AliTPCCmpNG.C:964
 AliTPCCmpNG.C:965
 AliTPCCmpNG.C:966
 AliTPCCmpNG.C:967
 AliTPCCmpNG.C:968
 AliTPCCmpNG.C:969
 AliTPCCmpNG.C:970
 AliTPCCmpNG.C:971
 AliTPCCmpNG.C:972
 AliTPCCmpNG.C:973
 AliTPCCmpNG.C:974
 AliTPCCmpNG.C:975
 AliTPCCmpNG.C:976
 AliTPCCmpNG.C:977
 AliTPCCmpNG.C:978
 AliTPCCmpNG.C:979
 AliTPCCmpNG.C:980
 AliTPCCmpNG.C:981
 AliTPCCmpNG.C:982
 AliTPCCmpNG.C:983
 AliTPCCmpNG.C:984
 AliTPCCmpNG.C:985
 AliTPCCmpNG.C:986
 AliTPCCmpNG.C:987
 AliTPCCmpNG.C:988
 AliTPCCmpNG.C:989
 AliTPCCmpNG.C:990
 AliTPCCmpNG.C:991
 AliTPCCmpNG.C:992
 AliTPCCmpNG.C:993
 AliTPCCmpNG.C:994
 AliTPCCmpNG.C:995
 AliTPCCmpNG.C:996
 AliTPCCmpNG.C:997
 AliTPCCmpNG.C:998
 AliTPCCmpNG.C:999
 AliTPCCmpNG.C:1000
 AliTPCCmpNG.C:1001
 AliTPCCmpNG.C:1002
 AliTPCCmpNG.C:1003
 AliTPCCmpNG.C:1004
 AliTPCCmpNG.C:1005
 AliTPCCmpNG.C:1006
 AliTPCCmpNG.C:1007
 AliTPCCmpNG.C:1008
 AliTPCCmpNG.C:1009
 AliTPCCmpNG.C:1010
 AliTPCCmpNG.C:1011
 AliTPCCmpNG.C:1012
 AliTPCCmpNG.C:1013
 AliTPCCmpNG.C:1014
 AliTPCCmpNG.C:1015
 AliTPCCmpNG.C:1016
 AliTPCCmpNG.C:1017
 AliTPCCmpNG.C:1018
 AliTPCCmpNG.C:1019
 AliTPCCmpNG.C:1020
 AliTPCCmpNG.C:1021
 AliTPCCmpNG.C:1022
 AliTPCCmpNG.C:1023
 AliTPCCmpNG.C:1024
 AliTPCCmpNG.C:1025
 AliTPCCmpNG.C:1026
 AliTPCCmpNG.C:1027
 AliTPCCmpNG.C:1028
 AliTPCCmpNG.C:1029
 AliTPCCmpNG.C:1030
 AliTPCCmpNG.C:1031
 AliTPCCmpNG.C:1032
 AliTPCCmpNG.C:1033
 AliTPCCmpNG.C:1034
 AliTPCCmpNG.C:1035
 AliTPCCmpNG.C:1036
 AliTPCCmpNG.C:1037
 AliTPCCmpNG.C:1038
 AliTPCCmpNG.C:1039
 AliTPCCmpNG.C:1040
 AliTPCCmpNG.C:1041
 AliTPCCmpNG.C:1042
 AliTPCCmpNG.C:1043
 AliTPCCmpNG.C:1044
 AliTPCCmpNG.C:1045
 AliTPCCmpNG.C:1046
 AliTPCCmpNG.C:1047
 AliTPCCmpNG.C:1048
 AliTPCCmpNG.C:1049
 AliTPCCmpNG.C:1050
 AliTPCCmpNG.C:1051
 AliTPCCmpNG.C:1052
 AliTPCCmpNG.C:1053
 AliTPCCmpNG.C:1054
 AliTPCCmpNG.C:1055
 AliTPCCmpNG.C:1056
 AliTPCCmpNG.C:1057
 AliTPCCmpNG.C:1058
 AliTPCCmpNG.C:1059
 AliTPCCmpNG.C:1060
 AliTPCCmpNG.C:1061
 AliTPCCmpNG.C:1062
 AliTPCCmpNG.C:1063
 AliTPCCmpNG.C:1064
 AliTPCCmpNG.C:1065
 AliTPCCmpNG.C:1066
 AliTPCCmpNG.C:1067
 AliTPCCmpNG.C:1068
 AliTPCCmpNG.C:1069
 AliTPCCmpNG.C:1070
 AliTPCCmpNG.C:1071
 AliTPCCmpNG.C:1072
 AliTPCCmpNG.C:1073
 AliTPCCmpNG.C:1074
 AliTPCCmpNG.C:1075
 AliTPCCmpNG.C:1076
 AliTPCCmpNG.C:1077
 AliTPCCmpNG.C:1078
 AliTPCCmpNG.C:1079
 AliTPCCmpNG.C:1080
 AliTPCCmpNG.C:1081
 AliTPCCmpNG.C:1082
 AliTPCCmpNG.C:1083
 AliTPCCmpNG.C:1084
 AliTPCCmpNG.C:1085
 AliTPCCmpNG.C:1086
 AliTPCCmpNG.C:1087
 AliTPCCmpNG.C:1088
 AliTPCCmpNG.C:1089
 AliTPCCmpNG.C:1090
 AliTPCCmpNG.C:1091
 AliTPCCmpNG.C:1092
 AliTPCCmpNG.C:1093
 AliTPCCmpNG.C:1094
 AliTPCCmpNG.C:1095
 AliTPCCmpNG.C:1096
 AliTPCCmpNG.C:1097
 AliTPCCmpNG.C:1098
 AliTPCCmpNG.C:1099
 AliTPCCmpNG.C:1100
 AliTPCCmpNG.C:1101
 AliTPCCmpNG.C:1102
 AliTPCCmpNG.C:1103
 AliTPCCmpNG.C:1104
 AliTPCCmpNG.C:1105
 AliTPCCmpNG.C:1106
 AliTPCCmpNG.C:1107
 AliTPCCmpNG.C:1108
 AliTPCCmpNG.C:1109
 AliTPCCmpNG.C:1110
 AliTPCCmpNG.C:1111
 AliTPCCmpNG.C:1112
 AliTPCCmpNG.C:1113
 AliTPCCmpNG.C:1114
 AliTPCCmpNG.C:1115
 AliTPCCmpNG.C:1116
 AliTPCCmpNG.C:1117
 AliTPCCmpNG.C:1118
 AliTPCCmpNG.C:1119
 AliTPCCmpNG.C:1120
 AliTPCCmpNG.C:1121
 AliTPCCmpNG.C:1122
 AliTPCCmpNG.C:1123
 AliTPCCmpNG.C:1124
 AliTPCCmpNG.C:1125
 AliTPCCmpNG.C:1126
 AliTPCCmpNG.C:1127
 AliTPCCmpNG.C:1128
 AliTPCCmpNG.C:1129
 AliTPCCmpNG.C:1130
 AliTPCCmpNG.C:1131
 AliTPCCmpNG.C:1132
 AliTPCCmpNG.C:1133
 AliTPCCmpNG.C:1134
 AliTPCCmpNG.C:1135
 AliTPCCmpNG.C:1136
 AliTPCCmpNG.C:1137
 AliTPCCmpNG.C:1138
 AliTPCCmpNG.C:1139
 AliTPCCmpNG.C:1140
 AliTPCCmpNG.C:1141
 AliTPCCmpNG.C:1142
 AliTPCCmpNG.C:1143
 AliTPCCmpNG.C:1144
 AliTPCCmpNG.C:1145
 AliTPCCmpNG.C:1146
 AliTPCCmpNG.C:1147
 AliTPCCmpNG.C:1148
 AliTPCCmpNG.C:1149
 AliTPCCmpNG.C:1150
 AliTPCCmpNG.C:1151
 AliTPCCmpNG.C:1152
 AliTPCCmpNG.C:1153
 AliTPCCmpNG.C:1154
 AliTPCCmpNG.C:1155
 AliTPCCmpNG.C:1156
 AliTPCCmpNG.C:1157
 AliTPCCmpNG.C:1158
 AliTPCCmpNG.C:1159
 AliTPCCmpNG.C:1160
 AliTPCCmpNG.C:1161
 AliTPCCmpNG.C:1162
 AliTPCCmpNG.C:1163
 AliTPCCmpNG.C:1164
 AliTPCCmpNG.C:1165
 AliTPCCmpNG.C:1166
 AliTPCCmpNG.C:1167
 AliTPCCmpNG.C:1168
 AliTPCCmpNG.C:1169
 AliTPCCmpNG.C:1170
 AliTPCCmpNG.C:1171
 AliTPCCmpNG.C:1172
 AliTPCCmpNG.C:1173
 AliTPCCmpNG.C:1174
 AliTPCCmpNG.C:1175
 AliTPCCmpNG.C:1176
 AliTPCCmpNG.C:1177
 AliTPCCmpNG.C:1178
 AliTPCCmpNG.C:1179
 AliTPCCmpNG.C:1180
 AliTPCCmpNG.C:1181
 AliTPCCmpNG.C:1182
 AliTPCCmpNG.C:1183
 AliTPCCmpNG.C:1184
 AliTPCCmpNG.C:1185
 AliTPCCmpNG.C:1186
 AliTPCCmpNG.C:1187
 AliTPCCmpNG.C:1188
 AliTPCCmpNG.C:1189
 AliTPCCmpNG.C:1190
 AliTPCCmpNG.C:1191
 AliTPCCmpNG.C:1192
 AliTPCCmpNG.C:1193
 AliTPCCmpNG.C:1194
 AliTPCCmpNG.C:1195
 AliTPCCmpNG.C:1196
 AliTPCCmpNG.C:1197
 AliTPCCmpNG.C:1198
 AliTPCCmpNG.C:1199
 AliTPCCmpNG.C:1200
 AliTPCCmpNG.C:1201
 AliTPCCmpNG.C:1202
 AliTPCCmpNG.C:1203
 AliTPCCmpNG.C:1204
 AliTPCCmpNG.C:1205
 AliTPCCmpNG.C:1206
 AliTPCCmpNG.C:1207
 AliTPCCmpNG.C:1208
 AliTPCCmpNG.C:1209
 AliTPCCmpNG.C:1210
 AliTPCCmpNG.C:1211
 AliTPCCmpNG.C:1212
 AliTPCCmpNG.C:1213
 AliTPCCmpNG.C:1214
 AliTPCCmpNG.C:1215
 AliTPCCmpNG.C:1216
 AliTPCCmpNG.C:1217
 AliTPCCmpNG.C:1218
 AliTPCCmpNG.C:1219
 AliTPCCmpNG.C:1220
 AliTPCCmpNG.C:1221
 AliTPCCmpNG.C:1222
 AliTPCCmpNG.C:1223
 AliTPCCmpNG.C:1224
 AliTPCCmpNG.C:1225
 AliTPCCmpNG.C:1226
 AliTPCCmpNG.C:1227
 AliTPCCmpNG.C:1228
 AliTPCCmpNG.C:1229
 AliTPCCmpNG.C:1230
 AliTPCCmpNG.C:1231
 AliTPCCmpNG.C:1232
 AliTPCCmpNG.C:1233
 AliTPCCmpNG.C:1234
 AliTPCCmpNG.C:1235
 AliTPCCmpNG.C:1236
 AliTPCCmpNG.C:1237
 AliTPCCmpNG.C:1238
 AliTPCCmpNG.C:1239
 AliTPCCmpNG.C:1240
 AliTPCCmpNG.C:1241
 AliTPCCmpNG.C:1242
 AliTPCCmpNG.C:1243
 AliTPCCmpNG.C:1244
 AliTPCCmpNG.C:1245
 AliTPCCmpNG.C:1246
 AliTPCCmpNG.C:1247
 AliTPCCmpNG.C:1248
 AliTPCCmpNG.C:1249
 AliTPCCmpNG.C:1250
 AliTPCCmpNG.C:1251
 AliTPCCmpNG.C:1252
 AliTPCCmpNG.C:1253
 AliTPCCmpNG.C:1254
 AliTPCCmpNG.C:1255
 AliTPCCmpNG.C:1256
 AliTPCCmpNG.C:1257
 AliTPCCmpNG.C:1258
 AliTPCCmpNG.C:1259
 AliTPCCmpNG.C:1260
 AliTPCCmpNG.C:1261
 AliTPCCmpNG.C:1262
 AliTPCCmpNG.C:1263
 AliTPCCmpNG.C:1264
 AliTPCCmpNG.C:1265
 AliTPCCmpNG.C:1266
 AliTPCCmpNG.C:1267
 AliTPCCmpNG.C:1268
 AliTPCCmpNG.C:1269
 AliTPCCmpNG.C:1270
 AliTPCCmpNG.C:1271
 AliTPCCmpNG.C:1272
 AliTPCCmpNG.C:1273
 AliTPCCmpNG.C:1274
 AliTPCCmpNG.C:1275