ROOT logo
#include "TChain.h"
#include "TF1.h"
#include "TRandom3.h"

#include "AliMCParticle.h"

#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"

#include "AliVEvent.h"
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliMCEvent.h"
#include "AliESDInputHandler.h"
#include "AliInputEventHandler.h"
#include "AliVTrack.h"
#include "AliExternalTrackParam.h"
#include "AliVVertex.h"
#include "AliAnalysisFilter.h"
#include "AliPID.h"
#include "AliPIDResponse.h"
#include "AliESDv0KineCuts.h"
#include "AliESDv0.h"

#include "AliTPCPIDBase.h"

/*
This class is a base class for all other
analysis tasks that use V0's.
It provides basics for V0 identification.
In addition, some further basic functions are provided.

Class written by Benjamin Hess.
Contact: bhess@cern.ch
*/

ClassImp(AliTPCPIDBase)

Double_t AliTPCPIDBase::fgCutGeo = 1.;   
Double_t AliTPCPIDBase::fgCutNcr = 0.85; 
Double_t AliTPCPIDBase::fgCutNcl = 0.7;  

UShort_t AliTPCPIDBase::fgCutPureNcl = 60;

//________________________________________________________________________
AliTPCPIDBase::AliTPCPIDBase()
  : AliAnalysisTaskSE()
  , fEvent(0x0)
  , fESD(0x0)
  , fMC(0x0)
  , fPIDResponse(0x0)
  , fV0KineCuts(0x0)
  , fIsPbpOrpPb(kFALSE)
  , fUsePhiCut(kFALSE)
  , fTPCcutType(kNoCut)
  , fZvtxCutEvent(10.0)
  , fEtaCut(0.9)
  , fPhiCutLow(0x0)
  , fPhiCutHigh(0x0)
  , fRandom(0x0)
  , fTrackFilter(0x0)
  , fNumTagsStored(0)
  , fV0tags(0x0)
  , fStoreMotherIndex(kFALSE)
  , fV0motherIndex(0x0)
{
  // default Constructor
  
  fRandom = new TRandom3(0); // 0 means random seed


  // Question: Is this the right place to initialize these functions?
  // Will it work on proof? i.e. will they be streamed to the workers?
  // Also one should add getters and setters
  fPhiCutLow  = new TF1("StdPhiCutLow",  "0.1/x/x+pi/18.0-0.025", 0, 100);
  fPhiCutHigh = new TF1("StandardPhiCutHigh", "0.12/x+pi/18.0+0.035", 0, 100);
}

//________________________________________________________________________
AliTPCPIDBase::AliTPCPIDBase(const char *name)
  : AliAnalysisTaskSE(name)
  , fEvent(0x0)
  , fESD(0x0)
  , fMC(0x0)
  , fPIDResponse(0x0)
  , fV0KineCuts(0x0)
  , fIsPbpOrpPb(kFALSE)
  , fUsePhiCut(kFALSE)
  , fTPCcutType(kNoCut)
  , fZvtxCutEvent(10.0)
  , fEtaCut(0.9)
  , fPhiCutLow(0x0)
  , fPhiCutHigh(0x0)
  , fRandom(0x0)
  , fTrackFilter(0x0)
  , fNumTagsStored(0)
  , fV0tags(0x0)
  , fStoreMotherIndex(kFALSE)
  , fV0motherIndex(0x0)
{
  // Constructor
  
  fRandom = new TRandom3(0); // 0 means random seed

  
  // Question: Is this the right place to initialize these functions?
  // Will it work on proof? i.e. will they be streamed to the workers?
  // Also one should add getters and setters
  fPhiCutLow  = new TF1("StdPhiCutLow",  "0.1/x/x+pi/18.0-0.025", 0, 100);
  fPhiCutHigh = new TF1("StandardPhiCutHigh", "0.12/x+pi/18.0+0.035", 0, 100);

  DefineInput (0, TChain::Class());
  DefineOutput(0,  TTree::Class());
}


