ROOT logo
//------------------------------------------------------------------------------
// Implementation of AliPerformanceRes 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 AliPerformanceRes.
//
// 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");
  AliPerformanceRes * compObj = (AliPerformanceRes*)coutput->FindObject("AliPerformanceRes");
 
  // analyse comparison data
  compObj->Analyse();

  // the output histograms/graphs will be stored in the folder "folderRes" 
  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_Res.root","recreate");
  compObj->Write(); // compObj->GetAnalysisFolder()->Write();
  fout.Close();

*/

#include "TCanvas.h"
#include "TH1.h"
#include "TH2.h"
#include "TAxis.h"
#include "TF1.h"

#include "AliPerformanceRes.h" 
#include "AliESDEvent.h" 
#include "AliESDVertex.h"
#include "AliESDtrack.h"
#include "AliESDfriendTrack.h"
#include "AliESDfriend.h"
#include "AliLog.h" 
#include "AliMCEvent.h" 
#include "AliMCParticle.h" 
#include "AliHeader.h" 
#include "AliGenEventHeader.h" 
#include "AliStack.h" 
#include "AliMCInfoCuts.h" 
#include "AliRecInfoCuts.h" 
#include "AliTracker.h" 
#include "AliTreeDraw.h" 

using namespace std;

ClassImp(AliPerformanceRes)
Double_t          AliPerformanceRes::fgkMergeEntriesCut=5000000.; //5*10**6 tracks (small default to keep default memory foorprint low)

//_____________________________________________________________________________
AliPerformanceRes::AliPerformanceRes(const Char_t* name, const Char_t* title, Int_t analysisMode, Bool_t hptGenerator):
  AliPerformanceObject(name,title),
  fResolHisto(0),
  fPullHisto(0),

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

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

  Init();
}

//_____________________________________________________________________________
AliPerformanceRes::~AliPerformanceRes()
{
  // destructor
   
  if(fResolHisto) delete fResolHisto; fResolHisto=0;     
  if(fPullHisto)  delete fPullHisto;  fPullHisto=0;     
  
  if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
}

//_____________________________________________________________________________
void AliPerformanceRes::Init(){

  //
  // histogram bining
  //

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

  Double_t *binsPt = 0;

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

  Double_t yMin = -0.02, yMax = 0.02;
  Double_t zMin = -12.0, zMax = 12.0;
  if(GetAnalysisMode() == 3) { // TrackRef coordinate system
    yMin = -100.; yMax = 100.; 
    zMin = -100.; zMax = 100.; 
  }

  // res_y:res_z:res_phi,res_lambda:res_pt:y:z:eta:phi:pt
  Int_t binsResolHisto[10]={100,100,100,100,100,25,50,144,30,nPtBins};
  Double_t minResolHisto[10]={-1.,-1.,-0.03,-0.03,-0.2, yMin, zMin, 0., -1.5, ptMin};
  Double_t maxResolHisto[10]={ 1., 1., 0.03, 0.03, 0.2, yMax, zMax, 2.*TMath::Pi(), 1.5, ptMax};

  fResolHisto = new THnSparseF("fResolHisto","res_y:res_z:res_phi:res_lambda:res_pt:y:z:phi:eta:pt",10,binsResolHisto,minResolHisto,maxResolHisto);

  //fResolHisto->SetBinEdges(9,binsPt);
  fResolHisto->GetAxis(9)->Set(nPtBins,binsPt);

  fResolHisto->GetAxis(0)->SetTitle("y-y_{mc} (cm)");
  fResolHisto->GetAxis(1)->SetTitle("z-z_{mc} (cm)");
  fResolHisto->GetAxis(2)->SetTitle("#phi-#phi_{mc} (rad)");
  fResolHisto->GetAxis(3)->SetTitle("#lambda-#lambda_{mc} (rad)");
  fResolHisto->GetAxis(4)->SetTitle("(p_{T}/p_{Tmc}-1)");
  fResolHisto->GetAxis(5)->SetTitle("y_{mc} (cm)");
  fResolHisto->GetAxis(6)->SetTitle("z_{mc} (cm)");
  fResolHisto->GetAxis(7)->SetTitle("#phi_{mc} (rad)");
  fResolHisto->GetAxis(8)->SetTitle("#eta_{mc}");
  fResolHisto->GetAxis(9)->SetTitle("p_{Tmc} (GeV/c)");
  fResolHisto->Sumw2();

  ////pull_y:pull_z:pull_phi:pull_lambda:pull_1pt:y:z:eta:phi:pt
  //Int_t binsPullHisto[10]={100,100,100,100,100,50,50,30,144,nPtBins};
  //Double_t minPullHisto[10]={-5.,-5.,-5.,-5.,-5.,yMin, zMin,-1.5, 0., ptMin};
  //Double_t maxPullHisto[10]={ 5., 5., 5., 5., 5., yMax, zMax, 1.5, 2.*TMath::Pi(),ptMax};
  //fPullHisto = new THnSparseF("fPullHisto","pull_y:pull_z:pull_phi:pull_lambda:pull_1pt:y:z:eta:phi:pt",10,binsPullHisto,minPullHisto,maxPullHisto);

  //pull_y:pull_z:pull_snp:pull_tgl:pull_1pt:y:z:snp:tgl:1pt
  //Int_t binsPullHisto[10]={100,100,100,100,100,50,50,50,50,nPtBins};
  //Double_t minPullHisto[10]={-5.,-5.,-5.,-5.,-5.,yMin, zMin,-1., -2.0, ptMin};
  //Double_t maxPullHisto[10]={ 5., 5., 5., 5., 5., yMax, zMax, 1., 2.0, ptMax};
  Int_t binsPullHisto[10]={100,100,100,100,100,50,50,50,50,20};
  Double_t minPullHisto[10]={-5.,-5.,-5.,-5.,-5.,yMin, zMin,-1., -2.0, 0.};
  Double_t maxPullHisto[10]={ 5., 5., 5., 5., 5., yMax, zMax, 1., 2.0, 10.};
  fPullHisto = new THnSparseF("fPullHisto","pull_y:pull_z:pull_y:pull_z:pull_snp:pull_tgl:pull_1pt:y:z:snp:tgl:1pt",10,binsPullHisto,minPullHisto,maxPullHisto);

  /*
  if(!IsHptGenerator()) fPullHisto->SetBinEdges(9,bins1Pt);
  fPullHisto->GetAxis(0)->SetTitle("(y-y_{mc})/#sigma");
  fPullHisto->GetAxis(1)->SetTitle("(z-z_{mc})/#sigma");
  fPullHisto->GetAxis(2)->SetTitle("(#phi-#phi_{mc})/#sigma");
  fPullHisto->GetAxis(3)->SetTitle("(#lambda-#lambda_{mc})/#sigma");
  fPullHisto->GetAxis(4)->SetTitle("(p_{Tmc}/p_{T}-1)/#sigma");
  fPullHisto->GetAxis(5)->SetTitle("y_{mc} (cm)");
  fPullHisto->GetAxis(6)->SetTitle("z_{mc} (cm)");
  fPullHisto->GetAxis(7)->SetTitle("#eta_{mc}");
  fPullHisto->GetAxis(8)->SetTitle("#phi_{mc} (rad)");
  fPullHisto->GetAxis(9)->SetTitle("p_{Tmc} (GeV/c)");
  fPullHisto->Sumw2();
  */

  fPullHisto->GetAxis(9)->Set(nPtBins,binsPt);

  fPullHisto->GetAxis(0)->SetTitle("(y-y_{mc})/#sigma");
  fPullHisto->GetAxis(1)->SetTitle("(z-z_{mc})/#sigma");
  fPullHisto->GetAxis(2)->SetTitle("(sin#phi-sin#phi_{mc})/#sigma");
  fPullHisto->GetAxis(3)->SetTitle("(tan#lambda-tan#lambda_{mc})/#sigma");
  fPullHisto->GetAxis(4)->SetTitle("(p_{Tmc}/p_{T}-1)/#sigma");
  fPullHisto->GetAxis(5)->SetTitle("y_{mc} (cm)");
  fPullHisto->GetAxis(6)->SetTitle("z_{mc} (cm)");
  fPullHisto->GetAxis(7)->SetTitle("sin#phi_{mc}");
  fPullHisto->GetAxis(8)->SetTitle("tan#lambda_{mc}");
  fPullHisto->GetAxis(9)->SetTitle("1/p_{Tmc} (GeV/c)^{-1}");
  fPullHisto->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("folderRes","Analysis Resolution Folder");
}

