ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
#include <TCanvas.h>
#include <TClass.h>
#include <TCollection.h>
#include <TDirectory.h>
#include <TH1F.h>
#include <TH1I.h>
#include <TH2I.h>
#include <TMath.h>
#include <TIterator.h>
#include <TString.h>
#include <TList.h>

#include "AliAnalysisManager.h"
#include "AliInputEventHandler.h"
#include "AliESDtrack.h"
#include "AliESDEvent.h"
#include "AliLog.h"
#include "AliPIDResponse.h"

#include "AliESDpidCuts.h"

ClassImp(AliESDpidCuts)

const Int_t AliESDpidCuts::kNcuts = 3;

//_____________________________________________________________________
AliESDpidCuts::AliESDpidCuts(const Char_t *name, const Char_t *title):
    AliAnalysisCuts(name, title)
  , fPIDresponse(NULL)
  , fTPCsigmaCutRequired(0)
  , fTOFsigmaCutRequired(0)
  , fCutTPCclusterRatio(0.)
  , fMinMomentumTOF(0.5)
  , fHcutStatistics(NULL)
  , fHcutCorrelation(NULL)
{
  //
  // Default constructor
  //
  
  memset(fCutTPCnSigma, 0, sizeof(Float_t)* AliPID::kSPECIES * 2);
  memset(fCutTOFnSigma, 0, sizeof(Float_t)* AliPID::kSPECIES * 2);

  memset(fHclusterRatio, 0, sizeof(TH1F *) * 2);
  memset(fHnSigmaTPC, 0, sizeof(TH1F *) * AliPID::kSPECIES * 2);
  memset(fHnSigmaTOF, 0, sizeof(TH1F *) * AliPID::kSPECIES * 2);
}

//_____________________________________________________________________
AliESDpidCuts::AliESDpidCuts(const AliESDpidCuts &ref):
    AliAnalysisCuts(ref)
  , fPIDresponse(NULL)
  , fTPCsigmaCutRequired(ref.fTPCsigmaCutRequired)
  , fTOFsigmaCutRequired(ref.fTOFsigmaCutRequired)
  , fCutTPCclusterRatio(ref.fCutTPCclusterRatio)
  , fMinMomentumTOF(ref.fMinMomentumTOF)
  , fHcutStatistics(NULL)
  , fHcutCorrelation(NULL)
{
  //
  // Copy constructor
  //
  fPIDresponse = ref.fPIDresponse;
  memcpy(fCutTPCnSigma, ref.fCutTPCnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2);
  memcpy(fCutTOFnSigma, ref.fCutTOFnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2);
  
  if(ref.fHcutStatistics) fHcutStatistics = dynamic_cast<TH1I *>(ref.fHcutStatistics->Clone());
  if(ref.fHcutCorrelation) fHcutCorrelation = dynamic_cast<TH2I *>(ref.fHcutCorrelation->Clone());
  for(Int_t imode = 0; imode < 2; imode++){
    if(ref.fHclusterRatio[imode]) fHclusterRatio[imode] = dynamic_cast<TH1F *>(ref.fHclusterRatio[imode]->Clone());
    for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
      if(fHnSigmaTPC[ispec][imode]) fHnSigmaTPC[ispec][imode] = dynamic_cast<TH1F *>(fHnSigmaTPC[ispec][imode]->Clone());
      if(fHnSigmaTOF[ispec][imode]) fHnSigmaTOF[ispec][imode] = dynamic_cast<TH1F *>(fHnSigmaTPC[ispec][imode]->Clone());
    }
  }
}

//_____________________________________________________________________
AliESDpidCuts &AliESDpidCuts::operator=(const AliESDpidCuts &ref){
  //
  // Assignment operator
  //
  if(this != &ref)
    ref.Copy(*this);
  return *this;
}

//_____________________________________________________________________
AliESDpidCuts::~AliESDpidCuts(){
  //
  // Destructor
  //

  delete fHcutCorrelation;
  for(Int_t imode = 0; imode < 2; imode++){
    delete fHclusterRatio[imode];
    for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
      delete fHnSigmaTPC[ispec][imode];
      delete fHnSigmaTOF[ispec][imode];
    }
  }
}

//_____________________________________________________________________
void AliESDpidCuts::Init(){
  //
  // Init function, get PID response from the Analysis Manager
  //
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if(mgr){
    AliInputEventHandler *handler = dynamic_cast<AliInputEventHandler*>(mgr->GetInputEventHandler());
    if(handler){
      fPIDresponse = handler->GetPIDResponse();
    }
  }
}