//________________________________________________________________________
AliTPCPIDBase::~AliTPCPIDBase()
{
  // dtor
  
  delete fPhiCutLow;
  fPhiCutLow = 0;
  
  delete fPhiCutHigh;
  fPhiCutHigh = 0;
  
  delete fTrackFilter;
  fTrackFilter = 0;
  
  delete fRandom;
  fRandom = 0;
  
  delete fV0KineCuts;
  fV0KineCuts = 0;
  
  delete fV0tags;
  fV0tags = 0;
  fNumTagsStored = 0;
  
  delete fV0motherIndex;
  fV0motherIndex = 0;
}


//________________________________________________________________________
void AliTPCPIDBase::UserCreateOutputObjects()
{
  // Create histograms
  // Called once
  
  // Input hander
  AliAnalysisManager* man = AliAnalysisManager::GetAnalysisManager();
  AliInputEventHandler* inputHandler = dynamic_cast<AliInputEventHandler*>(man->GetInputEventHandler());
  
  if (!inputHandler) {
    AliFatal("Input handler needed");
    fPIDResponse = 0x0;
    
    return;
  }

  // PID response object
  fPIDResponse = inputHandler->GetPIDResponse();
  if (!fPIDResponse)
    AliError("PIDResponse object was not created");
  
  // V0 Kine cuts 
  fV0KineCuts = new AliESDv0KineCuts;
  fV0KineCuts->SetGammaCutChi2NDF(5.);
  // Only accept V0el with prod. radius within 45 cm -> PID will by systematically biased for larger values!
  Float_t gammaProdVertexRadiusCuts[2] = { 3.0, 45. }; 
  fV0KineCuts->SetGammaCutVertexR(&gammaProdVertexRadiusCuts[0]);
}


//________________________________________________________________________
void AliTPCPIDBase::UserExec(Option_t *)
{
  // Main loop
  // Called for each event
}      

//________________________________________________________________________
void AliTPCPIDBase::Terminate(const Option_t *)
{
  // Called once at the end of the query
}


//_____________________________________________________________________________
Double_t AliTPCPIDBase::GetPhiPrime(Double_t phi, Double_t magField, Int_t charge) const
{
  // Get phiPrime which is the cut variable to reject high pT tracks near edges

  if(magField < 0)    // for negatve polarity field
    phi = TMath::TwoPi() - phi;
    
  if(charge < 0) // for negatve charge
    phi = TMath::TwoPi() - phi;
  
  phi += TMath::Pi() / 18.0; // to center gap in the middle
  phi = fmod(phi, TMath::Pi() / 9.0);
  return phi;
}


//______________________________________________________________________________
Bool_t AliTPCPIDBase::PhiPrimeCut(Double_t trackPt, Double_t trackPhi, Short_t trackCharge, Double_t magField) const
{
  // Apply phi' cut to given track parameters
  
  if (trackPt < 2.0)
    return kTRUE;
  
  Double_t phiPrime = GetPhiPrime(trackPhi, magField, trackCharge);
  
  if (phiPrime < fPhiCutHigh->Eval(trackPt) && phiPrime > fPhiCutLow->Eval(trackPt))
    return kFALSE; // reject track
    
    return kTRUE;
}


//______________________________________________________________________________
Bool_t AliTPCPIDBase::PhiPrimeCut(const AliVTrack* track, Double_t magField) const
{
  return PhiPrimeCut(track->Pt(), track->Phi(), track->Charge(), magField);
}


