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

//-----------------------------------------------------------------
//         AliAnalysisTaskPhiEffMc class
//-----------------------------------------------------------------

#include "TChain.h"
#include "TTree.h"
#include "TLegend.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TH3F.h"
#include "THnSparse.h"
#include "TCanvas.h"
#include "TObjArray.h"
#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"
#include "AliVTrack.h"
#include "AliAODMCParticle.h"
#include "AliVParticle.h"
#include "AliAODEvent.h"
#include "AliAODInputHandler.h"
#include "AliAnalysisTaskPhiEffMc.h"
#include "AliAnalysisTaskESDfilter.h"
#include "AliAnalysisDataContainer.h"
#include "AliCentrality.h"
#include "TProof.h"
#include "AliPID.h"
#include "AliVEvent.h"
#include "AliPIDResponse.h"
#include "PWGLF/SPECTRA/PiKaPr/TestAOD/AliSpectraAODTrackCuts.h"
#include "PWGLF/SPECTRA/PiKaPr/TestAOD/AliSpectraAODEventCuts.h"
#include "AliStack.h"
#include <TMCProcess.h>
#include "AliAnalyseLeadingTrackUE.h"

#include <iostream>

using namespace std;

ClassImp(AliAnalysisTaskPhiEffMc) 

//________________________________________________________________________
AliAnalysisTaskPhiEffMc::AliAnalysisTaskPhiEffMc(const char *name) : AliAnalysisTaskSE(name), 
  fAOD(0x0), 
  fIsMC(0),
  fOutput(0x0),
  fHelperPID(0x0),
  fTrackCuts(0x0),
  fEventCuts(0x0),
  fPtCut(0.),
  fDoPID(kTRUE)
{
  // Default constructor
  

  DefineInput(0, TChain::Class());
  DefineOutput(1, TList::Class());
  DefineOutput(2, AliHelperPID::Class());
  DefineOutput(3, AliSpectraAODEventCuts::Class());
  DefineOutput(4, AliSpectraAODTrackCuts::Class());
}
//________________________________________________________________________
//________________________________________________________________________
void AliAnalysisTaskPhiEffMc::UserCreateOutputObjects()
{
  Printf("\n\n\n\n\n\n In CreateOutput Object:");
  
  if (!fTrackCuts) AliFatal("Track Cuts should be set in the steering macro");
  if (!fEventCuts) AliFatal("Event Cuts should be set in the steering macro");
  if (!fHelperPID)  AliFatal("HelperPID should be set in the steering macro");

  fOutput = new TList();
  fOutput->SetOwner();
  fOutput->SetName("BlaBla");

  // event histogram
  const Int_t nEventDim = 4;
  //                      cent  vz MCmult RecoMult
  Int_t nEventBins[4] =   { 10,  41,  50,   50};
  Double_t nEventMin[4] = {  0, -10,   0,    0};
  Double_t nEventMax[4] = {100,  10, 100,  100};

  THnSparseF* hEvent = new THnSparseF("hEvent", "hEvent", nEventDim, nEventBins, nEventMin, nEventMax);
  hEvent->GetAxis(0)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  hEvent->GetAxis(1)->SetTitle("v_{z} (cm)");
  hEvent->GetAxis(2)->SetTitle("# MC particles");
  hEvent->GetAxis(3)->SetTitle("# reconstructed tracks");
  fOutput->Add(hEvent);

  TH3F* hKcorr = new TH3F("hKcorr","hKcorr",100,0,10,100,0,10,100,0,10);
  hKcorr->GetXaxis()->SetTitle("#phi p_{T} (GeV/c)");
  hKcorr->GetYaxis()->SetTitle("k+ p_{T} (GeV/c)");
  hKcorr->GetZaxis()->SetTitle("k- p_{T} (GeV/c)");
  fOutput->Add(hKcorr);

  // single charged particles -- bins for THnSparse histograms
  const Int_t nTrackDim = 6;
  //                                PID ID, pt, y, cent, eta, phi
  Int_t    nTrackBins[nTrackDim] =   {   7, 50, 20,  10,  20, 30};
  Double_t nTrackMin[nTrackDim] =    {-3.5,  0, -1,   0,  -1,  0};
  Double_t nTrackMax[nTrackDim] =    { 3.5,  5,  1, 100,   1, 2*TMath::Pi()};

  // single charged particles -- Monte Carlo particles
  THnSparseF* hTrackMc = new THnSparseF("hTrackMc", "hTrackMc", nTrackDim, nTrackBins, nTrackMin, nTrackMax);
  hTrackMc->GetAxis(0)->SetTitle("PID ID * Charge");
  hTrackMc->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
  hTrackMc->GetAxis(2)->SetTitle("y");
  hTrackMc->GetAxis(3)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  hTrackMc->GetAxis(4)->SetTitle("#eta");
  hTrackMc->GetAxis(5)->SetTitle("#phi (rad)");
  fOutput->Add(hTrackMc);

  // single charged particles -- reconstructed tracks
  THnSparseF* hTrackReco = new THnSparseF("hTrackReco", "hTrackReco", nTrackDim, nTrackBins, nTrackMin, nTrackMax);
  hTrackReco->GetAxis(0)->SetTitle("PID ID * Charge");
  hTrackReco->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
  hTrackReco->GetAxis(2)->SetTitle("y");
  hTrackReco->GetAxis(3)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  hTrackReco->GetAxis(4)->SetTitle("#eta");
  hTrackReco->GetAxis(5)->SetTitle("#phi (rad)");
  fOutput->Add(hTrackReco);

  // single charged particles -- Monte Carlo particles matched to reconstructed tracks
  THnSparseF* hTrackMatch = new THnSparseF("hTrackMatch", "hTrackMatch", nTrackDim, nTrackBins, nTrackMin, nTrackMax);
  hTrackMatch->GetAxis(0)->SetTitle("PID ID * Charge");
  hTrackMatch->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
  hTrackMatch->GetAxis(2)->SetTitle("y");
  hTrackMatch->GetAxis(3)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  hTrackMatch->GetAxis(4)->SetTitle("#eta");
  hTrackMatch->GetAxis(5)->SetTitle("#phi (rad)");
  fOutput->Add(hTrackMatch);

  // kaon pairs -- bins for THnSparse histograms
  const Int_t nPairDim = 7;
  //                             InvMass, pt, y, cent, eta, phi,          pair ID
  Int_t    nPairBins[nPairDim] =   { 100, 50, 20,  10,  20, 30,              3};
  Double_t nPairMin[nPairDim] =    {0.98,  0, -1,   0,  -1,  0,           -0.5};
  Double_t nPairMax[nPairDim] =    { 1.1,  5,  1, 100,   1, 2*TMath::Pi(), 2.5};
  // pair ID = 0 unlike sign k+k-
  //           1 like sign pos k+k+
  //           2 like sign neg k-k-

  // kaon pairs -- Monte Carlo particles -- real phi's
  THnSparseF* hPairMcPhi = new THnSparseF("hPairMcPhi", "hPairMcPhi", nPairDim, nPairBins, nPairMin, nPairMax);
  hPairMcPhi->GetAxis(0)->SetTitle("Invariant Mass (GeV/c/c)");
  hPairMcPhi->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
  hPairMcPhi->GetAxis(2)->SetTitle("y");
  hPairMcPhi->GetAxis(3)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  hPairMcPhi->GetAxis(4)->SetTitle("#eta");
  hPairMcPhi->GetAxis(5)->SetTitle("#phi (rad)");
  hPairMcPhi->GetAxis(6)->SetTitle("pair ID");
  fOutput->Add(hPairMcPhi);

  // kaon pairs -- Monte Carlo particles -- real phi's with kaon daughters that pass pt and eta cuts
  THnSparseF* hPairMcPhiCuts = new THnSparseF("hPairMcPhiCuts", "hPairMcPhiCuts", nPairDim, nPairBins, nPairMin, nPairMax);
  hPairMcPhiCuts->GetAxis(0)->SetTitle("Invariant Mass (GeV/c/c)");
  hPairMcPhiCuts->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
  hPairMcPhiCuts->GetAxis(2)->SetTitle("y");
  hPairMcPhiCuts->GetAxis(3)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  hPairMcPhiCuts->GetAxis(4)->SetTitle("#eta");
  hPairMcPhiCuts->GetAxis(5)->SetTitle("#phi (rad)");
  hPairMcPhiCuts->GetAxis(6)->SetTitle("pair ID");
  fOutput->Add(hPairMcPhiCuts);

  // kaon pairs -- Monte Carlo particles -- phi's reconstructed from MC kaons
  THnSparseF* hPairMc = new THnSparseF("hPairMc", "hPairMc", nPairDim, nPairBins, nPairMin, nPairMax);
  hPairMc->GetAxis(0)->SetTitle("Invariant Mass (GeV/c/c)");
  hPairMc->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
  hPairMc->GetAxis(2)->SetTitle("y");
  hPairMc->GetAxis(3)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  hPairMc->GetAxis(4)->SetTitle("#eta");
  hPairMc->GetAxis(5)->SetTitle("#phi (rad)");
  hPairMc->GetAxis(6)->SetTitle("pair ID");
  fOutput->Add(hPairMc);

  // kaon pairs -- reconstructed tracks
  THnSparseF* hPairReco = new THnSparseF("hPairReco", "hPairReco", nPairDim, nPairBins, nPairMin, nPairMax);
  hPairReco->GetAxis(0)->SetTitle("Invariant Mass (GeV/c/c)");
  hPairReco->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
  hPairReco->GetAxis(2)->SetTitle("y");
  hPairReco->GetAxis(3)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  hPairReco->GetAxis(4)->SetTitle("#eta");
  hPairReco->GetAxis(5)->SetTitle("#phi (rad)");
  hPairReco->GetAxis(6)->SetTitle("pair ID");
  fOutput->Add(hPairReco);

  // kaon pairs -- Monte Carlo particles matched to reconstructed tracks
  THnSparseF* hPairMatch = new THnSparseF("hPairMatch", "hPairMatch", nPairDim, nPairBins, nPairMin, nPairMax);
  hPairMatch->GetAxis(0)->SetTitle("Invariant Mass (GeV/c/c)");
  hPairMatch->GetAxis(1)->SetTitle("p_{T} (GeV/c)");
  hPairMatch->GetAxis(2)->SetTitle("y");
  hPairMatch->GetAxis(3)->SetTitle(Form("%s cent",fEventCuts->GetCentralityMethod().Data()));
  hPairMatch->GetAxis(4)->SetTitle("#eta");
  hPairMatch->GetAxis(5)->SetTitle("#phi (rad)");
  hPairMatch->GetAxis(6)->SetTitle("pair ID");
  fOutput->Add(hPairMatch);

  PostData(1, fOutput);
  PostData(2, fHelperPID);
  PostData(3, fEventCuts);
  PostData(4, fTrackCuts);
}