//_____________________________________________________________________
Bool_t AliESDpidCuts::IsSelected(TObject *obj){
  //
  // Select Track
  // 
  AliESDtrack * trk = dynamic_cast<AliESDtrack*>(obj);
  if(!trk){
    AliError("Provided object is not AliESDtrack!");
    return kFALSE;
  }
  const AliESDEvent* evt = trk->GetESDEvent();
  if(!evt){
    AliError("No AliESDEvent!");
    return kFALSE;
  }
  return AcceptTrack(trk, evt);
}

//_____________________________________________________________________
void AliESDpidCuts::Copy(TObject &c) const {
  //
  // Copy function
  //
  AliESDpidCuts &target = dynamic_cast<AliESDpidCuts &>(c);

  target.fPIDresponse = fPIDresponse;

  target.fCutTPCclusterRatio = fCutTPCclusterRatio;
  target.fMinMomentumTOF = fMinMomentumTOF;

  target.fTPCsigmaCutRequired = fTPCsigmaCutRequired;
  target.fTOFsigmaCutRequired = fTOFsigmaCutRequired;
  
  if(fHcutStatistics) target.fHcutStatistics = dynamic_cast<TH1I *>(fHcutStatistics->Clone());
  if(fHcutCorrelation) target.fHcutCorrelation = dynamic_cast<TH2I *>(fHcutCorrelation->Clone());
  for(Int_t imode = 0; imode < 2; imode++){
    if(fHclusterRatio[imode]) target.fHclusterRatio[imode] = dynamic_cast<TH1F *>(fHclusterRatio[imode]->Clone());
    for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
      if(fHnSigmaTPC[ispec][imode]) target.fHnSigmaTPC[ispec][imode] = dynamic_cast<TH1F *>(fHnSigmaTPC[ispec][imode]->Clone());
      if(fHnSigmaTOF[ispec][imode]) target.fHnSigmaTOF[ispec][imode] = dynamic_cast<TH1F *>(fHnSigmaTOF[ispec][imode]->Clone());
    }
  }
 
  memcpy(target.fCutTPCnSigma, fCutTPCnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2);
  memcpy(target.fCutTOFnSigma, fCutTOFnSigma, sizeof(Float_t) * AliPID::kSPECIES * 2);
 
  AliESDpidCuts::Copy(c);
}

//_____________________________________________________________________
Long64_t AliESDpidCuts::Merge(TCollection *coll){
  //
  // Merge Cut objects
  //
  if(!coll) return 0;
  if(coll->IsEmpty())   return 1;
  if(!HasHistograms())  return 0;
  
  TIterator *iter = coll->MakeIterator();
  TObject *o = NULL; 
  AliESDpidCuts *ref = NULL;
  Int_t counter = 0;
  while((o = iter->Next())){
    ref = dynamic_cast<AliESDpidCuts *>(o);
    if(!ref) continue;
    if(!ref->HasHistograms()) continue;

    fHcutStatistics->Add(ref->fHcutStatistics);
    fHcutCorrelation->Add(ref->fHcutCorrelation);
    for(Int_t imode = 0; imode < 2; imode++){
      fHclusterRatio[imode]->Add(ref->fHclusterRatio[imode]);
      for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
        fHnSigmaTPC[ispec][imode]->Add(ref->fHnSigmaTPC[ispec][imode]);
        fHnSigmaTOF[ispec][imode]->Add(ref->fHnSigmaTOF[ispec][imode]);
      }
    }
    ++counter;
  }
  return ++counter;
}

//_____________________________________________________________________
void AliESDpidCuts::DefineHistograms(Color_t color){
  //
  // Swich on QA and create the histograms
  //
  SetBit(kHasHistograms, kTRUE);
  fHcutStatistics = new TH1I("fHcutStatistics", "Cut Statistics", kNcuts, 0, kNcuts);
  fHcutStatistics->SetLineColor(color);
  fHcutCorrelation = new TH2I("fHcutCorrelation", "Cut Correlation", kNcuts, 0, kNcuts, kNcuts, 0, kNcuts);
  TString cutname[kNcuts] = {"TPCclusterRatio", "TPC sigma", "TOF sigma"};
  for(Int_t icut = 0; icut < kNcuts; icut++){
    fHcutStatistics->GetXaxis()->SetBinLabel(fHcutStatistics->GetXaxis()->GetFirst() + icut, cutname[icut].Data());
    fHcutCorrelation->GetXaxis()->SetBinLabel(fHcutCorrelation->GetXaxis()->GetFirst() + icut, cutname[icut].Data());
    fHcutCorrelation->GetYaxis()->SetBinLabel(fHcutCorrelation->GetYaxis()->GetFirst() + icut, cutname[icut].Data());
  }
  Char_t hname[256], htitle[256];
  for(Int_t imode = 0; imode < 2; imode++){
    snprintf(hname, 256, "fHclusterRatio%s", imode ? "After" : "Before");
    snprintf(htitle, 256, "TPC cluster Ratio %s cuts;Ratio;Entries", imode ? "after" : "before");
    fHclusterRatio[imode] = new TH1F(hname, htitle, 20, 0., 1.);
    for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
      snprintf(hname, 256, "fHnSigma%sTPC%s", AliPID::ParticleName(ispec), imode ? "after" : "before");
      snprintf(htitle, 256, "TPC sigma for %s %s cuts;sigma;Entries", AliPID::ParticleName(ispec), imode ? "after" : "before");
      fHnSigmaTPC[ispec][imode] = new TH1F(hname, htitle, 200, -10., 10.);
      snprintf(hname, 256, "fHnSigma%sTOF%s", AliPID::ParticleName(ispec), imode ? "after" : "before");
      snprintf(htitle, 256, "TOF sigma for %s %s cuts;sigma;Entries", AliPID::ParticleName(ispec), imode ? "after" : "before");
      fHnSigmaTOF[ispec][imode] = new TH1F(hname, htitle, 200, -10., 10.);
    }
  }
}