//______________________________________________________________________________
Bool_t AliTPCPIDBase::GetVertexIsOk(AliVEvent* event, Bool_t doVtxZcut) const
{
  // Check whether vertex ful-fills quality requirements.
  // Apply cut on z-position of vertex if doVtxZcut = kTRUE.
  
  AliAODEvent* aod = 0x0;
  AliESDEvent* esd = 0x0;
  
  aod = dynamic_cast<AliAODEvent*>(event);
  if (!aod) {
    esd = dynamic_cast<AliESDEvent*>(event);
    
    if (!esd) {
      AliError("Event seems to be neither AOD nor ESD!");
      return kFALSE;
    }
  }
    
  if (fIsPbpOrpPb) {
    const AliVVertex* trkVtx = (aod ? dynamic_cast<const AliVVertex*>(aod->GetPrimaryVertex()) :
                                      dynamic_cast<const AliVVertex*>(esd->GetPrimaryVertex()));
      
    if (!trkVtx || trkVtx->GetNContributors() <= 0)
      return kFALSE;
      
    TString vtxTtl = trkVtx->GetTitle();
    if (!vtxTtl.Contains("VertexerTracks"))
      return kFALSE;
      
    Float_t zvtx = trkVtx->GetZ();
    const AliVVertex* spdVtx = (aod ? dynamic_cast<const AliVVertex*>(aod->GetPrimaryVertexSPD()) :
                                      dynamic_cast<const AliVVertex*>(esd->GetPrimaryVertexSPD()));
    if (spdVtx->GetNContributors() <= 0)
      return kFALSE;
      
    TString vtxTyp = spdVtx->GetTitle();
    Double_t cov[6] = {0};
    spdVtx->GetCovarianceMatrix(cov);
    Double_t zRes = TMath::Sqrt(cov[5]);
    if (vtxTyp.Contains("vertexer:Z") && (zRes > 0.25))
      return kFALSE;
      
    if (TMath::Abs(spdVtx->GetZ() - trkVtx->GetZ()) > 0.5)
      return kFALSE;
    
    if (doVtxZcut) {
      if (TMath::Abs(zvtx) > fZvtxCutEvent) //Default: 10 cm
        return kFALSE;
    }
      
    return kTRUE;
  }
    
  
  // pp and PbPb
  const AliVVertex* primaryVertex = (aod ? dynamic_cast<const AliVVertex*>(aod->GetPrimaryVertex()) :
                                           dynamic_cast<const AliVVertex*>(esd->GetPrimaryVertexTracks()));
    
  if (!primaryVertex || primaryVertex->GetNContributors() <= 0)
    return kFALSE;
  
  if (doVtxZcut) {
    if (TMath::Abs(primaryVertex->GetZ()) > fZvtxCutEvent) //Default: 10 cm
      return kFALSE;
  }
  
  return kTRUE;
}


//______________________________________________________________________________
void AliTPCPIDBase::FillV0PIDlist(AliESDEvent* event)
{
  //
  // Fill the PID tag list
  //

  // If no event forwarded as parameter (default), cast current input event.
  // Dynamic cast to ESD events (DO NOTHING for AOD events)
  if (!event)
    event = dynamic_cast<AliESDEvent *>(InputEvent());
  
  // If this fails, do nothing
  if (!event) {
    AliError("Failed to retrieve ESD event. No V0's processed (only works for ESDs by now).");
    return;
  }
  
  if (!fV0KineCuts) {
    AliError("V0KineCuts not available!");
    return;
  }
  
  TString beamType(event->GetBeamType());
  
  if (beamType.CompareTo("Pb-Pb") == 0 || beamType.CompareTo("A-A") == 0) {
    fV0KineCuts->SetMode(AliESDv0KineCuts::kPurity, AliESDv0KineCuts::kPbPb);
  }
  else {
    fV0KineCuts->SetMode(AliESDv0KineCuts::kPurity, AliESDv0KineCuts::kPP); 
  }

  // V0 selection
  // set event
  fV0KineCuts->SetEvent(event);

  const Int_t numTracks = event->GetNumberOfTracks();
  fV0tags = new Char_t[numTracks];
  for (Int_t i = 0; i < numTracks; i++)
    fV0tags[i] = 0;
  
  if (fStoreMotherIndex)  {
    fV0motherIndex = new Int_t[numTracks];
    for (Int_t i = 0; i < numTracks; i++)
      fV0motherIndex[i] = -1;
  }
  
  fNumTagsStored = numTracks;
  
  // loop over V0 particles
  for (Int_t iv0 = 0; iv0 < event->GetNumberOfV0s(); iv0++) {
    AliESDv0* v0 = (AliESDv0*)event->GetV0(iv0);
 
    if (!v0)
      continue;
    
    // Reject onFly V0's <-> Only take V0's from offline V0 finder
    if (v0->GetOnFlyStatus())
      continue; 
  
    // Get the particle selection 
    Bool_t foundV0 = kFALSE;
    Int_t pdgV0 = 0, pdgP = 0, pdgN = 0;

    foundV0 = fV0KineCuts->ProcessV0(v0, pdgV0, pdgP, pdgN);
    if (!foundV0)
      continue;
    
    Int_t iTrackP = v0->GetPindex();  // positive track
    Int_t iTrackN = v0->GetNindex();  // negative track

    
    // Fill the Object arrays
    // positive particles
    if (pdgP == -11) {
      fV0tags[iTrackP] = 14;
    }
    else if (pdgP == 211) {
      fV0tags[iTrackP] = 15;
    }
    else if(pdgP == 2212) {
      fV0tags[iTrackP] = 16;
    }
    
    if (fStoreMotherIndex)
      fV0motherIndex[iTrackP] = iv0;

    // negative particles
    if( pdgN == 11){
      fV0tags[iTrackN] = -14;
    }
    else if( pdgN == -211){
      fV0tags[iTrackN] = -15;
    }
    else if( pdgN == -2212){
      fV0tags[iTrackN] = -16;
    }
    
    if (fStoreMotherIndex)
      fV0motherIndex[iTrackN] = iv0;
  }
}