//_____________________________________________________________________________
void AliPerformanceRes::ProcessTPC(AliStack* const stack, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent)
{
  if(!esdEvent) return;
  if(!esdTrack) return;

  if( IsUseTrackVertex() ) 
  { 
    // Relate TPC inner params to prim. vertex
    const AliESDVertex *vtxESD = esdEvent->GetPrimaryVertexTracks();
    Double_t x[3]; esdTrack->GetXYZ(x);
    Double_t b[3]; AliTracker::GetBxByBz(x,b);
    Bool_t isOK = esdTrack->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);
    if(!isOK) return;

    /*
      // JMT -- recaluclate DCA for HLT if not present
      if ( dca[0] == 0. && dca[1] == 0. ) {
        track->GetDZ( vtxESD->GetX(), vtxESD->GetY(), vtxESD->GetZ(), esdEvent->GetMagneticField(), dca );
      }
    */
  }

  // Fill TPC only resolution comparison information 
  const AliExternalTrackParam* tmpTrack = esdTrack->GetTPCInnerParam();
  if(!tmpTrack) return;

  AliExternalTrackParam track = *tmpTrack;

  Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
  esdTrack->GetImpactParametersTPC(dca,cov);
 
  //
  // Fill rec vs MC information
  //
  if(!stack) return;
  Int_t label = esdTrack->GetTPCLabel(); //Use TPC-only label for TPC-only resolution analysis
  if (label <= 0) return;
  TParticle* particle = stack->Particle(label);
  if(!particle) return;
  if(!particle->GetPDG()) return;
  if(particle->GetPDG()->Charge()==0) return;
  //printf("charge %d \n",particle->GetPDG()->Charge());
  
  // Only 5 charged particle species (e,mu,pi,K,p)
  if (fCutsMC->IsPdgParticle(TMath::Abs(particle->GetPdgCode())) == kFALSE) return;

  // exclude electrons
  if (fCutsMC->GetEM()==TMath::Abs(particle->GetPdgCode())) return;

  Float_t deltaPtTPC, deltaYTPC, deltaZTPC, deltaPhiTPC, deltaLambdaTPC; 
  Float_t pull1PtTPC, pullYTPC, pullZTPC, pullPhiTPC, pullLambdaTPC; 

  Float_t mceta =  particle->Eta();
  Float_t mcphi =  particle->Phi();
  if(mcphi<0) mcphi += 2.*TMath::Pi();
  Float_t mcpt = particle->Pt();
  Float_t mcsnp = TMath::Sin(TMath::ATan2(particle->Py(),particle->Px())); 
  Float_t mctgl = TMath::Tan(TMath::ATan2(particle->Pz(),particle->Pt()));

  // nb. TPC clusters cut
  if (esdTrack->GetTPCNcls()<fCutsRC->GetMinNClustersTPC()) return;

  // select primaries
  if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ()) 
  { 
    if(mcpt == 0) return;
	double Bz = esdEvent->GetMagneticField();

	Double_t mclocal[4]; //Rotated x,y,px,py mc-coordinates - the MC data should be rotated since the track is propagated best along x
	Double_t c = TMath::Cos(track.GetAlpha());
	Double_t s = TMath::Sin(track.GetAlpha());
	Double_t x = particle->Vx();
	Double_t y = particle->Vy();
	mclocal[0] = x*c + y*s;
	mclocal[1] =-x*s + y*c;
	Double_t px = particle->Px();
	Double_t py = particle->Py();
	mclocal[2] = px*c + py*s;
	mclocal[3] =-px*s + py*c;
    Float_t mcsnplocal = TMath::Sin(TMath::ATan2(mclocal[3],mclocal[2])); 


	track.AliExternalTrackParam::PropagateTo(mclocal[0],Bz);

    deltaYTPC= track.GetY()-mclocal[1];
    deltaZTPC = track.GetZ()-particle->Vz();
    deltaLambdaTPC = TMath::ATan2(track.Pz(),track.Pt())-TMath::ATan2(particle->Pz(),particle->Pt());
	//See comments in ProcessInnerTPC for remarks on local and global momentum coordinates for deltaPhi / pullSnp calculation
    deltaPhiTPC = TMath::ATan2(track.Py(),track.Px())-TMath::ATan2(particle->Py(),particle->Px());
    //delta1PtTPC = (track.OneOverPt()-1./mcpt)*mcpt;
    deltaPtTPC = (track.Pt()-mcpt) / mcpt;

    pullYTPC= deltaYTPC / TMath::Sqrt(track.GetSigmaY2());
    pullZTPC = deltaZTPC / TMath::Sqrt(track.GetSigmaZ2());
 
    //Double_t sigma_lambda = 1./(1.+track.GetTgl()*track.GetTgl()) * TMath::Sqrt(track.GetSigmaTgl2()); 
    //Double_t sigma_phi = 1./TMath::Sqrt(1-track.GetSnp()*track.GetSnp()) * TMath::Sqrt(track.GetSigmaSnp2());
    pullPhiTPC = (track.GetSnp() - mcsnplocal) / TMath::Sqrt(track.GetSigmaSnp2());
    pullLambdaTPC = (track.GetTgl() - mctgl) / TMath::Sqrt(track.GetSigmaTgl2());

    //pullLambdaTPC = deltaLambdaTPC / TMath::Sqrt(track.GetSigmaTgl2());
    //pullPhiTPC = deltaPhiTPC / TMath::Sqrt(track.GetSigmaSnp2()); 
    if (mcpt) pull1PtTPC = (track.OneOverPt()-1./mcpt) / TMath::Sqrt(track.GetSigma1Pt2());
    else pull1PtTPC = 0.; 

    Double_t vResolHisto[10] = {deltaYTPC,deltaZTPC,deltaPhiTPC,deltaLambdaTPC,deltaPtTPC,particle->Vy(),particle->Vz(),mcphi,mceta,mcpt};
    fResolHisto->Fill(vResolHisto);

    Double_t vPullHisto[10] = {pullYTPC,pullZTPC,pullPhiTPC,pullLambdaTPC,pull1PtTPC,particle->Vy(),particle->Vz(),mcsnp,mctgl,1./mcpt};
    fPullHisto->Fill(vPullHisto);
  }
}

