ROOT logo
//------------------------------------------------------------------------------
// Implementation of AliPerformanceEff class. It keeps information from 
// comparison of reconstructed and MC particle tracks. In addtion, 
// it keeps selection cuts used during comparison. The comparison 
// information is stored in the ROOT histograms. Analysis of these 
// histograms can be done by using Analyse() class function. The result of 
// the analysis (histograms/graphs) are stored in the folder which is 
// a data member of AliPerformanceEff.
// 
// Author: J.Otwinowski 04/02/2008 
//------------------------------------------------------------------------------

/*
 
  // after running comparison task, read the file, and get component
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/Macros/LoadMyLibs.C");
  LoadMyLibs();
  TFile f("Output.root");
  AliPerformanceEff * compObj = (AliPerformanceEff*)coutput->FindObject("AliPerformanceEff");

  // Analyse comparison data
  compObj->Analyse();

  // the output histograms/graphs will be stored in the folder "folderEff" 
  compObj->GetAnalysisFolder()->ls("*");

  // user can save whole comparison object (or only folder with anlysed histograms) 
  // in the seperate output file (e.g.)
  TFile fout("Analysed_Eff.root","recreate");
  compObj->Write(); // compObj->GetAnalysisFolder()->Write();
  fout.Close();

*/

#include <TAxis.h>
#include <TH1D.h>
#include "THnSparse.h"

// 
#include "AliESDtrack.h"
#include "AliRecInfoCuts.h" 
#include "AliMCInfoCuts.h" 
#include "AliLog.h" 
#include "AliESDVertex.h" 
#include "AliExternalTrackParam.h" 
#include "AliTracker.h" 
#include "AliESDEvent.h" 
#include "AliMCEvent.h" 
#include "AliMCParticle.h" 
#include "AliHeader.h" 
#include "AliGenEventHeader.h" 
#include "AliStack.h" 
#include "AliPerformanceEff.h" 

using namespace std;

ClassImp(AliPerformanceEff)

//_____________________________________________________________________________
AliPerformanceEff::AliPerformanceEff(const Char_t* name, const Char_t* title, Int_t analysisMode, Bool_t hptGenerator):  AliPerformanceObject(name,title),

  // histograms
  fEffHisto(0),
  fEffSecHisto(0),

  // Cuts 
  fCutsRC(0), 
  fCutsMC(0),

  // histogram folder 
  fAnalysisFolder(0)
{
  // named constructor
  //
  SetAnalysisMode(analysisMode);
  SetHptGenerator(hptGenerator);

  Init();
}


//_____________________________________________________________________________
AliPerformanceEff::~AliPerformanceEff()
{
// destructor

  if(fEffHisto)  delete  fEffHisto; fEffHisto=0;
  if(fEffSecHisto)  delete  fEffSecHisto; fEffSecHisto=0;
  if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
}

//_____________________________________________________________________________
void AliPerformanceEff::Init()
{
  // Init histograms
  //

  // set pt bins
  Int_t nPtBins = 50;
  Double_t ptMin = 1.e-2, ptMax = 20.;

  Double_t *binsPt = 0;

  if (IsHptGenerator())  { 
        ptMax = 100.;
  } 
  binsPt = CreateLogAxis(nPtBins,ptMin,ptMax);

  /*
  Int_t nPtBins = 31;
  Double_t binsPt[32] = {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.7,0.8,0.9,1.0,1.2,1.4,1.6,1.8,2.0,2.25,2.5,2.75,3.,3.5,4.,5.,6.,8.,10.};
  Double_t ptMin = 0., ptMax = 10.;

  if(IsHptGenerator() == kTRUE) {
    nPtBins = 100;
    ptMin = 0.; ptMax = 100.;
  }
  */

  //mceta:mcphi:mcpt:pid:recStatus:findable:charge
  Int_t binsEffHisto[9]={30,144,nPtBins,5,2,2,3,fgkMaxClones+1,fgkMaxFakes+1};
  Double_t minEffHisto[9]={-1.5,0.,ptMin,0.,0.,0.,-1.5,0,0};
  Double_t maxEffHisto[9]={ 1.5,2.*TMath::Pi(), ptMax,5.,2.,2.,1.5,fgkMaxClones+1,fgkMaxFakes+1};

  fEffHisto = new THnSparseF("fEffHisto","mceta:mcphi:mcpt:pid:recStatus:findable:charge:nclones:nfakes",9,binsEffHisto,minEffHisto,maxEffHisto);
  fEffHisto->SetBinEdges(2,binsPt);

  fEffHisto->GetAxis(0)->SetTitle("#eta_{mc}");
  fEffHisto->GetAxis(1)->SetTitle("#phi_{mc} (rad)");
  fEffHisto->GetAxis(2)->SetTitle("p_{Tmc} (GeV/c)");
  fEffHisto->GetAxis(3)->SetTitle("pid");
  fEffHisto->GetAxis(4)->SetTitle("recStatus");
  fEffHisto->GetAxis(5)->SetTitle("findable");
  fEffHisto->GetAxis(6)->SetTitle("charge");
  fEffHisto->GetAxis(7)->SetTitle("nClones");
  fEffHisto->GetAxis(8)->SetTitle("nFakes");
  fEffHisto->Sumw2();

  //mceta:mcphi:mcpt:pid:recStatus:findable:mcR:mother_phi:mother_eta:charge
  Int_t binsEffSecHisto[12]={30,60,nPtBins,5,2,2,100,60,30,3,fgkMaxClones+1,fgkMaxFakes+1};
  Double_t minEffSecHisto[12]={-1.5,0.,ptMin,0.,0.,0.,0.,0.,-1.5,-1.5,0,0};
  Double_t maxEffSecHisto[12]={ 1.5,2.*TMath::Pi(), ptMax,5.,2.,2.,200,2.*TMath::Pi(),1.5,1.5,fgkMaxClones+1,fgkMaxFakes+1};

  fEffSecHisto = new THnSparseF("fEffSecHisto","mceta:mcphi:mcpt:pid:recStatus:findable:mcR:mother_phi:mother_eta:charge:nclones:nfakes",12,binsEffSecHisto,minEffSecHisto,maxEffSecHisto);
  fEffSecHisto->SetBinEdges(2,binsPt);

  fEffSecHisto->GetAxis(0)->SetTitle("#eta_{mc}");
  fEffSecHisto->GetAxis(1)->SetTitle("#phi_{mc} (rad)");
  fEffSecHisto->GetAxis(2)->SetTitle("p_{Tmc} (GeV/c)");
  fEffSecHisto->GetAxis(3)->SetTitle("pid");
  fEffSecHisto->GetAxis(4)->SetTitle("recStatus");
  fEffSecHisto->GetAxis(5)->SetTitle("findable");
  fEffSecHisto->GetAxis(6)->SetTitle("mcR (cm)");
  fEffSecHisto->GetAxis(7)->SetTitle("mother_phi (rad)");
  fEffSecHisto->GetAxis(8)->SetTitle("mother_eta");
  fEffSecHisto->GetAxis(9)->SetTitle("charge");
  fEffSecHisto->GetAxis(10)->SetTitle("nClones");
  fEffSecHisto->GetAxis(11)->SetTitle("nFakes");
  fEffSecHisto->Sumw2();

  // init cuts
  if(!fCutsMC) 
    AliDebug(AliLog::kError, "ERROR: Cannot find AliMCInfoCuts object");
  if(!fCutsRC) 
    AliDebug(AliLog::kError, "ERROR: Cannot find AliRecInfoCuts object");

  // init folder
  fAnalysisFolder = CreateFolder("folderEff","Analysis Efficiency Folder");
}

