ROOT logo
#include "TChain.h"
#include "TTree.h"
#include "TF1.h"
#include "TAxis.h"
#include "TH1F.h"
#include "THnSparse.h"

#include "AliMCParticle.h"
//#include "AliStack.h"

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

#include "AliESDEvent.h"
#include "AliMCEvent.h"
#include "AliESDInputHandler.h"
#include "AliInputEventHandler.h"

#include "AliVVertex.h"
#include "AliAnalysisFilter.h"
#include "AliPID.h"
#include "AliPIDResponse.h"
#include "AliTPCPIDResponse.h"

#include "AliTPCPIDEtaQA.h"

/*
This task determines the eta dependence of the TPC signal.
For this purpose, only tracks fulfilling some standard quality cuts are taken into account.
The obtained data can be used to derive the functional behaviour of the eta dependence.
Such a function can be plugged into this task to correct for the eta dependence and to see
if there is then really no eta dependence left.

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

ClassImp(AliTPCPIDEtaQA)

//________________________________________________________________________
AliTPCPIDEtaQA::AliTPCPIDEtaQA()
  : AliTPCPIDBase()
  , fPtThresholdForPhiCut(2.0)
  , fPhiCutSecondBranchLow(0x0)
  , fPhiCutSecondBranchHigh(0x0)
  , fhPIDdataAll(0x0)
  //OLD clusterQA, fhNumClustersPhiPrimePtBeforeCut(0x0)
  //OLD clusterQA, fhNumClustersPhiPrimePtAfterCut(0x0)
  , fhPhiPrimeCutEfficiency(0x0)
  , fOutputContainer(0x0)
{
  // default Constructor

  // 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
  //TODO fPhiCutLow  = new TF1("StandardPhiCutLow",  "0.1/x/x+pi/18.0-0.025", 0, 50);
  //TODO fPhiCutHigh = new TF1("StandardPhiCutHigh", "0.12/x+pi/18.0+0.035", 0, 50);
  
  //TODO NEW fPhiCutLow  = new TF1("StandardPhiCutLow",  "0.072/x+pi/18.0-0.035", 0, 50);
  //TODO NEW fPhiCutHigh = new TF1("StandardPhiCutHigh", "0.07/x/x+0.1/x+pi/18.0+0.035", 0, 50);
  
  fPhiCutSecondBranchLow  = new TF1("StandardPhiCutSecondBranchLow",  "NewStandardPhiCutLow - 2.*pi/18.", 0, 50);
  fPhiCutSecondBranchHigh = new TF1("StandardPhiCutSecondBranchHigh", "0.07/x+pi/18.0+0.125 - 2.*pi/18.", 0, 50);
}

//________________________________________________________________________
AliTPCPIDEtaQA::AliTPCPIDEtaQA(const char *name)
  : AliTPCPIDBase(name)
  , fPtThresholdForPhiCut(2.0)
  , fPhiCutSecondBranchLow(0x0)
  , fPhiCutSecondBranchHigh(0x0)
  , fhPIDdataAll(0x0)
  //OLD clusterQA, fhNumClustersPhiPrimePtBeforeCut(0x0)
  //OLD clusterQA, fhNumClustersPhiPrimePtAfterCut(0x0)
  , fhPhiPrimeCutEfficiency(0x0)
  , fOutputContainer(0x0)
{
  // Constructor
  
  // 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
  //TODO fPhiCutLow  = new TF1("StandardPhiCutLow",  "0.1/x/x+pi/18.0-0.025", 0, 50);
  //TODO fPhiCutHigh = new TF1("StandardPhiCutHigh", "0.12/x+pi/18.0+0.035", 0, 50);
  
  //TODO NEW fPhiCutLow  = new TF1("StandardPhiCutLow",  "0.072/x+pi/18.0-0.035", 0, 50);
  //TODO NEW fPhiCutHigh = new TF1("StandardPhiCutHigh", "0.07/x/x+0.1/x+pi/18.0+0.035", 0, 50);
  
  fPhiCutSecondBranchLow  = new TF1("StandardPhiCutSecondBranchLow",  "StandardPhiCutLow - 2.*pi/18.", 0, 50);
  fPhiCutSecondBranchHigh = new TF1("StandardPhiCutSecondBranchHigh", "0.07/x+pi/18.0+0.125 - 2.*pi/18.", 0, 50);

  // Define input and output slots here
  // Input slot #0 works with a TChain
  DefineInput(0, TChain::Class());
  // Output slot #1 writes into a TObjArray container
  DefineOutput(1, TObjArray::Class());
}


//________________________________________________________________________
AliTPCPIDEtaQA::~AliTPCPIDEtaQA()
{
  // dtor
  
  delete fOutputContainer;
  fOutputContainer = 0;
  
  delete fPhiCutSecondBranchLow;
  fPhiCutSecondBranchLow = 0;
  
  delete fPhiCutSecondBranchHigh;
  fPhiCutSecondBranchHigh = 0;
}


//________________________________________________________________________
void AliTPCPIDEtaQA::UserCreateOutputObjects()
{
  // Create histograms
  // Called once

  AliTPCPIDBase::UserCreateOutputObjects();

  OpenFile(1);
  
  fOutputContainer = new TObjArray(1);
  fOutputContainer->SetName(GetName()) ;
  fOutputContainer->SetOwner(kTRUE);
  
  const Int_t nEta = TMath::Nint(40 * fEtaCut);
  
  const Int_t nPtBins = 68;
  Double_t binsPt[nPtBins+1] = {0. ,  0.05, 0.1,  0.15, 0.2,  0.25, 0.3,  0.35, 0.4,  0.45,
           0.5,  0.55, 0.6,  0.65, 0.7,  0.75, 0.8,  0.85, 0.9,  0.95,
           1.0,  1.1 , 1.2,  1.3 , 1.4,  1.5 , 1.6,  1.7 , 1.8,  1.9 ,
           2.0,  2.2 , 2.4,  2.6 , 2.8,  3.0 , 3.2,  3.4 , 3.6,  3.8 ,
           4.0,  4.5 , 5.0,  5.5 , 6.0,  6.5 , 7.0,  8.0 , 9.0,  10.0,
           11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 18.0, 20.0, 22.0, 24.0,
           26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 40.0, 45.0, 50.0 };
    
      
  const Int_t nBins = 6;
  // MC PID, SelectSpecies, P(TPC_inner), multiplicity, deltaPrimeSpecies, eta
  
  Int_t bins[nBins] = 
    {  9,   4, nPtBins,    40, 201, nEta };
  Double_t xmin[nBins] = 
    {  0., 0.,      0.,    0., 0.5, -fEtaCut};
  Double_t xmax[nBins] = 
    {  9., 4.,    50.0, 20000, 2.0, fEtaCut };
 
  		
  fhPIDdataAll = new THnSparseI("hPIDdataAll","", nBins, bins, xmin, xmax);
  SetUpHist(fhPIDdataAll, binsPt);
  fOutputContainer->Add(fhPIDdataAll);
  
  /*OLD clusterQA
  const Int_t nBinsQA = 3;
  // pT, phiPrime, Ncl
  
  Int_t binsQA[nBinsQA] = 
    {  nPtBins, 50, 90 }; 
  Double_t xminQA[nBinsQA] = 
    {  0., 0., 70.};
  Double_t xmaxQA[nBinsQA] = 
    {  50.0, TMath::Pi() / 9., 160 };
    
  fhNumClustersPhiPrimePtBeforeCut = new THnSparseI("hNumClustersPhiPrimePtBeforeCut", "", nBinsQA, binsQA, xminQA, xmaxQA);
  fhNumClustersPhiPrimePtBeforeCut->SetBinEdges(0, binsPt);
  fhNumClustersPhiPrimePtBeforeCut->GetAxis(0)->SetTitle("p_{T} (GeV/c)");
  fhNumClustersPhiPrimePtBeforeCut->GetAxis(1)->SetTitle("#phi'");
  fhNumClustersPhiPrimePtBeforeCut->GetAxis(2)->SetTitle("Ncl");
  fOutputContainer->Add(fhNumClustersPhiPrimePtBeforeCut);
  
  fhNumClustersPhiPrimePtAfterCut = new THnSparseI("hNumClustersPhiPrimePtAfterCut", "", nBinsQA, binsQA, xminQA, xmaxQA);
  fhNumClustersPhiPrimePtAfterCut->SetBinEdges(0, binsPt);
  fhNumClustersPhiPrimePtAfterCut->GetAxis(0)->SetTitle("p_{T} (GeV/c)");
  fhNumClustersPhiPrimePtAfterCut->GetAxis(1)->SetTitle("#phi'");
  fhNumClustersPhiPrimePtAfterCut->GetAxis(2)->SetTitle("Ncl");
  fOutputContainer->Add(fhNumClustersPhiPrimePtAfterCut);
  
  fhPhiPrimeCutEfficiency = new TH1F("hPhiPrimeCutEfficiency", "Efficiency of #phi' cut;p_{T} (GeV/c);Cut efficiency", nPtBins, binsPt);
  fOutputContainer->Add(fhPhiPrimeCutEfficiency);
  */
  
  PostData(1, fOutputContainer);
}


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

  fESD = dynamic_cast<AliESDEvent*>(InputEvent());
  if (!fESD) {
    Printf("ERROR: fESD not available");
    return;
  }
  
  fMC = dynamic_cast<AliMCEvent*>(MCEvent());
  
  if (!fPIDResponse || !fV0KineCuts)
    return;
  
  if (!GetVertexIsOk(fESD))
    return;
  
  const AliVVertex* primaryVertex = fESD->GetPrimaryVertexTracks(); 
  if (!primaryVertex)
    return;
    
  if(primaryVertex->GetNContributors() <= 0) 
    return;
  
  Double_t magField = fESD->GetMagneticField();
  
  // Fill V0 arrays with V0s
  FillV0PIDlist();
  
  Int_t multiplicity = fESD->GetNumberOfESDTracks();
  
  // Track loop to fill a Train spectrum
  for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
    AliESDtrack* track = fESD->GetTrack(iTracks);
    if (!track) {
      Printf("ERROR: Could not receive track %d", iTracks);
      continue;
    }
    
    if (TMath::Abs(track->Eta()) >= fEtaCut)  continue;
    
    //if (TMath::Abs(track->Eta()) < 0.6 || TMath::Abs(track->Eta()) > 0.8)  continue;
    
    // Do not distinguish positively and negatively charged V0's
    Char_t v0tagAllCharges = TMath::Abs(GetV0tag(iTracks));
    if (v0tagAllCharges == -99) {
      AliError(Form("Problem with V0 tag list (requested V0 track for track %d from %d (list status %d))!", iTracks, fESD->GetNumberOfTracks(),
                    fV0tags != 0x0));
      continue;
    }
    
    Bool_t isV0el = v0tagAllCharges == 14;
    Bool_t isV0pi = v0tagAllCharges == 15;
    Bool_t isV0pr = v0tagAllCharges == 16;
    Bool_t isV0 = isV0el || isV0pi || isV0pr;
    
    // Apply track cut. Accept track, if from V0 or if accepted by cut.
    // Do not apply the track cuts to V0s, since the track cuts are usually
    // cuts on primaries, what will throw away almost all V0s.
    if(!isV0 && (fTrackFilter && !fTrackFilter->IsSelected(track)))
      continue;
    
    if (GetUseTPCCutMIGeo()) {
      // If cut on geometry is active, don't cut on number of clusters, since such a cut is already included.
      if (!isV0) {
        if (!TPCCutMIGeo(track, InputEvent()))
          continue;
      }
      else {
        // One should not cut on geometry for V0's since they have different topology. (Loosely) cut on num of clusters instead.
        if (track->GetTPCsignalN() < 60)
          continue;
      }
    }
    else {
      // If cut on geometry is not active, always cut on num clusters
      if (track->GetTPCsignalN() < 60)
        continue;
    }
    
    Double_t pT = track->Pt();
    //Double_t phiPrime = GetPhiPrime(track->Phi(), magField, track->Charge());
    
    //OLD clusterQA Double_t entryQA[3] = { pT, phiPrime, track->GetTPCsignalN() };
    //OLD clusterQA fhNumClustersPhiPrimePtBeforeCut->Fill(entryQA);

    // Apply PhiPrimeCut only on high-pt tracks, in this case: Tracks with pt >= fPtThresholdForPhiCut
    if(fUsePhiCut && pT >= fPtThresholdForPhiCut) {
      
      if(fUsePhiCut) {
      if (!PhiPrimeCut(track, magField))
        continue; // reject track
    }
      //Use cut for second branch?
      if(!PhiPrimeCut(track, magField))
      //if(!PhiPrimeCut(track, magField)
      //   || (phiPrime < fPhiCutSecondBranchHigh->Eval(pT)  && phiPrime > fPhiCutSecondBranchLow->Eval(pT)))
	      continue; // reject track
    }
    
    //OLD clusterQA fhNumClustersPhiPrimePtAfterCut->Fill(entryQA);
    
    Int_t label = track->GetLabel();

    AliMCParticle* mcTrack = 0x0;
    
    if (fMC) {
      if (label < 0)
        continue; // If MC is available, reject tracks with negative ESD label
      mcTrack = dynamic_cast<AliMCParticle*>(fMC->GetTrack(TMath::Abs(label)));
      if (!mcTrack) {
        Printf("ERROR: Could not receive mcTrack with label %d for track %d", label, iTracks);
        continue;
      }
      
      /*// Only accept MC primaries
      if (!fMC->Stack()->IsPhysicalPrimary(TMath::Abs(label))) {
        continue;
      }*/
    }
    
    // Momentum
    Double_t pTPC = track->GetTPCmomentum();
    
    // Eta
    Float_t eta = track->Eta();
    
    // TPC signal
    Double_t dEdxTPC = track->GetTPCsignal();
    
    Double_t dEdxExpectedEl = fPIDResponse->GetTPCResponse().GetExpectedSignal(track, AliPID::kElectron, AliTPCPIDResponse::kdEdxDefault, 
                                                                              fPIDResponse->UseTPCEtaCorrection(),
                                                                              fPIDResponse->UseTPCMultiplicityCorrection());
    Double_t dEdxExpectedKa = fPIDResponse->GetTPCResponse().GetExpectedSignal(track, AliPID::kKaon, AliTPCPIDResponse::kdEdxDefault, 
                                                                              fPIDResponse->UseTPCEtaCorrection(),
                                                                              fPIDResponse->UseTPCMultiplicityCorrection());
    Double_t dEdxExpectedPi = fPIDResponse->GetTPCResponse().GetExpectedSignal(track, AliPID::kPion, AliTPCPIDResponse::kdEdxDefault, 
                                                                              fPIDResponse->UseTPCEtaCorrection(),
                                                                              fPIDResponse->UseTPCMultiplicityCorrection());
    Double_t dEdxExpectedPr = fPIDResponse->GetTPCResponse().GetExpectedSignal(track, AliPID::kProton, AliTPCPIDResponse::kdEdxDefault, 
                                                                              fPIDResponse->UseTPCEtaCorrection(),
                                                                              fPIDResponse->UseTPCMultiplicityCorrection());
    
    Double_t deltaPrimeEl = (dEdxExpectedEl > 0) ? (dEdxTPC / dEdxExpectedEl) : (-1);
    Double_t deltaPrimeKa = (dEdxExpectedKa > 0) ? (dEdxTPC / dEdxExpectedKa) : (-1);
    Double_t deltaPrimePi = (dEdxExpectedPi > 0) ? (dEdxTPC / dEdxExpectedPi) : (-1);
    Double_t deltaPrimePr = (dEdxExpectedPr > 0) ? (dEdxTPC / dEdxExpectedPr) : (-1);
    
    Int_t binMC = -1;
    if (fMC) {
      Int_t pdg = mcTrack->PdgCode();
      
      if (TMath::Abs(pdg) == 211) {//Pion
        // If V0, only accept if correctly identified
        if (isV0)   {
          if (isV0pi)
            binMC = 7;
          else
            continue;
        }
        else
          binMC = 3;
      }
      else if (TMath::Abs(pdg) == 321) {//Kaon
        // No kaons from V0 => Reject
        if (isV0)
          continue;
        else
          binMC = 1;
      }
      else if (TMath::Abs(pdg) == 2212) {//Proton
        // If V0, only accept if correctly identified
        if (isV0)   {
          if (isV0pr)
            binMC = 8;
          else
            continue;
        }
        else
          binMC = 4;
      }
      else if (TMath::Abs(pdg) == 11) {//Electron
        // If V0, only accept if correctly identified
        if (isV0)   {
          if (isV0el)
            binMC = 6;
          else
            continue;
        }
        else
          binMC = 0;
      }
      else if (TMath::Abs(pdg) == 13) {//Muon
        // No muons from V0 => Reject
        if (isV0)
          continue;
        else
          binMC = 2;
      }
      else
        continue; // Reject all other particles
    }
    
    Bool_t isKaon = kFALSE;
    Bool_t isPion = kFALSE;
    Bool_t isProton = kFALSE;
    Bool_t isElectron = kFALSE;
    Bool_t isV0plusTOFel = kFALSE;
    
    
    if (!fMC && !isV0) {    
      UInt_t status = track->GetStatus();
      Bool_t hasTOFout  = status&AliESDtrack::kTOFout; 
      Bool_t hasTOFtime = status&AliESDtrack::kTIME;
      Bool_t hasTOF     = kFALSE;
      if (hasTOFout && hasTOFtime)
        hasTOF = kTRUE;
      Float_t length = track->GetIntegratedLength();
      // Length check only for primaries, not for V0's!
      if (length < 350 && !isV0)
        hasTOF = kFALSE;

    
      // Select Kaons, Pions and Protons in 3 sigma band (TOF and TPC). Below some momentum threshold, only use TPC cut,
      // since TOF efficiency is really bad.
      // In case of ambiguity, add entries for corresponding species
      if ((pTPC <= 0.25 && TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon)) < 6.0) ||
          (pTPC > 0.25 && pTPC <= 0.3 && TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon)) < 4.0) ||
          (pTPC > 0.3 && pTPC <= 0.35 && TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon)) < 3.0) ||
          (pTPC > 0.35 && TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon)) < 3.0 && hasTOF && 
           TMath::Abs(fPIDResponse->NumberOfSigmasTOF(track, AliPID::kKaon)) < 3.0)) {
          isKaon = kTRUE;
      }
      if ((dEdxTPC >= 50. / TMath::Power(pTPC, 1.3)) && // Pattern recognition instead of TPC cut to be ~independent of old TPC expected dEdx
         ((pTPC < 0.6) ||
         (pTPC >= 0.6 && hasTOF && TMath::Abs(fPIDResponse->NumberOfSigmasTOF(track, AliPID::kProton)) < 3.0))) {
        isProton = kTRUE;
      }
      /*
      if ((TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kProton)) < (pTPC < 0.3 ? 8.0 : 5.0)) &&
          ((pTPC < 0.6) ||
          (pTPC >= 0.6 && hasTOF && TMath::Abs(fPIDResponse->NumberOfSigmasTOF(track, AliPID::kProton)) < 3.0))) {
          isProton = kTRUE;
      }*/
      if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kPion)) < 3.0 &&
          (pTPC <= 0.3 || 
           (pTPC > 0.3 && hasTOF && TMath::Abs(fPIDResponse->NumberOfSigmasTOF(track, AliPID::kPion)) < 3.0)))  {
          isPion = kTRUE;
      }
      if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kElectron)) < 3.0 &&
          (pTPC <= 0.3 ||
           (pTPC > 0.3 && hasTOF && TMath::Abs(fPIDResponse->NumberOfSigmasTOF(track, AliPID::kElectron)) < 3.0)))  {
          isElectron = kTRUE;
      }
    }
    else if (!fMC && isV0el) {
      // Special treatment for V0 electrons -> Look for V0+TOF electrons
      
      UInt_t status = track->GetStatus();
      Bool_t hasTOFout  = status&AliESDtrack::kTOFout; 
      Bool_t hasTOFtime = status&AliESDtrack::kTIME;
      Bool_t hasTOF     = kFALSE;
      if (hasTOFout && hasTOFtime)
        hasTOF = kTRUE;
      
      // No length check for V0's
      if (hasTOF && TMath::Abs(fPIDResponse->NumberOfSigmasTOF(track, AliPID::kElectron)) < 3.0) {
        isV0plusTOFel = kTRUE;
      }      
    }
    
    // MC PID, SelectSpecies, P(TPC_inner), multiplicity, deltaPrimeSpecies, eta
    Double_t entry[6] = { (Double_t)binMC, 0., pTPC, (Double_t)multiplicity, deltaPrimeEl, eta };
    
    if (fMC)  {
      fhPIDdataAll->Fill(entry);
      
      entry[1] = 1;
      entry[4] = deltaPrimeKa;
      fhPIDdataAll->Fill(entry);
      
      entry[1] = 2;
      entry[4] = deltaPrimePi;
      fhPIDdataAll->Fill(entry);
      
      entry[1] = 3;
      entry[4] = deltaPrimePr;
      fhPIDdataAll->Fill(entry);
    }
    else  {      
      for (Int_t i = 0; i < 8; i++) {
        if (i == 0 && isKaon) 
          binMC = 1;
        else if (i == 1 && isPion)  
          binMC = 3;
        else if (i == 2 && isProton)  
          binMC = 4;
        else if (i == 3 && isElectron)
          binMC = 0;
        else if (i == 4 && isV0plusTOFel)
          binMC = 5;
        else if (i == 5 && isV0el)
          binMC = 6;
        else if (i == 6 && isV0pi)
          binMC = 7;
        else if (i == 7 && isV0pr)
          binMC = 8;
        else
          continue;
          
        entry[0] = binMC;
        
        entry[1] = 0;
        entry[4] = deltaPrimeEl;
        fhPIDdataAll->Fill(entry);
        
        entry[1] = 1;
        entry[4] = deltaPrimeKa;
        fhPIDdataAll->Fill(entry);
        
        entry[1] = 2;
        entry[4] = deltaPrimePi;
        fhPIDdataAll->Fill(entry);
        
        entry[1] = 3;
        entry[4] = deltaPrimePr;
        fhPIDdataAll->Fill(entry);
      }
    }
  } //track loop 

  // Post output data.
  PostData(1, fOutputContainer);
  
  // Clear the V0 PID arrays
  ClearV0PIDlist();
}      