//________________________________________________________________________
void AliAnalysisTaskPhiEffMc::UserExec(Option_t *)
{
  // main event loop
  fAOD = dynamic_cast<AliAODEvent*>(fInputEvent);
  if (!fAOD) {
    AliWarning("ERROR: AliAODEvent not available \n");
    return;
  }
  
  if (strcmp(fAOD->ClassName(), "AliAODEvent"))
    {
      AliFatal("Not processing AODs");
    }

  if(!fEventCuts->IsSelected(fAOD,fTrackCuts))return;//event selection

  Double_t cent = fEventCuts->GetCent();

  THnSparseF* hEvent = (THnSparseF*)fOutput->FindObject("hEvent");
  THnSparseF* hTrackMc = (THnSparseF*)fOutput->FindObject("hTrackMc");
  THnSparseF* hTrackReco = (THnSparseF*)fOutput->FindObject("hTrackReco");
  THnSparseF* hTrackMatch = (THnSparseF*)fOutput->FindObject("hTrackMatch");
  THnSparseF* hPairMcPhi = (THnSparseF*)fOutput->FindObject("hPairMcPhi");
  THnSparseF* hPairMcPhiCuts = (THnSparseF*)fOutput->FindObject("hPairMcPhiCuts");
  THnSparseF* hPairMc = (THnSparseF*)fOutput->FindObject("hPairMc");
  THnSparseF* hPairReco = (THnSparseF*)fOutput->FindObject("hPairReco");
  THnSparseF* hPairMatch = (THnSparseF*)fOutput->FindObject("hPairMatch");
  TH3F* hKcorr = (TH3F*)fOutput->FindObject("hKcorr");

  TObjArray* kaonsPosMc = new TObjArray();
  TObjArray* kaonsNegMc = new TObjArray();
  TObjArray* kaonsPosData = new TObjArray();
  TObjArray* kaonsNegData = new TObjArray();
  TObjArray* kaonsPosGen = new TObjArray();
  TObjArray* kaonsNegGen = new TObjArray();

  Int_t nMc = 0; // number of charged MC particles which satisfy cuts (except PID)
  Int_t nReco = 0; // number of reco tracks which satisfy cuts (except PID)

  //MC Loop
  TClonesArray *arrayMC = 0;
  if (fIsMC)
    {
      arrayMC = (TClonesArray*) fAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName());
      if (!arrayMC) {
	AliFatal("Error: MC particles branch not found!\n");
      }


      Int_t nMC = arrayMC->GetEntries();
      for (Int_t iMC = 0; iMC < nMC; iMC++)
	{
	  AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(iMC);

	  if(partMC->Pt()<fPtCut) continue;
	  if(partMC->Eta()>fTrackCuts->GetEtaMax() || partMC->Eta()<fTrackCuts->GetEtaMin() ) continue;

	  // PDG codes: pion(211), kaon(+/-321), proton(2212), phi(333)

	  // make pt spectrum of only MC phis that decay to k+k-
	  if(partMC->GetPdgCode()==333)
	    {
	      if(partMC->GetNDaughters()==2)
		{
		  if(TMath::Abs(((AliAODMCParticle*) arrayMC->At(TMath::Abs(partMC->GetDaughter(0))))->GetPdgCode()) == 321 && TMath::Abs(((AliAODMCParticle*) arrayMC->At(TMath::Abs(partMC->GetDaughter(1))))->GetPdgCode()) == 321)
		    {
		      AliAODMCParticle *d1 = (AliAODMCParticle*) arrayMC->At(TMath::Abs(partMC->GetDaughter(0)));
		      AliAODMCParticle *d2 = (AliAODMCParticle*) arrayMC->At(TMath::Abs(partMC->GetDaughter(1)));
		      if(d1->Charge() > 0) hKcorr->Fill(partMC->Pt(),d1->Pt(),d2->Pt());
		      else hKcorr->Fill(partMC->Pt(),d2->Pt(),d1->Pt());
		      TLorentzVector *d3 = (TLorentzVector*)makePhi(d1,d2);
		      // InvMass, pt, y, eta, phi, pair ID
		      Double_t invMass = (d3->M2() > 0 ? sqrt(d3->M2()) : 0);
		      if(invMass < 1.11)
			{
			  Double_t varfill1[7] = {invMass, d3->Pt(), d3->Rapidity(), cent, d3->Eta(), (d3->Phi() > 0 ? d3->Phi() : d3->Phi()+2*TMath::Pi()), 0};
			  hPairMcPhi->Fill(varfill1);
			  if(d1->Pt()>fPtCut && d2->Pt()>fPtCut && d1->Eta()<fTrackCuts->GetEtaMax() && d1->Eta()>fTrackCuts->GetEtaMin() && d2->Eta()<fTrackCuts->GetEtaMax() && d2->Eta()>fTrackCuts->GetEtaMin())
			    hPairMcPhiCuts->Fill(varfill1);
			}
		      delete d3;
		    }
		}
	    }

	  if(partMC->Charge()==0) continue; // remove neutrals
	  if(!partMC->IsPhysicalPrimary()) continue;  // need to remove all non-final state particles

	  nMc++;

	  Int_t mcID = fHelperPID->GetParticleSpecies(partMC);
	  if(fDoPID && (mcID>3 || mcID < -3)) continue;
	  // PID ID, pt, y, eta, phi
	  Double_t varfill2[6] = {static_cast<Double_t>((partMC->Charge() > 0 ? mcID+1 : -1*(mcID+1))), partMC->Pt(), partMC->Y(), cent, partMC->Eta(), partMC->Phi()};
	  hTrackMc->Fill(varfill2);

	  if(!fDoPID || mcID == 1)
	    {
	      if(partMC->Charge() > 0) kaonsPosMc->Add(partMC);
	      else if(partMC->Charge() < 0) kaonsNegMc->Add(partMC);
	    }
	  
	} // end MC track loop
      
      UnlikeSign(kaonsPosMc,kaonsNegMc,hPairMc,cent);
      LikeSign(kaonsPosMc,kaonsNegMc,hPairMc,cent);
    }


  //track loop
  for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) {
    AliAODTrack* track = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iTracks));
    if(!track) AliFatal("Not a standard AOD");
    if (!fTrackCuts->IsSelected(track,kTRUE)) continue;
    if(track->Charge()==0) continue;
    if(track->Pt()<fPtCut) continue;
    if(track->Eta()>fTrackCuts->GetEtaMax() || track->Eta()<fTrackCuts->GetEtaMin()) continue;

    nReco++;

    Int_t dataID=fHelperPID->GetParticleSpecies(track,kTRUE);
    if(fDoPID && (dataID>3 || dataID < -3)) continue;

    // PID ID, pt, y, eta, phi
    Double_t varfill3[6] = {static_cast<Double_t>((track->Charge() > 0 ? dataID+1 : -1*(dataID+1))), track->Pt(), track->Y(), cent, track->Eta(), track->Phi()};
    hTrackReco->Fill(varfill3);

    if(!fDoPID || dataID==1)
      {
	if(track->Charge() > 0) kaonsPosData->Add(track);
	else if(track->Charge() < 0) kaonsNegData->Add(track);
      }

    if (fIsMC)
      {
	Int_t mcLabel = track->GetLabel();
	AliAODMCParticle* tempMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(mcLabel));
	if(!tempMC)
	  {
	    AliError("Cannot get MC particle");
	    continue; 
	  }
	
	Int_t genID = fHelperPID->GetParticleSpecies(tempMC);
	if(fDoPID && (genID != dataID)) continue;
	if(fDoPID && (genID>3 || genID < -3)) continue;

	// PID ID, pt, y, eta, phi
	Double_t varfill4[6] = {static_cast<Double_t>((track->Charge() > 0 ? genID+1 : -1*(genID+1))), track->Pt(), track->Y(), cent, track->Eta(), track->Phi()};
	hTrackMatch->Fill(varfill4);

	if(genID==1)
	  {
	    Int_t motherId = TMath::Abs(tempMC->GetMother());
	    
	    AliAODMCParticle* genMother = (AliAODMCParticle*)arrayMC->At(motherId);
	    if(!genMother) continue;
	    
	    if(genMother->GetPdgCode() != 333) continue;
	    
	    if(track->Charge() > 0)
	      {
		for(Int_t k = 0; k < kaonsNegGen->GetEntriesFast(); k++)
		  {
		    AliVParticle* tempGenMatch = (AliVParticle*)kaonsNegGen->UncheckedAt(k);
		    AliAODMCParticle* tempMatchMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(tempGenMatch->GetLabel()));
		    if(!tempMatchMC) continue;
		    if(tempMatchMC->GetMother() != motherId) continue;
		    
		    TLorentzVector*c = (TLorentzVector*)makePhi(track,tempGenMatch);
		    Double_t invMass = (c->M2() > 0 ? sqrt(c->M2()) : 0);
		    if(invMass < 1.11)
		      {
			Double_t fillgen[7] = {invMass, c->Pt(), c->Rapidity(), cent, c->Eta(), (c->Phi() > 0 ? c->Phi() : c->Phi()+2*TMath::Pi()), 0};
			hPairMatch->Fill(fillgen);
		      }
		    delete c;
		  } 
	      }
	    else if(track->Charge() < 0)
	      {
		for(Int_t k = 0; k < kaonsPosGen->GetEntriesFast(); k++)
		  {
		    AliVParticle* tempGenMatch = (AliVParticle*)kaonsPosGen->UncheckedAt(k);
		    AliAODMCParticle* tempMatchMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(tempGenMatch->GetLabel()));
		    if(!tempMatchMC) continue;
		    if(tempMatchMC->GetMother() != motherId) continue;
		    
		    TLorentzVector*c = (TLorentzVector*)makePhi(track,tempGenMatch);
		    Double_t invMass = (c->M2() > 0 ? sqrt(c->M2()) : 0);
		    if(invMass < 1.11)
		      {
			Double_t fillgen2[7] = {invMass, c->Pt(), c->Rapidity(), cent, c->Eta(), (c->Phi() > 0 ? c->Phi() : c->Phi()+2*TMath::Pi()), 0};
			hPairMatch->Fill(fillgen2);
		      }
		    delete c;
		  }
	      }
	    
	    if(track->Charge() > 0) kaonsPosGen->Add(track);
	    else if(track->Charge() < 0) kaonsNegGen->Add(track);
	  }
      }
	
  } // end loop on tracks
  
  UnlikeSign(kaonsPosData,kaonsNegData,hPairReco,cent);
  LikeSign(kaonsPosData,kaonsNegData,hPairReco,cent);
  
  Double_t varfill5[4] = {cent, fAOD->GetPrimaryVertex()->GetZ(), static_cast<Double_t>(nMc), static_cast<Double_t>(nReco)};
  hEvent->Fill(varfill5);

  kaonsPosMc->Clear();
  kaonsNegMc->Clear();
  kaonsPosData->Clear();
  kaonsNegData->Clear();
  kaonsPosGen->Clear();
  kaonsNegGen->Clear();

  if(kaonsPosMc) delete kaonsPosMc;
  if(kaonsNegMc) delete kaonsNegMc;
  if(kaonsPosData) delete kaonsPosData;
  if(kaonsNegData) delete kaonsNegData;
  if(kaonsPosGen) delete kaonsPosGen;
  if(kaonsNegGen) delete kaonsNegGen;

  PostData(1,fOutput);
  PostData(2, fHelperPID);
  PostData(3, fEventCuts);
  PostData(4, fTrackCuts);
  //Printf("............. end of Exec");
  
}