//_____________________________________________________________________________
void AliPerformanceEff::ProcessTPC(AliMCEvent* const mcEvent, AliESDEvent *const esdEvent)
{
  // Fill TPC only efficiency comparison information 
  if(!esdEvent) return;
  if(!mcEvent) return;

  AliStack *stack = mcEvent->Stack();
  if (!stack) {
    AliDebug(AliLog::kError, "Stack not available");
    return;
  }

  Int_t *labelsRec =  NULL;
  labelsRec =  new Int_t[esdEvent->GetNumberOfTracks()];
  if(!labelsRec) 
  {
     Printf("Cannot create labelsRec");
     return;
  }
  for(Int_t i=0;i<esdEvent->GetNumberOfTracks();i++) { labelsRec[i] = 0; }

  Int_t *labelsAllRec =  NULL;
  labelsAllRec =  new Int_t[esdEvent->GetNumberOfTracks()];
  if(!labelsAllRec) { 
     delete  [] labelsRec;
     Printf("Cannot create labelsAllRec");
     return;
  }
  for(Int_t i=0;i<esdEvent->GetNumberOfTracks();i++) { labelsAllRec[i] = 0; }

  // loop over rec. tracks
  AliESDtrack *track=0;
  for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) 
  { 
    track = esdEvent->GetTrack(iTrack);
    if(!track) continue;
    if(track->Charge()==0) continue;

    // if not fUseKinkDaughters don't use tracks with kink index > 0
    if(!fUseKinkDaughters && track->GetKinkIndex(0) > 0) continue;

    //Int_t label = TMath::Abs(track->GetLabel()); 
	Int_t label = track->GetTPCLabel(); //Use TPC-only label for TPC-only efficiency analysis
    labelsAllRec[iTrack]=label;

    // TPC only
    if(IsRecTPC(track) != 0) { 
      labelsRec[iTrack]=label;
    }

  }
  
  // 
  // MC histograms for efficiency studies
  //
  Int_t nPart  = stack->GetNtrack();
  //Int_t nPart  = stack->GetNprimary();
  for (Int_t iMc = 0; iMc < nPart; ++iMc) 
  {
	if (iMc == 0) continue;		//Cannot distinguish between track or fake track
    TParticle* particle = stack->Particle(iMc);
    if (!particle) continue;
    if (!particle->GetPDG()) continue; 
    if (particle->GetPDG()->Charge() == 0.0) continue;
      
    // physical primary
     Bool_t prim = stack->IsPhysicalPrimary(iMc);
     if(!prim) continue;

    // --- check for double filling in stack
    // use only particles with no daughters in the list of primaries
    Int_t nDaughters = 0;// particle->GetNDaughters();
    
    for( Int_t iDaught=0; iDaught < particle->GetNDaughters(); iDaught++ ) {
      if( particle->GetDaughter(iDaught) < stack->GetNprimary() )
	nDaughters++;
    }

    if( nDaughters > 0 ) 
      continue;
    // --- check for double filling in stack

    /*Bool_t findable = kFALSE;
    for(Int_t iRec=0; iRec<esdEvent->GetNumberOfTracks(); ++iRec) 
    {
      // check findable
      if(iMc == labelsAllRec[iRec]) 
      {
        findable = IsFindable(mcEvent,iMc);
        break;
      }
    }*/
    Bool_t findable = IsFindable(mcEvent,iMc);

    Bool_t recStatus = kFALSE;
    Int_t nClones = 0, nFakes = 0;
    for(Int_t iRec=0; iRec<esdEvent->GetNumberOfTracks(); ++iRec) 
    {
      // check reconstructed
      if(iMc == labelsRec[iRec]) 
      {
        if (recStatus && nClones < fgkMaxClones) nClones++;
        recStatus = kTRUE;
      }
	  //In order to relate the fake track to track parameters, we assign it to the best matching ESD track.
	  if (labelsRec[iRec] < 0 && -labelsRec[iRec] == iMc && nFakes < fgkMaxFakes) nFakes++;
    }

    // Only 5 charged particle species (e,mu,pi,K,p)
    if (fCutsMC->IsPdgParticle(TMath::Abs(particle->GetPdgCode())) == kFALSE) continue; 

    // transform Pdg to Pid
    Int_t pid = TransformToPID(particle);

    Float_t mceta =  particle->Eta();
    Float_t mcphi =  particle->Phi();
    if(mcphi<0) mcphi += 2.*TMath::Pi();
    Float_t mcpt = particle->Pt();
    Float_t charge = 0.;
    if (particle->GetPDG()->Charge() < 0)  charge = -1.;    
    else if (particle->GetPDG()->Charge() > 0)  charge = 1.;

    // Fill histograms
    Double_t vEffHisto[9] = {mceta, mcphi, mcpt, static_cast<Double_t>(pid), static_cast<Double_t>(recStatus), static_cast<Double_t>(findable), static_cast<Double_t>(charge), static_cast<Double_t>(nClones), static_cast<Double_t>(nFakes)}; 
    fEffHisto->Fill(vEffHisto);
  }
  if(labelsRec) delete [] labelsRec; labelsRec = 0;
  if(labelsAllRec) delete [] labelsAllRec; labelsAllRec = 0;
}

