ROOT logo
#include "TChain.h"
#include "TTree.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TH3D.h"
#include "TCanvas.h"
#include "TParticle.h"
#include "TObjArray.h"

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

#include "AliTHn.h"
#include "AliStack.h"
#include "AliMCEvent.h"
#include "AliESDEvent.h"
#include "AliESDInputHandler.h"
#include "AliESDtrackCuts.h"
#include "AliCentrality.h"
#include "AliGenHijingEventHeader.h"

#include "AliAnalysisTaskEfficiencyBFPsi.h"

// ---------------------------------------------------------------------
//
// Task for calculating the efficiency of the Balance Function 
// for single particles and pairs
//
// Authors: Panos Christakoglou, Michael Weber
// 
// ---------------------------------------------------------------------

ClassImp(AliAnalysisTaskEfficiencyBFPsi)
  
//________________________________________________________________________
  AliAnalysisTaskEfficiencyBFPsi::AliAnalysisTaskEfficiencyBFPsi(const char *name): 
    AliAnalysisTaskSE(name), fESD(0), fQAList(0), fOutputList(0), 
    fHistEventStats(0), fHistCentrality(0), fHistNMult(0), 
    fHistGeneratedPlus(0), fHistSurvivedPlus(0),
    fHistGeneratedMinus(0), fHistSurvivedMinus(0),
    fHistGeneratedPlusPlus(0), fHistSurvivedPlusPlus(0),
    fHistGeneratedMinusMinus(0), fHistSurvivedMinusMinus(0),
    fHistGeneratedPlusMinus(0), fHistSurvivedPlusMinus(0),
    fHistGeneratedMinusPlus(0), fHistSurvivedMinusPlus(0),
    fESDtrackCuts(0), fAnalysisMode(0), 
    fCentralityEstimator("V0M"), 
    fCentralityPercentileMin(0.0), fCentralityPercentileMax(5.0), 
    fVxMax(3.0), fVyMax(3.0), fVzMax(10.), 
    fMinNumberOfTPCClusters(80), fMaxChi2PerTPCCluster(4.0), 
    fMaxDCAxy(3.0), fMaxDCAz(3.0),
    fMinPt(0.3), fMaxPt(1.5), fMaxEta(0.8), fEtaRangeMax(0.8), 
    fPtRangeMin(0.1), fPtRangeMax(5.0), fPhiRangeMin(0.0),fPhiRangeMax(6.28) {  
  // Define input and output slots here
  // Input slot #0 works with a TChain
  DefineInput(0, TChain::Class());
  // Output slot #0 id reserved by the base class for AOD
  // Output slot #1 writes into a TH1 container
  DefineOutput(1, TList::Class());
  DefineOutput(2, TList::Class());
}

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

  // global switch disabling the reference 
  // (to avoid "Replacing existing TH1" if several wagons are created in train)
  Bool_t oldStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE);

  fQAList = new TList();
  fQAList->SetName("QAList");
  fQAList->SetOwner();

  fOutputList = new TList();
  fOutputList->SetName("OutputList");
  fOutputList->SetOwner();

  //Event stats.
  TString gCutName[4] = {"Total","Offline trigger",
                         "Vertex","Analyzed"};
  fHistEventStats = new TH1F("fHistEventStats",
                             "Event statistics;;N_{events}",
                             4,0.5,4.5);
  for(Int_t i = 1; i <= 4; i++)
    fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data());
  fQAList->Add(fHistEventStats);

  //ESD analysis
  fHistCentrality = new TH1F("fHistCentrality",";Centrality bin;Events",
			     20,0.5,20.5);
  fQAList->Add(fHistCentrality);
  
  //multiplicity (good MC tracks)
  TString histName;
  histName = "fHistNMult";
  fHistNMult = new TH1F(histName.Data(), 
			";N_{mult.}",
			200,0,20000);
  fQAList->Add(fHistNMult);
  
  //Setting up the AliTHn
  Int_t anaSteps   = 1;       // analysis steps
  Int_t iBinSingle[kVariablesSingle];        // binning for track variables
  Double_t* dBinsSingle[kVariablesSingle];   // bins for track variables  
  TString axisTitleSingle[kVariablesSingle]; // axis titles for track variables
  
  // two particle histograms
  Int_t iBinPair[kVariablesPair];         // binning for track variables
  Double_t* dBinsPair[kVariablesPair];    // bins for track variables  
  TString axisTitlePair[kVariablesPair];  // axis titles for track variables

  //Psi_2: -0.5->0.5 (in plane), 0.5->1.5 (intermediate), 1.5->2.5 (out of plane), 2.5->3.5 (all)
  const Int_t kNPsi2Bins = 4;
  Double_t psi2Bins[kNPsi2Bins+1] = {-0.5,0.5,1.5,2.5,3.5};
  iBinSingle[0]       = kNPsi2Bins;
  dBinsSingle[0]      = psi2Bins;
  axisTitleSingle[0]  = "#phi - #Psi_{2} (a.u.)";
  iBinPair[0]       = kNPsi2Bins;
  dBinsPair[0]      = psi2Bins;
  axisTitlePair[0]  = "#phi - #Psi_{2} (a.u.)"; 
  
  // delta eta
  const Int_t kNDeltaEtaBins = 80;
  Double_t deltaEtaBins[kNDeltaEtaBins+1];
  for(Int_t i = 0; i < kNDeltaEtaBins+1; i++)
    deltaEtaBins[i] = -2.0 + i * 0.05;
  iBinPair[1]       = kNDeltaEtaBins;
  dBinsPair[1]      = deltaEtaBins;
  axisTitlePair[1]  = "#Delta #eta"; 
  
  // delta phi
  const Int_t kNDeltaPhiBins = 72;
  Double_t deltaPhiBins[kNDeltaPhiBins+1];
  for(Int_t i = 0; i < kNDeltaPhiBins+1; i++){
    deltaPhiBins[i] = -180.0 + i * 5.;
  } 
  iBinPair[2]       = kNDeltaPhiBins;
  dBinsPair[2]      = deltaPhiBins;
  axisTitlePair[2]  = "#Delta #phi (#circ)"; 
  
  // pt(trigger-associated)
  const Int_t kNPtBins = 16;
  Double_t ptBins[kNPtBins+1] = {0.2,0.6,1.0,1.5,2.0,2.5,3.0,3.5,4.0,5.0,6.0,7.0,8.0,10.,12.,15.,20.};
  iBinSingle[1]       = kNPtBins;
  dBinsSingle[1]      = ptBins;
  axisTitleSingle[1]  = "p_{t}^{trig.} (GeV/c)"; 
  
  iBinPair[3]       = kNPtBins;
  dBinsPair[3]      = ptBins;
  axisTitlePair[3]  = "p_{t}^{trig.} (GeV/c)"; 
  
  iBinPair[4]       = kNPtBins;
  dBinsPair[4]      = ptBins;
  axisTitlePair[4]  = "p_{t}^{assoc.} (GeV/c)";   
  
  //=============================//
  //Generated: Single particle distributions
  fHistGeneratedPlus = new AliTHn("fHistGeneratedPlus",
				  "Generated positive primaries",
				  anaSteps,kVariablesSingle,iBinSingle);
  for (Int_t j = 0; j < kVariablesSingle; j++) {
    fHistGeneratedPlus->SetBinLimits(j, dBinsSingle[j]);
    fHistGeneratedPlus->SetVarTitle(j, axisTitleSingle[j]);
  }
  fOutputList->Add(fHistGeneratedPlus);

  fHistGeneratedMinus = new AliTHn("fHistGeneratedMinus",
				  "Generated positive primaries",
				  anaSteps,kVariablesSingle,iBinSingle);
  for (Int_t j = 0; j < kVariablesSingle; j++) {
    fHistGeneratedMinus->SetBinLimits(j, dBinsSingle[j]);
    fHistGeneratedMinus->SetVarTitle(j, axisTitleSingle[j]);
  }
  fOutputList->Add(fHistGeneratedMinus);

  //Survived: Single particle distributions
  fHistSurvivedPlus = new AliTHn("fHistSurvivedPlus",
				  "Survived positive primaries",
				  anaSteps,kVariablesSingle,iBinSingle);
  for (Int_t j = 0; j < kVariablesSingle; j++) {
    fHistSurvivedPlus->SetBinLimits(j, dBinsSingle[j]);
    fHistSurvivedPlus->SetVarTitle(j, axisTitleSingle[j]);
  }
  fOutputList->Add(fHistSurvivedPlus);

  fHistSurvivedMinus = new AliTHn("fHistSurvivedMinus",
				  "Survived positive primaries",
				  anaSteps,kVariablesSingle,iBinSingle);
  for (Int_t j = 0; j < kVariablesSingle; j++) {
    fHistSurvivedMinus->SetBinLimits(j, dBinsSingle[j]);
    fHistSurvivedMinus->SetVarTitle(j, axisTitleSingle[j]);
  }
  fOutputList->Add(fHistSurvivedMinus);

  //=============================//
  //Generated-Survived: Particle pairs +-
  fHistGeneratedPlusMinus = new AliTHn("fHistGeneratedPlusMinus",
				       "Generated +- primaries",
				       anaSteps,kVariablesPair,iBinPair);
  for (Int_t j = 0; j < kVariablesPair; j++) {
    fHistGeneratedPlusMinus->SetBinLimits(j, dBinsPair[j]);
    fHistGeneratedPlusMinus->SetVarTitle(j, axisTitlePair[j]);
  }
  fOutputList->Add(fHistGeneratedPlusMinus);

  fHistSurvivedPlusMinus = new AliTHn("fHistSurvivedPlusMinus",
				     "Survived +- primaries",
				     anaSteps,kVariablesPair,iBinPair);
  for (Int_t j = 0; j < kVariablesPair; j++) {
    fHistSurvivedPlusMinus->SetBinLimits(j, dBinsPair[j]);
    fHistSurvivedPlusMinus->SetVarTitle(j, axisTitlePair[j]);
  }
  fOutputList->Add(fHistSurvivedPlusMinus);

  //Generated-Survived: Particle pairs -+
  fHistGeneratedMinusPlus = new AliTHn("fHistGeneratedMinusPlus",
				       "Generated -+ primaries",
				       anaSteps,kVariablesPair,iBinPair);
  for (Int_t j = 0; j < kVariablesPair; j++) {
    fHistGeneratedMinusPlus->SetBinLimits(j, dBinsPair[j]);
    fHistGeneratedMinusPlus->SetVarTitle(j, axisTitlePair[j]);
  }
  fOutputList->Add(fHistGeneratedMinusPlus);
  
  fHistSurvivedMinusPlus = new AliTHn("fHistSurvivedMinusPlus",
				      "Survived -+ primaries",
				      anaSteps,kVariablesPair,iBinPair);
  for (Int_t j = 0; j < kVariablesPair; j++) {
    fHistSurvivedMinusPlus->SetBinLimits(j, dBinsPair[j]);
    fHistSurvivedMinusPlus->SetVarTitle(j, axisTitlePair[j]);
  }
  fOutputList->Add(fHistSurvivedMinusPlus);

  //Generated-Survived: Particle pairs ++
  fHistGeneratedPlusPlus = new AliTHn("fHistGeneratedPlusPlus",
				      "Generated ++ primaries",
				      anaSteps,kVariablesPair,iBinPair);
  for (Int_t j = 0; j < kVariablesPair; j++) {
    fHistGeneratedPlusPlus->SetBinLimits(j, dBinsPair[j]);
    fHistGeneratedPlusPlus->SetVarTitle(j, axisTitlePair[j]);
  }
  fOutputList->Add(fHistGeneratedPlusPlus);

  fHistSurvivedPlusPlus = new AliTHn("fHistSurvivedPlusPlus",
				     "Survived ++ primaries",
				     anaSteps,kVariablesPair,iBinPair);
  for (Int_t j = 0; j < kVariablesPair; j++) {
    fHistSurvivedPlusPlus->SetBinLimits(j, dBinsPair[j]);
    fHistSurvivedPlusPlus->SetVarTitle(j, axisTitlePair[j]);
  }
  fOutputList->Add(fHistSurvivedPlusPlus);

  //Generated-Survived: Particle pairs --
  fHistGeneratedMinusMinus = new AliTHn("fHistGeneratedMinusMinus",
					"Generated -- primaries",
					anaSteps,kVariablesPair,iBinPair);
  for (Int_t j = 0; j < kVariablesPair; j++) {
    fHistGeneratedMinusMinus->SetBinLimits(j, dBinsPair[j]);
    fHistGeneratedMinusMinus->SetVarTitle(j, axisTitlePair[j]);
  }
  fOutputList->Add(fHistGeneratedMinusMinus);
  
  fHistSurvivedMinusMinus = new AliTHn("fHistSurvivedMinusMinus",
				       "Survived -- primaries",
				       anaSteps,kVariablesPair,iBinPair);
  for (Int_t j = 0; j < kVariablesPair; j++) {
    fHistSurvivedMinusMinus->SetBinLimits(j, dBinsPair[j]);
    fHistSurvivedMinusMinus->SetVarTitle(j, axisTitlePair[j]);
  }
  fOutputList->Add(fHistSurvivedMinusMinus);
  //=============================//

  fQAList->Print();
  fOutputList->Print();

  PostData(1, fQAList);
  PostData(2, fOutputList);

  TH1::AddDirectory(oldStatus);

}

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

  // Post output data.
  //ESD analysis
  fESD = dynamic_cast<AliESDEvent*>(InputEvent());
  if (!fESD) {
    printf("ERROR: fESD not available\n");
    return;
  }
  
  AliMCEvent* mcEvent = MCEvent();
  if (!mcEvent) {
    AliError("ERROR: Could not retrieve MC event");
    return;
  }
  AliStack* stack = mcEvent->Stack();
  if (!stack) {
    AliError("ERROR: Could not retrieve MC stack");
    return;
  }

  // arrays for 2 particle histograms
  Int_t nMCLabelCounter         = 0;
  const Int_t maxMCLabelCounter = 20000;

  Double_t phiMinusPsi[maxMCLabelCounter];
  Double_t eta[maxMCLabelCounter];
  Double_t pt[maxMCLabelCounter];
  Double_t phi[maxMCLabelCounter];
  Int_t level[maxMCLabelCounter];
  Int_t charge[maxMCLabelCounter];

  Double_t trackVariablesSingle[kVariablesSingle];
  Double_t trackVariablesPair[kVariablesPair];

  Double_t gReactionPlane       = 0.;
  AliGenHijingEventHeader* headerH = dynamic_cast<AliGenHijingEventHeader*>(dynamic_cast<AliMCEvent*>(mcEvent)->GenEventHeader());
  if (headerH) {
    gReactionPlane = headerH->ReactionPlaneAngle();
    gReactionPlane *= TMath::RadToDeg();
  }

  //AliInfo(Form("%d %d",mcEvent->GetNumberOfTracks(),fESD->GetNumberOfTracks()));
  fHistEventStats->Fill(1); //all events
    
  //Centrality stuff
  AliCentrality *centrality = fESD->GetCentrality();
  Int_t nCentrality = 0;
  nCentrality = (Int_t)(centrality->GetCentralityPercentile(fCentralityEstimator.Data())/10.);

  //Printf("Centrality: %lf",centrality->GetCentralityPercentile(fCentralityEstimator.Data()));

  if(centrality->IsEventInCentralityClass(fCentralityPercentileMin,
					  fCentralityPercentileMax,
					  fCentralityEstimator.Data())) {
    fHistEventStats->Fill(2); //triggered + centrality
    fHistCentrality->Fill(nCentrality+1);

    //Printf("Centrality selection: %lf - %lf",fCentralityPercentileMin,fCentralityPercentileMax);
  
    if(fAnalysisMode.CompareTo("TPC") == 0 ) {
      const AliESDVertex *vertex = fESD->GetPrimaryVertexTPC();
      if(vertex) {
	if(vertex->GetNContributors() > 0) {
	  if(vertex->GetZRes() != 0) {
	    fHistEventStats->Fill(3); //events with a proper vertex
	    if(TMath::Abs(vertex->GetX()) < fVxMax) {
	      if(TMath::Abs(vertex->GetY()) < fVyMax) {
		if(TMath::Abs(vertex->GetZ()) < fVzMax) {
		  fHistEventStats->Fill(4); //analyzed events
		  
		  Int_t nMCParticles = mcEvent->GetNumberOfTracks();
		  TArrayI labelMCArray(nMCParticles);
		  
		  for (Int_t iTracks = 0; iTracks < mcEvent->GetNumberOfTracks(); iTracks++) {
		    AliMCParticle *mcTrack = (AliMCParticle*) mcEvent->GetTrack(iTracks);
		    if (!mcTrack) {
		      AliError(Form("ERROR: Could not receive track %d (mc loop)", iTracks));
		      continue;
		    }
		    
		    //exclude particles generated out of the acceptance
		    Double_t vz = mcTrack->Zv();
		    if (TMath::Abs(vz) > 50.) continue;
		   
		    //acceptance
		    if(TMath::Abs(mcTrack->Eta()) > fEtaRangeMax) 
		      continue;
		    if((mcTrack->Pt() > fPtRangeMax)||(mcTrack->Pt() < fPtRangeMin)) 
		      continue;
		    //if((mcTrack->Phi() > fPhiRangeMax)||(mcTrack->Phi() < fPhiRangeMin)) 
		    //continue;
		    
		    TParticle* particle = mcTrack->Particle();
		    if(!particle) continue;
		    if(!stack->IsPhysicalPrimary(iTracks)) continue;

		    if(iTracks <= stack->GetNprimary()) {		      
		      Short_t gMCCharge = mcTrack->Charge();
		      Float_t firstPhi = mcTrack->Phi()*TMath::RadToDeg();
		      Float_t firstPt  = mcTrack->Pt();
    
		      // Event plane (determine psi bin)
		      Double_t gPsiMinusPhi    =   0.;
		      Double_t gPsiMinusPhiBin = -10.;
		      gPsiMinusPhi   = TMath::Abs(firstPhi - gReactionPlane);
		      //in-plane
		      if((gPsiMinusPhi <= 7.5)||
			 ((172.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 187.5)))
			gPsiMinusPhiBin = 0.0;
		      //intermediate
		      else if(((37.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 52.5))||
			      ((127.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 142.5))||
			      ((217.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 232.5))||
			      ((307.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 322.5)))
			gPsiMinusPhiBin = 1.0;
		      //out of plane
		      else if(((82.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 97.5))||
			      ((262.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 277.5)))
			gPsiMinusPhiBin = 2.0;
		      //everything else
		      else 
			gPsiMinusPhiBin = 3.0;

		      trackVariablesSingle[0]    =  gPsiMinusPhiBin;
		      trackVariablesSingle[1]    =  firstPt;  

		      if(gMCCharge > 0)
			fHistGeneratedPlus->Fill(trackVariablesSingle,0,1.);
		      else if(gMCCharge < 0)
			fHistGeneratedMinus->Fill(trackVariablesSingle,0,1.);
		      
		      labelMCArray.AddAt(iTracks,nMCLabelCounter);
		      if(nMCLabelCounter >= maxMCLabelCounter){
			AliWarning(Form("MC Label Counter > Limit (%d) --> stop loop here",maxMCLabelCounter));
			break;
		      }
		      
		      //fill the arrays for 2 particle analysis
		      phiMinusPsi[nMCLabelCounter]    = gPsiMinusPhiBin;
		      eta[nMCLabelCounter] = particle->Eta();
		      pt[nMCLabelCounter]  = particle->Pt();
		      phi[nMCLabelCounter] = particle->Phi()*TMath::RadToDeg();
		      charge[nMCLabelCounter] = gMCCharge;
		      // findable = generated in this case!
		      
		      level[nMCLabelCounter]  = 1;
		      nMCLabelCounter += 1;
		    }//primaries
		  }//loop over MC particles
		
		  fHistNMult->Fill(nMCLabelCounter);
		  
		  //ESD track loop
		  Int_t nGoodTracks = fESD->GetNumberOfTracks();
		  
		  TArrayI labelArray(nGoodTracks);
		  Int_t labelCounter = 0;
		  for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) {
		    AliESDtrack* track = fESD->GetTrack(iTracks);
		    //AliESDtrack* track = fESDtrackCuts->GetTPCOnlyTrack(fESD,iTracks);
		    if(!track) continue;

		    AliESDtrack *tpcOnlyTrack = new AliESDtrack();
		    
		    if (!track->FillTPCOnlyTrack(*tpcOnlyTrack)) {
		      delete tpcOnlyTrack;
		      continue;
		    }

		    Int_t label = TMath::Abs(track->GetTPCLabel());
		    if(IsLabelUsed(labelArray,label)) continue;
		    labelArray.AddAt(label,labelCounter);
		    labelCounter += 1;
		  
		    Int_t mcGoods = nMCLabelCounter;
		    for (Int_t k = 0; k < mcGoods; k++) {
		      Int_t mcLabel = labelMCArray.At(k);
		      		    			      
		      if (mcLabel != TMath::Abs(label)) continue;
		      if(mcLabel != label) continue;
		      if(label > stack->GetNtrack()) continue;
		      
		      TParticle *particle = stack->Particle(label);
		      if(!particle) continue;
		      
		      //acceptance
		      if(TMath::Abs(particle->Eta()) > fEtaRangeMax) 
			continue;
		      if((particle->Pt() > fPtRangeMax)||(particle->Pt() <  fPtRangeMin)) 
			continue;
		      //if((particle->Phi() > fPhiRangeMax)||(particle->Phi() < fPhiRangeMin)) 
		      //continue;

		      if(!stack->IsPhysicalPrimary(label)) continue;
		      
		      if(label <= stack->GetNprimary()) {		
			Short_t gCharge = track->Charge();		
			// track cuts + analysis kinematic cuts
			if(fESDtrackCuts->AcceptTrack(track) && TMath::Abs(track->Eta()) < fMaxEta && track->Pt() > fMinPt && track->Pt() < fMaxPt ){
			  // survived
			  level[k]  = 2;

			  Float_t firstPhi = particle->Phi()*TMath::RadToDeg();
			  Float_t firstPt  = particle->Pt();
    
			  // Event plane (determine psi bin)
			  Double_t gPsiMinusPhi    =   0.;
			  Double_t gPsiMinusPhiBin = -10.;
			  gPsiMinusPhi = TMath::Abs(firstPhi - gReactionPlane);
			  //in-plane
			  if((gPsiMinusPhi <= 7.5)||
			     ((172.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 187.5)))
			    gPsiMinusPhiBin = 0.0;
			  //intermediate
			  else if(((37.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 52.5))||
				  ((127.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 142.5))||
				  ((217.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 232.5))||
				  ((307.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 322.5)))
			    gPsiMinusPhiBin = 1.0;
			  //out of plane
			  else if(((82.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 97.5))||
				  ((262.5 <= gPsiMinusPhi)&&(gPsiMinusPhi <= 277.5)))
			    gPsiMinusPhiBin = 2.0;
			  //everything else
			  else 
			    gPsiMinusPhiBin = 3.0;
			  
			  trackVariablesSingle[0]    =  gPsiMinusPhiBin;
			  trackVariablesSingle[1]    =  firstPt;  
			  
			  if(gCharge > 0)
			    fHistSurvivedPlus->Fill(trackVariablesSingle,0,1.);
			  else if(gCharge < 0)
			    fHistSurvivedMinus->Fill(trackVariablesSingle,0,1.);			  
			}//track cuts
		      }//primary particles
		    }//loop over the generated
		  }//ESD track loop
		  
		  labelMCArray.Reset();
		  labelArray.Reset();
		}//Vz cut
	      }//Vy cut
	    }//Vx cut
	  }//Vz resolution
	}//number of contributors
      }//valid vertex
    }//TPC analysis mode
  }//centrality  
  
  // Here comes the 2 particle analysis
  // loop over all good MC particles
  for (Int_t i = 0; i < nMCLabelCounter ; i++) {
    Float_t firstEta = eta[i];
    Float_t firstPhi = phi[i];
    Float_t firstPt  = pt[i];
    Float_t gPhisMinusPsiBin = phiMinusPsi[i];
    for (Int_t j = 0; j < nMCLabelCounter ; j++) {
      if(i == j) continue;

      Float_t secondEta = eta[j];
      Float_t secondPhi = phi[j];
      Float_t secondPt  = pt[j];

      trackVariablesPair[0]    =  gPhisMinusPsiBin;
      trackVariablesPair[1]    =  firstEta - secondEta;  // delta eta
      trackVariablesPair[2]    =  firstPhi - secondPhi;  // delta phi
      if (trackVariablesPair[2] > 180.)   // delta phi between -180 and 180 
	trackVariablesPair[2] -= 360.;
      if (trackVariablesPair[2] <  - 180.) 
	trackVariablesPair[2] += 360.;
      trackVariablesPair[3]    =  firstPt;      // pt trigger
      trackVariablesPair[4]    =  secondPt;  // pt

      //++ pairs
      if(charge[i] > 0 && charge[j] > 0 ) {
	if(level[i] > 0 && level[j] > 0) 
	  fHistGeneratedPlusPlus->Fill(trackVariablesPair,0,1.);
       
	if(level[i] > 1 && level[j] > 1) 
	  fHistSurvivedPlusPlus->Fill(trackVariablesPair,0,1.);
      }

      //-- pairs
      else if(charge[i] < 0 && charge[j] < 0 ) {
	if(level[i] > 0 && level[j] > 0) 
	  fHistGeneratedMinusMinus->Fill(trackVariablesPair,0,1.);
       
	if(level[i] > 1 && level[j] > 1) 
	  fHistSurvivedMinusMinus->Fill(trackVariablesPair,0,1.);
      }

      //+- pairs
      else if(charge[i] > 0 && charge[j] < 0 ) {
	if(level[i] > 0 && level[j] > 0) 
	  fHistGeneratedPlusMinus->Fill(trackVariablesPair,0,1.);
       
	if(level[i] > 1 && level[j] > 1) 
	  fHistSurvivedPlusMinus->Fill(trackVariablesPair,0,1.);
      }

      //-+ pairs
      else if(charge[i] < 0 && charge[j] > 0 ) {
	if(level[i] > 0 && level[j] > 0) 
	  fHistGeneratedMinusPlus->Fill(trackVariablesPair,0,1.);
       
	if(level[i] > 1 && level[j] > 1) 
	  fHistSurvivedMinusPlus->Fill(trackVariablesPair,0,1.);
      }
    }//second particle loop
  }//first particle loop
  
}

//________________________________________________________________________
void AliAnalysisTaskEfficiencyBFPsi::Terminate(Option_t *) {
  // Draw result to the screen
  // Called once at the end of the query

  fOutputList = dynamic_cast<TList*> (GetOutputData(1));
  if (!fOutputList) {
    printf("ERROR: Output list not available\n");
    return;
  }
}

//____________________________________________________________________//
Bool_t AliAnalysisTaskEfficiencyBFPsi::IsLabelUsed(TArrayI labelArray, Int_t label) {
  //Checks if the label is used already
  Bool_t status = kFALSE;
  for(Int_t i = 0; i < labelArray.GetSize(); i++) {
    if(labelArray.At(i) == label)
      status = kTRUE;
  }

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