//_________________________________________________________________
void   AliAnalysisTaskPhiEffMc::Terminate(Option_t *)
{
  // Terminate analysis
  //
  fOutput = dynamic_cast<TList*>(GetOutputData(1));
  if (!fOutput) {
    printf("ERROR: fOutput not available\n");
    return;
  } 
  
    printf("AliAnalysisTaskPhiEffMc: Terminate() \n");
  
}

//_________________________________________________________________
void AliAnalysisTaskPhiEffMc::UnlikeSign(TObjArray* kaonsPos, TObjArray* kaonsNeg, THnSparseF* h, Double_t cent)
{
  Int_t countPos = kaonsPos->GetEntriesFast();
  Int_t countNeg = kaonsNeg->GetEntriesFast();

  if(countPos+countNeg < 2) return;

  for(Int_t cp = 0; cp < countPos; cp++) // form k+k- pairs and compute invariant mass
    {
      AliVParticle* temp1 = (AliVParticle*)kaonsPos->UncheckedAt(cp);
      for(Int_t cn = 0; cn < countNeg; cn++)
	{
	  AliVParticle* temp2 = (AliVParticle*)kaonsNeg->UncheckedAt(cn);
	  TLorentzVector*c = (TLorentzVector*)makePhi(temp1,temp2);
	  // InvMass, pt, y, eta, phi, pair ID
	  Double_t invMass = (c->M2() > 0 ? sqrt(c->M2()) : 0);
	  if(invMass < 1.11)
	    {
	      Double_t varfill[7] = {invMass, c->Pt(), c->Rapidity(), cent, c->Eta(), (c->Phi() > 0 ? c->Phi() : c->Phi()+2*TMath::Pi()), 0};
	      h->Fill(varfill);
	    }
	  delete c;
	}
    }
}