//_____________________________________________________________________________
void AliPerformanceEff::ProcessTPCSec(AliMCEvent* const mcEvent, AliESDEvent *const esdEvent)
{
  // Fill TPC only efficiency comparison information for secondaries

  if(!esdEvent) return;

  Int_t *labelsRecSec =  NULL;
  labelsRecSec =  new Int_t[esdEvent->GetNumberOfTracks()];
  if(!labelsRecSec) 
  {
     Printf("Cannot create labelsRecSec");
     return;
  }
  for(Int_t i=0;i<esdEvent->GetNumberOfTracks();i++) { labelsRecSec[i] = 0; }

  Int_t *labelsAllRecSec =  NULL;
  labelsAllRecSec =  new Int_t[esdEvent->GetNumberOfTracks()];
  if(!labelsAllRecSec) { 
     delete [] labelsRecSec;
     Printf("Cannot create labelsAllRecSec");
     return;
  }
  for(Int_t i=0;i<esdEvent->GetNumberOfTracks();i++) { labelsAllRecSec[i] = 0; }

  // loop over rec. tracks
  AliESDtrack *track=0;
  Int_t multAll=0, multRec=0;
  for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) 
  { 
    track = esdEvent->GetTrack(iTrack);
    if(!track) continue;
    if(track->Charge()==0) continue;

    // if not fUseKinkDaughters don't use tracks with kink index > 0
    if(!fUseKinkDaughters && track->GetKinkIndex(0) > 0) continue;

    //Int_t label = TMath::Abs(track->GetLabel());
	Int_t label = track->GetTPCLabel(); //Use TPC-only label for TPC-only efficiency analysis
    labelsAllRecSec[multAll]=label;
    multAll++;

    // TPC only
    if(IsRecTPC(track) != 0) {
      labelsRecSec[multRec]=label;
      multRec++;
    }
  }

  // 
  // MC histograms for efficiency studies
  //
  if(mcEvent)  { 
 
  AliStack *stack = mcEvent->Stack();
  if (stack) {

  Int_t nPart  = stack->GetNtrack();
  //Int_t nPart  = stack->GetNprimary();
  for (Int_t iMc = 0; iMc < nPart; ++iMc) 
  {
	if (iMc == 0) continue;		//Cannot distinguish between track or fake track
    TParticle* particle = stack->Particle(iMc);
    if (!particle) continue;
    if (!particle->GetPDG()) continue; 
    if (particle->GetPDG()->Charge() == 0.0) continue;
      
    // physical primary
    Bool_t prim = stack->IsPhysicalPrimary(iMc);

    // only secondaries which can be reconstructed at TPC
    if(prim) continue;

    //Float_t radius = TMath::Sqrt(particle->Vx()*particle->Vx()+particle->Vy()*particle->Vy()+particle->Vz()*particle->Vz());
    //if(radius > fCutsMC->GetMaxR()) continue;

    // only secondary electrons from gamma conversion
    //if( TMath::Abs(particle->GetPdgCode())!=fCutsMC->GetEM() ||   particle->GetUniqueID() != 5) continue;

    /*Bool_t findable = kFALSE;
    for(Int_t iRec=0; iRec<multAll; ++iRec) 
    {
      // check findable
      if(iMc == labelsAllRecSec[iRec]) 
      {
        findable = IsFindable(mcEvent,iMc);
	break;
      }
    }*/
	Bool_t findable = IsFindable(mcEvent,iMc);

    Bool_t recStatus = kFALSE;
	Int_t nClones = 0, nFakes = 0;
    for(Int_t iRec=0; iRec<multRec; ++iRec) 
    {
      // check reconstructed
      if(iMc == labelsRecSec[iRec]) 
      {
        if (recStatus && nClones < fgkMaxClones) nClones++;
		recStatus = kTRUE;
      }
	  //In order to relate the fake track to track parameters, we assign it to the best matching ESD track.
	  if (labelsRecSec[iRec] < 0 && -labelsRecSec[iRec] == iMc && nFakes < fgkMaxFakes) nFakes++;
    }

    // Only 5 charged particle species (e,mu,pi,K,p)
    if (fCutsMC->IsPdgParticle(TMath::Abs(particle->GetPdgCode())) == kFALSE) continue; 

    // transform Pdg to Pid
    Int_t pid = TransformToPID(particle);

    Float_t mceta =  particle->Eta();
    Float_t mcphi =  particle->Phi();
    if(mcphi<0) mcphi += 2.*TMath::Pi();
    Float_t mcpt = particle->Pt();
    Float_t mcR = particle->R();

    // get info about mother
    Int_t motherLabel = particle->GetMother(0);
    if(motherLabel < 0) continue;
    TParticle *mother = stack->Particle(motherLabel);
    if(!mother) continue; 

    Float_t mother_eta = mother->Eta();
    Float_t mother_phi = mother->Phi();
    if(mother_phi<0) mother_phi += 2.*TMath::Pi();

    Float_t charge = 0.;
    if (particle->GetPDG()->Charge() < 0)  charge = -1.;    
    else if (particle->GetPDG()->Charge() > 0)  charge = 1.;

    // Fill histograms
    Double_t vEffSecHisto[12] = { mceta, mcphi, mcpt, static_cast<Double_t>(pid), static_cast<Double_t>(recStatus), static_cast<Double_t>(findable), mcR, mother_phi, mother_eta, static_cast<Double_t>(charge), static_cast<Double_t>(nClones), static_cast<Double_t>(nFakes) }; 
    fEffSecHisto->Fill(vEffSecHisto);
  }
  }
  }

  if(labelsRecSec) delete [] labelsRecSec; labelsRecSec = 0;
  if(labelsAllRecSec) delete [] labelsAllRecSec; labelsAllRecSec = 0;
}