//________________________________________________________________________
void AliTPCPIDEtaQA::Terminate(const Option_t *)
{
  // Called once at the end of the query
  /*OLD clusterQA
  TObjArray* output = (TObjArray*)GetOutputData(1);
  if (!output)
    return;
  
  TH1F* hPhiPrimeCutEfficiency = (TH1F*)(output->FindObject("hPhiPrimeCutEfficiency"));
  if (!hPhiPrimeCutEfficiency) 
    return;
  
  THnSparse* hNumClustersPhiPrimePtBeforeCut = (THnSparse*)(output->FindObject("hNumClustersPhiPrimePtBeforeCut"));
  if (!hNumClustersPhiPrimePtBeforeCut)
    return;
  
  THnSparse* hNumClustersPhiPrimePtAfterCut = (THnSparse*)(output->FindObject("hNumClustersPhiPrimePtAfterCut"));
  if (!hNumClustersPhiPrimePtAfterCut)
    return;
  
  TH1D* hNumEntriesBefore = hNumClustersPhiPrimePtBeforeCut->Projection(0);
  TH1D* hNumEntriesAfter = hNumClustersPhiPrimePtAfterCut->Projection(0);
   
  for (Int_t bin = 1; bin <= hNumEntriesBefore->GetXaxis()->GetNbins(); bin++)  {
    Double_t numEntriesBefore = hNumEntriesBefore->GetBinContent(bin);
    
    if (numEntriesBefore > 0) {
      Double_t numEntriesAfter = hNumEntriesAfter->GetBinContent(bin);
      hPhiPrimeCutEfficiency->SetBinContent(bin,  numEntriesAfter / numEntriesBefore);
      // Errors are 100%-correlated: Accepted tracks should be a constant fraction of all tracks in given bin.
      // Thus: Only take statistical fluctuation from accepted tracks as error
      hPhiPrimeCutEfficiency->SetBinError(bin, TMath::Sqrt(numEntriesAfter) / numEntriesBefore);
      //                          (numEntriesAfter / numEntriesBefore) * TMath::Sqrt(1. / numEntriesAfter + 1. / numEntriesBefore));
    }
  }
  
  hPhiPrimeCutEfficiency->SetDrawOption("e");
  */
}


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