//_____________________________________________________________________________
void AliPerformanceRes::ProcessTPCITS(AliStack* const stack, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent)
{
  // Fill resolution comparison information (TPC+ITS)
  if(!esdEvent) return;
  if(!esdTrack) return;

  if( IsUseTrackVertex() ) 
  { 
    // Relate TPC inner params to prim. vertex
    const AliESDVertex *vtxESD = esdEvent->GetPrimaryVertexTracks();
    Double_t x[3]; esdTrack->GetXYZ(x);
    Double_t b[3]; AliTracker::GetBxByBz(x,b);
    Bool_t isOK = esdTrack->RelateToVertexBxByBz(vtxESD, b, kVeryBig);
    if(!isOK) return;

    /*
      // JMT -- recaluclate DCA for HLT if not present
      if ( dca[0] == 0. && dca[1] == 0. ) {
        track->GetDZ( vtxESD->GetX(), vtxESD->GetY(), vtxESD->GetZ(), esdEvent->GetMagneticField(), dca );
      }
    */
  }

  Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
  esdTrack->GetImpactParameters(dca,cov);
 
  //
  // Fill rec vs MC information
  //
  if(!stack) return;

  Int_t label = TMath::Abs(esdTrack->GetLabel()); //Use global label for combined resolution analysis
  TParticle* particle = stack->Particle(label);
  if(!particle) return;
  if(!particle->GetPDG()) return;
  if(particle->GetPDG()->Charge()==0) return;
  //printf("charge %d \n",particle->GetPDG()->Charge());


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

  // exclude electrons
  if (fCutsMC->GetEM()==TMath::Abs(particle->GetPdgCode())) return;

  Float_t mceta =  particle->Eta();
  Float_t mcphi =  particle->Phi();
  if(mcphi<0) mcphi += 2.*TMath::Pi();
  Float_t mcpt = particle->Pt();
  Float_t mcsnp = TMath::Sin(TMath::ATan2(particle->Py(),particle->Px()));
  Float_t mctgl = TMath::Tan(TMath::ATan2(particle->Pz(),particle->Pt()));

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

  Float_t deltaPtTPC, deltaYTPC, deltaZTPC, deltaPhiTPC, deltaLambdaTPC; 
  Float_t pull1PtTPC, pullYTPC, pullZTPC, pullPhiTPC, pullLambdaTPC; 

  // select primaries
  if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ()) 
  { 
    if(mcpt == 0) return;
    
    deltaYTPC= esdTrack->GetY()-particle->Vy();
    deltaZTPC = esdTrack->GetZ()-particle->Vz();
    deltaLambdaTPC = TMath::ATan2(esdTrack->Pz(),esdTrack->Pt())-TMath::ATan2(particle->Pz(),particle->Pt());
    deltaPhiTPC = TMath::ATan2(esdTrack->Py(),esdTrack->Px())-TMath::ATan2(particle->Py(),particle->Px());
    //delta1PtTPC = (esdTrack->OneOverPt()-1./mcpt)*mcpt;
    deltaPtTPC = (esdTrack->Pt()-mcpt) / mcpt;

    pullYTPC= (esdTrack->GetY()-particle->Vy()) / TMath::Sqrt(esdTrack->GetSigmaY2());
    pullZTPC = (esdTrack->GetZ()-particle->Vz()) / TMath::Sqrt(esdTrack->GetSigmaZ2());
 
    //Double_t sigma_lambda = 1./(1.+esdTrack->GetTgl()*esdTrack->GetTgl()) * TMath::Sqrt(esdTrack->GetSigmaTgl2()); 
    //Double_t sigma_phi = 1./TMath::Sqrt(1-esdTrack->GetSnp()*esdTrack->GetSnp()) * TMath::Sqrt(esdTrack->GetSigmaSnp2());
    pullPhiTPC = (esdTrack->GetSnp() - mcsnp) / TMath::Sqrt(esdTrack->GetSigmaSnp2());
    pullLambdaTPC = (esdTrack->GetTgl() - mctgl) / TMath::Sqrt(esdTrack->GetSigmaTgl2());

    //pullLambdaTPC = deltaLambdaTPC / TMath::Sqrt(esdTrack->GetSigmaTgl2());
    //pullPhiTPC = deltaPhiTPC / TMath::Sqrt(esdTrack->GetSigmaSnp2()); 
    if (mcpt) pull1PtTPC = (esdTrack->OneOverPt()-1./mcpt) / TMath::Sqrt(esdTrack->GetSigma1Pt2());
    else pull1PtTPC = 0.;

    Double_t vResolHisto[10] = {deltaYTPC,deltaZTPC,deltaPhiTPC,deltaLambdaTPC,deltaPtTPC,particle->Vy(),particle->Vz(),mcphi,mceta,mcpt};
    fResolHisto->Fill(vResolHisto);

    Double_t vPullHisto[10] = {pullYTPC,pullZTPC,pullPhiTPC,pullLambdaTPC,pull1PtTPC,particle->Vy(),particle->Vz(),mcsnp,mctgl,1./mcpt};
    fPullHisto->Fill(vPullHisto);

   
    /*
    deltaYTPC= esdTrack->GetY()-particle->Vy();
    deltaZTPC = esdTrack->GetZ()-particle->Vz();
    deltaLambdaTPC = TMath::ATan2(esdTrack->Pz(),esdTrack->Pt())-TMath::ATan2(particle->Pz(),particle->Pt());
    deltaPhiTPC = TMath::ATan2(esdTrack->Py(),esdTrack->Px())-TMath::ATan2(particle->Py(),particle->Px());
    delta1PtTPC = (esdTrack->OneOverPt()-1./mcpt)*mcpt;

    pullYTPC= (esdTrack->GetY()-particle->Vy()) / TMath::Sqrt(esdTrack->GetSigmaY2());
    pullZTPC = (esdTrack->GetZ()-particle->Vz()) / TMath::Sqrt(esdTrack->GetSigmaZ2());

    Double_t sigma_lambda = 1./(1.+esdTrack->GetTgl()*esdTrack->GetTgl()) * TMath::Sqrt(esdTrack->GetSigmaTgl2()); 
    Double_t sigma_phi = 1./TMath::Sqrt(1-esdTrack->GetSnp()*esdTrack->GetSnp()) * TMath::Sqrt(esdTrack->GetSigmaSnp2());
    pullLambdaTPC = deltaLambdaTPC / sigma_lambda;
    pullPhiTPC = deltaPhiTPC / sigma_phi;

    //pullLambdaTPC = deltaLambdaTPC / TMath::Sqrt(esdTrack->GetSigmaTgl2());
    //pullPhiTPC = deltaPhiTPC / TMath::Sqrt(esdTrack->GetSigmaSnp2()); 
    if (mcpt) pull1PtTPC = (esdTrack->OneOverPt()-1./mcpt) / TMath::Sqrt(esdTrack->GetSigma1Pt2());
    else pull1PtTPC = 0.;

    Double_t vResolHisto[10] = {deltaYTPC,deltaZTPC,deltaPhiTPC,deltaLambdaTPC,delta1PtTPC,particle->Vy(),particle->Vz(),mceta,mcphi,mcpt};
    fResolHisto->Fill(vResolHisto);

    Double_t vPullHisto[10] = {pullYTPC,pullZTPC,pullPhiTPC,pullLambdaTPC,pull1PtTPC,particle->Vy(),particle->Vz(),mceta,mcphi,mcpt};
    fPullHisto->Fill(vPullHisto);
    */
  }
}