//_____________________________________________________________________
Bool_t AliESDpidCuts::AcceptTrack(const AliESDtrack *track, const AliESDEvent *event){
  //
  // Check whether the tracks survived the cuts
  //
  if(!fPIDresponse){
    Init();
    if (!fPIDresponse)
      AliError("PID Response not available");
    return 0;
  }
  enum{
    kCutClusterRatioTPC,
    kCutNsigmaTPC,
    kCutNsigmaTOF
  };
  Long64_t cutRequired=0, cutFullfiled = 0;
  if(fTOFsigmaCutRequired && event == 0)  {
    AliError("No event pointer. Need event pointer for T0 for TOF cut");
    return (0);
  }
  Double_t clusterRatio = track->GetTPCNclsF() ? static_cast<Float_t>(track->GetTPCNcls())/static_cast<Float_t>(track->GetTPCNclsF()) : 1.;
  if(fCutTPCclusterRatio > 0.){
    SETBIT(cutRequired, kCutClusterRatioTPC);
    if(clusterRatio >= fCutTPCclusterRatio) 
      SETBIT(cutFullfiled, kCutClusterRatioTPC);
  }
  // check TPC nSigma cut
  Float_t nsigmaTPC[AliPID::kSPECIES], nsigma;   // need all sigmas for QA plotting
  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
    nsigmaTPC[ispec] = nsigma = fPIDresponse->NumberOfSigmasTPC(track,(AliPID::EParticleType)ispec);
    if(!(fTPCsigmaCutRequired & 1 << ispec)) continue;
    SETBIT(cutRequired, kCutNsigmaTPC); // We found at least one species where the n-Sigma Cut is required
    if(nsigma >= fCutTPCnSigma[2*ispec] && nsigma <= fCutTPCnSigma[2*ispec+1]) SETBIT(cutFullfiled, kCutNsigmaTPC);    // Fullfiled for at least one species
  }
  // check TOF nSigma cut
  Float_t nsigmaTOF[AliPID::kSPECIES];    // see above
  Bool_t hasTOFpid = track->GetStatus() & AliESDtrack::kTOFpid; // only apply TOF n-sigma cut when PID Status Bit is set
  Double_t times[AliPID::kSPECIES];
  track->GetIntegratedTimes(times);
  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
    
    if(hasTOFpid && event) nsigmaTOF[ispec] = nsigma = fPIDresponse->NumberOfSigmasTOF(track,(AliPID::EParticleType)ispec);
    if(!(fTOFsigmaCutRequired && 1 << ispec)) continue;
    SETBIT(cutRequired, kCutNsigmaTOF);
    if(track->GetOuterParam()->P() >= fMinMomentumTOF){
      if(hasTOFpid && nsigma <= fCutTOFnSigma[2*ispec] && nsigma >= fCutTOFnSigma[2*ispec+1]) SETBIT(cutFullfiled, kCutNsigmaTOF);
    }
  }

  // Fill Histograms before cuts
  if(HasHistograms()){
    fHclusterRatio[0]->Fill(clusterRatio);
    for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
      fHnSigmaTPC[ispec][0]->Fill(nsigmaTPC[ispec]);
      if(hasTOFpid) fHnSigmaTOF[ispec][0]->Fill(nsigmaTOF[ispec]);
    }
  }
  if(cutRequired != cutFullfiled){
    // Fill cut statistics
    if(HasHistograms()){
      for(Int_t icut = 0; icut < kNcuts; icut++){
	if(TESTBIT(cutRequired, icut) && !TESTBIT(cutFullfiled, icut)){
	  // cut not fullfiled
	  fHcutStatistics->Fill(icut);
	  for(Int_t jcut = 0; jcut <= icut; jcut++)
	    if(TESTBIT(cutRequired, jcut) && !TESTBIT(cutFullfiled, jcut)) fHcutCorrelation->Fill(jcut, icut);
	}
      }
    }
    return kFALSE;    // At least one cut is not fullfiled
  }

  // Fill Histograms after cuts
  if(HasHistograms()){
    fHclusterRatio[1]->Fill(clusterRatio);
    for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
      fHnSigmaTPC[ispec][1]->Fill(nsigmaTPC[ispec]);
      if(hasTOFpid) fHnSigmaTOF[ispec][1]->Fill(nsigmaTOF[ispec]);
    }
  }

  return kTRUE;
}