//_____________________________________________________________________________
void AliPerformanceEff::ProcessTPCITS(AliMCEvent* const mcEvent, AliESDEvent *const esdEvent)
{
  // Fill efficiency comparison information

  if(!esdEvent) return;
  if(!mcEvent) return;

  AliStack *stack = mcEvent->Stack();
  if (!stack) {
    AliDebug(AliLog::kError, "Stack not available");
    return;
  }

  Int_t *labelsRecTPCITS =  NULL;
  labelsRecTPCITS =  new Int_t[esdEvent->GetNumberOfTracks()];
  if(!labelsRecTPCITS) 
  {
     Printf("Cannot create labelsRecTPCITS");
     return;
  }
  for(Int_t i=0;i<esdEvent->GetNumberOfTracks();i++) { labelsRecTPCITS[i] = 0; }

  Int_t *labelsAllRecTPCITS =  NULL;
  labelsAllRecTPCITS =  new Int_t[esdEvent->GetNumberOfTracks()];
  if(!labelsAllRecTPCITS) { 
     delete [] labelsRecTPCITS;
     Printf("Cannot create labelsAllRecTPCITS");
     return;
  }
  for(Int_t i=0;i<esdEvent->GetNumberOfTracks();i++) { labelsAllRecTPCITS[i] = 0; }

  // loop over rec. tracks
  AliESDtrack *track=0;
  for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) 
  { 
    track = esdEvent->GetTrack(iTrack);
    if(!track) continue;
    if(track->Charge()==0) continue;

    // if not fUseKinkDaughters don't use tracks with kink index > 0
    if(!fUseKinkDaughters && track->GetKinkIndex(0) > 0) continue;

    //Int_t label = TMath::Abs(track->GetLabel()); 
	Int_t label = track->GetLabel();  //Use global label for combined efficiency analysis
    labelsAllRecTPCITS[iTrack]=label;

    // iTPC+ITS
    if(IsRecTPCITS(track) != 0) 
      labelsRecTPCITS[iTrack]=label;
  }

  // 
  // MC histograms for efficiency studies
  //
  //Int_t nPart  = stack->GetNtrack();
  Int_t nPart  = stack->GetNprimary();
  for (Int_t iMc = 0; iMc < nPart; ++iMc) 
  {
	if (iMc == 0) continue;		//Cannot distinguish between track or fake track
    TParticle* particle = stack->Particle(iMc);
    if (!particle) continue;
    if (!particle->GetPDG()) continue; 
    if (particle->GetPDG()->Charge() == 0.0) continue;
      
    // physical primary
    Bool_t prim = stack->IsPhysicalPrimary(iMc);
    if(!prim) continue;

    /*Bool_t findable = kFALSE;
    for(Int_t iRec=0; iRec<esdEvent->GetNumberOfTracks(); ++iRec) 
    {
      // check findable
      if(iMc == labelsAllRecTPCITS[iRec]) 
      {
        findable = IsFindable(mcEvent,iMc);
	break;
      }
    }*/
	Bool_t findable = IsFindable(mcEvent,iMc);

    Bool_t recStatus = kFALSE;
	Int_t nClones = 0, nFakes = 0;
    for(Int_t iRec=0; iRec<esdEvent->GetNumberOfTracks(); ++iRec) 
    {
      // check reconstructed
      if(iMc == labelsRecTPCITS[iRec]) 
      {
        if (recStatus && nClones < fgkMaxClones) nClones++;
		recStatus = kTRUE;
      }
	  //In order to relate the fake track to track parameters, we assign it to the best matching ESD track.
	  if (labelsRecTPCITS[iRec] < 0 && -labelsRecTPCITS[iRec] == iMc && nFakes < fgkMaxFakes) nFakes++;
    }

    // Only 5 charged particle species (e,mu,pi,K,p)
    if (fCutsMC->IsPdgParticle(TMath::Abs(particle->GetPdgCode())) == kFALSE) continue; 

    // transform Pdg to Pid
    Int_t pid = TransformToPID(particle);

    Float_t mceta =  particle->Eta();
    Float_t mcphi =  particle->Phi();
    if(mcphi<0) mcphi += 2.*TMath::Pi();
    Float_t mcpt = particle->Pt();

    Float_t charge = 0.;
    if (particle->GetPDG()->Charge() < 0)  charge = -1.;    
    else if (particle->GetPDG()->Charge() > 0)  charge = 1.;
    
    // Fill histograms
    Double_t vEffHisto[9] = { mceta, mcphi, mcpt, static_cast<Double_t>(pid), static_cast<Double_t>(recStatus), static_cast<Double_t>(findable), static_cast<Double_t>(charge), static_cast<Double_t>(nClones), static_cast<Double_t>(nFakes)}; 
    fEffHisto->Fill(vEffHisto);
  }

  if(labelsRecTPCITS) delete [] labelsRecTPCITS; labelsRecTPCITS = 0;
  if(labelsAllRecTPCITS) delete [] labelsAllRecTPCITS; labelsAllRecTPCITS = 0;
}

//_____________________________________________________________________________
void AliPerformanceEff::ProcessConstrained(AliMCEvent* const mcEvent, AliESDEvent *const esdEvent)
{
  // Process comparison information 
  if(!esdEvent) return;
  if(!mcEvent) return;

  AliStack *stack = mcEvent->Stack();
  if (!stack) {
    AliDebug(AliLog::kError, "Stack not available");
    return;
  }

  Int_t *labelsRecConstrained =  NULL;
  labelsRecConstrained =  new Int_t[esdEvent->GetNumberOfTracks()];
  if(!labelsRecConstrained) 
  {
     Printf("Cannot create labelsRecConstrained");
     return;
  }
  for(Int_t i=0;i<esdEvent->GetNumberOfTracks();i++) { labelsRecConstrained[i] = 0; }

  Int_t *labelsAllRecConstrained =  NULL;
  labelsAllRecConstrained =  new Int_t[esdEvent->GetNumberOfTracks()];
  if(!labelsAllRecConstrained) { 
     delete [] labelsRecConstrained;
     Printf("Cannot create labelsAllRecConstrained");
     return;
  }
  for(Int_t i=0;i<esdEvent->GetNumberOfTracks();i++) { labelsAllRecConstrained[i] = 0; }

  // loop over rec. tracks
  AliESDtrack *track=0;
  for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) 
  { 
    track = esdEvent->GetTrack(iTrack);
    if(!track) continue;
    if(track->Charge()==0) continue;

    // if not fUseKinkDaughters don't use tracks with kink index > 0
    if(!fUseKinkDaughters && track->GetKinkIndex(0) > 0) continue;

    //Int_t label = TMath::Abs(track->GetLabel()); 
	Int_t label = track->GetLabel(); 
    labelsAllRecConstrained[iTrack]=label;

    // Constrained
    if(IsRecConstrained(track) != 0) 
      labelsRecConstrained[iTrack]=label;

  }

  // 
  // MC histograms for efficiency studies
  //
 

  //Int_t nPart  = stack->GetNtrack();
  Int_t nPart  = stack->GetNprimary();
  for (Int_t iMc = 0; iMc < nPart; ++iMc) 
  {
	if (iMc == 0) continue;		//Cannot distinguish between track or fake track
    TParticle* particle = stack->Particle(iMc);
    if (!particle) continue;
    if (!particle->GetPDG()) continue; 
    if (particle->GetPDG()->Charge() == 0.0) continue;
      
    // physical primary
    Bool_t prim = stack->IsPhysicalPrimary(iMc);
    if(!prim) continue;

    /*Bool_t findable = kFALSE;
    for(Int_t iRec=0; iRec<esdEvent->GetNumberOfTracks(); ++iRec) 
    {
      // check findable
      if(iMc == labelsAllRecConstrained[iRec]) 
      {
        findable = IsFindable(mcEvent,iMc);
	break;
      }
    }*/
	Bool_t findable = IsFindable(mcEvent,iMc);

    Bool_t recStatus = kFALSE;
	Int_t nClones = 0, nFakes = 0;
    for(Int_t iRec=0; iRec<esdEvent->GetNumberOfTracks(); ++iRec) 
    {
      // check reconstructed
      if(iMc == labelsRecConstrained[iRec]) 
      {
        if (recStatus && nClones < fgkMaxClones) nClones++;
		recStatus = kTRUE;
      }
	  //In order to relate the fake track to track parameters, we assign it to the best matching ESD track.
	  if (labelsRecConstrained[iRec] < 0 && -labelsRecConstrained[iRec] == iMc && nFakes < fgkMaxFakes) nFakes++;
    }

    // Only 5 charged particle species (e,mu,pi,K,p)
    if (fCutsMC->IsPdgParticle(TMath::Abs(particle->GetPdgCode())) == kFALSE) continue; 

    // transform Pdg to Pid
    Int_t pid = TransformToPID(particle);

    Float_t mceta =  particle->Eta();
    Float_t mcphi =  particle->Phi();
    if(mcphi<0) mcphi += 2.*TMath::Pi();
    Float_t mcpt = particle->Pt();

    Float_t charge = 0.;
    if (particle->GetPDG()->Charge() < 0)  charge = -1.;    
    else if (particle->GetPDG()->Charge() > 0)  charge = 1.;

    // Fill histograms
    Double_t vEffHisto[9] = { mceta, mcphi, mcpt, static_cast<Double_t>(pid), static_cast<Double_t>(recStatus), static_cast<Double_t>(findable), static_cast<Double_t>(charge), static_cast<Double_t>(nClones), static_cast<Double_t>(nFakes) }; 
    fEffHisto->Fill(vEffHisto);
  }

  if(labelsRecConstrained) delete [] labelsRecConstrained; labelsRecConstrained = 0;
  if(labelsAllRecConstrained) delete [] labelsAllRecConstrained; labelsAllRecConstrained = 0;
}