//_____________________________________________________________________________
void AliPerformanceRes::ProcessConstrained(AliStack* const stack, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent)
{
  // Fill resolution comparison information (constarained parameters) 
  //
  if(!esdEvent) return;
  if(!esdTrack) return;

  if( IsUseTrackVertex() ) 
  { 
    // Relate TPC inner params to prim. vertex
    const AliESDVertex *vtxESD = esdEvent->GetPrimaryVertexTracks();
    Double_t x[3]; esdTrack->GetXYZ(x);
    Double_t b[3]; AliTracker::GetBxByBz(x,b);
    Bool_t isOK = esdTrack->RelateToVertexBxByBz(vtxESD, b, kVeryBig);
    if(!isOK) return;

    /*
      // JMT -- recaluclate DCA for HLT if not present
      if ( dca[0] == 0. && dca[1] == 0. ) {
        track->GetDZ( vtxESD->GetX(), vtxESD->GetY(), vtxESD->GetZ(), esdEvent->GetMagneticField(), dca );
      }
    */
  }


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

  Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
  esdTrack->GetImpactParameters(dca,cov);
 
  //
  // Fill rec vs MC information
  //
  if(!stack) return;

  Int_t label = TMath::Abs(esdTrack->GetLabel()); 
  TParticle* particle = stack->Particle(label);
  if(!particle) return;
  if(!particle->GetPDG()) return;
  if(particle->GetPDG()->Charge()==0) return;
  //printf("charge %d \n",particle->GetPDG()->Charge());

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

  // exclude electrons
  if (fCutsMC->GetEM()==TMath::Abs(particle->GetPdgCode())) return;

  Float_t mceta =  particle->Eta();
  Float_t mcphi =  particle->Phi();
  if(mcphi<0) mcphi += 2.*TMath::Pi();
  Float_t mcpt = particle->Pt();
  Float_t mcsnp = TMath::Sin(TMath::ATan2(particle->Py(),particle->Px()));
  Float_t mctgl = TMath::Tan(TMath::ATan2(particle->Pz(),particle->Pt()));

  if ((esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0) return; // TPC refit
  if (esdTrack->GetTPCNcls()<fCutsRC->GetMinNClustersTPC()) return; // min. nb. TPC clusters

  Float_t deltaPtTPC, deltaYTPC, deltaZTPC, deltaPhiTPC, deltaLambdaTPC; 
  Float_t pull1PtTPC, pullYTPC, pullZTPC, pullPhiTPC, pullLambdaTPC; 

  // select primaries
  if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ()) 
  { 

    if(mcpt == 0) return;
    
    deltaYTPC= track->GetY()-particle->Vy();
    deltaZTPC = track->GetZ()-particle->Vz();
    deltaLambdaTPC = TMath::ATan2(track->Pz(),track->Pt())-TMath::ATan2(particle->Pz(),particle->Pt());
    deltaPhiTPC = TMath::ATan2(track->Py(),track->Px())-TMath::ATan2(particle->Py(),particle->Px());
    //delta1PtTPC = (track->OneOverPt()-1./mcpt)*mcpt;
    deltaPtTPC = (track->Pt()-mcpt) / mcpt;

    pullYTPC= (track->GetY()-particle->Vy()) / TMath::Sqrt(track->GetSigmaY2());
    pullZTPC = (track->GetZ()-particle->Vz()) / TMath::Sqrt(track->GetSigmaZ2());
 
    //Double_t sigma_lambda = 1./(1.+track->GetTgl()*track->GetTgl()) * TMath::Sqrt(track->GetSigmaTgl2()); 
    //Double_t sigma_phi = 1./TMath::Sqrt(1-track->GetSnp()*track->GetSnp()) * TMath::Sqrt(track->GetSigmaSnp2());
    pullPhiTPC = (track->GetSnp() - mcsnp) / TMath::Sqrt(track->GetSigmaSnp2());
    pullLambdaTPC = (track->GetTgl() - mctgl) / TMath::Sqrt(track->GetSigmaTgl2());

    //pullLambdaTPC = deltaLambdaTPC / TMath::Sqrt(track->GetSigmaTgl2());
    //pullPhiTPC = deltaPhiTPC / TMath::Sqrt(track->GetSigmaSnp2()); 
    if (mcpt) pull1PtTPC = (track->OneOverPt()-1./mcpt) / TMath::Sqrt(track->GetSigma1Pt2());
    else pull1PtTPC = 0.;

    Double_t vResolHisto[10] = {deltaYTPC,deltaZTPC,deltaPhiTPC,deltaLambdaTPC,deltaPtTPC,particle->Vy(),particle->Vz(),mcphi,mceta,mcpt};
    fResolHisto->Fill(vResolHisto);

    Double_t vPullHisto[10] = {pullYTPC,pullZTPC,pullPhiTPC,pullLambdaTPC,pull1PtTPC,particle->Vy(),particle->Vz(),mcsnp,mctgl,1./mcpt};
    fPullHisto->Fill(vPullHisto);

    /*

    deltaYTPC= track->GetY()-particle->Vy();
    deltaZTPC = track->GetZ()-particle->Vz();
    deltaLambdaTPC = TMath::ATan2(track->Pz(),track->Pt())-TMath::ATan2(particle->Pz(),particle->Pt());
    deltaPhiTPC = TMath::ATan2(track->Py(),track->Px())-TMath::ATan2(particle->Py(),particle->Px());
    delta1PtTPC = (track->OneOverPt()-1./mcpt)*mcpt;

    pullYTPC= (track->GetY()-particle->Vy()) / TMath::Sqrt(track->GetSigmaY2());
    pullZTPC = (track->GetZ()-particle->Vz()) / TMath::Sqrt(track->GetSigmaZ2());

    Double_t sigma_lambda = 1./(1.+track->GetTgl()*track->GetTgl()) * TMath::Sqrt(track->GetSigmaTgl2()); 
    Double_t sigma_phi = 1./TMath::Sqrt(1-track->GetSnp()*track->GetSnp()) * TMath::Sqrt(track->GetSigmaSnp2());
    pullLambdaTPC = deltaLambdaTPC / sigma_lambda;
    pullPhiTPC = deltaPhiTPC / sigma_phi;

    //pullLambdaTPC = deltaLambdaTPC / TMath::Sqrt(track->GetSigmaTgl2());
    //pullPhiTPC = deltaPhiTPC / TMath::Sqrt(track->GetSigmaSnp2()); 

    if (mcpt) pull1PtTPC = (track->OneOverPt()-1./mcpt) / TMath::Sqrt(track->GetSigma1Pt2());
    else pull1PtTPC = 0.;

    Double_t vResolHisto[10] = {deltaYTPC,deltaZTPC,deltaPhiTPC,deltaLambdaTPC,delta1PtTPC,particle->Vy(),particle->Vz(),mceta,mcphi,mcpt};
    fResolHisto->Fill(vResolHisto);

    Double_t vPullHisto[10] = {pullYTPC,pullZTPC,pullPhiTPC,pullLambdaTPC,pull1PtTPC,particle->Vy(),particle->Vz(),mceta,mcphi,mcpt};
    fPullHisto->Fill(vPullHisto);

    */
  }
}
 