void AliAnalysisTaskPhiEffMc::LikeSign(TObjArray* kaonsPos, TObjArray* kaonsNeg, THnSparseF* h, Double_t cent)
{
  Int_t countPos = kaonsPos->GetEntriesFast();
  Int_t countNeg = kaonsNeg->GetEntriesFast();

  if(countPos < 2 && countNeg < 2) return;

  for(Int_t cp = 0; cp < countPos; cp++) // form k+k+ pairs and compute invariant mass
    {
      AliVParticle* temp1 = (AliVParticle*)kaonsPos->UncheckedAt(cp);
      for(Int_t cn = cp+1; cn < countPos; cn++)
	{
	  AliVParticle* temp2 = (AliVParticle*)kaonsPos->UncheckedAt(cn);
	  TLorentzVector*c = (TLorentzVector*)makePhi(temp1,temp2);
	  // InvMass, pt, y, eta, phi, pair ID
	  Double_t invMass = (c->M2() > 0 ? sqrt(c->M2()) : 0);
	  if(invMass < 1.11)
	    {
	      //cout << "y = " << 0.5*log((c->E()+c->Pz())/(c->E()-c->Pz())) << "   " << c->Rapidity() << endl;
	      //cout << "eta = " << -1.*log(tan(c->Theta()/2.)) << "   " << c->Eta() << endl;
	      Double_t varfill1[7] = {invMass, c->Pt(), c->Rapidity(), cent, c->Eta(), (c->Phi() > 0 ? c->Phi() : c->Phi()+2*TMath::Pi()), 1};
	      h->Fill(varfill1);
	    }
	  delete c;
	}
    }
  for(Int_t cp = 0; cp < countNeg; cp++) // form k-k- pairs and compute invariant mass
    {
      AliVParticle* temp1 = (AliVParticle*)kaonsNeg->UncheckedAt(cp);
      for(Int_t cn = cp+1; cn < countNeg; cn++)
	{
	  AliVParticle* temp2 = (AliVParticle*)kaonsNeg->UncheckedAt(cn);
	  TLorentzVector*c = (TLorentzVector*)makePhi(temp1,temp2);
	  Double_t invMass = (c->M2() > 0 ? sqrt(c->M2()) : 0);
	  if(invMass < 1.11)
	    {
	      Double_t varfill2[7] = {invMass, c->Pt(), c->Rapidity(), cent, c->Eta(), (c->Phi() > 0 ? c->Phi() : c->Phi()+2*TMath::Pi()), 2};
	      h->Fill(varfill2);
	    }
	  delete c;
	} 
    }
}

TLorentzVector* AliAnalysisTaskPhiEffMc::makePhi(AliVParticle* p1, AliVParticle* p2)
{
  TLorentzVector* a = new TLorentzVector(p1->Px(),p1->Py(),p1->Pz(),sqrt(pow(p1->P(),2)+pow(4.93676999999999977e-01, 2)));
  TLorentzVector* b = new TLorentzVector(p2->Px(),p2->Py(),p2->Pz(),sqrt(pow(p2->P(),2)+pow(4.93676999999999977e-01, 2)));
  TLorentzVector* c = new TLorentzVector((*a)+(*b));
  delete a;
  delete b;
  return c;
}

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