//_____________________________________________________________________________
void AliPerformanceEff::Exec(AliMCEvent* const mcEvent, AliESDEvent *const esdEvent, AliESDfriend *const esdFriend, const Bool_t bUseMC, const Bool_t bUseESDfriend)
{
  // Process comparison information 
  //
  if(!esdEvent) 
  {
    Error("Exec","esdEvent not available");
    return;
  }
  AliHeader* header = 0;
  AliGenEventHeader* genHeader = 0;
  AliStack* stack = 0;
  TArrayF vtxMC(3);
  
  if(bUseMC)
  {
    if(!mcEvent) {
      Error("Exec","mcEvent not available");
      return;
    }
    // get MC event header
    header = mcEvent->Header();
    if (!header) {
      Error("Exec","Header not available");
      return;
    }
    // MC particle stack
    stack = mcEvent->Stack();
    if (!stack) {
      Error("Exec","Stack not available");
      return;
    }
    // get MC vertex
    genHeader = header->GenEventHeader();
    if (!genHeader) {
      Error("Exec","Could not retrieve genHeader from Header");
      return;
    }
    genHeader->PrimaryVertex(vtxMC);
  } 
  else {
    Error("Exec","MC information required!");
    return;
  } 

  // use ESD friends
  if(bUseESDfriend) {
    if(!esdFriend) {
      Error("Exec","esdFriend not available");
      return;
    }
  }

  //
  //  Process events
  //
  if(GetAnalysisMode() == 0) ProcessTPC(mcEvent,esdEvent);
  else if(GetAnalysisMode() == 1) ProcessTPCITS(mcEvent,esdEvent);
  else if(GetAnalysisMode() == 2) ProcessConstrained(mcEvent,esdEvent);
  else if(GetAnalysisMode() == 5) ProcessTPCSec(mcEvent,esdEvent);
  else {
    printf("ERROR: AnalysisMode %d \n",fAnalysisMode);
    return;
  }
}

//_____________________________________________________________________________
Int_t AliPerformanceEff::TransformToPID(TParticle *particle) 
{
// transform Pdg to Pid
// Pdg convension is different for hadrons and leptons 
// (e.g. K+/K- = 321/-321; e+/e- = -11/11 ) 

  Int_t pid = -1;
  if( TMath::Abs(particle->GetPdgCode())==fCutsMC->GetEM() ) pid = 0; 
  if( TMath::Abs(particle->GetPdgCode())==fCutsMC->GetMuM() ) pid = 1; 
  if( TMath::Abs(particle->GetPdgCode())==fCutsMC->GetPiP() ) pid = 2; 
  if( TMath::Abs(particle->GetPdgCode())==fCutsMC->GetKP() ) pid = 3; 
  if( TMath::Abs(particle->GetPdgCode())==fCutsMC->GetProt() ) pid = 4; 

return pid;
}

//_____________________________________________________________________________
Bool_t AliPerformanceEff::IsFindable(const AliMCEvent *mcEvent, Int_t label) 
{
//
// Findfindable tracks
//
if(!mcEvent) return kFALSE;

  AliMCParticle *mcParticle = (AliMCParticle*) mcEvent->GetTrack(label);
  if(!mcParticle) return kFALSE;

  Int_t counter; 
  Float_t tpcTrackLength = mcParticle->GetTPCTrackLength(AliTracker::GetBz(),0.05,counter,3.0); 
  //printf("tpcTrackLength %f \n", tpcTrackLength);

return (tpcTrackLength>fCutsMC->GetMinTrackLength());    
}

//_____________________________________________________________________________
Bool_t AliPerformanceEff::IsRecTPC(AliESDtrack *esdTrack) 
{
//
// Check whether track is reconstructed in TPC
//
if(!esdTrack) return kFALSE;

  const AliExternalTrackParam *track = esdTrack->GetTPCInnerParam();
  if(!track) return kFALSE;

  Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
  esdTrack->GetImpactParametersTPC(dca,cov);

  Bool_t recStatus = kFALSE;
  if(esdTrack->GetTPCNcls()>fCutsRC->GetMinNClustersTPC()) recStatus = kTRUE; 

  /*
  if( TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && 
      TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())
  {
    recStatus = kTRUE;
  }
  */

return recStatus;
}