//_____________________________________________________________________________
void AliPerformanceRes::ProcessInnerTPC(AliMCEvent *const mcEvent, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent)
{
  //
  // Fill resolution comparison information (inner params at TPC reference point) 
  //
  if(!esdEvent) return;
  if(!esdTrack) return;

  if( IsUseTrackVertex() ) 
  { 
    // Relate TPC inner params to prim. vertex
    const AliESDVertex *vtxESD = esdEvent->GetPrimaryVertexTracks();
    Double_t x[3]; esdTrack->GetXYZ(x);
    Double_t b[3]; AliTracker::GetBxByBz(x,b);
    Bool_t isOK = esdTrack->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);
    if(!isOK) return;

    /*
      // JMT -- recaluclate DCA for HLT if not present
      if ( dca[0] == 0. && dca[1] == 0. ) {
        track->GetDZ( vtxESD->GetX(), vtxESD->GetY(), vtxESD->GetZ(), esdEvent->GetMagneticField(), dca );
      }
    */
  }

  const AliExternalTrackParam * innerParam = esdTrack->GetInnerParam();
  if(!innerParam) return;

  // create new AliExternalTrackParam
  AliExternalTrackParam *track = new AliExternalTrackParam(*innerParam);
  if(!track) return;

  Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
  esdTrack->GetImpactParametersTPC(dca,cov);
 
  //
  // Fill rec vs MC information
  //
  if(!mcEvent) return;

  Int_t label = esdTrack->GetTPCLabel(); //Use TPC-only label for TPC-only resolution analysis
  if (label <= 0) return;
  AliMCParticle *mcParticle = (AliMCParticle*) mcEvent->GetTrack(label);
  if(!mcParticle) return;

  // get the first TPC track reference
  AliTrackReference *ref0 = GetFirstTPCTrackRef(mcParticle);
  if(!ref0) return;

  // Only 5 charged particle species (e,mu,pi,K,p)
  TParticle *particle = mcParticle->Particle();
  if(!particle) return;

  if (fCutsMC->IsPdgParticle(TMath::Abs(particle->GetPdgCode())) == kFALSE) return;

  // exclude electrons
  if (fCutsMC->GetEM()==TMath::Abs(particle->GetPdgCode())) return;

  Double_t mclocal[4]; //Rotated x,y,Px,Py mc-coordinates - the MC data should be rotated since the track is propagated best along x
  Double_t c = TMath::Cos(track->GetAlpha());
  Double_t s = TMath::Sin(track->GetAlpha());
  Double_t x = ref0->X();
  Double_t y = ref0->Y();
  mclocal[0] = x*c + y*s;
  mclocal[1] =-x*s + y*c;
  Double_t px = ref0->Px();
  Double_t py = ref0->Py();
  mclocal[2] = px*c + py*s;
  mclocal[3] =-px*s + py*c;

  //Double_t xyz[3] = {ref0->X(),ref0->Y(),ref0->Z()};
  // propagate track to the radius of the first track reference within TPC
  //Double_t trRadius = TMath::Sqrt(xyz[1] * xyz[1] + xyz[0] * xyz[0]);
  Double_t field[3]; track->GetBxByBz(field);
  if (TGeoGlobalMagField::Instance()->GetField() == NULL) {
    Error("ProcessInnerTPC", "Magnetic Field not set");
  }
  Bool_t isOK = track->PropagateToBxByBz(mclocal[0],field);
  if(!isOK) {return;}
  //track->AliExternalTrackParam::PropagateTo(mclocal[0],esdEvent->GetMagneticField());  //Use different propagation since above methods returns zero B field and does not work
  
  Float_t mceta =  -TMath::Log(TMath::Tan(0.5 * ref0->Theta()));
  Float_t mcphi =  ref0->Phi();
  if(mcphi<0) mcphi += 2.*TMath::Pi();
  Float_t mcpt = ref0->Pt();
  Float_t mcsnp = TMath::Sin(TMath::ATan2(ref0->Py(),ref0->Px()));
  Float_t mcsnplocal = TMath::Sin(TMath::ATan2(mclocal[3],mclocal[2]));
  Float_t mctgl = TMath::Tan(TMath::ATan2(ref0->Pz(),ref0->Pt()));

  if ((esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0) return; // TPC refit
  if (esdTrack->GetTPCNcls()<fCutsRC->GetMinNClustersTPC()) return; // min. nb. TPC clusters

  Float_t deltaPtTPC, deltaYTPC, deltaZTPC, deltaPhiTPC, deltaLambdaTPC; 
  Float_t pull1PtTPC, pullYTPC, pullZTPC, pullPhiTPC, pullLambdaTPC; 

  // select primaries
  Bool_t isPrimary;
  if ( IsUseTrackVertex() )
  {
	  isPrimary = TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ();
  }
  else
  {
	  //If Track vertex is not used the above check does not work, hence we use the MC reference track
	  isPrimary = label < mcEvent->Stack()->GetNprimary();
  }
  if(isPrimary) 
  { 
    if(mcpt == 0) return;
    
    deltaYTPC= track->GetY()-mclocal[1];
    deltaZTPC = track->GetZ()-ref0->Z();
    deltaLambdaTPC = TMath::ATan2(track->Pz(),track->Pt())-TMath::ATan2(ref0->Pz(),ref0->Pt());
	//track->Px() etc returns momentum in global coordinates, hence mc momentum must not be rotated.
    deltaPhiTPC = TMath::ATan2(track->Py(),track->Px())-TMath::ATan2(ref0->Py(),ref0->Px());
    //delta1PtTPC = (track->OneOverPt()-1./mcpt)*mcpt;
    deltaPtTPC = (track->Pt()-mcpt) / mcpt;

    pullYTPC= deltaYTPC / TMath::Sqrt(track->GetSigmaY2());
    pullZTPC = deltaZTPC / TMath::Sqrt(track->GetSigmaZ2());
 
    //Double_t sigma_lambda = 1./(1.+track->GetTgl()*track->GetTgl()) * TMath::Sqrt(track->GetSigmaTgl2()); 
    //Double_t sigma_phi = 1./TMath::Sqrt(1-track->GetSnp()*track->GetSnp()) * TMath::Sqrt(track->GetSigmaSnp2());
	//track->GetSnp returns value in local coordinates, hence here, in contrast to deltaPhiTPC, the mc momentum must be rotated
    pullPhiTPC = (track->GetSnp() - mcsnplocal) / TMath::Sqrt(track->GetSigmaSnp2());
    pullLambdaTPC = (track->GetTgl() - mctgl) / TMath::Sqrt(track->GetSigmaTgl2());

    //pullLambdaTPC = deltaLambdaTPC / TMath::Sqrt(track->GetSigmaTgl2());
    //pullPhiTPC = deltaPhiTPC / TMath::Sqrt(track->GetSigmaSnp2()); 
    if (mcpt) pull1PtTPC = (track->OneOverPt()-1./mcpt) / TMath::Sqrt(track->GetSigma1Pt2());
    else pull1PtTPC = 0.;

    Double_t vResolHisto[10] = {deltaYTPC,deltaZTPC,deltaPhiTPC,deltaLambdaTPC,deltaPtTPC,ref0->Y(),ref0->Z(),mcphi,mceta,mcpt};
    fResolHisto->Fill(vResolHisto);

    Double_t vPullHisto[10] = {pullYTPC,pullZTPC,pullPhiTPC,pullLambdaTPC,pull1PtTPC,ref0->Y(),ref0->Z(),mcsnp,mctgl,1./mcpt};
    fPullHisto->Fill(vPullHisto);
  }

  if(track) delete track;
}