//_____________________________________________________________________
void AliESDpidCuts::SaveHistograms(const Char_t * location){
  //
  // Save the histograms to a file
  //
  if(!HasHistograms()){
    AliError("Histograms not on - Exiting");
    return;
  }
  if(!location) location = GetName();
  gDirectory->mkdir(location);
  gDirectory->cd(location);
  fHcutStatistics->Write();
  fHcutCorrelation->Write();

  gDirectory->mkdir("before_cuts");
  gDirectory->mkdir("after_cuts");

  gDirectory->cd("before_cuts");
  fHclusterRatio[0]->Write();
  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
    fHnSigmaTPC[ispec][0]->Write();
    fHnSigmaTOF[ispec][0]->Write();
  }

  gDirectory->cd("../after_cuts");
  fHclusterRatio[1]->Write();
  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
    fHnSigmaTPC[ispec][1]->Write();
    fHnSigmaTOF[ispec][1]->Write();
  }

  gDirectory->cd("..");
}

//_____________________________________________________________________
void AliESDpidCuts::DrawHistograms(){
  //
  // Draw the Histograms
  //
  TCanvas *stat = new TCanvas("cutStat", "Cut Statistics", 640, 480);
  stat->cd();
  fHcutStatistics->SetStats(kFALSE);
  fHcutStatistics->Draw();
  stat->SaveAs(Form("%s_%s.gif", GetName(), stat->GetName()));

  TCanvas *correl = new TCanvas("cutCorrelation", "Cut Correlation", 640, 480);
  correl->cd();
  fHcutCorrelation->SetStats(kFALSE);
  fHcutCorrelation->Draw("colz");
  correl->SaveAs(Form("%s_%s.gif", GetName(), correl->GetName()));

  TCanvas *cRatio = new TCanvas("ClusterRatioTPC", "TPC cluster Ratio", 640, 480);
  cRatio->cd();
  fHclusterRatio[0]->SetLineColor(kRed);
  fHclusterRatio[0]->SetStats(kFALSE);
  fHclusterRatio[0]->Draw();
  fHclusterRatio[1]->SetLineColor(kBlue);
  fHclusterRatio[1]->SetStats(kFALSE);
  fHclusterRatio[1]->Draw("same");
  cRatio->SaveAs(Form("%s_%s.gif",  GetName(), cRatio->GetName()));

  TCanvas *cNsigTPC = new TCanvas("NsigmaTPC", "TPC n-sigma", 640, 480);
  cNsigTPC->Divide(3,2);
  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
    cNsigTPC->cd(ispec + 1);
    fHnSigmaTPC[ispec][0]->SetLineColor(kRed);
    fHnSigmaTPC[ispec][0]->SetStats(kFALSE);
    fHnSigmaTPC[ispec][0]->Draw();
    fHnSigmaTPC[ispec][1]->SetLineColor(kBlue);
    fHnSigmaTPC[ispec][1]->SetStats(kFALSE);
    fHnSigmaTPC[ispec][1]->Draw("same");
  }
  cNsigTPC->SaveAs(Form("%s_%s.gif", GetName(), cNsigTPC->GetName()));

  TCanvas *cNsigTOF = new TCanvas("NsigmaTOF", "TOF n-sigma", 640, 480);
  cNsigTOF->Divide(3,2);
  for(Int_t ispec = 0; ispec < AliPID::kSPECIES; ispec++){
    cNsigTOF->cd(ispec + 1);
    fHnSigmaTOF[ispec][0]->SetLineColor(kRed);
    fHnSigmaTOF[ispec][0]->SetStats(kFALSE);
    fHnSigmaTOF[ispec][0]->Draw();
    fHnSigmaTOF[ispec][1]->SetLineColor(kBlue);
    fHnSigmaTOF[ispec][1]->SetStats(kFALSE);
    fHnSigmaTOF[ispec][1]->Draw("same");
  }
  cNsigTOF->SaveAs(Form("%s_%s.gif", GetName(), cNsigTOF->GetName()));
}

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