//_____________________________________________________________________________
Bool_t AliPerformanceEff::IsRecTPCITS(AliESDtrack *esdTrack) 
{
//
// Check whether track is reconstructed in TPCITS
//
if(!esdTrack) return kFALSE;

  Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
  esdTrack->GetImpactParameters(dca,cov);

  Bool_t recStatus = kFALSE;

  if ((esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0) return kFALSE; // TPC refit
  if ((esdTrack->GetStatus()&AliESDtrack::kITSrefit)==0) return kFALSE; // ITS refit
  if (esdTrack->GetITSclusters(0)<fCutsRC->GetMinNClustersITS()) return kFALSE;  // min. nb. ITS clusters
  //if ((esdTrack->GetStatus()&AliESDtrack::kITSrefit)==0) return kFALSE; // ITS refit
  //Int_t clusterITS[200];
  //if(esdTrack->GetITSclusters(clusterITS)<fCutsRC->GetMinNClustersITS()) return kFALSE;  // min. nb. ITS clusters

  recStatus = kTRUE;
  /*
  if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && 
     TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())
  {
    recStatus = kTRUE;
  }
  */

return recStatus;
}

//_____________________________________________________________________________
Bool_t AliPerformanceEff::IsRecConstrained(AliESDtrack *esdTrack) 
{
//
// Check whether track is reconstructed in IsRecConstrained
//
  if(!esdTrack) return kFALSE;

  const AliExternalTrackParam * track = esdTrack->GetConstrainedParam();
  if(!track) return kFALSE;

  Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
  esdTrack->GetImpactParameters(dca,cov);
  //Int_t label = TMath::Abs(esdTrack->GetLabel()); 

  Bool_t recStatus = kFALSE;

  if ((esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0) return kFALSE; // TPC refit
  if (esdTrack->GetTPCNcls()<fCutsRC->GetMinNClustersTPC()) return kFALSE; // min. nb. TPC clusters
  Int_t clusterITS[200];
  if(esdTrack->GetITSclusters(clusterITS)<fCutsRC->GetMinNClustersITS()) return kFALSE;  // min. nb. ITS clusters

  recStatus = kTRUE;

  /*
  if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && 
     TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())
  {
    recStatus = kTRUE;
  }
  */

return recStatus;
}

//_____________________________________________________________________________
Long64_t AliPerformanceEff::Merge(TCollection* const list) 
{
  // Merge list of objects (needed by PROOF)

  if (!list)
  return 0;

  if (list->IsEmpty())
  return 1;

  TIterator* iter = list->MakeIterator();
  TObject* obj = 0;

  // collection of generated histograms

  Int_t count=0;
  while((obj = iter->Next()) != 0) 
  {
    AliPerformanceEff* entry = dynamic_cast<AliPerformanceEff*>(obj);
    if (entry == 0) continue; 
  
     fEffHisto->Add(entry->fEffHisto);
     fEffSecHisto->Add(entry->fEffSecHisto);
  count++;
  }

return count;
}
 
//_____________________________________________________________________________
void AliPerformanceEff::Analyse() 
{
  // Analyse comparison information and store output histograms
  // in the folder "folderEff" 
  //
  TH1::AddDirectory(kFALSE);
  TObjArray *aFolderObj = new TObjArray;
  if(!aFolderObj) return;
  //  char title[256];

  //
  // efficiency vs pt
  //

  if(GetAnalysisMode() != 5) {

  fEffHisto->GetAxis(0)->SetRangeUser(-0.9,0.89); // eta range
  fEffHisto->GetAxis(2)->SetRangeUser(0.1,19.99);   // pt range  // FIXME maybe remove since range is defined in THnSparse 

  // rec efficiency vs pt
  fEffHisto->GetAxis(3)->SetRangeUser(0.,3.99);  // reconstructed 

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(2, "ptRecEff", "rec. efficiency", 0));
  aFolderObj->Add(AddHistoEff(2, "ptClone", "clone rate", 1));
  aFolderObj->Add(AddHistoEff(2, "ptFake", "fake rate", 2));

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(2, "ptRecEffNeg", "rec. efficiency neg.", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(2, "ptRecEffPos", "rec. efficiency pos.", 0));

  // rec efficiency vs pid vs pt
  fEffHisto->GetAxis(3)->SetRange(3,3);    // pions
  
  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(2, "ptRecEffPi", "rec. efficiency (pions)", 0));
 
  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(2, "ptRecEffPiNeg", "rec. efficiency (pions) neg.", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(2, "ptRecEffPiPos", "rec. efficiency (pions) pos.", 0));


  fEffHisto->GetAxis(3)->SetRange(4,4);    // kaons
  
  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(2, "ptRecEffK", "rec. efficiency (kaons)", 0));
  
  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(2, "ptRecEffKNeg", "rec. efficiency (kaons) neg.", 0));
 
  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(2, "ptRecEffKPos", "rec. efficiency (kaons) pos.", 0));
 
  
  fEffHisto->GetAxis(3)->SetRange(5,5);    // protons

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(2, "ptRecEffP", "rec. efficiency (protons)", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(2, "ptRecEffPNeg", "rec. efficiency (protons) neg.", 0));
 
  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(2, "ptRecEffPPos", "rec. efficiency (protons) pos.", 0));

  // findable efficiency vs pt
  fEffHisto->GetAxis(3)->SetRangeUser(0.,4.); 
  fEffHisto->GetAxis(5)->SetRange(2,2); // findable

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(2, "ptRecEffF", "rec. efficiency (findable)", 0));
  aFolderObj->Add(AddHistoEff(2, "ptCloneF", "clone rate (findable)", 1));
  aFolderObj->Add(AddHistoEff(2, "ptFakeF", "fake rate (findable)", 2));


  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(2, "ptRecEffFNeg", "rec. efficiency (findable) neg.", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(2, "ptRecEffFPos", "rec. efficiency (findable) pos.", 0));

  //
  // efficiency vs eta
  //

  fEffHisto->GetAxis(0)->SetRangeUser(-1.5,1.49); // eta range
  fEffHisto->GetAxis(2)->SetRangeUser(0.1,19.99); // pt range
  fEffHisto->GetAxis(5)->SetRangeUser(0.,1.0);   // all

  // rec efficiency vs eta
  fEffHisto->GetAxis(3)->SetRangeUser(0.,4.);  // reconstructed 

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(0, "etaRecEff", "rec. efficiency", 0));
  aFolderObj->Add(AddHistoEff(0, "etaClone", "clone rate", 1));
  aFolderObj->Add(AddHistoEff(0, "etaFake", "fake rate", 2));


  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(0, "etaRecEffNeg", "rec. efficiency neg.", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(0, "etaRecEffPos", "rec. efficiency pos.", 0));

  // rec efficiency vs pid vs eta
  fEffHisto->GetAxis(3)->SetRange(3,3);    // pions
  
  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(0, "etaRecEffPi", "rec. efficiency (pions)", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(0, "etaRecEffPiNeg", "rec. efficiency (pions) neg.", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(0, "etaRecEffPiPos", "rec. efficiency (pions) pos.", 0));


  fEffHisto->GetAxis(3)->SetRange(4,4);    // kaons
  
  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(0, "etaRecEffK", "rec. efficiency (kaons)", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(0, "etaRecEffKNeg", "rec. efficiency (kaons) neg.", 0));
  
  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(0, "etaRecEffKPos", "rec. efficiency (kaons) pos.", 0));
  
  
  fEffHisto->GetAxis(3)->SetRange(5,5);    // protons

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(0, "etaRecEffP", "rec. efficiency (protons)", 0));
 
  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(0, "etaRecEffPNeg", "rec. efficiency (protons) neg.", 0));
  
  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(0, "etaRecEffPPos", "rec. efficiency (protons) pos.", 0));

  // findable efficiency vs eta
  fEffHisto->GetAxis(3)->SetRangeUser(0.,4.); 
  fEffHisto->GetAxis(5)->SetRange(2,2); // findable

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(0, "etaRecEffF", "rec. efficiency (findable)", 0));
  aFolderObj->Add(AddHistoEff(0, "etaCloneF", "clone rate (findable)", 1));
  aFolderObj->Add(AddHistoEff(0, "etaFakeF", "fake rate (findable)", 2));


  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(0, "etaRecEffFNeg", "rec. efficiency (findable) neg.", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(0, "etaRecEffFPos", "rec. efficiency (findable) pos.", 0));

  //
  // efficiency vs phi
  //

  fEffHisto->GetAxis(0)->SetRangeUser(-0.9,0.89); // eta range
  fEffHisto->GetAxis(2)->SetRangeUser(0.1,19.99); // pt range
  fEffHisto->GetAxis(5)->SetRangeUser(0.,1.);   // all

  // rec efficiency vs phi
  fEffHisto->GetAxis(3)->SetRangeUser(0.,4.);  // reconstructed 

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(1, "phiRecEff", "rec. efficiency", 0));
  aFolderObj->Add(AddHistoEff(1, "phiClone", "clone rate", 1));
  aFolderObj->Add(AddHistoEff(1, "phiFake", "fake rate", 2));

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(1, "phiRecEffNeg", "rec. efficiency neg.", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(1, "phiRecEffPos", "rec. efficiency pos.", 0));

  // rec efficiency vs pid vs phi
  fEffHisto->GetAxis(3)->SetRange(3,3);    // pions
  
  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(1, "phiRecEffPi", "rec. efficiency (pions)", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(1, "phiRecEffPiNeg", "rec. efficiency (pions) neg.", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(1, "phiRecEffPiPos", "rec. efficiency (pions) pos.", 0));


  fEffHisto->GetAxis(3)->SetRange(4,4);    // kaons
  
  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(1, "phiRecEffK", "rec. efficiency (kaons)", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(1, "phiRecEffKNeg", "rec. efficiency (kaons) neg.", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(1, "phiRecEffKPos", "rec. efficiency (kaons) pos.", 0));
 
  
  fEffHisto->GetAxis(3)->SetRange(5,5);    // protons

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(1, "phiRecEffP", "rec. efficiency (protons)", 0));

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(1, "phiRecEffPNeg", "rec. efficiency (protons) neg.", 0));
 
  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(1, "phiRecEffPPos", "rec. efficiency (protons) pos.", 0));

  // findable efficiency vs phi
  fEffHisto->GetAxis(3)->SetRangeUser(0.,4.); 
  fEffHisto->GetAxis(5)->SetRange(2,2); // findable

  fEffHisto->GetAxis(6)->SetRangeUser(-2.,2.);   // charge all
  aFolderObj->Add(AddHistoEff(1, "phiRecEffF", "rec. efficiency (findable)", 0));
  aFolderObj->Add(AddHistoEff(1, "phiCloneF", "clone rate (findable)", 1));
  aFolderObj->Add(AddHistoEff(1, "phiFakeF", "fake rate (findable)", 2));


  fEffHisto->GetAxis(6)->SetRangeUser(-2.,0.);   // charge negativ
  aFolderObj->Add(AddHistoEff(1, "phiRecEffFNeg", "rec. efficiency (findable) neg.", 0));
 
  fEffHisto->GetAxis(6)->SetRangeUser(0.,2.);    // charge positiv
  aFolderObj->Add(AddHistoEff(1, "phiRecEffFPos", "rec. efficiency (findable) pos.", 0));
  }
  else {
  // 
  Float_t minEta=-1.5, maxEta=1.49;
  Float_t minR=0.0, maxR=150.0;
  Float_t minPt=0.10, maxPt=19.99;

  // mother eta range
  fEffSecHisto->GetAxis(8)->SetRangeUser(minEta,maxEta);

  // particle creation radius range 
  fEffSecHisto->GetAxis(6)->SetRangeUser(minR,maxR);

  //
  fEffSecHisto->GetAxis(0)->SetRangeUser(minEta,maxEta);
  fEffSecHisto->GetAxis(2)->SetRangeUser(minPt,maxPt);

  // rec efficiency vs pt

  aFolderObj->Add(AddHistoEff(2, "ptRecEff", "rec. efficiency", 0, 1));
  aFolderObj->Add(AddHistoEff(2, "ptClone", "clone rate", 1, 1));
  aFolderObj->Add(AddHistoEff(2, "ptFake", "fake rate", 2, 1));

  // rec efficiency vs pid vs pt
  
  fEffSecHisto->GetAxis(3)->SetRange(1,1); // electrons
  aFolderObj->Add(AddHistoEff(2, "ptRecEffEle", "rec. efficiency (electrons)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRange(3,3); // pions
  aFolderObj->Add(AddHistoEff(2, "ptRecEffPi", "rec. efficiency (pions)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRange(4,4); // kaons
  aFolderObj->Add(AddHistoEff(2, "ptRecEffK", "rec. efficiency (kaons)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRange(5,5); // protons
  aFolderObj->Add(AddHistoEff(2, "ptRecEffP", "rec. efficiency (protons)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRangeUser(0.,4.); 

  // findable efficiency vs pt

  fEffSecHisto->GetAxis(5)->SetRange(2,2); // findable
  aFolderObj->Add(AddHistoEff(2, "ptRecEffF", "rec. efficiency (findable)", 0, 1));
  aFolderObj->Add(AddHistoEff(2, "ptCloneF", "clone rate (findable)", 1, 1));
  aFolderObj->Add(AddHistoEff(2, "ptFakeF", "fake rate (findable)", 2, 1));

  //
  // efficiency vs eta
  //
  fEffSecHisto->GetAxis(2)->SetRangeUser(minPt,maxPt);
  fEffSecHisto->GetAxis(4)->SetRangeUser(0.,1.);   // all
  fEffSecHisto->GetAxis(5)->SetRangeUser(0.,1.);   // all

  aFolderObj->Add(AddHistoEff(0, "etaRecEff", "rec. efficiency", 0, 1));
  aFolderObj->Add(AddHistoEff(0, "etaClone", "clone rate", 1, 1));
  aFolderObj->Add(AddHistoEff(0, "etaFake", "fake rate", 2, 1));

  // rec efficiency vs pid vs eta
  fEffSecHisto->GetAxis(3)->SetRange(1,1); // electrons
  aFolderObj->Add(AddHistoEff(0, "etaRecEffEle", "rec. efficiency (electrons)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRange(3,3); // pions
  aFolderObj->Add(AddHistoEff(0, "etaRecEffPi", "rec. efficiency (pions)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRange(4,4); // kaons
  aFolderObj->Add(AddHistoEff(0, "etaRecEffK", "rec. efficiency (kaons)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRange(5,5); // protons
  aFolderObj->Add(AddHistoEff(0, "etaRecEffP", "rec. efficiency (protons)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRangeUser(0.,4.); 

  // findable efficiency vs eta

  fEffSecHisto->GetAxis(5)->SetRange(2,2); // findable
  aFolderObj->Add(AddHistoEff(0, "etaRecEffF", "rec. efficiency (findable)", 0, 1));
  aFolderObj->Add(AddHistoEff(0, "etaCloneF", "clone rate (findable)", 1, 1));
  aFolderObj->Add(AddHistoEff(0, "etaFakeF", "fake rate (findable)", 2, 1));

  //
  // efficiency vs phi
  //

  fEffSecHisto->GetAxis(0)->SetRangeUser(minEta,maxEta);
  fEffSecHisto->GetAxis(2)->SetRangeUser(minPt,maxPt);

  fEffSecHisto->GetAxis(4)->SetRangeUser(0.,1.);   // all
  fEffSecHisto->GetAxis(5)->SetRangeUser(0.,1.);   // all

  aFolderObj->Add(AddHistoEff(1, "phiRecEff", "rec. efficiency", 0, 1));
  aFolderObj->Add(AddHistoEff(1, "phiClone", "clone rate", 1, 1));
  aFolderObj->Add(AddHistoEff(1, "phiFake", "fake rate", 2, 1));

  // rec efficiency vs pid vs phi
  fEffSecHisto->GetAxis(3)->SetRange(1,1);
  aFolderObj->Add(AddHistoEff(1, "phiRecEffEle", "rec. efficiency (electrons)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRange(3,3); // pions
  aFolderObj->Add(AddHistoEff(1, "phiRecEffPi", "rec. efficiency (pions)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRange(4,4); // kaons
  aFolderObj->Add(AddHistoEff(1, "phiRecEffK", "rec. efficiency (kaons)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRange(5,5); // protons
  aFolderObj->Add(AddHistoEff(1, "phiRecEffP", "rec. efficiency (protons)", 0, 1));

  fEffSecHisto->GetAxis(3)->SetRangeUser(0.,4.); 

  // findable efficiency vs phi

  fEffSecHisto->GetAxis(5)->SetRange(2,2); // findable
  aFolderObj->Add(AddHistoEff(1, "phiRecEffF", "rec. efficiency (findable)", 0, 1));
  aFolderObj->Add(AddHistoEff(1, "phiCloneF", "clone rate (findable)", 1, 1));
  aFolderObj->Add(AddHistoEff(1, "phiFakeF", "fake rate (findable)", 2, 1));
  }

  for (Int_t i = 0;i < fEffHisto->GetNdimensions();i++)
  {
	  fEffHisto->GetAxis(i)->SetRange(1,0);				//Reset Range
  }

  // export objects to analysis folder
  fAnalysisFolder = ExportToFolder(aFolderObj);

  // delete only TObjArray
  if(aFolderObj) delete aFolderObj;
}

//_____________________________________________________________________________
TFolder* AliPerformanceEff::ExportToFolder(TObjArray * array) 
{
  // recreate folder avery time and export objects to new one
  //
  AliPerformanceEff * comp=this;
  TFolder *folder = comp->GetAnalysisFolder();

  TString name, title;
  TFolder *newFolder = 0;
  Int_t i = 0;
  Int_t size = array->GetSize();

  if(folder) { 
     // get name and title from old folder
     name = folder->GetName();  
     title = folder->GetTitle();  

	 // delete old one
     delete folder;

	 // create new one
     newFolder = CreateFolder(name.Data(),title.Data());
     newFolder->SetOwner();

	 // add objects to folder
     while(i < size) {
	   newFolder->Add(array->At(i));
	   i++;
	 }
  }

return newFolder;
}


//_____________________________________________________________________________
TFolder* AliPerformanceEff::CreateFolder(TString name,TString title) { 
// create folder for analysed histograms
//
TFolder *folder = 0;
  folder = new TFolder(name.Data(),title.Data());

  return folder;
}

TH1D* WeightedProjection(THnSparseF* src, Int_t axis, Int_t nWeights, Int_t* weightCoords)
{
    THnSparseF* tmp = (THnSparseF*) src->Clone();
    Int_t i;
    for (i = 0;i < tmp->GetNbins();i++)
    {
        Int_t coords[12];
        tmp->GetBinContent(i, coords);
        Int_t weight = 0, j;
        for (j = 0;j < nWeights;j++)
        {
			//The coordinates range from 1 to maxClones / maxFakes + 1, so we have to subtract one
            weight += coords[weightCoords[j]] - 1;
        }
        tmp->SetBinContent(i, weight);
    }
    
    TH1D* ret = tmp->Projection(axis);
    delete tmp;
    return(ret);
}

//_____________________________________________________________________________
TH1D* AliPerformanceEff::AddHistoEff(Int_t axis, const Char_t *name, const Char_t* vsTitle,
	const Int_t type, const Int_t secondary) {
  // Create and add rec efficiency vs pt, eta, phi
  
  char title[256];

  TH1D *recc = NULL;

  THnSparseF* EffHisto = secondary ? fEffSecHisto : fEffHisto;

  Int_t axis_clone = secondary ? 10 : 7;
  Int_t axis_fake = secondary ? 11 : 8;
  Int_t axis_all[3] = {4, axis_clone, axis_fake};


  if (type == 0) // Efficiency
  {
      EffHisto->GetAxis(4)->SetRange(1.,2.);    // all
      TH1D *all = EffHisto->Projection(axis);

      EffHisto->GetAxis(4)->SetRange(2.,2.);    // reconstructed 
      TH1D *rec = EffHisto->Projection(axis);
      recc = (TH1D*)rec->Clone();

      if(recc) 
      {
        recc->Divide(rec,all,1,1,"B");
        recc->GetYaxis()->SetTitle("efficiency");
      }
  }
  else if (type == 1) // Clone Rate
  {
      EffHisto->GetAxis(4)->SetRange(2.,2.);    // reconstructed
      TH1D *all = WeightedProjection(EffHisto, axis, 3, axis_all);

      EffHisto->GetAxis(4)->SetRange(2.,2.);    // reconstructed
      TH1D *clone = WeightedProjection(EffHisto, axis, 1, &axis_clone);
      recc = (TH1D*) clone->Clone();

      if(recc) 
      {
        recc->Divide(clone,all,1,1,"B");
        recc->GetYaxis()->SetTitle("clone rate");
      }
  }
  else if (type == 2) // Fake Rate
  {
      EffHisto->GetAxis(4)->SetRange(2.,2.);    // reconstructed
      TH1D *all = WeightedProjection(EffHisto, axis, 3, axis_all);

      EffHisto->GetAxis(4)->SetRange(2.,2.);    // reconstructed 
      TH1D *fake = WeightedProjection(EffHisto, axis, 1, &axis_fake);
      recc = (TH1D*) fake->Clone();

      if(recc) 
      {
        recc->Divide(fake,all,1,1,"B");
        recc->GetYaxis()->SetTitle("fake rate");
      }
  }

  EffHisto->GetAxis(4)->SetRange(1,0);				//Reset Range

  if (recc) { // Coverity fix
    recc->SetName(name);
    
    recc->GetXaxis()->SetTitle(fEffHisto->GetAxis(axis)->GetTitle());

    snprintf(title,256,"%s vs %s",vsTitle, fEffHisto->GetAxis(axis)->GetTitle());  
    recc->SetTitle(title);

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