//_____________________________________________________________________________
void AliPerformanceRes::ProcessOuterTPC(AliMCEvent *const mcEvent, AliESDtrack *const esdTrack, AliESDfriendTrack *const friendTrack, AliESDEvent* const esdEvent)
{
  //
  // Fill resolution comparison information (outer params at TPC reference point) 
  //
  if(!friendTrack) return;
  if(!esdEvent) return;
  if(!esdTrack) return;

  if( IsUseTrackVertex() ) 
  { 
    // Relate TPC inner params to prim. vertex
    const AliESDVertex *vtxESD = esdEvent->GetPrimaryVertexTracks();
    Double_t x[3]; esdTrack->GetXYZ(x);
    Double_t b[3]; AliTracker::GetBxByBz(x,b);
    Bool_t isOK = esdTrack->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);
    if(!isOK) return;

    /*
      // JMT -- recaluclate DCA for HLT if not present
      if ( dca[0] == 0. && dca[1] == 0. ) {
        track->GetDZ( vtxESD->GetX(), vtxESD->GetY(), vtxESD->GetZ(), esdEvent->GetMagneticField(), dca );
      }
    */
  }

  const AliExternalTrackParam * outerParam = friendTrack->GetTPCOut();
  if(!outerParam) return;

  // create new AliExternalTrackParam
  AliExternalTrackParam *track = new AliExternalTrackParam(*outerParam);
  if(!track) return;

  Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
  esdTrack->GetImpactParametersTPC(dca,cov);
 
  //
  // Fill rec vs MC information
  //
  if(!mcEvent) return;

  Int_t label = esdTrack->GetTPCLabel(); //Use TPC-only label for TPC-only resolution analysis
  if (label <= 0) return;
  AliMCParticle *mcParticle = (AliMCParticle*) mcEvent->GetTrack(label);
  if(!mcParticle) return;

  // get the last TPC track reference
  AliTrackReference *ref0 = GetLastTPCTrackRef(mcParticle);
  if(!ref0) return;

  // Only 5 charged particle species (e,mu,pi,K,p)
  TParticle *particle = mcParticle->Particle();
  if(!particle) return;

  if (fCutsMC->IsPdgParticle(TMath::Abs(particle->GetPdgCode())) == kFALSE) return;

  // exclude electrons
  if (fCutsMC->GetEM()==TMath::Abs(particle->GetPdgCode())) return;

  // calculate alpha angle
  Double_t xyz[3] = {ref0->X(),ref0->Y(),ref0->Z()};
  Double_t alpha = TMath::ATan2(xyz[1],xyz[0]);
  //if (alpha<0) alpha += TMath::TwoPi();

  // rotate outer track to local coordinate system
  // and propagate to the radius of the last track reference of TPC
  Double_t trRadius = TMath::Sqrt(xyz[1] * xyz[1] + xyz[0] * xyz[0]);
  //Bool_t isOK = track->Propagate(alpha,trRadius,AliTracker::GetBz());
  Double_t field[3]; track->GetBxByBz(field);
  Bool_t isOK = track->PropagateBxByBz(alpha,trRadius,field);
  if(!isOK) return;

  Float_t mceta =  -TMath::Log(TMath::Tan(0.5 * ref0->Theta()));
  Float_t mcphi =  ref0->Phi();
  if(mcphi<0) mcphi += 2.*TMath::Pi();
  Float_t mcpt = ref0->Pt();
  Float_t mcsnp = TMath::Sin(TMath::ATan2(ref0->Py(),ref0->Px()));
  Float_t mctgl = TMath::Tan(TMath::ATan2(ref0->Pz(),ref0->Pt()));

  if ((esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0) return; // TPC refit
  if (esdTrack->GetTPCNcls()<fCutsRC->GetMinNClustersTPC()) return; // min. nb. TPC clusters

  Float_t deltaPtTPC, deltaYTPC, deltaZTPC, deltaPhiTPC, deltaLambdaTPC; 
  Float_t pull1PtTPC, pullYTPC, pullZTPC, pullPhiTPC, pullLambdaTPC; 

  // select primaries
  if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ()) 
  { 
    if(mcpt == 0) return;
    
    deltaYTPC= track->GetY(); // already rotated
    deltaZTPC = track->GetZ()-ref0->Z();
    deltaLambdaTPC = TMath::ATan2(track->Pz(),track->Pt())-TMath::ATan2(ref0->Pz(),ref0->Pt());
    deltaPhiTPC = TMath::ATan2(track->Py(),track->Px())-TMath::ATan2(ref0->Py(),ref0->Px());
    //delta1PtTPC = (track->OneOverPt()-1./mcpt)*mcpt;
    deltaPtTPC = (track->Pt()-mcpt) / mcpt;

    pullYTPC= track->GetY() / TMath::Sqrt(track->GetSigmaY2());
    pullZTPC = (track->GetZ()-ref0->Z()) / TMath::Sqrt(track->GetSigmaZ2());
 
    //Double_t sigma_lambda = 1./(1.+track->GetTgl()*track->GetTgl()) * TMath::Sqrt(track->GetSigmaTgl2()); 
    //Double_t sigma_phi = 1./TMath::Sqrt(1-track->GetSnp()*track->GetSnp()) * TMath::Sqrt(track->GetSigmaSnp2());
    pullPhiTPC = (track->GetSnp() - mcsnp) / TMath::Sqrt(track->GetSigmaSnp2());
    pullLambdaTPC = (track->GetTgl() - mctgl) / TMath::Sqrt(track->GetSigmaTgl2());

    //pullLambdaTPC = deltaLambdaTPC / TMath::Sqrt(track->GetSigmaTgl2());
    //pullPhiTPC = deltaPhiTPC / TMath::Sqrt(track->GetSigmaSnp2()); 
    if (mcpt) pull1PtTPC = (track->OneOverPt()-1./mcpt) / TMath::Sqrt(track->GetSigma1Pt2());
    else pull1PtTPC = 0.;

    Double_t vResolHisto[10] = {deltaYTPC,deltaZTPC,deltaPhiTPC,deltaLambdaTPC,deltaPtTPC,ref0->Y(),ref0->Z(),mcphi,mceta,mcpt};
    fResolHisto->Fill(vResolHisto);

    Double_t vPullHisto[10] = {pullYTPC,pullZTPC,pullPhiTPC,pullLambdaTPC,pull1PtTPC,ref0->Y(),ref0->Z(),mcsnp,mctgl,1./mcpt};
    fPullHisto->Fill(vPullHisto);
  }

  if(track) delete track;
}