//______________________________________________________________________________
void AliTPCPIDBase::ClearV0PIDlist()
{
  //
  // Clear the PID tag list
  //

  delete fV0tags;
  fV0tags = 0;
  
  delete fV0motherIndex;
  fV0motherIndex = 0;
  
  fNumTagsStored = 0;
}


//______________________________________________________________________________
Char_t AliTPCPIDBase::GetV0tag(Int_t trackIndex) const
{
  //
  // Get the tag for the corresponding trackIndex. Returns -99 in case of invalid index/tag list.
  //
  
  if (trackIndex < 0 || trackIndex >= fNumTagsStored || !fV0tags)
    return -99;
  
  return fV0tags[trackIndex];
}


//______________________________________________________________________________
Int_t AliTPCPIDBase::GetV0motherIndex(Int_t trackIndex) const
{
  //
  // Get the index of the V0 mother for the corresponding trackIndex. Returns -99 in case of invalid index/mother index list.
  //
  
  if (!fStoreMotherIndex || trackIndex < 0 || trackIndex >= fNumTagsStored || !fV0motherIndex)
    return -99;
  
  return fV0motherIndex[trackIndex];
}


//________________________________________________________________________
Bool_t AliTPCPIDBase::TPCCutMIGeo(const AliVTrack* track, const AliVEvent* evt, TTreeStream* streamer)
{
  //
  // TPC Cut MIGeo
  //

  if (!track || !evt)
    return kFALSE;
  
  const Short_t sign = track->Charge();
  Double_t xyz[50];
  Double_t pxpypz[50];
  Double_t cv[100];

  track->GetXYZ(xyz);
  track->GetPxPyPz(pxpypz);

  AliExternalTrackParam* par = new AliExternalTrackParam(xyz, pxpypz, cv, sign);
  const AliESDtrack dummy;

  const Double_t magField = evt->GetMagneticField();
  Double_t varGeom = dummy.GetLengthInActiveZone(par, 3, 236, magField, 0, 0);
  Double_t varNcr  = track->GetTPCClusterInfo(3, 1);
  Double_t varNcls = track->GetTPCsignalN();

  const Double_t varEval = 130. - 5. * TMath::Abs(1. / track->Pt());
  Bool_t cutGeom   = varGeom > fgCutGeo * varEval;
  Bool_t cutNcr    = varNcr  > fgCutNcr * varEval;
  Bool_t cutNcls   = varNcls > fgCutNcl * varEval;

  Bool_t kout = cutGeom && cutNcr && cutNcls;

  if (streamer) {
    Double_t dedx = track->GetTPCsignal();

    (*streamer)<<"tree"<<
      "param.="<< par<<
      "varGeom="<<varGeom<<
      "varNcr="<<varNcr<<
      "varNcls="<<varNcls<<
      
      "cutGeom="<<cutGeom<<
      "cutNcr="<<cutNcr<<
      "cutNcls="<<cutNcls<<
      
      "kout="<<kout<<
      "dedx="<<dedx<<
      
      "\n";
  }
  
  delete par;
  
  return kout;
}


//________________________________________________________________________
Bool_t AliTPCPIDBase::TPCnclCut(const AliVTrack* track)
{
  //
  // TPC Cut on TPCsignalN() only
  //

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