//_____________________________________________________________________________
AliTrackReference * AliPerformanceRes::GetFirstTPCTrackRef(AliMCParticle *mcParticle) 
{
  // return first TPC track reference 
  if(!mcParticle) return 0;

  // find first track reference 
  // check direction to select proper reference point for looping tracks
  Int_t nTrackRef = mcParticle->GetNumberOfTrackReferences();
  AliTrackReference *ref = 0;
  AliTrackReference *refIn = 0;
  for (Int_t iref = 0; iref < nTrackRef; iref++) { 
    ref = mcParticle->GetTrackReference(iref);
    if(ref && (ref->DetectorId()==AliTrackReference::kTPC))
    {
      Float_t dir = ref->X()*ref->Px()+ref->Y()*ref->Py();
      if(dir < 0.) break;

      refIn = ref;
      break;
    }
  }

return refIn;
}

//_____________________________________________________________________________
AliTrackReference * AliPerformanceRes::GetLastTPCTrackRef(AliMCParticle *mcParticle) 
{
  // return last TPC track reference 
  if(!mcParticle) return 0;

  // find last track reference 
  // check direction to select proper reference point for looping tracks
  Int_t nTrackRef = mcParticle->GetNumberOfTrackReferences();
  AliTrackReference *ref = 0;
  AliTrackReference *refOut = 0;
  for (Int_t iref = 0; iref < nTrackRef; iref++) { 
    ref = mcParticle->GetTrackReference(iref);
    if(ref && (ref->DetectorId()==AliTrackReference::kTPC)) { 
      Float_t dir=ref->X()*ref->Px()+ref->Y()*ref->Py();
      if(dir< 0.0) break;
      refOut = ref;
    }
  }

return refOut;
}

//_____________________________________________________________________________
void AliPerformanceRes::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;
    }
  }

  // get event vertex
  const AliESDVertex *vtxESD = NULL;
  if( IsUseTrackVertex() ) 
  { 
    // track vertex
    vtxESD = esdEvent->GetPrimaryVertexTracks();
	if(vtxESD && (vtxESD->GetStatus()<=0)) return;
  }
  // Coverity - removed else branch as vtxESD is not further used in method
  //  else {  
  //    // TPC track vertex
  //    vtxESD = esdEvent->GetPrimaryVertexTPC();
  //  }
 



  //  Process events
  for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) 
  { 
    AliESDtrack *track = esdEvent->GetTrack(iTrack);
    if(!track) continue;

    AliESDfriendTrack *friendTrack=0;


    Int_t label = TMath::Abs(track->GetLabel()); 
    if ( label > stack->GetNtrack() ) 
    {
      ULong_t status = track->GetStatus();
      printf ("Error : ESD MCLabel %d - StackSize %d - Status %lu \n",
	       track->GetLabel(), stack->GetNtrack(), status );
      printf(" NCluster %d \n", track->GetTPCclusters(0) );
      /*
      if ((status&AliESDtrack::kTPCrefit)== 0 ) printf("   kTPCrefit \n");
      if ((status&AliESDtrack::kTPCin)== 0 )    printf("   kTPCin \n");
      if ((status&AliESDtrack::kTPCout)== 0 )   printf("   kTPCout \n");
      if ((status&AliESDtrack::kTRDrefit)== 0 ) printf("   kTRDrefit \n");
      if ((status&AliESDtrack::kTRDin)== 0 )    printf("   kTRDin \n");
      if ((status&AliESDtrack::kTRDout)== 0 )   printf("   kTRDout \n");
      if ((status&AliESDtrack::kITSrefit)== 0 ) printf("   kITSrefit \n");
      if ((status&AliESDtrack::kITSin)== 0 )    printf("   kITSin \n");
      if ((status&AliESDtrack::kITSout)== 0 )   printf("   kITSout \n");
      */

      continue;
    }

	if (label == 0) continue;		//Cannot distinguish between track or fake track
	if (track->GetLabel() < 0) continue; //Do not consider fake tracks

    if(GetAnalysisMode() == 0) ProcessTPC(stack,track,esdEvent);
    else if(GetAnalysisMode() == 1) ProcessTPCITS(stack,track,esdEvent);
    else if(GetAnalysisMode() == 2) ProcessConstrained(stack,track,esdEvent);
    else if(GetAnalysisMode() == 3) ProcessInnerTPC(mcEvent,track,esdEvent);
    else if(GetAnalysisMode() == 4) {

    if(bUseESDfriend) {
      friendTrack=esdFriend->GetTrack(iTrack);
      if(!friendTrack) continue;
    }

	ProcessOuterTPC(mcEvent,track,friendTrack,esdEvent);
	}
    else {
      printf("ERROR: AnalysisMode %d \n",fAnalysisMode);
      return;
    }
  }
}

//_____________________________________________________________________________
TH1F* AliPerformanceRes::MakeResol(TH2F * his, Int_t integ, Bool_t type, Int_t cut){
  // Create resolution histograms
 
  TH1F *hisr, *hism;
  if (!gPad) new TCanvas;
  hisr = AliTreeDraw::CreateResHistoII(his,&hism,integ,kTRUE,cut);
  if (type) return hism;
  else 
    return hisr;
}

//_____________________________________________________________________________
void AliPerformanceRes::Analyse() {
  // Analyse comparison information and store output histograms
  // in the folder "folderRes"
  //
  TH1::AddDirectory(kFALSE);
  TH1F *h=0;
  TH2F *h2D=0;
  TObjArray *aFolderObj = new TObjArray;
  if(!aFolderObj) return;

  // write results in the folder 
  TCanvas * c = new TCanvas("Phi resol Tan","Phi resol Tan");
  c->cd();

  char name[256];
  char title[256];

  for(Int_t i=0; i<5; i++) 
  {
    for(Int_t j=5; j<10; j++) 
    {
      if(j!=8) fResolHisto->GetAxis(8)->SetRangeUser(-0.9,0.89); // eta window
      //if(j!=8) fResolHisto->GetAxis(8)->SetRangeUser(0.0,0.89); // eta window
      else fResolHisto->GetAxis(8)->SetRangeUser(-1.5,1.49);
      if(GetAnalysisMode() == 3) fResolHisto->GetAxis(5)->SetRangeUser(-80.,79.99); // y range

      h2D = (TH2F*)fResolHisto->Projection(i,j);

      h = AliPerformanceRes::MakeResol(h2D,1,0,100);
      snprintf(name,256,"h_res_%d_vs_%d",i,j);
      h->SetName(name);

      h->GetXaxis()->SetTitle(fResolHisto->GetAxis(j)->GetTitle());
      snprintf(title,256,"%s %s",fResolHisto->GetAxis(i)->GetTitle(),"(resolution)");
      h->GetYaxis()->SetTitle(title);
      snprintf(title,256,"%s vs %s",title,fResolHisto->GetAxis(j)->GetTitle());
      h->SetTitle(title);

      if(j==9) h->SetBit(TH1::kLogX);    
      aFolderObj->Add(h);

      h = AliPerformanceRes::MakeResol(h2D,1,1,100);
      //h = (TH1F*)arr->At(1);
      snprintf(name,256,"h_mean_res_%d_vs_%d",i,j);
      h->SetName(name);

      h->GetXaxis()->SetTitle(fResolHisto->GetAxis(j)->GetTitle());
      snprintf(title,256,"%s %s",fResolHisto->GetAxis(i)->GetTitle(),"(mean)");
      h->GetYaxis()->SetTitle(title);

      snprintf(title,256,"%s vs %s",title,fResolHisto->GetAxis(j)->GetTitle());
      h->SetTitle(title);

      if(j==9) h->SetBit(TH1::kLogX);    
      aFolderObj->Add(h);

      fResolHisto->GetAxis(8)->SetRangeUser(-1.5,1.5);
      fResolHisto->GetAxis(9)->SetRangeUser(0.1,100.);

      //
      if(j!=8) fPullHisto->GetAxis(8)->SetRangeUser(-0.9,0.89); // eta window
      //if(j!=8) fPullHisto->GetAxis(8)->SetRangeUser(0.0,0.89);    // eta window
      else  fPullHisto->GetAxis(8)->SetRangeUser(-1.5,1.49);      // eta window
      fPullHisto->GetAxis(9)->SetRangeUser(0.,9.99);            // 1./pt threshold
      if(GetAnalysisMode() == 3) fPullHisto->GetAxis(5)->SetRangeUser(-80.,79.99); // y range

      h2D = (TH2F*)fPullHisto->Projection(i,j);

      h = AliPerformanceRes::MakeResol(h2D,1,0,100);
      snprintf(name,256,"h_pull_%d_vs_%d",i,j);
      h->SetName(name);

      h->GetXaxis()->SetTitle(fPullHisto->GetAxis(j)->GetTitle());
      snprintf(title,256,"%s %s",fPullHisto->GetAxis(i)->GetTitle(),"(resolution)");
      h->GetYaxis()->SetTitle(title);
      snprintf(title,256,"%s vs %s",title,fPullHisto->GetAxis(j)->GetTitle());
      h->SetTitle(title);

      //if(j==9) h->SetBit(TH1::kLogX);    
      aFolderObj->Add(h);

      h = AliPerformanceRes::MakeResol(h2D,1,1,100);
      snprintf(name,256,"h_mean_pull_%d_vs_%d",i,j);
      h->SetName(name);

      h->GetXaxis()->SetTitle(fPullHisto->GetAxis(j)->GetTitle());
      snprintf(title,256,"%s %s",fPullHisto->GetAxis(i)->GetTitle(),"(mean)");
      h->GetYaxis()->SetTitle(title);
      snprintf(title,256,"%s vs %s",title,fPullHisto->GetAxis(j)->GetTitle());
      h->SetTitle(title);

      //if(j==9) h->SetBit(TH1::kLogX);    
      aFolderObj->Add(h);
    }
  }

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

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

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

//_____________________________________________________________________________
TFolder* AliPerformanceRes::ExportToFolder(TObjArray * array) 
{
  // recreate folder avery time and export objects to new one
  //
  AliPerformanceRes * 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;
}

//_____________________________________________________________________________
Long64_t AliPerformanceRes::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) 
  {
  AliPerformanceRes* entry = dynamic_cast<AliPerformanceRes*>(obj);
  if (entry == 0) continue; 
  if (fResolHisto->GetEntries()<fgkMergeEntriesCut){
    fResolHisto->Add(entry->fResolHisto);  
    fPullHisto->Add(entry->fPullHisto);
  }

  count++;
  }

return count;
}

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

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