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

// AliAnalysisTaskPhiFlow:
// author: Redmer Alexander Bertens (rbertens@cern.ch)
// analyis task for phi-meson reconstruction and determination of v_n
// AliPhiMesonHelperTrack provides a lightweight helper track for reconstruction
// new in this version (use with caution): vzero event plane, event mixing

#include "TChain.h"
#include "TH1.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TMath.h"
#include "TObjArray.h"
#include "AliAnalysisTaskSE.h"
#include "AliAnalysisManager.h"
#include "AliAODEvent.h"
#include "AliAODInputHandler.h"
#include "AliCentrality.h"
#include "AliAnalysisTaskPhiFlow.h"
#include "AliFlowBayesianPID.h"
#include "AliPIDCombined.h"
#include "AliMCEvent.h"
#include "TProfile.h"
#include "AliFlowCandidateTrack.h"
#include "AliFlowTrackCuts.h"
#include "AliFlowEventSimple.h"
#include "AliFlowTrackSimple.h"
#include "AliFlowCommonConstants.h"
#include "AliFlowEvent.h"
#include "TVector3.h"
#include "AliAODVZERO.h"
#include "AliPIDResponse.h"
#include "AliAODMCParticle.h"
#include "AliAnalysisTaskVnV0.h"
#include "AliEventPoolManager.h"

class AliFlowTrackCuts;

using std::cout;
using std::endl;

ClassImp(AliAnalysisTaskPhiFlow)
ClassImp(AliPhiMesonHelperTrack)

AliAnalysisTaskPhiFlow::AliAnalysisTaskPhiFlow() : AliAnalysisTaskSE(),
   fDebug(0), fIsMC(0), fEventMixing(0), fTypeMixing(0), fQA(0), fV0(0), fMassBins(1), fMinMass(-1.), fMaxMass(0.), fCutsRP(NULL), fNullCuts(0), fPIDResponse(0), fFlowEvent(0), fBayesianResponse(0), fCandidates(0), fCandidateEtaPtCut(0), fCandidateMinEta(0), fCandidateMaxEta(0), fCandidateMinPt(0), fCandidateMaxPt(0), fCandidateYCut(kFALSE), fCandidateMinY(-.5), fCandidateMaxY(.5), fNPtBins(18), fCentrality(999), fVertex(999), fAOD(0), fPoolManager(0), fOutputList(0), fEventStats(0), fCentralityPass(0), fCentralityNoPass(0), fNOPID(0), fPIDk(0),fNOPIDTOF(0), fPIDTOF(0), fPtP(0), fPtN(0), fPtKP(0), fPtKN(0), fMultCorAfterCuts(0), fMultvsCentr(0), fCentralityMin(0), fCentralityMax(100), fkCentralityMethodA(0), fkCentralityMethodB(0), fCentralityCut2010(0), fCentralityCut2011(0), fPOICuts(0), fVertexRange(0), fPhi(0), fPt(0), fEta(0), fVZEROA(0), fVZEROC(0), fTPCM(0)/*, fDeltaDipAngle(0), fDeltaDipPt(0), fApplyDeltaDipCut(0)*/, fDCAAll(0), fDCAXYQA(0), fDCAZQA(0), fDCAPrim(0), fDCASecondaryWeak(0), fDCAMaterial(0), fSubEventDPhiv2(0), fSkipEventSelection(0), fUsePidResponse(0), fPIDCombined(0)
{
   // Default constructor
   for(Int_t i(0); i < 7; i++) fPIDConfig[i] = 0.;
   for(Int_t i(0); i < 5; i++) fDCAConfig[i] = 0.;
   for(Int_t i(0); i < 20; i++) {
       fVertexMixingBins[i] = 0;
       fCentralityMixingBins[i] = 0;
   }
   fMixingParameters[0] = 1000; fMixingParameters[1] = 50000; fMixingParameters[2] = 5;
   for(Int_t i(0); i < 18; i++) {
       for(Int_t j(0); j < 2; j++) fV0Data[i][j] = 0;
       fInvMNP[i] = 0; fInvMNN[i] = 0; fInvMPP[i] = 0; fPtSpectra[i] = 0; fPtBins[i] = 0.;
   }
}
//_____________________________________________________________________________
AliAnalysisTaskPhiFlow::AliAnalysisTaskPhiFlow(const char *name) : AliAnalysisTaskSE(name),
   fDebug(0), fIsMC(0), fEventMixing(0), fTypeMixing(0), fQA(0), fV0(0), fMassBins(1), fMinMass(-1.), fMaxMass(0.), fCutsRP(NULL), fNullCuts(0), fPIDResponse(0), fFlowEvent(0), fBayesianResponse(0), fCandidates(0), fCandidateEtaPtCut(0), fCandidateMinEta(0), fCandidateMaxEta(0), fCandidateMinPt(0), fCandidateMaxPt(0), fCandidateYCut(kFALSE), fCandidateMinY(-.5), fCandidateMaxY(.5), fNPtBins(18), fCentrality(999), fVertex(999), fAOD(0), fPoolManager(0), fOutputList(0), fEventStats(0), fCentralityPass(0), fCentralityNoPass(0), fNOPID(0), fPIDk(0), fNOPIDTOF(0), fPIDTOF(0), fPtP(0), fPtN(0), fPtKP(0), fPtKN(0), fMultCorAfterCuts(0), fMultvsCentr(0), fCentralityMin(0), fCentralityMax(100), fkCentralityMethodA(0), fkCentralityMethodB(0), fCentralityCut2010(0), fCentralityCut2011(0), fPOICuts(0), fVertexRange(0), fPhi(0), fPt(0), fEta(0), fVZEROA(0), fVZEROC(0), fTPCM(0)/*, fDeltaDipAngle(0), fDeltaDipPt(0), fApplyDeltaDipCut(0)*/, fDCAAll(0), fDCAXYQA(0), fDCAZQA(0), fDCAPrim(0), fDCASecondaryWeak(0), fDCAMaterial(0), fSubEventDPhiv2(0), fSkipEventSelection(0), fUsePidResponse(0), fPIDCombined(0)
{
   // Constructor
   for(Int_t i(0); i < 7; i++) fPIDConfig[i] = 0.;
   for(Int_t i(0); i < 5; i++) fDCAConfig[i] = 0.;
   for(Int_t i(0); i < 20; i++) {
       fVertexMixingBins[i] = 0;
       fCentralityMixingBins[i] = 0;
   }
   fMixingParameters[0] = 1000; fMixingParameters[1] = 50000; fMixingParameters[2] = 5;
   for(Int_t i(0); i < 18; i++) {
       for(Int_t j(0); j < 2; j++) fV0Data[i][j] = 0;
       fInvMNP[i] = 0; fInvMNN[i] = 0; fInvMPP[i] = 0; fPtSpectra[i] = 0; fPtBins[i] = 0.;
   }
   DefineInput(0, TChain::Class());
   DefineOutput(1, TList::Class());
   DefineOutput(2, AliFlowEventSimple::Class());
   if(fDebug > 0) cout << " === Created instance of AliAnaysisTaskPhiFlow === " << endl;
}
//_____________________________________________________________________________
AliAnalysisTaskPhiFlow::~AliAnalysisTaskPhiFlow()
{
   // Destructor
   if (fNullCuts) delete fNullCuts;
   if (fOutputList) delete fOutputList;
   if (fCandidates) delete fCandidates;
   if (fFlowEvent) delete fFlowEvent;
   if (fBayesianResponse) delete fBayesianResponse;
   if (fEventMixing) delete fPoolManager;
   if (fPIDCombined) delete fPIDCombined;
   if (fDebug > 0) cout << " === Deleted instance of AliAnalysisTaskPhiFlow === " << endl;
}
//_____________________________________________________________________________
TH1F* AliAnalysisTaskPhiFlow::BookHistogram(const char* name)
{
   // Return a pointer to a TH1 with predefined binning
   if(fDebug > 0) cout << " *** BookHistogram() *** " << name << endl;
   TH1F *hist = new TH1F(name, Form("M_{INV} (%s)", name), 60, .99, 1.092);
   hist->GetXaxis()->SetTitle("M_{INV} (GeV / c^{2})");
   hist->GetYaxis()->SetTitle("No. of pairs");
   hist->SetMarkerStyle(kFullCircle);
   hist->Sumw2();
   fOutputList->Add(hist);
   return hist;
}
//_____________________________________________________________________________
TH2F* AliAnalysisTaskPhiFlow::BookPIDHistogram(const char* name, Bool_t TPC)
{
   // Return a pointer to a TH2 with predefined binning
   if(fDebug > 0) cout << " *** BookPIDHisotgram() *** " << endl;
   TH2F *hist = 0x0;
   if(TPC) {
       hist = new TH2F(name, Form("PID (%s)", name), 100, 0, 5, 100, 0, 1000);
       hist->GetYaxis()->SetTitle("dE/dx (a.u.)");
   }
   if(!TPC) {
       hist = new TH2F(name, Form("PID (%s)", name), 100, 0, 5, 100, 0, 1.5);
       hist->GetYaxis()->SetTitle("#beta");
   }
   hist->GetXaxis()->SetTitle("P (GeV / c)");
   fOutputList->Add(hist);
   return hist;
}
//_____________________________________________________________________________
TH1F* AliAnalysisTaskPhiFlow::InitPtSpectraHistograms(Float_t nmin, Float_t nmax)
{
   // intialize p_t histograms for each p_t bin
   if(fDebug > 0) cout << " *** InitPtSpectraHistograms() *** " << endl;
   TH1F* hist = new TH1F(Form("%4.2f p_{t} %4.2f", nmin, nmax), Form("%f p_{t} %f", nmin, nmax), 60, nmin, nmax);
   hist->GetXaxis()->SetTitle("p_{T} GeV / c");
   fOutputList->Add(hist);
   return hist;
}
//_____________________________________________________________________________
TH1F* AliAnalysisTaskPhiFlow::BookPtHistogram(const char* name)
{
   // Return a pointer to a p_T spectrum histogram
   if(fDebug > 0) cout << " *** BookPtHistogram() *** " << endl;
   TH1F* ratio = new TH1F(name, name, 100, 0, 7);
   ratio->GetXaxis()->SetTitle("p_{T} ( GeV / c^{2} )");
   ratio->GetYaxis()->SetTitle("No. of events");
   ratio->Sumw2();
   fOutputList->Add(ratio);
   return ratio;
}
//_____________________________________________________________________________
void AliAnalysisTaskPhiFlow::AddPhiIdentificationOutputObjects()
{
   // Add Phi Identification Output Objects
   if(fDebug > 0) cout << " ** AddPhiIdentificationOutputObjects() *** " << endl;
   if(fQA) {
       fEventStats = new TH1F("fHistStats", "Event Statistics", 18, -.25, 4.25);
       fEventStats->GetXaxis()->SetTitle("No. of events");
       fEventStats->GetYaxis()->SetTitle("Statistics");
       fOutputList->Add(fEventStats);
   }
   fCentralityPass = new TH1F("fCentralityPass", "Centrality Pass", 101, -1, 100);
   fOutputList->Add(fCentralityPass);
   if(fQA) {
       fCentralityNoPass = new TH1F("fCentralityNoPass", "Centrality No Pass", 101, -1, 100);
       fOutputList->Add(fCentralityNoPass);
       fNOPID = BookPIDHistogram("TPC signal, all particles", kTRUE);
       fPIDk = BookPIDHistogram("TPC signal, kaons", kTRUE);
       fNOPIDTOF = BookPIDHistogram("TOF signal, all particles", kFALSE);
       fPIDTOF = BookPIDHistogram("TOF signal, kaons", kFALSE);
   }
   for(Int_t ptbin(0); ptbin < fNPtBins; ptbin++) {
       fInvMNP[ptbin] = BookHistogram(Form("NP, %4.2f < p_{T} < %4.2f GeV", fPtBins[ptbin], fPtBins[ptbin+1]));
       fInvMNN[ptbin] = BookHistogram(Form("NN, %4.2f < p_{T} < %4.2f GeV", fPtBins[ptbin], fPtBins[ptbin+1]));
       fInvMPP[ptbin] = BookHistogram(Form("PP, %4.2f < p_{T} < %4.2f GeV", fPtBins[ptbin], fPtBins[ptbin+1]));
   }
   if(fQA) {
       for(Int_t ptbin(0); ptbin < fNPtBins; ptbin++) fPtSpectra[ptbin] = InitPtSpectraHistograms(fPtBins[ptbin], fPtBins[ptbin+1]);
       fPtP = BookPtHistogram("i^{+}");
       fPtN = BookPtHistogram("i^{-}");
       fPtKP = BookPtHistogram("K^{+}");
       fPtKN = BookPtHistogram("K^{-}");
       fPhi = new TH1F("fPhi", "#phi distribution", 100, -.5, 7);
       fOutputList->Add(fPhi);
       fPt = new TH1F("fPt", "p_{T}", 100, 0, 5.5);
       fOutputList->Add(fPt);
       fEta = new TH1F("fEta", "#eta distribution", 100, -1.1, 1.1);
       fOutputList->Add(fEta);
       fVZEROA = new TH1F("fVZEROA", "VZERO A Multiplicity", 1000, 0, 10000);
       fOutputList->Add(fVZEROA);
       fVZEROC = new TH1F("fVZEROC", "VZERO C Multiplicity", 1000, 0, 10000);
       fOutputList->Add(fVZEROC);
       fTPCM = new TH1F("fTPCM", "TPC multiplicity", 1000, 0, 10000);
       fOutputList->Add(fTPCM);
       fDCAXYQA = new TH1F("fDCAXYQA", "fDCAXYQA", 1000, -5, 5);
       fOutputList->Add(fDCAXYQA);
       fDCAZQA = new TH1F("fDCAZQA", "fDCAZQA", 1000, -5, 5);
       fOutputList->Add(fDCAZQA);
       if(fCentralityCut2010 || fCentralityCut2011) {
           fMultCorAfterCuts = new TH2F("fMultCorAfterCuts", "TPC vs Global multiplicity (After cuts); Global multiplicity; TPC multiplicity", 100, 0, 3000, 100, 0, 3000);
           fOutputList->Add(fMultCorAfterCuts);
           fMultvsCentr = new TH2F("fMultvsCentr", "Multiplicity vs centrality; centrality; Multiplicity", 9, -0.5, 100.5, 101, 0, 3000);
           fOutputList->Add(fMultvsCentr);
       }
   }
   if(fIsMC || fQA) {
       fDCAAll = new TH2F("fDCAAll", "fDCAAll", 1000, 0, 10, 1000, -5, 5);
       fOutputList->Add(fDCAAll);
       fDCAPrim = new TH2F("fDCAprim","fDCAprim", 1000, 0, 10, 1000, -5, 5);
       fOutputList->Add(fDCAPrim);
       fDCASecondaryWeak = new TH2F("fDCASecondaryWeak","fDCASecondaryWeak", 1000, 0, 10, 1000, -5, 5);
       fOutputList->Add(fDCASecondaryWeak);
       fDCAMaterial = new TH2F("fDCAMaterial","fDCAMaterial", 1000, 0, 10, 1000, -5, 5);
       fOutputList->Add(fDCAMaterial);
   }
   if(fV0) {
       fSubEventDPhiv2 = new TProfile("fSubEventDPhiv2", "fSubEventDPhiv2", 5, 0, 5);
       fSubEventDPhiv2->GetXaxis()->SetBinLabel(1, "<#Psi_{a} - #Psi_{b}>");
       fSubEventDPhiv2->GetXaxis()->SetBinLabel(2, "<#Psi_{a} - #Psi_{c}>");
       fSubEventDPhiv2->GetXaxis()->SetBinLabel(3, "<#Psi_{b} - #Psi_{c}>");
       fSubEventDPhiv2->GetXaxis()->SetBinLabel(4, "#sqrt{#frac{<#Psi_{a} - #Psi_{b}><#Psi_{a} - #Psi_{c}>}{<#Psi_{b} - #Psi_{c}>}}");
       fSubEventDPhiv2->GetXaxis()->SetBinLabel(5, "#sqrt{#frac{<#Psi_{a} - #Psi_{c}><#Psi_{b} - #Psi_{c}>}{<#Psi_{a} - #Psi_{b}>}}");
       fOutputList->Add(fSubEventDPhiv2);
       const char* V0[] = {"V0A", "V0C"};
       for(Int_t ptbin(0); ptbin < fNPtBins; ptbin++)
           for(Int_t iV0(0); iV0 < 2; iV0++) {
                   fV0Data[ptbin][iV0] = new TProfile(Form("%s v2 %4.2f < p_{T} < %4.2f GeV", V0[iV0], fPtBins[ptbin], fPtBins[ptbin+1]), Form("%s v2 %4.2f < p_{T} < %4.2f GeV", V0[iV0], fPtBins[ptbin], fPtBins[ptbin+1]), fMassBins, fMinMass, fMaxMass);
                   fOutputList->Add(fV0Data[ptbin][iV0]);
           }
   }
}
//_____________________________________________________________________________
void AliAnalysisTaskPhiFlow::UserCreateOutputObjects()
{
   // Create user defined output objects
   if(fDebug > 0) cout << " *** UserCreateOutputObjects() *** " << endl;
   fNullCuts = new AliFlowTrackCuts("null_cuts");
   fBayesianResponse = new AliFlowBayesianPID();
      // combined pid
   fPIDCombined = new AliPIDCombined;
   fPIDCombined->SetDefaultTPCPriors();
   fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);

   // flag to mc
   if(fSkipEventSelection || fIsMC) fBayesianResponse->SetMC(kTRUE);
   Double_t t(0);
   for(Int_t i = 0; i < 7; i++) t+=TMath::Abs(fPIDConfig[i]);
   if(t < 0.1) AliFatal("No valid PID procedure recognized -- terminating analysis !!!");
   if(fNPtBins > 18) AliFatal("Invalid number of pt bins initialied ( > 18 ) -- terminating analysis !!!");
   AliFlowCommonConstants* cc = AliFlowCommonConstants::GetMaster();
   cc->SetNbinsQ(500);           cc->SetNbinsPhi(180);           cc->SetNbinsMult(10000);
   cc->SetQMin(0.0);             cc->SetPhiMin(0.0);             cc->SetMultMin(0);
   cc->SetQMax(3.0);             cc->SetPhiMax(TMath::TwoPi());  cc->SetMultMax(10000);
   cc->SetNbinsMass(fMassBins);  cc->SetNbinsEta(200);           (fMassBins == 1) ? cc->SetNbinsPt(15) : cc->SetNbinsPt(100); // high pt
   cc->SetMassMin(fMinMass);     cc->SetEtaMin(-5.0);            cc->SetPtMin(0);
   cc->SetMassMax(fMaxMass);     cc->SetEtaMax(+5.0);            (fMassBins == 1) ? cc->SetPtMax(15) : cc->SetPtMax(10); // high pt
   fBayesianResponse->SetNewTrackParam();
   AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
   if (man) {
      AliInputEventHandler* inputHandler = (AliInputEventHandler*)(man->GetInputEventHandler());
      if (inputHandler)   fPIDResponse = inputHandler->GetPIDResponse();
   }
   // Create all output objects and store them to a list
   fOutputList = new TList();
   fOutputList->SetOwner(kTRUE);
   // Create and post the Phi identification output objects
   AddPhiIdentificationOutputObjects();
   PostData(1, fOutputList);
   // create candidate array
   fCandidates = new TObjArray(1000);
   fCandidates->SetOwner(kTRUE);
   // create and post flowevent
   fFlowEvent = new AliFlowEvent(10000);
   PostData(2, fFlowEvent);
   if(fEventMixing) fPoolManager = InitializeEventMixing();
}
//_____________________________________________________________________________
AliEventPoolManager* AliAnalysisTaskPhiFlow::InitializeEventMixing()
{
   // initialize event mixing
  if(fDebug > 0) cout << " *** InitializeEventMixing() *** " << endl;
  Int_t _c(0), _v(0);
  for(Int_t i(0); i < 19; i++) {
      if (fCentralityMixingBins[i+1] < fCentralityMixingBins[i]) { _c = i; break; }
      else _c = 19;
  }
  for(Int_t i(0); i < 19; i++) {
      if (fVertexMixingBins[i+1] < fVertexMixingBins[i]) { _v = i; break; }
      else _v = 19;
  }
  if(fDebug > 0 ) cout << Form("   --> found %d centrality bins for mixing, %d vertex bins for mixing", _c, _v) << endl;
  Double_t centralityBins[_c];
  Double_t vertexBins[_v];
  for(Int_t i(0); i < _c + 1; i++) centralityBins[i] = fCentralityMixingBins[i];
  for(Int_t i(0); i < _v + 1; i++) vertexBins[i] = fVertexMixingBins[i];
  return new AliEventPoolManager(fMixingParameters[0], fMixingParameters[1], _c, (Double_t*)centralityBins, _v, (Double_t*)vertexBins);
}
//_____________________________________________________________________________
template <typename T> Double_t AliAnalysisTaskPhiFlow::InvariantMass(const T* track1, const T* track2) const
{
   // Return the invariant mass of two tracks, assuming both tracks are kaons
   if(fDebug > 1) cout << " *** InvariantMass() *** " << endl;
   if ((!track2) || (!track1)) return 0.;
   Double_t masss = TMath::Power(4.93676999999999977e-01, 2);
   Double_t pxs = TMath::Power((track1->Px() + track2->Px()), 2);
   Double_t pys = TMath::Power((track1->Py() + track2->Py()), 2);
   Double_t pzs = TMath::Power((track1->Pz() + track2->Pz()), 2);
   Double_t e1 = TMath::Sqrt(track1->P() * track1->P() + masss);
   Double_t e2 = TMath::Sqrt(track2->P() * track2->P() + masss);
   Double_t es = TMath::Power((e1 + e2), 2);
   if ((es - (pxs + pys + pzs)) < 0) return 0.;
   return TMath::Sqrt((es - (pxs + pys + pzs)));
}
//_____________________________________________________________________________
/*
template <typename T> Double_t AliAnalysisTaskPhiFlow::DeltaDipAngle(const T* track1, const T* track2) const
{
   // Calculate the delta dip angle between two particles
   if(fDebug > 1) cout << " *** DeltaDipAngle() *** " << endl;
   if (track1->P()*track2->P() == 0) return 999;
   return TMath::ACos(((track1->Pt() * track2->Pt()) + (track1->Pz() * track2->Pz())) / (track1->P() * track2->P()));
}
//_____________________________________________________________________________
template <typename T> Bool_t AliAnalysisTaskPhiFlow::CheckDeltaDipAngle(const T* track1, const T* track2) const
{
   // Check if pair passes delta dip angle cut within 0 < p_t < fDeltaDipPt
   if(fDebug > 1) cout << " *** CheckDeltaDipAngle() *** " << endl;
   if ((TMath::Abs(DeltaDipAngle(track1, track2)) < fDeltaDipAngle) && (PhiPt(track1, track2) < fDeltaDipPt)) return kFALSE;
   return kTRUE;
}
*/
//_____________________________________________________________________________
template <typename T> Bool_t AliAnalysisTaskPhiFlow::CheckCandidateEtaPtCut(const T* track1, const T* track2) const
{
   // Check if pair passes eta and pt cut
   if(fDebug > 1) cout << " *** CheckCandidateEtaPtCut() *** " << endl;
   if (fCandidateMinPt > PhiPt(track1, track2) || fCandidateMaxPt < PhiPt(track1, track2)) return kFALSE;
   TVector3 a(track1->Px(), track1->Py(), track1->Pz());
   TVector3 b(track2->Px(), track2->Py(), track2->Pz());
   TVector3 c = a + b;
   if (fCandidateMinEta > c.Eta() || fCandidateMaxEta < c.Eta()) return kFALSE;
   return kTRUE;
}
//_____________________________________________________________________________
template <typename T> Bool_t AliAnalysisTaskPhiFlow::EventCut(T* event)
{
   // Impose event cuts
   if(fDebug > 0) cout << " *** EventCut() *** " << endl;
   if (!event) return kFALSE;
   if (fSkipEventSelection) return kTRUE;
   if (!CheckVertex(event)) return kFALSE;
   if (!CheckCentrality(event)) return kFALSE;
   if(fQA) PlotMultiplcities(event);
   return kTRUE;
}
//_____________________________________________________________________________
template <typename T> void AliAnalysisTaskPhiFlow::PlotMultiplcities(const T* event) const
{
   // QA multiplicity plots
   if(fDebug > 1) cout << " *** PlotMultiplcities() *** " << endl;
   fVZEROA->Fill(event->GetVZEROData()->GetMTotV0A());
   fVZEROC->Fill(event->GetVZEROData()->GetMTotV0C());
   fTPCM->Fill(event->GetNumberOfTracks());
}
//_____________________________________________________________________________
template <typename T> Bool_t AliAnalysisTaskPhiFlow::CheckVertex(const T* event)
{
   // Check if event vertex is within given range
   if(fDebug > 0) cout << " *** CheckVertex() *** " << endl;
   if (!event->GetPrimaryVertex()) return 0x0;
   fVertex = event->GetPrimaryVertex()->GetZ();
   if (TMath::Abs(fVertex) > fVertexRange) return 0x0;
   return kTRUE;
}
//_____________________________________________________________________________
template <typename T> Bool_t AliAnalysisTaskPhiFlow::CheckCentrality(T* event)
{
   // Check if event is within the set centrality range. Falls back to V0 centrality determination if no method is set
   if(fDebug > 0) cout << " *** CheckCentrality() *** " << endl;
   if (!fkCentralityMethodA) AliFatal("No centrality method set! FATAL ERROR!");
   fCentrality = event->GetCentrality()->GetCentralityPercentile(fkCentralityMethodA);
   Double_t cenB(-999);
   // if a second centrality estimator is requited, set it
   (fkCentralityMethodB) ? cenB = event->GetCentrality()->GetCentralityPercentile(fkCentralityMethodB) : cenB = fCentrality;
   if (TMath::Abs(fCentrality-cenB) > 5 || cenB >= 80 || cenB < 0 || fCentrality <= fCentralityMin || fCentrality > fCentralityMax) {
      if(fQA) fCentralityNoPass->Fill(fCentrality) ;
      return kFALSE;
   }
   const Int_t nGoodTracks = event->GetNumberOfTracks();
   if(fCentralityCut2010) { // cut on outliers
      Float_t multTPC(0.); // tpc mult estimate
      Float_t multGlob(0.); // global multiplicity
      for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) { // fill tpc mult
          AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*>(event->GetTrack(iTracks));
          if(!trackAOD) AliFatal("Not a standard AOD");
          if (!trackAOD) continue;
          if (!(trackAOD->TestFilterBit(1))) continue;
          if ((trackAOD->Pt() < .2) || (trackAOD->Pt() > 5.0) || (TMath::Abs(trackAOD->Eta()) > .8) || (trackAOD->GetTPCNcls() < 70)  || (trackAOD->GetDetPid()->GetTPCsignal() < 10.0) || (trackAOD->Chi2perNDF() < 0.2)) continue;
          multTPC++;
      }
      for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) { // fill global mult
          AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*>(event->GetTrack(iTracks));
          if(!trackAOD) AliFatal("Not a standard AOD");
          if (!trackAOD) continue;
          if (!(trackAOD->TestFilterBit(16))) continue;
          if ((trackAOD->Pt() < .2) || (trackAOD->Pt() > 5.0) || (TMath::Abs(trackAOD->Eta()) > .8) || (trackAOD->GetTPCNcls() < 70) || (trackAOD->GetDetPid()->GetTPCsignal() < 10.0) || (trackAOD->Chi2perNDF() < 0.1)) continue;
          Double_t b[2] = {-99., -99.};
          Double_t bCov[3] = {-99., -99., -99.};
          AliAODTrack copy(*trackAOD);
          if (!(copy.PropagateToDCA(event->GetPrimaryVertex(), event->GetMagneticField(), 100., b, bCov))) continue;
          if ((TMath::Abs(b[0]) > 0.3) || (TMath::Abs(b[1]) > 0.3)) continue;
          multGlob++;
      } //track loop
 //     printf(" mult TPC %.2f, mult Glob %.2f \n", multTPC, multGlob);
      if(! (multTPC > (-40.3+1.22*multGlob) && multTPC < (32.1+1.59*multGlob))) return kFALSE;
      if(fQA) {  
          fMultCorAfterCuts->Fill(multGlob, multTPC);  
          fMultvsCentr->Fill(fCentrality, multTPC);
      }
   }

   if(fCentralityCut2011) { // cut on outliers
      Float_t multTPC(0.); // tpc mult estimate
      Float_t multGlob(0.); // global multiplicity
      for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) { // fill tpc mult
          AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*>(event->GetTrack(iTracks));
          if(!trackAOD) AliFatal("Not a standard AOD");
          if (!trackAOD) continue;
          if (!(trackAOD->TestFilterBit(1))) continue;
          if ((trackAOD->Pt() < .2) || (trackAOD->Pt() > 5.0) || (TMath::Abs(trackAOD->Eta()) > .8) || (trackAOD->GetTPCNcls() < 70)  || (trackAOD->GetDetPid()->GetTPCsignal() < 10.0) || (trackAOD->Chi2perNDF() < 0.2)) continue;
          multTPC++;
      }
      for(Int_t iTracks = 0; iTracks < nGoodTracks; iTracks++) { // fill global mult
          AliAODTrack* trackAOD = dynamic_cast<AliAODTrack*>(event->GetTrack(iTracks));
          if(!trackAOD) AliFatal("Not a standard AOD");
          if (!trackAOD) continue;
          if (!(trackAOD->TestFilterBit(16))) continue;
          if ((trackAOD->Pt() < .2) || (trackAOD->Pt() > 5.0) || (TMath::Abs(trackAOD->Eta()) > .8) || (trackAOD->GetTPCNcls() < 70) || (trackAOD->GetDetPid()->GetTPCsignal() < 10.0) || (trackAOD->Chi2perNDF() < 0.1)) continue;
          Double_t b[2] = {-99., -99.};
          Double_t bCov[3] = {-99., -99., -99.};
          AliAODTrack copy(*trackAOD);
          if (!(copy.PropagateToDCA(event->GetPrimaryVertex(), event->GetMagneticField(), 100., b, bCov))) continue;
          if ((TMath::Abs(b[0]) > 0.3) || (TMath::Abs(b[1]) > 0.3)) continue;
          multGlob++;
      } //track loop
      //printf(" mult TPC %.2f, mult Glob %.2f \n", multTPC, multGlob);
      if(! (multTPC > (-36.73 + 1.48*multGlob) && multTPC < (62.87 + 1.78*multGlob))) return kFALSE;
      if(fQA) {  
          fMultCorAfterCuts->Fill(multGlob, multTPC);  
          fMultvsCentr->Fill(fCentrality, multTPC);
      }
   }

   fCentralityPass->Fill(fCentrality);
   return kTRUE;
}
//_____________________________________________________________________________
void AliAnalysisTaskPhiFlow::InitializeBayesianPID(AliAODEvent* event)
{
   // Initialize the Bayesian PID object for AOD
   if(fDebug > 0) cout << " *** InitializeBayesianPID() *** " << endl;
   fBayesianResponse->SetDetResponse(event, fCentrality);
}
//_____________________________________________________________________________
template <typename T> Bool_t AliAnalysisTaskPhiFlow::PassesTPCbayesianCut(T* track) const
{
   // Check if the particle passes the TPC TOF bayesian cut.
   if(fDebug > 1) cout << " *** PassesTPCbayesianCut() *** " << endl;
   fBayesianResponse->ComputeProb(track);
   if (!fBayesianResponse->GetCurrentMask(0)) return kFALSE; // return false if TPC has no response
   Float_t *probabilities = fBayesianResponse->GetProb();
   if (probabilities[3] > fPIDConfig[6]) {
      if(fQA) {fPhi->Fill(track->Phi()); fPt->Fill(track->Pt()); fEta->Fill(track->Eta());}
      return kTRUE;
   }
   return kFALSE;
}
//_____________________________________________________________________________
Bool_t AliAnalysisTaskPhiFlow::PassesDCACut(AliAODTrack* track) const
{
    // check if track passes dca cut according to dca routine
    // setup the routine as follows:
    // fDCAConfig[0] < -1 no pt dependence
    // fDCAConfig[0] =  0 do nothing
    // fDCAConfig[0] >  1 pt dependent dca cut
    if(fDebug > 1) cout << " *** PassesDCACut() *** " << endl;
    if(fIsMC) return kTRUE;
    AliAODTrack copy(*track);
    if( (fDCAConfig[0] < 0.1) && (fDCAConfig[0] > -0.1) ) {
        if(fQA) {
            Double_t b[2] = { -99., -99.};
            Double_t bCov[3] = { -99., -99., -99.};
            if(copy.PropagateToDCA(fAOD->GetPrimaryVertex(), fAOD->GetMagneticField(), 100., b, bCov)) {
                fDCAXYQA->Fill(b[0]);
                fDCAZQA->Fill(b[1]);
                fDCAPrim->Fill(track->Pt(), b[0]);
            }
        }
        return kTRUE;
    }
    Double_t b[2] = { -99., -99.};
    Double_t bCov[3] = { -99., -99., -99.};
    if(!copy.PropagateToDCA(fAOD->GetPrimaryVertex(), fAOD->GetMagneticField(), 100., b, bCov)) return kFALSE;
    if((!fIsMC)&&fQA) fDCAMaterial->Fill(track->Pt(), b[0]);
    if( (fDCAConfig[0] < -.9) && ( (TMath::Abs(b[0]) > fDCAConfig[1]) || (TMath::Abs(b[1]) > fDCAConfig[2])) ) return kFALSE;
    if(fDCAConfig[0] > .9) {
        if(fDCAConfig[4] < TMath::Abs(b[1])) return kFALSE;
        Double_t denom = TMath::Power(track->Pt(), fDCAConfig[3]);
        if( denom < 0.0000001 ) return kFALSE; // avoid division by zero
        if( (fDCAConfig[1] + fDCAConfig[2] / denom) < TMath::Abs(b[0]) ) return kFALSE;
    }
    if(fQA) {
        fDCAXYQA->Fill(b[0]);
        fDCAZQA->Fill(b[1]);
        fDCAPrim->Fill(track->Pt(), b[0]);
    }
    return kTRUE;
}
//_____________________________________________________________________________
Bool_t AliAnalysisTaskPhiFlow::IsKaon(AliAODTrack* track) const
{
   // Kaon identification routine, based on multiple detectors and approaches
   if(fDebug > 1) cout << " *** IsKaon() *** " << endl;
   if(fUsePidResponse) {
       Double_t prob[10] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
       fPIDCombined->ComputeProbabilities(track, fPIDResponse, prob);
       if(prob[3] > fPIDConfig[6])  return kTRUE;
   }
   if(!PassesDCACut(track)) return kFALSE;
   if(fQA) {fNOPID->Fill(track->P(), track->GetTPCsignal());fNOPIDTOF->Fill(track->P(), track->GetTOFsignal());}
   if(track->Pt() < fPIDConfig[1]) {
       if(fDebug>1) cout << " ITS received track with p_t " << track->Pt() << endl;
       // if tpc control is disabled, pure its pid
       if(fPIDConfig[2] < 0.) {
           if (TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kKaon)) < fPIDConfig[0]) return kTRUE;
           return kFALSE;
       }
       // else, switch to ITS pid with TPC rejection of protons and pions
       if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kProton)) < fPIDConfig[3]) return kFALSE;
       else if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kPion)) < fPIDConfig[3]) return kFALSE;
       else if (TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kKaon)) < fPIDConfig[0]) {
           if(fQA) {fPIDk->Fill(track->P(), track->GetTPCsignal()); fPIDTOF->Fill(track->P(), track->GetTOFsignal());}
           return kTRUE;
       }
       return kFALSE;
   }
   if((track->Pt() > fPIDConfig[1]) && (track->Pt() < fPIDConfig[4])) {
       if(fDebug>1) cout << " TPC received track with p_t " << track->Pt() << endl;
       // if its control is disabled, pure tpc pid
       if(fPIDConfig[5] < 0.) {
           if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon)) < fPIDConfig[3]) return kTRUE;
           return kFALSE;
       }
       // else, switch to TPC pid with ITS rejection of protons and pions
       if (TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kProton)) < fPIDConfig[0]) return kFALSE;
       else if (TMath::Abs(fPIDResponse->NumberOfSigmasITS(track, AliPID::kPion)) < fPIDConfig[0]) return kFALSE;
       else if (TMath::Abs(fPIDResponse->NumberOfSigmasTPC(track, AliPID::kKaon)) < fPIDConfig[3]) {
           if(fQA) {fPIDk->Fill(track->P(), track->GetTPCsignal()); fPIDTOF->Fill(track->P(), track->GetTOFsignal());}
           return kTRUE;
       }
       return kFALSE;
   }
   if(fDebug>1) cout << " Bayesian method received track with p_t " << track->Pt() << endl;
   // switch to bayesian PID
   if (PassesTPCbayesianCut(track)) {
       if(fQA) {fPIDk->Fill(track->P(), track->GetTPCsignal());fPIDTOF->Fill(track->P(), track->GetTOFsignal());}
       return kTRUE;
   }
   return kFALSE;
}
//_____________________________________________________________________________
template <typename T> Double_t AliAnalysisTaskPhiFlow::PhiPt(const T* track1, const T* track2) const
{
   // return p_t of track pair
   TVector3 a(track1->Px(), track1->Py(), track1->Pz());
   TVector3 b(track2->Px(), track2->Py(), track2->Pz());
   TVector3 c = a + b;
   return c.Pt();
}
//_____________________________________________________________________________
template <typename T> void AliAnalysisTaskPhiFlow::PtSelector(Int_t tracktype, const T* track1, const T* track2) const
{
   // plot m_inv spectra of like- and unlike-sign kaon pairs for each pt bin
   Double_t pt = PhiPt(track1, track2);
   if (tracktype == 0) {
       for(Int_t ptbin(0); ptbin < fNPtBins; ptbin++) {
           if ((fPtBins[ptbin] <= pt) && (fPtBins[ptbin+1] > pt )) {
               fInvMNP[ptbin]->Fill(InvariantMass(track1, track2));
               if(fQA) fPtSpectra[ptbin]->Fill(pt);
           }
       }
   }
   if (tracktype == 1) {
       for(Int_t ptbin(0); ptbin < fNPtBins; ptbin++) {
           if ((fPtBins[ptbin] <= pt) && (fPtBins[ptbin+1] > pt )) {
               fInvMPP[ptbin]->Fill(InvariantMass(track1, track2));
           }
       }
   }
   if (tracktype == 2) {
       for(Int_t ptbin(0); ptbin < fNPtBins; ptbin++) {
           if ((fPtBins[ptbin] <= pt) && (fPtBins[ptbin+1] > pt )) {
               fInvMNN[ptbin]->Fill(InvariantMass(track1, track2));
           }
       }
   }
}
//_____________________________________________________________________________
template <typename T> Bool_t AliAnalysisTaskPhiFlow::PhiTrack(T* track) const
{
   // check if track meets quality cuts
   if(!track) return kFALSE;
   return fPOICuts->IsSelected(track);
}
//_____________________________________________________________________________
template <typename T> void AliAnalysisTaskPhiFlow::SetNullCuts(T* event)
{
   // Set null cuts
   if (fDebug > 0) cout << " *** SetNullCuts() *** " << fCutsRP << endl;
   fCutsRP->SetEvent(event, MCEvent());
   fNullCuts->SetParamType(AliFlowTrackCuts::kGlobal);
   fNullCuts->SetPtRange(+1, -1); // select nothing QUICK
   fNullCuts->SetEtaRange(+1, -1); // select nothing VZERO
   fNullCuts->SetEvent(event, MCEvent());
}
//_____________________________________________________________________________
void AliAnalysisTaskPhiFlow::PrepareFlowEvent(Int_t iMulti)
{
   // Prepare flow events
   if (fDebug > 0 ) cout << " *** PrepareFlowEvent() *** " << endl;
   fFlowEvent->ClearFast();
   fFlowEvent->Fill(fCutsRP, fNullCuts);
   fFlowEvent->SetReferenceMultiplicity(iMulti);
   fFlowEvent->DefineDeadZone(0, 0, 0, 0);
}
//_____________________________________________________________________________
void AliAnalysisTaskPhiFlow::VZEROSubEventAnalysis()
{
    // vzero event plane analysis using three subevents
    if(fDebug > 0) cout << " ** VZEROSubEventAnalysis() *** " << endl;
    if(!AliAnalysisTaskVnV0::IsPsiComputed()) { // AliAnalysisTaskVnV0 must be added to analysis que before this task !!!
        if(fDebug > 0 ) cout << "Fatal error: unable to retrieve VZERO task output !!! Exiting ..." << endl;
        return;
    }
    // retrieve data
    Float_t abcPsi2[] = {AliAnalysisTaskVnV0::GetPsi2V0A(), AliAnalysisTaskVnV0::GetPsi2TPC(), AliAnalysisTaskVnV0::GetPsi2V0C()};
    for(Int_t i(0); i < 3; i++) if(abcPsi2[i] == 0)  {
        if(fDebug > 0) cout << " Warning: I've encountered 0 in one of the symmetry panes (TPC, VZERO) - skipping event !" << endl;
            return;
    }
    // save info for resolution calculations
    Float_t qaqb = TMath::Cos(2.*(abcPsi2[0]-abcPsi2[1])); // vzeroa - tpc
    Float_t qaqc = TMath::Cos(2.*(abcPsi2[0]-abcPsi2[2])); // vzeroa - vzeroc
    Float_t qbqc = TMath::Cos(2.*(abcPsi2[1]-abcPsi2[2])); // tpc - vzeroc
    fSubEventDPhiv2->Fill(0.5, qaqb);
    fSubEventDPhiv2->Fill(1.5, qaqc);
    fSubEventDPhiv2->Fill(2.5, qbqc);
    Float_t minv[31];
    Float_t _dphi[30][fNPtBins][2]; //minv, pt, v0a-c
    Int_t occurence[30][fNPtBins]; //minv, pt
    for(Int_t mb(0); mb < 31; mb++) minv[mb] = 0.99 + mb * 0.0034;
    for(Int_t i(0); i < 30; i++) for (Int_t j(0); j < fNPtBins; j++) for(Int_t k(0); k < 2; k ++) {
        _dphi[i][j][k] = 0;
        if(k==0) occurence[i][j] = 0;
    }
    for(Int_t iCand(0); iCand < fCandidates->GetEntriesFast(); iCand++) { // loop over unlike sign kaon pairs
        AliFlowTrackSimple *track = dynamic_cast<AliFlowTrackSimple*>(fCandidates->At(iCand));
        if(!track) {
            if(fDebug > 1) cout << " --> dynamic_cast returned null-pointer, skipping candidate <-- " << endl;
            continue;
        }
        for(Int_t mb(0); mb < 30; mb++) { // loop over massbands
            if(track->Mass() <= minv[mb] || track->Mass() > minv[mb+1]) continue;
            for(Int_t ptbin(0); ptbin < fNPtBins; ptbin++) { // loop over pt bins
                if(track->Pt() <= fPtBins[ptbin] || track->Pt() > fPtBins[ptbin+1]) continue;
                _dphi[mb][ptbin][0]+=TMath::Cos(2.*(track->Phi() - abcPsi2[0]));
                _dphi[mb][ptbin][1]+=TMath::Cos(2.*(track->Phi() - abcPsi2[2]));
                occurence[mb][ptbin]+=1;
            }
        }
        for(Int_t mb(0); mb < 30; mb++) // write vn values to tprofiles
            for(Int_t ptbin(0); ptbin < fNPtBins; ptbin++) {
                if(occurence[mb][ptbin]==0) continue;
                fV0Data[ptbin][0]->Fill(mb*0.0034+0.99+0.0017, _dphi[mb][ptbin][0]/(Float_t)occurence[mb][ptbin]);
                fV0Data[ptbin][1]->Fill(mb*0.0034+0.99+0.0017, _dphi[mb][ptbin][1]/(Float_t)occurence[mb][ptbin]);
            }
    }
}
//_____________________________________________________________________________
void AliAnalysisTaskPhiFlow::UserExec(Option_t *)
{
   // UserExec: called for each event. Commented where necessary
   if(fDebug > 0 ) cout << " *** UserExec() *** " << endl;
   TObjArray* MixingCandidates = 0x0; // init null pointer for event mixing
   if(fEventMixing) {
       MixingCandidates = new TObjArray();
       MixingCandidates->SetOwner(kTRUE); // mixing candidates has ownership of objects in array
   }
   if (!fPIDResponse) {
      if(fDebug > 0 ) cout << " Could not get PID response " << endl;
      return;
   }
   fAOD = dynamic_cast<AliAODEvent*>(InputEvent()); // check for aod data type
   if (fAOD) {
      if (!EventCut(fAOD)) return; // check for event cuts
      InitializeBayesianPID(fAOD); // init event objects
      SetNullCuts(fAOD);
      PrepareFlowEvent(fAOD->GetNumberOfTracks());
      fCandidates->SetLast(-1);
      if(fIsMC) IsMC(); // launch mc stuff
      if(fQA) fEventStats->Fill(0);
      Int_t unTracks = fAOD->GetNumberOfTracks();
      AliAODTrack* un[unTracks];
      AliAODTrack* up[unTracks];
      Int_t unp(0);
      Int_t unn(0);
      for (Int_t iTracks = 0; iTracks < unTracks; iTracks++) { // select analysis candidates
         AliAODTrack* track = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iTracks));
         if(!track) AliFatal("Not a standard AOD");
         if (!PhiTrack(track)) continue;
         if (fQA) {
            if(track->Charge() > 0) {fEventStats->Fill(1); fPtP->Fill(track->Pt());}
            if(track->Charge() < 0) {fEventStats->Fill(2); fPtN->Fill(track->Pt());}
         }
         if (IsKaon(track)) {
            if(fEventMixing) MixingCandidates->Add(new AliPhiMesonHelperTrack(track->Eta(), track->Phi(), track->P(),
                                                                              track->Px(), track->Py(), track->Pz(),
                                                                              track->Pt(), track->Charge()));
            if (track->Charge() > 0) {
               up[unp] = track;
               unp++;
               if(fQA) {fEventStats->Fill(3);fPtKP->Fill(track->Pt());}
            }
            else if (track->Charge() < 0) {
               un[unn] = track;
               unn++;
               if(fQA) {fEventStats->Fill(4); fPtKN->Fill(track->Pt());}
            }
         }
      }
      for (Int_t pTracks = 0; pTracks < unp ; pTracks++) { // perform analysis
         for (Int_t nTracks = 0; nTracks < unn ; nTracks++) {
//            if (fApplyDeltaDipCut && (!CheckDeltaDipAngle(up[pTracks], un[nTracks]))) continue;
            if (fCandidateEtaPtCut && (!CheckCandidateEtaPtCut(up[pTracks], un[nTracks]))) continue;
            PtSelector(0, up[pTracks], un[nTracks]);
            Double_t pt = PhiPt(up[pTracks], un[nTracks]);
            Double_t mass = InvariantMass(up[pTracks], un[nTracks]);
            TVector3 a(up[pTracks]->Px(), up[pTracks]->Py(), up[pTracks]->Pz());
            TVector3 b(un[nTracks]->Px(), un[nTracks]->Py(), up[pTracks]->Pz());
            TVector3 c = a + b;
            Double_t phi = c.Phi();
            Double_t eta = c.Eta();
            Double_t p = TMath::Sqrt(c.Px()*c.Px()+c.Py()*c.Py()+c.Pz()*c.Pz());
            Int_t nIDs[2];
            nIDs[0] = up[pTracks]->GetID();
            nIDs[1] = un[nTracks]->GetID();
            MakeTrack(mass, pt, phi, eta, 2, nIDs, p, c.Pz());
         }
      }
      if(fV0) VZEROSubEventAnalysis();
      if (fDebug > 0)  printf("I received %d candidates\n", fCandidates->GetEntriesFast()); // insert candidates into flow events
      for (int iCand = 0; iCand != fCandidates->GetEntriesFast(); ++iCand) {
         AliFlowCandidateTrack *cand = dynamic_cast<AliFlowCandidateTrack*>(fCandidates->At(iCand));
         if (!cand) continue;
         if (fDebug > 1) printf(" --> Checking at candidate %d with %d daughters: mass %f\n", iCand, cand->GetNDaughters(), cand->Mass());
         for (int iDau = 0; iDau != cand->GetNDaughters(); ++iDau) {
            if (fDebug>1) printf("     *** Daughter %d with fID %d ***", iDau, cand->GetIDDaughter(iDau));
            for (int iRPs = 0; iRPs != fFlowEvent->NumberOfTracks(); ++iRPs) {
               AliFlowTrack *iRP = dynamic_cast<AliFlowTrack*>(fFlowEvent->GetTrack(iRPs));
               if (!iRP) continue;
               if (!iRP->InRPSelection()) continue;
               if (cand->GetIDDaughter(iDau) == iRP->GetID()) {
                  if (fDebug > 1) printf("      was in RP set");
                  iRP->SetForRPSelection(kFALSE);
                  fFlowEvent->SetNumberOfRPs(fFlowEvent->GetNumberOfRPs() - 1);
               }
            }
            if (fDebug > 1) printf("\n");
         }
         cand->SetForPOISelection(kTRUE);
         fFlowEvent->InsertTrack(((AliFlowTrack*) cand));
      }
      if (fDebug > 0) printf("TPCevent %d\n", fFlowEvent->NumberOfTracks());
      if(!fEventMixing) { // combinatorial background
          for (Int_t pTracks = 0; pTracks < unp ; pTracks++) {
             for (Int_t nTracks = pTracks + 1; nTracks < unp ; nTracks++) {
//                if (fApplyDeltaDipCut && (!CheckDeltaDipAngle(up[pTracks], up[nTracks]))) continue;
                if (fCandidateEtaPtCut && (!CheckCandidateEtaPtCut(up[pTracks], up[nTracks]))) continue;
                PtSelector(1, up[pTracks], up[nTracks]);
             }
          }
          for (Int_t nTracks = 0; nTracks < unn ; nTracks++) {
             for (Int_t pTracks = nTracks + 1; pTracks < unn ; pTracks++) {
//                if (fApplyDeltaDipCut && (!CheckDeltaDipAngle(un[nTracks], un[pTracks]))) continue;
                if (fCandidateEtaPtCut && (!CheckCandidateEtaPtCut(un[nTracks], un[pTracks]))) continue;
                PtSelector(2, un[nTracks], un[pTracks]);
             }
          }
      }
      if(fEventMixing) ReconstructionWithEventMixing(MixingCandidates);
      PostData(1, fOutputList);
      PostData(2, fFlowEvent);
   }
}
//_____________________________________________________________________________
void AliAnalysisTaskPhiFlow::Exec(Option_t* c)
{
    // skip the event selection for SE task (e.g. for MC productions)
    if(fSkipEventSelection) AliAnalysisTaskPhiFlow::UserExec(c);
    // exec of task se will do event selection and call UserExec 
    else AliAnalysisTaskSE::Exec(c);
}
//_____________________________________________________________________________
void AliAnalysisTaskPhiFlow::ReconstructionWithEventMixing(TObjArray* MixingCandidates) const
{
    // perform phi reconstruction with event mixing
    if(fDebug > 0) cout << " *** ReconstructionWithEventMixing() *** " << endl;
    AliEventPool* pool = fPoolManager->GetEventPool(fCentrality, fVertex);
    if(!pool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", fCentrality, fVertex));
    if(pool->IsReady() || pool->NTracksInPool() > fMixingParameters[1] / 10 || pool->GetCurrentNEvents() >= fMixingParameters[2]) {
        Int_t nEvents = pool->GetCurrentNEvents();
        if(fDebug > 0) cout << " --> " << nEvents << " events in mixing buffer ... " << endl;
        for (Int_t iEvent(0); iEvent < nEvents; iEvent++) {
            TObjArray* mixed_candidates = pool->GetEvent(iEvent);
            if(!mixed_candidates) continue; // this should NEVER happen
            Int_t bufferTracks = mixed_candidates->GetEntriesFast(); // buffered candidates
            Int_t candidates = MixingCandidates->GetEntriesFast(); // mixing candidates
            if(fDebug > 0) cout << Form("   - mixing %d tracks with %d buffered tracks from event %d ... ", candidates, bufferTracks, iEvent) << endl;
            AliPhiMesonHelperTrack* buffer_un[bufferTracks]; // set values for buffered candidates
            AliPhiMesonHelperTrack* buffer_up[bufferTracks];
            Int_t buffer_unp(0);
            Int_t buffer_unn(0);
            AliPhiMesonHelperTrack* mix_un[candidates];// set values for mixing candidates
            AliPhiMesonHelperTrack* mix_up[candidates];
            Int_t mix_unp(0);
            Int_t mix_unn(0);
            for (Int_t iTracks = 0; iTracks < candidates; iTracks++) { // distinguish between k+ and k- for mixing candidates
                AliPhiMesonHelperTrack* track = (AliPhiMesonHelperTrack*)MixingCandidates->At(iTracks);
                if(!track) continue;
                if (track->Charge() > 0) {
                    mix_up[mix_unp] = track;
                    mix_unp++;
                }
                else if (track->Charge() < 0 ) {
                   mix_un[mix_unn] = track;
                   mix_unn++;
                }
            }
            for (Int_t iTracks = 0; iTracks < bufferTracks; iTracks++) { // distinguish between k+ and k- for buffered candidates
                AliPhiMesonHelperTrack* track = (AliPhiMesonHelperTrack*)mixed_candidates->At(iTracks);
                if(!track) continue;
                if (track->Charge() > 0) {
                    buffer_up[buffer_unp] = track;
                    buffer_unp++;
                }
                else if (track->Charge() < 0 ) {
                   buffer_un[buffer_unn] = track;
                   buffer_unn++;
                }
            }
            for (Int_t pMix = 0; pMix < mix_unp; pMix++) { // mix k+ (current event) k+ (buffer)
                if(fDebug > 1 ) cout << Form("mixing current k+ track %d with", pMix);
                if(!fTypeMixing) { // mix with like-sign kaons
                    for(Int_t pBuf = 0; pBuf < buffer_unp; pBuf++) {
                        if(fDebug > 1 ) cout << Form(" buffered k+ track %d", pBuf) << endl;
//                        if (fApplyDeltaDipCut && (!CheckDeltaDipAngle(mix_up[pMix], buffer_up[pBuf]))) continue;
                        if (fCandidateMinEta && (!CheckCandidateEtaPtCut(mix_up[pMix], buffer_up[pBuf]))) continue;
                        PtSelector(1, mix_up[pMix], buffer_up[pBuf]);
                    }
                }
                else if(fTypeMixing) { // mix with unlike-sign kaons
                    for(Int_t nBuf = 0; nBuf < buffer_unn; nBuf++) {
                        if(fDebug > 1 ) cout << Form(" buffered k- track %d", nBuf) << endl;
//                        if (fApplyDeltaDipCut && (!CheckDeltaDipAngle(mix_up[pMix], buffer_un[nBuf]))) continue;
                        if (fCandidateMinEta && (!CheckCandidateEtaPtCut(mix_up[pMix], buffer_un[nBuf]))) continue;
                        PtSelector(2, mix_up[pMix], buffer_un[nBuf]);
                    }
                }
            }
            for (Int_t nMix = 0; nMix < mix_unn; nMix++) { // mix k- (current event) k- (buffer)
                if(fDebug > 1 ) cout << Form("mixing current k- track %d with", nMix);
                if(!fTypeMixing) { // mix with like-sign kaons
                    for(Int_t nBuf = 0; nBuf < buffer_unn; nBuf++) {
                        if(fDebug > 1 ) cout << Form(" buffered k- track %d", nBuf) << endl;
//                        if (fApplyDeltaDipCut && (!CheckDeltaDipAngle(mix_un[nMix], buffer_un[nBuf]))) continue;
                        if (fCandidateMinEta && (!CheckCandidateEtaPtCut(mix_un[nMix], buffer_un[nBuf]))) continue;
                        PtSelector(2, mix_un[nMix], buffer_un[nBuf]);
                    }
                }
                else if(fTypeMixing) { // mix with unlike-sign kaons
                    for(Int_t pBuf = 0; pBuf < buffer_unp; pBuf++) {
                        if(fDebug > 1 ) cout << Form(" buffered k+ track %d", pBuf) << endl;
//                        if (fApplyDeltaDipCut && (!CheckDeltaDipAngle(mix_un[nMix], buffer_up[pBuf]))) continue;
                        if (fCandidateMinEta && (!CheckCandidateEtaPtCut(mix_un[nMix], buffer_up[pBuf]))) continue;
                        PtSelector(1, mix_un[nMix], buffer_up[pBuf]);
                    }
                }
            }
        } // end of mixed events loop
    } // end of checking to see whether pool is filled correctly
    pool->UpdatePool(MixingCandidates); // update pool with current mixing candidates (for next event)
    if(fDebug > 0 ) pool->PrintInfo();
}
//_____________________________________________________________________________
void AliAnalysisTaskPhiFlow::Terminate(Option_t *)
{
    // terminate
    if(fDebug > 0) cout << " *** Terminate() *** " << endl;
}
//______________________________________________________________________________
void  AliAnalysisTaskPhiFlow::MakeTrack(Double_t mass, Double_t pt, Double_t phi, Double_t eta, Int_t nDau, Int_t iID[], Double_t p, Double_t pz) const
{
   // Construct Flow Candidate Track from two selected candidates
   if(fDebug > 1 ) cout << " *** MakeTrack() *** " << endl;
   // if requested, check rapidity at this point
   if(fCandidateYCut) {
       Double_t y = 0.5*TMath::Log((TMath::Sqrt(mass*mass+p*p)+pz)/(TMath::Sqrt(mass*mass+p*p)-pz));
       if (y > fCandidateMaxY || y < fCandidateMinY) return;
   }
   Bool_t overwrite = kTRUE;
   AliFlowCandidateTrack *sTrack = static_cast<AliFlowCandidateTrack*>(fCandidates->At(fCandidates->GetLast() + 1));
   if (!sTrack) {
      sTrack = new AliFlowCandidateTrack(); //deleted by fCandidates
      overwrite = kFALSE;
   }
   else sTrack->ClearMe();
   sTrack->SetMass(mass);
   sTrack->SetPt(pt);
   sTrack->SetPhi(phi);
   sTrack->SetEta(eta);
   for (Int_t iDau = 0; iDau != nDau; ++iDau) sTrack->AddDaughter(iID[iDau]);
   sTrack->SetForPOISelection(kTRUE);
   sTrack->SetForRPSelection(kFALSE);
   if (overwrite) fCandidates->SetLast(fCandidates->GetLast() + 1);
   else fCandidates->AddLast(sTrack);
   return;
}
//_____________________________________________________________________________
void AliAnalysisTaskPhiFlow::IsMC()
{
    // Fill QA histos for MC analysis
   TClonesArray *arrayMC = 0;
   if(fDebug > 0) cout << " -> Switching to MC mode <- " << endl;
   // fill array with mc tracks 
   arrayMC = (TClonesArray*) fAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName());
   if (!arrayMC) AliFatal("Error: MC particles branch not found!\n");
   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(!PhiTrack(track) || !IsKaon(track)) { // check for kaons
         if(fDebug>1) cout << " Rejected track" << endl;
         continue;
     }
     if (fDebug>1) cout << " Received MC kaon " << endl;
     Double_t b[2] = { -99., -99.};
     Double_t bCov[3] = { -99., -99., -99.};
     AliAODTrack copy(*track);
     if(!copy.PropagateToDCA(fAOD->GetPrimaryVertex(), fAOD->GetMagneticField(), 100., b, bCov)) return;
     // find corresponding mc particle
     AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(track->GetLabel()));
     if (!partMC) {
         if(fDebug > 1) cout << "Cannot get MC particle" << endl;
         continue;
     }
     // Check if it is primary, secondary from material or secondary from weak decay
     Bool_t isPrimary           = partMC->IsPhysicalPrimary();
     Bool_t isSecondaryMaterial = kFALSE;
     Bool_t isSecondaryWeak     = kFALSE;
     if (!isPrimary) {
         Int_t mfl = -999, codemoth = -999;
         Int_t indexMoth = partMC->GetMother();
         if (indexMoth >= 0) { // is not fake
            AliAODMCParticle* moth = (AliAODMCParticle*) arrayMC->At(indexMoth);
            codemoth = TMath::Abs(moth->GetPdgCode());
            mfl = Int_t(codemoth / TMath::Power(10, Int_t(TMath::Log10(codemoth))));
         }
         if (mfl == 3) isSecondaryWeak     = kTRUE;
         else       isSecondaryMaterial = kTRUE;
      }
      if (isPrimary) {
          fDCAPrim->Fill(track->Pt(), b[0]);
          fDCAXYQA->Fill(b[0]);
          fDCAZQA->Fill(b[1]);
      }
      if (isSecondaryWeak)  fDCASecondaryWeak->Fill(track->Pt(), b[0]);
      if (isSecondaryMaterial) fDCAMaterial->Fill(track->Pt(), b[0]);
   }
}
//_____________________________________________________________________________
 AliAnalysisTaskPhiFlow.cxx:1
 AliAnalysisTaskPhiFlow.cxx:2
 AliAnalysisTaskPhiFlow.cxx:3
 AliAnalysisTaskPhiFlow.cxx:4
 AliAnalysisTaskPhiFlow.cxx:5
 AliAnalysisTaskPhiFlow.cxx:6
 AliAnalysisTaskPhiFlow.cxx:7
 AliAnalysisTaskPhiFlow.cxx:8
 AliAnalysisTaskPhiFlow.cxx:9
 AliAnalysisTaskPhiFlow.cxx:10
 AliAnalysisTaskPhiFlow.cxx:11
 AliAnalysisTaskPhiFlow.cxx:12
 AliAnalysisTaskPhiFlow.cxx:13
 AliAnalysisTaskPhiFlow.cxx:14
 AliAnalysisTaskPhiFlow.cxx:15
 AliAnalysisTaskPhiFlow.cxx:16
 AliAnalysisTaskPhiFlow.cxx:17
 AliAnalysisTaskPhiFlow.cxx:18
 AliAnalysisTaskPhiFlow.cxx:19
 AliAnalysisTaskPhiFlow.cxx:20
 AliAnalysisTaskPhiFlow.cxx:21
 AliAnalysisTaskPhiFlow.cxx:22
 AliAnalysisTaskPhiFlow.cxx:23
 AliAnalysisTaskPhiFlow.cxx:24
 AliAnalysisTaskPhiFlow.cxx:25
 AliAnalysisTaskPhiFlow.cxx:26
 AliAnalysisTaskPhiFlow.cxx:27
 AliAnalysisTaskPhiFlow.cxx:28
 AliAnalysisTaskPhiFlow.cxx:29
 AliAnalysisTaskPhiFlow.cxx:30
 AliAnalysisTaskPhiFlow.cxx:31
 AliAnalysisTaskPhiFlow.cxx:32
 AliAnalysisTaskPhiFlow.cxx:33
 AliAnalysisTaskPhiFlow.cxx:34
 AliAnalysisTaskPhiFlow.cxx:35
 AliAnalysisTaskPhiFlow.cxx:36
 AliAnalysisTaskPhiFlow.cxx:37
 AliAnalysisTaskPhiFlow.cxx:38
 AliAnalysisTaskPhiFlow.cxx:39
 AliAnalysisTaskPhiFlow.cxx:40
 AliAnalysisTaskPhiFlow.cxx:41
 AliAnalysisTaskPhiFlow.cxx:42
 AliAnalysisTaskPhiFlow.cxx:43
 AliAnalysisTaskPhiFlow.cxx:44
 AliAnalysisTaskPhiFlow.cxx:45
 AliAnalysisTaskPhiFlow.cxx:46
 AliAnalysisTaskPhiFlow.cxx:47
 AliAnalysisTaskPhiFlow.cxx:48
 AliAnalysisTaskPhiFlow.cxx:49
 AliAnalysisTaskPhiFlow.cxx:50
 AliAnalysisTaskPhiFlow.cxx:51
 AliAnalysisTaskPhiFlow.cxx:52
 AliAnalysisTaskPhiFlow.cxx:53
 AliAnalysisTaskPhiFlow.cxx:54
 AliAnalysisTaskPhiFlow.cxx:55
 AliAnalysisTaskPhiFlow.cxx:56
 AliAnalysisTaskPhiFlow.cxx:57
 AliAnalysisTaskPhiFlow.cxx:58
 AliAnalysisTaskPhiFlow.cxx:59
 AliAnalysisTaskPhiFlow.cxx:60
 AliAnalysisTaskPhiFlow.cxx:61
 AliAnalysisTaskPhiFlow.cxx:62
 AliAnalysisTaskPhiFlow.cxx:63
 AliAnalysisTaskPhiFlow.cxx:64
 AliAnalysisTaskPhiFlow.cxx:65
 AliAnalysisTaskPhiFlow.cxx:66
 AliAnalysisTaskPhiFlow.cxx:67
 AliAnalysisTaskPhiFlow.cxx:68
 AliAnalysisTaskPhiFlow.cxx:69
 AliAnalysisTaskPhiFlow.cxx:70
 AliAnalysisTaskPhiFlow.cxx:71
 AliAnalysisTaskPhiFlow.cxx:72
 AliAnalysisTaskPhiFlow.cxx:73
 AliAnalysisTaskPhiFlow.cxx:74
 AliAnalysisTaskPhiFlow.cxx:75
 AliAnalysisTaskPhiFlow.cxx:76
 AliAnalysisTaskPhiFlow.cxx:77
 AliAnalysisTaskPhiFlow.cxx:78
 AliAnalysisTaskPhiFlow.cxx:79
 AliAnalysisTaskPhiFlow.cxx:80
 AliAnalysisTaskPhiFlow.cxx:81
 AliAnalysisTaskPhiFlow.cxx:82
 AliAnalysisTaskPhiFlow.cxx:83
 AliAnalysisTaskPhiFlow.cxx:84
 AliAnalysisTaskPhiFlow.cxx:85
 AliAnalysisTaskPhiFlow.cxx:86
 AliAnalysisTaskPhiFlow.cxx:87
 AliAnalysisTaskPhiFlow.cxx:88
 AliAnalysisTaskPhiFlow.cxx:89
 AliAnalysisTaskPhiFlow.cxx:90
 AliAnalysisTaskPhiFlow.cxx:91
 AliAnalysisTaskPhiFlow.cxx:92
 AliAnalysisTaskPhiFlow.cxx:93
 AliAnalysisTaskPhiFlow.cxx:94
 AliAnalysisTaskPhiFlow.cxx:95
 AliAnalysisTaskPhiFlow.cxx:96
 AliAnalysisTaskPhiFlow.cxx:97
 AliAnalysisTaskPhiFlow.cxx:98
 AliAnalysisTaskPhiFlow.cxx:99
 AliAnalysisTaskPhiFlow.cxx:100
 AliAnalysisTaskPhiFlow.cxx:101
 AliAnalysisTaskPhiFlow.cxx:102
 AliAnalysisTaskPhiFlow.cxx:103
 AliAnalysisTaskPhiFlow.cxx:104
 AliAnalysisTaskPhiFlow.cxx:105
 AliAnalysisTaskPhiFlow.cxx:106
 AliAnalysisTaskPhiFlow.cxx:107
 AliAnalysisTaskPhiFlow.cxx:108
 AliAnalysisTaskPhiFlow.cxx:109
 AliAnalysisTaskPhiFlow.cxx:110
 AliAnalysisTaskPhiFlow.cxx:111
 AliAnalysisTaskPhiFlow.cxx:112
 AliAnalysisTaskPhiFlow.cxx:113
 AliAnalysisTaskPhiFlow.cxx:114
 AliAnalysisTaskPhiFlow.cxx:115
 AliAnalysisTaskPhiFlow.cxx:116
 AliAnalysisTaskPhiFlow.cxx:117
 AliAnalysisTaskPhiFlow.cxx:118
 AliAnalysisTaskPhiFlow.cxx:119
 AliAnalysisTaskPhiFlow.cxx:120
 AliAnalysisTaskPhiFlow.cxx:121
 AliAnalysisTaskPhiFlow.cxx:122
 AliAnalysisTaskPhiFlow.cxx:123
 AliAnalysisTaskPhiFlow.cxx:124
 AliAnalysisTaskPhiFlow.cxx:125
 AliAnalysisTaskPhiFlow.cxx:126
 AliAnalysisTaskPhiFlow.cxx:127
 AliAnalysisTaskPhiFlow.cxx:128
 AliAnalysisTaskPhiFlow.cxx:129
 AliAnalysisTaskPhiFlow.cxx:130
 AliAnalysisTaskPhiFlow.cxx:131
 AliAnalysisTaskPhiFlow.cxx:132
 AliAnalysisTaskPhiFlow.cxx:133
 AliAnalysisTaskPhiFlow.cxx:134
 AliAnalysisTaskPhiFlow.cxx:135
 AliAnalysisTaskPhiFlow.cxx:136
 AliAnalysisTaskPhiFlow.cxx:137
 AliAnalysisTaskPhiFlow.cxx:138
 AliAnalysisTaskPhiFlow.cxx:139
 AliAnalysisTaskPhiFlow.cxx:140
 AliAnalysisTaskPhiFlow.cxx:141
 AliAnalysisTaskPhiFlow.cxx:142
 AliAnalysisTaskPhiFlow.cxx:143
 AliAnalysisTaskPhiFlow.cxx:144
 AliAnalysisTaskPhiFlow.cxx:145
 AliAnalysisTaskPhiFlow.cxx:146
 AliAnalysisTaskPhiFlow.cxx:147
 AliAnalysisTaskPhiFlow.cxx:148
 AliAnalysisTaskPhiFlow.cxx:149
 AliAnalysisTaskPhiFlow.cxx:150
 AliAnalysisTaskPhiFlow.cxx:151
 AliAnalysisTaskPhiFlow.cxx:152
 AliAnalysisTaskPhiFlow.cxx:153
 AliAnalysisTaskPhiFlow.cxx:154
 AliAnalysisTaskPhiFlow.cxx:155
 AliAnalysisTaskPhiFlow.cxx:156
 AliAnalysisTaskPhiFlow.cxx:157
 AliAnalysisTaskPhiFlow.cxx:158
 AliAnalysisTaskPhiFlow.cxx:159
 AliAnalysisTaskPhiFlow.cxx:160
 AliAnalysisTaskPhiFlow.cxx:161
 AliAnalysisTaskPhiFlow.cxx:162
 AliAnalysisTaskPhiFlow.cxx:163
 AliAnalysisTaskPhiFlow.cxx:164
 AliAnalysisTaskPhiFlow.cxx:165
 AliAnalysisTaskPhiFlow.cxx:166
 AliAnalysisTaskPhiFlow.cxx:167
 AliAnalysisTaskPhiFlow.cxx:168
 AliAnalysisTaskPhiFlow.cxx:169
 AliAnalysisTaskPhiFlow.cxx:170
 AliAnalysisTaskPhiFlow.cxx:171
 AliAnalysisTaskPhiFlow.cxx:172
 AliAnalysisTaskPhiFlow.cxx:173
 AliAnalysisTaskPhiFlow.cxx:174
 AliAnalysisTaskPhiFlow.cxx:175
 AliAnalysisTaskPhiFlow.cxx:176
 AliAnalysisTaskPhiFlow.cxx:177
 AliAnalysisTaskPhiFlow.cxx:178
 AliAnalysisTaskPhiFlow.cxx:179
 AliAnalysisTaskPhiFlow.cxx:180
 AliAnalysisTaskPhiFlow.cxx:181
 AliAnalysisTaskPhiFlow.cxx:182
 AliAnalysisTaskPhiFlow.cxx:183
 AliAnalysisTaskPhiFlow.cxx:184
 AliAnalysisTaskPhiFlow.cxx:185
 AliAnalysisTaskPhiFlow.cxx:186
 AliAnalysisTaskPhiFlow.cxx:187
 AliAnalysisTaskPhiFlow.cxx:188
 AliAnalysisTaskPhiFlow.cxx:189
 AliAnalysisTaskPhiFlow.cxx:190
 AliAnalysisTaskPhiFlow.cxx:191
 AliAnalysisTaskPhiFlow.cxx:192
 AliAnalysisTaskPhiFlow.cxx:193
 AliAnalysisTaskPhiFlow.cxx:194
 AliAnalysisTaskPhiFlow.cxx:195
 AliAnalysisTaskPhiFlow.cxx:196
 AliAnalysisTaskPhiFlow.cxx:197
 AliAnalysisTaskPhiFlow.cxx:198
 AliAnalysisTaskPhiFlow.cxx:199
 AliAnalysisTaskPhiFlow.cxx:200
 AliAnalysisTaskPhiFlow.cxx:201
 AliAnalysisTaskPhiFlow.cxx:202
 AliAnalysisTaskPhiFlow.cxx:203
 AliAnalysisTaskPhiFlow.cxx:204
 AliAnalysisTaskPhiFlow.cxx:205
 AliAnalysisTaskPhiFlow.cxx:206
 AliAnalysisTaskPhiFlow.cxx:207
 AliAnalysisTaskPhiFlow.cxx:208
 AliAnalysisTaskPhiFlow.cxx:209
 AliAnalysisTaskPhiFlow.cxx:210
 AliAnalysisTaskPhiFlow.cxx:211
 AliAnalysisTaskPhiFlow.cxx:212
 AliAnalysisTaskPhiFlow.cxx:213
 AliAnalysisTaskPhiFlow.cxx:214
 AliAnalysisTaskPhiFlow.cxx:215
 AliAnalysisTaskPhiFlow.cxx:216
 AliAnalysisTaskPhiFlow.cxx:217
 AliAnalysisTaskPhiFlow.cxx:218
 AliAnalysisTaskPhiFlow.cxx:219
 AliAnalysisTaskPhiFlow.cxx:220
 AliAnalysisTaskPhiFlow.cxx:221
 AliAnalysisTaskPhiFlow.cxx:222
 AliAnalysisTaskPhiFlow.cxx:223
 AliAnalysisTaskPhiFlow.cxx:224
 AliAnalysisTaskPhiFlow.cxx:225
 AliAnalysisTaskPhiFlow.cxx:226
 AliAnalysisTaskPhiFlow.cxx:227
 AliAnalysisTaskPhiFlow.cxx:228
 AliAnalysisTaskPhiFlow.cxx:229
 AliAnalysisTaskPhiFlow.cxx:230
 AliAnalysisTaskPhiFlow.cxx:231
 AliAnalysisTaskPhiFlow.cxx:232
 AliAnalysisTaskPhiFlow.cxx:233
 AliAnalysisTaskPhiFlow.cxx:234
 AliAnalysisTaskPhiFlow.cxx:235
 AliAnalysisTaskPhiFlow.cxx:236
 AliAnalysisTaskPhiFlow.cxx:237
 AliAnalysisTaskPhiFlow.cxx:238
 AliAnalysisTaskPhiFlow.cxx:239
 AliAnalysisTaskPhiFlow.cxx:240
 AliAnalysisTaskPhiFlow.cxx:241
 AliAnalysisTaskPhiFlow.cxx:242
 AliAnalysisTaskPhiFlow.cxx:243
 AliAnalysisTaskPhiFlow.cxx:244
 AliAnalysisTaskPhiFlow.cxx:245
 AliAnalysisTaskPhiFlow.cxx:246
 AliAnalysisTaskPhiFlow.cxx:247
 AliAnalysisTaskPhiFlow.cxx:248
 AliAnalysisTaskPhiFlow.cxx:249
 AliAnalysisTaskPhiFlow.cxx:250
 AliAnalysisTaskPhiFlow.cxx:251
 AliAnalysisTaskPhiFlow.cxx:252
 AliAnalysisTaskPhiFlow.cxx:253
 AliAnalysisTaskPhiFlow.cxx:254
 AliAnalysisTaskPhiFlow.cxx:255
 AliAnalysisTaskPhiFlow.cxx:256
 AliAnalysisTaskPhiFlow.cxx:257
 AliAnalysisTaskPhiFlow.cxx:258
 AliAnalysisTaskPhiFlow.cxx:259
 AliAnalysisTaskPhiFlow.cxx:260
 AliAnalysisTaskPhiFlow.cxx:261
 AliAnalysisTaskPhiFlow.cxx:262
 AliAnalysisTaskPhiFlow.cxx:263
 AliAnalysisTaskPhiFlow.cxx:264
 AliAnalysisTaskPhiFlow.cxx:265
 AliAnalysisTaskPhiFlow.cxx:266
 AliAnalysisTaskPhiFlow.cxx:267
 AliAnalysisTaskPhiFlow.cxx:268
 AliAnalysisTaskPhiFlow.cxx:269
 AliAnalysisTaskPhiFlow.cxx:270
 AliAnalysisTaskPhiFlow.cxx:271
 AliAnalysisTaskPhiFlow.cxx:272
 AliAnalysisTaskPhiFlow.cxx:273
 AliAnalysisTaskPhiFlow.cxx:274
 AliAnalysisTaskPhiFlow.cxx:275
 AliAnalysisTaskPhiFlow.cxx:276
 AliAnalysisTaskPhiFlow.cxx:277
 AliAnalysisTaskPhiFlow.cxx:278
 AliAnalysisTaskPhiFlow.cxx:279
 AliAnalysisTaskPhiFlow.cxx:280
 AliAnalysisTaskPhiFlow.cxx:281
 AliAnalysisTaskPhiFlow.cxx:282
 AliAnalysisTaskPhiFlow.cxx:283
 AliAnalysisTaskPhiFlow.cxx:284
 AliAnalysisTaskPhiFlow.cxx:285
 AliAnalysisTaskPhiFlow.cxx:286
 AliAnalysisTaskPhiFlow.cxx:287
 AliAnalysisTaskPhiFlow.cxx:288
 AliAnalysisTaskPhiFlow.cxx:289
 AliAnalysisTaskPhiFlow.cxx:290
 AliAnalysisTaskPhiFlow.cxx:291
 AliAnalysisTaskPhiFlow.cxx:292
 AliAnalysisTaskPhiFlow.cxx:293
 AliAnalysisTaskPhiFlow.cxx:294
 AliAnalysisTaskPhiFlow.cxx:295
 AliAnalysisTaskPhiFlow.cxx:296
 AliAnalysisTaskPhiFlow.cxx:297
 AliAnalysisTaskPhiFlow.cxx:298
 AliAnalysisTaskPhiFlow.cxx:299
 AliAnalysisTaskPhiFlow.cxx:300
 AliAnalysisTaskPhiFlow.cxx:301
 AliAnalysisTaskPhiFlow.cxx:302
 AliAnalysisTaskPhiFlow.cxx:303
 AliAnalysisTaskPhiFlow.cxx:304
 AliAnalysisTaskPhiFlow.cxx:305
 AliAnalysisTaskPhiFlow.cxx:306
 AliAnalysisTaskPhiFlow.cxx:307
 AliAnalysisTaskPhiFlow.cxx:308
 AliAnalysisTaskPhiFlow.cxx:309
 AliAnalysisTaskPhiFlow.cxx:310
 AliAnalysisTaskPhiFlow.cxx:311
 AliAnalysisTaskPhiFlow.cxx:312
 AliAnalysisTaskPhiFlow.cxx:313
 AliAnalysisTaskPhiFlow.cxx:314
 AliAnalysisTaskPhiFlow.cxx:315
 AliAnalysisTaskPhiFlow.cxx:316
 AliAnalysisTaskPhiFlow.cxx:317
 AliAnalysisTaskPhiFlow.cxx:318
 AliAnalysisTaskPhiFlow.cxx:319
 AliAnalysisTaskPhiFlow.cxx:320
 AliAnalysisTaskPhiFlow.cxx:321
 AliAnalysisTaskPhiFlow.cxx:322
 AliAnalysisTaskPhiFlow.cxx:323
 AliAnalysisTaskPhiFlow.cxx:324
 AliAnalysisTaskPhiFlow.cxx:325
 AliAnalysisTaskPhiFlow.cxx:326
 AliAnalysisTaskPhiFlow.cxx:327
 AliAnalysisTaskPhiFlow.cxx:328
 AliAnalysisTaskPhiFlow.cxx:329
 AliAnalysisTaskPhiFlow.cxx:330
 AliAnalysisTaskPhiFlow.cxx:331
 AliAnalysisTaskPhiFlow.cxx:332
 AliAnalysisTaskPhiFlow.cxx:333
 AliAnalysisTaskPhiFlow.cxx:334
 AliAnalysisTaskPhiFlow.cxx:335
 AliAnalysisTaskPhiFlow.cxx:336
 AliAnalysisTaskPhiFlow.cxx:337
 AliAnalysisTaskPhiFlow.cxx:338
 AliAnalysisTaskPhiFlow.cxx:339
 AliAnalysisTaskPhiFlow.cxx:340
 AliAnalysisTaskPhiFlow.cxx:341
 AliAnalysisTaskPhiFlow.cxx:342
 AliAnalysisTaskPhiFlow.cxx:343
 AliAnalysisTaskPhiFlow.cxx:344
 AliAnalysisTaskPhiFlow.cxx:345
 AliAnalysisTaskPhiFlow.cxx:346
 AliAnalysisTaskPhiFlow.cxx:347
 AliAnalysisTaskPhiFlow.cxx:348
 AliAnalysisTaskPhiFlow.cxx:349
 AliAnalysisTaskPhiFlow.cxx:350
 AliAnalysisTaskPhiFlow.cxx:351
 AliAnalysisTaskPhiFlow.cxx:352
 AliAnalysisTaskPhiFlow.cxx:353
 AliAnalysisTaskPhiFlow.cxx:354
 AliAnalysisTaskPhiFlow.cxx:355
 AliAnalysisTaskPhiFlow.cxx:356
 AliAnalysisTaskPhiFlow.cxx:357
 AliAnalysisTaskPhiFlow.cxx:358
 AliAnalysisTaskPhiFlow.cxx:359
 AliAnalysisTaskPhiFlow.cxx:360
 AliAnalysisTaskPhiFlow.cxx:361
 AliAnalysisTaskPhiFlow.cxx:362
 AliAnalysisTaskPhiFlow.cxx:363
 AliAnalysisTaskPhiFlow.cxx:364
 AliAnalysisTaskPhiFlow.cxx:365
 AliAnalysisTaskPhiFlow.cxx:366
 AliAnalysisTaskPhiFlow.cxx:367
 AliAnalysisTaskPhiFlow.cxx:368
 AliAnalysisTaskPhiFlow.cxx:369
 AliAnalysisTaskPhiFlow.cxx:370
 AliAnalysisTaskPhiFlow.cxx:371
 AliAnalysisTaskPhiFlow.cxx:372
 AliAnalysisTaskPhiFlow.cxx:373
 AliAnalysisTaskPhiFlow.cxx:374
 AliAnalysisTaskPhiFlow.cxx:375
 AliAnalysisTaskPhiFlow.cxx:376
 AliAnalysisTaskPhiFlow.cxx:377
 AliAnalysisTaskPhiFlow.cxx:378
 AliAnalysisTaskPhiFlow.cxx:379
 AliAnalysisTaskPhiFlow.cxx:380
 AliAnalysisTaskPhiFlow.cxx:381
 AliAnalysisTaskPhiFlow.cxx:382
 AliAnalysisTaskPhiFlow.cxx:383
 AliAnalysisTaskPhiFlow.cxx:384
 AliAnalysisTaskPhiFlow.cxx:385
 AliAnalysisTaskPhiFlow.cxx:386
 AliAnalysisTaskPhiFlow.cxx:387
 AliAnalysisTaskPhiFlow.cxx:388
 AliAnalysisTaskPhiFlow.cxx:389
 AliAnalysisTaskPhiFlow.cxx:390
 AliAnalysisTaskPhiFlow.cxx:391
 AliAnalysisTaskPhiFlow.cxx:392
 AliAnalysisTaskPhiFlow.cxx:393
 AliAnalysisTaskPhiFlow.cxx:394
 AliAnalysisTaskPhiFlow.cxx:395
 AliAnalysisTaskPhiFlow.cxx:396
 AliAnalysisTaskPhiFlow.cxx:397
 AliAnalysisTaskPhiFlow.cxx:398
 AliAnalysisTaskPhiFlow.cxx:399
 AliAnalysisTaskPhiFlow.cxx:400
 AliAnalysisTaskPhiFlow.cxx:401
 AliAnalysisTaskPhiFlow.cxx:402
 AliAnalysisTaskPhiFlow.cxx:403
 AliAnalysisTaskPhiFlow.cxx:404
 AliAnalysisTaskPhiFlow.cxx:405
 AliAnalysisTaskPhiFlow.cxx:406
 AliAnalysisTaskPhiFlow.cxx:407
 AliAnalysisTaskPhiFlow.cxx:408
 AliAnalysisTaskPhiFlow.cxx:409
 AliAnalysisTaskPhiFlow.cxx:410
 AliAnalysisTaskPhiFlow.cxx:411
 AliAnalysisTaskPhiFlow.cxx:412
 AliAnalysisTaskPhiFlow.cxx:413
 AliAnalysisTaskPhiFlow.cxx:414
 AliAnalysisTaskPhiFlow.cxx:415
 AliAnalysisTaskPhiFlow.cxx:416
 AliAnalysisTaskPhiFlow.cxx:417
 AliAnalysisTaskPhiFlow.cxx:418
 AliAnalysisTaskPhiFlow.cxx:419
 AliAnalysisTaskPhiFlow.cxx:420
 AliAnalysisTaskPhiFlow.cxx:421
 AliAnalysisTaskPhiFlow.cxx:422
 AliAnalysisTaskPhiFlow.cxx:423
 AliAnalysisTaskPhiFlow.cxx:424
 AliAnalysisTaskPhiFlow.cxx:425
 AliAnalysisTaskPhiFlow.cxx:426
 AliAnalysisTaskPhiFlow.cxx:427
 AliAnalysisTaskPhiFlow.cxx:428
 AliAnalysisTaskPhiFlow.cxx:429
 AliAnalysisTaskPhiFlow.cxx:430
 AliAnalysisTaskPhiFlow.cxx:431
 AliAnalysisTaskPhiFlow.cxx:432
 AliAnalysisTaskPhiFlow.cxx:433
 AliAnalysisTaskPhiFlow.cxx:434
 AliAnalysisTaskPhiFlow.cxx:435
 AliAnalysisTaskPhiFlow.cxx:436
 AliAnalysisTaskPhiFlow.cxx:437
 AliAnalysisTaskPhiFlow.cxx:438
 AliAnalysisTaskPhiFlow.cxx:439
 AliAnalysisTaskPhiFlow.cxx:440
 AliAnalysisTaskPhiFlow.cxx:441
 AliAnalysisTaskPhiFlow.cxx:442
 AliAnalysisTaskPhiFlow.cxx:443
 AliAnalysisTaskPhiFlow.cxx:444
 AliAnalysisTaskPhiFlow.cxx:445
 AliAnalysisTaskPhiFlow.cxx:446
 AliAnalysisTaskPhiFlow.cxx:447
 AliAnalysisTaskPhiFlow.cxx:448
 AliAnalysisTaskPhiFlow.cxx:449
 AliAnalysisTaskPhiFlow.cxx:450
 AliAnalysisTaskPhiFlow.cxx:451
 AliAnalysisTaskPhiFlow.cxx:452
 AliAnalysisTaskPhiFlow.cxx:453
 AliAnalysisTaskPhiFlow.cxx:454
 AliAnalysisTaskPhiFlow.cxx:455
 AliAnalysisTaskPhiFlow.cxx:456
 AliAnalysisTaskPhiFlow.cxx:457
 AliAnalysisTaskPhiFlow.cxx:458
 AliAnalysisTaskPhiFlow.cxx:459
 AliAnalysisTaskPhiFlow.cxx:460
 AliAnalysisTaskPhiFlow.cxx:461
 AliAnalysisTaskPhiFlow.cxx:462
 AliAnalysisTaskPhiFlow.cxx:463
 AliAnalysisTaskPhiFlow.cxx:464
 AliAnalysisTaskPhiFlow.cxx:465
 AliAnalysisTaskPhiFlow.cxx:466
 AliAnalysisTaskPhiFlow.cxx:467
 AliAnalysisTaskPhiFlow.cxx:468
 AliAnalysisTaskPhiFlow.cxx:469
 AliAnalysisTaskPhiFlow.cxx:470
 AliAnalysisTaskPhiFlow.cxx:471
 AliAnalysisTaskPhiFlow.cxx:472
 AliAnalysisTaskPhiFlow.cxx:473
 AliAnalysisTaskPhiFlow.cxx:474
 AliAnalysisTaskPhiFlow.cxx:475
 AliAnalysisTaskPhiFlow.cxx:476
 AliAnalysisTaskPhiFlow.cxx:477
 AliAnalysisTaskPhiFlow.cxx:478
 AliAnalysisTaskPhiFlow.cxx:479
 AliAnalysisTaskPhiFlow.cxx:480
 AliAnalysisTaskPhiFlow.cxx:481
 AliAnalysisTaskPhiFlow.cxx:482
 AliAnalysisTaskPhiFlow.cxx:483
 AliAnalysisTaskPhiFlow.cxx:484
 AliAnalysisTaskPhiFlow.cxx:485
 AliAnalysisTaskPhiFlow.cxx:486
 AliAnalysisTaskPhiFlow.cxx:487
 AliAnalysisTaskPhiFlow.cxx:488
 AliAnalysisTaskPhiFlow.cxx:489
 AliAnalysisTaskPhiFlow.cxx:490
 AliAnalysisTaskPhiFlow.cxx:491
 AliAnalysisTaskPhiFlow.cxx:492
 AliAnalysisTaskPhiFlow.cxx:493
 AliAnalysisTaskPhiFlow.cxx:494
 AliAnalysisTaskPhiFlow.cxx:495
 AliAnalysisTaskPhiFlow.cxx:496
 AliAnalysisTaskPhiFlow.cxx:497
 AliAnalysisTaskPhiFlow.cxx:498
 AliAnalysisTaskPhiFlow.cxx:499
 AliAnalysisTaskPhiFlow.cxx:500
 AliAnalysisTaskPhiFlow.cxx:501
 AliAnalysisTaskPhiFlow.cxx:502
 AliAnalysisTaskPhiFlow.cxx:503
 AliAnalysisTaskPhiFlow.cxx:504
 AliAnalysisTaskPhiFlow.cxx:505
 AliAnalysisTaskPhiFlow.cxx:506
 AliAnalysisTaskPhiFlow.cxx:507
 AliAnalysisTaskPhiFlow.cxx:508
 AliAnalysisTaskPhiFlow.cxx:509
 AliAnalysisTaskPhiFlow.cxx:510
 AliAnalysisTaskPhiFlow.cxx:511
 AliAnalysisTaskPhiFlow.cxx:512
 AliAnalysisTaskPhiFlow.cxx:513
 AliAnalysisTaskPhiFlow.cxx:514
 AliAnalysisTaskPhiFlow.cxx:515
 AliAnalysisTaskPhiFlow.cxx:516
 AliAnalysisTaskPhiFlow.cxx:517
 AliAnalysisTaskPhiFlow.cxx:518
 AliAnalysisTaskPhiFlow.cxx:519
 AliAnalysisTaskPhiFlow.cxx:520
 AliAnalysisTaskPhiFlow.cxx:521
 AliAnalysisTaskPhiFlow.cxx:522
 AliAnalysisTaskPhiFlow.cxx:523
 AliAnalysisTaskPhiFlow.cxx:524
 AliAnalysisTaskPhiFlow.cxx:525
 AliAnalysisTaskPhiFlow.cxx:526
 AliAnalysisTaskPhiFlow.cxx:527
 AliAnalysisTaskPhiFlow.cxx:528
 AliAnalysisTaskPhiFlow.cxx:529
 AliAnalysisTaskPhiFlow.cxx:530
 AliAnalysisTaskPhiFlow.cxx:531
 AliAnalysisTaskPhiFlow.cxx:532
 AliAnalysisTaskPhiFlow.cxx:533
 AliAnalysisTaskPhiFlow.cxx:534
 AliAnalysisTaskPhiFlow.cxx:535
 AliAnalysisTaskPhiFlow.cxx:536
 AliAnalysisTaskPhiFlow.cxx:537
 AliAnalysisTaskPhiFlow.cxx:538
 AliAnalysisTaskPhiFlow.cxx:539
 AliAnalysisTaskPhiFlow.cxx:540
 AliAnalysisTaskPhiFlow.cxx:541
 AliAnalysisTaskPhiFlow.cxx:542
 AliAnalysisTaskPhiFlow.cxx:543
 AliAnalysisTaskPhiFlow.cxx:544
 AliAnalysisTaskPhiFlow.cxx:545
 AliAnalysisTaskPhiFlow.cxx:546
 AliAnalysisTaskPhiFlow.cxx:547
 AliAnalysisTaskPhiFlow.cxx:548
 AliAnalysisTaskPhiFlow.cxx:549
 AliAnalysisTaskPhiFlow.cxx:550
 AliAnalysisTaskPhiFlow.cxx:551
 AliAnalysisTaskPhiFlow.cxx:552
 AliAnalysisTaskPhiFlow.cxx:553
 AliAnalysisTaskPhiFlow.cxx:554
 AliAnalysisTaskPhiFlow.cxx:555
 AliAnalysisTaskPhiFlow.cxx:556
 AliAnalysisTaskPhiFlow.cxx:557
 AliAnalysisTaskPhiFlow.cxx:558
 AliAnalysisTaskPhiFlow.cxx:559
 AliAnalysisTaskPhiFlow.cxx:560
 AliAnalysisTaskPhiFlow.cxx:561
 AliAnalysisTaskPhiFlow.cxx:562
 AliAnalysisTaskPhiFlow.cxx:563
 AliAnalysisTaskPhiFlow.cxx:564
 AliAnalysisTaskPhiFlow.cxx:565
 AliAnalysisTaskPhiFlow.cxx:566
 AliAnalysisTaskPhiFlow.cxx:567
 AliAnalysisTaskPhiFlow.cxx:568
 AliAnalysisTaskPhiFlow.cxx:569
 AliAnalysisTaskPhiFlow.cxx:570
 AliAnalysisTaskPhiFlow.cxx:571
 AliAnalysisTaskPhiFlow.cxx:572
 AliAnalysisTaskPhiFlow.cxx:573
 AliAnalysisTaskPhiFlow.cxx:574
 AliAnalysisTaskPhiFlow.cxx:575
 AliAnalysisTaskPhiFlow.cxx:576
 AliAnalysisTaskPhiFlow.cxx:577
 AliAnalysisTaskPhiFlow.cxx:578
 AliAnalysisTaskPhiFlow.cxx:579
 AliAnalysisTaskPhiFlow.cxx:580
 AliAnalysisTaskPhiFlow.cxx:581
 AliAnalysisTaskPhiFlow.cxx:582
 AliAnalysisTaskPhiFlow.cxx:583
 AliAnalysisTaskPhiFlow.cxx:584
 AliAnalysisTaskPhiFlow.cxx:585
 AliAnalysisTaskPhiFlow.cxx:586
 AliAnalysisTaskPhiFlow.cxx:587
 AliAnalysisTaskPhiFlow.cxx:588
 AliAnalysisTaskPhiFlow.cxx:589
 AliAnalysisTaskPhiFlow.cxx:590
 AliAnalysisTaskPhiFlow.cxx:591
 AliAnalysisTaskPhiFlow.cxx:592
 AliAnalysisTaskPhiFlow.cxx:593
 AliAnalysisTaskPhiFlow.cxx:594
 AliAnalysisTaskPhiFlow.cxx:595
 AliAnalysisTaskPhiFlow.cxx:596
 AliAnalysisTaskPhiFlow.cxx:597
 AliAnalysisTaskPhiFlow.cxx:598
 AliAnalysisTaskPhiFlow.cxx:599
 AliAnalysisTaskPhiFlow.cxx:600
 AliAnalysisTaskPhiFlow.cxx:601
 AliAnalysisTaskPhiFlow.cxx:602
 AliAnalysisTaskPhiFlow.cxx:603
 AliAnalysisTaskPhiFlow.cxx:604
 AliAnalysisTaskPhiFlow.cxx:605
 AliAnalysisTaskPhiFlow.cxx:606
 AliAnalysisTaskPhiFlow.cxx:607
 AliAnalysisTaskPhiFlow.cxx:608
 AliAnalysisTaskPhiFlow.cxx:609
 AliAnalysisTaskPhiFlow.cxx:610
 AliAnalysisTaskPhiFlow.cxx:611
 AliAnalysisTaskPhiFlow.cxx:612
 AliAnalysisTaskPhiFlow.cxx:613
 AliAnalysisTaskPhiFlow.cxx:614
 AliAnalysisTaskPhiFlow.cxx:615
 AliAnalysisTaskPhiFlow.cxx:616
 AliAnalysisTaskPhiFlow.cxx:617
 AliAnalysisTaskPhiFlow.cxx:618
 AliAnalysisTaskPhiFlow.cxx:619
 AliAnalysisTaskPhiFlow.cxx:620
 AliAnalysisTaskPhiFlow.cxx:621
 AliAnalysisTaskPhiFlow.cxx:622
 AliAnalysisTaskPhiFlow.cxx:623
 AliAnalysisTaskPhiFlow.cxx:624
 AliAnalysisTaskPhiFlow.cxx:625
 AliAnalysisTaskPhiFlow.cxx:626
 AliAnalysisTaskPhiFlow.cxx:627
 AliAnalysisTaskPhiFlow.cxx:628
 AliAnalysisTaskPhiFlow.cxx:629
 AliAnalysisTaskPhiFlow.cxx:630
 AliAnalysisTaskPhiFlow.cxx:631
 AliAnalysisTaskPhiFlow.cxx:632
 AliAnalysisTaskPhiFlow.cxx:633
 AliAnalysisTaskPhiFlow.cxx:634
 AliAnalysisTaskPhiFlow.cxx:635
 AliAnalysisTaskPhiFlow.cxx:636
 AliAnalysisTaskPhiFlow.cxx:637
 AliAnalysisTaskPhiFlow.cxx:638
 AliAnalysisTaskPhiFlow.cxx:639
 AliAnalysisTaskPhiFlow.cxx:640
 AliAnalysisTaskPhiFlow.cxx:641
 AliAnalysisTaskPhiFlow.cxx:642
 AliAnalysisTaskPhiFlow.cxx:643
 AliAnalysisTaskPhiFlow.cxx:644
 AliAnalysisTaskPhiFlow.cxx:645
 AliAnalysisTaskPhiFlow.cxx:646
 AliAnalysisTaskPhiFlow.cxx:647
 AliAnalysisTaskPhiFlow.cxx:648
 AliAnalysisTaskPhiFlow.cxx:649
 AliAnalysisTaskPhiFlow.cxx:650
 AliAnalysisTaskPhiFlow.cxx:651
 AliAnalysisTaskPhiFlow.cxx:652
 AliAnalysisTaskPhiFlow.cxx:653
 AliAnalysisTaskPhiFlow.cxx:654
 AliAnalysisTaskPhiFlow.cxx:655
 AliAnalysisTaskPhiFlow.cxx:656
 AliAnalysisTaskPhiFlow.cxx:657
 AliAnalysisTaskPhiFlow.cxx:658
 AliAnalysisTaskPhiFlow.cxx:659
 AliAnalysisTaskPhiFlow.cxx:660
 AliAnalysisTaskPhiFlow.cxx:661
 AliAnalysisTaskPhiFlow.cxx:662
 AliAnalysisTaskPhiFlow.cxx:663
 AliAnalysisTaskPhiFlow.cxx:664
 AliAnalysisTaskPhiFlow.cxx:665
 AliAnalysisTaskPhiFlow.cxx:666
 AliAnalysisTaskPhiFlow.cxx:667
 AliAnalysisTaskPhiFlow.cxx:668
 AliAnalysisTaskPhiFlow.cxx:669
 AliAnalysisTaskPhiFlow.cxx:670
 AliAnalysisTaskPhiFlow.cxx:671
 AliAnalysisTaskPhiFlow.cxx:672
 AliAnalysisTaskPhiFlow.cxx:673
 AliAnalysisTaskPhiFlow.cxx:674
 AliAnalysisTaskPhiFlow.cxx:675
 AliAnalysisTaskPhiFlow.cxx:676
 AliAnalysisTaskPhiFlow.cxx:677
 AliAnalysisTaskPhiFlow.cxx:678
 AliAnalysisTaskPhiFlow.cxx:679
 AliAnalysisTaskPhiFlow.cxx:680
 AliAnalysisTaskPhiFlow.cxx:681
 AliAnalysisTaskPhiFlow.cxx:682
 AliAnalysisTaskPhiFlow.cxx:683
 AliAnalysisTaskPhiFlow.cxx:684
 AliAnalysisTaskPhiFlow.cxx:685
 AliAnalysisTaskPhiFlow.cxx:686
 AliAnalysisTaskPhiFlow.cxx:687
 AliAnalysisTaskPhiFlow.cxx:688
 AliAnalysisTaskPhiFlow.cxx:689
 AliAnalysisTaskPhiFlow.cxx:690
 AliAnalysisTaskPhiFlow.cxx:691
 AliAnalysisTaskPhiFlow.cxx:692
 AliAnalysisTaskPhiFlow.cxx:693
 AliAnalysisTaskPhiFlow.cxx:694
 AliAnalysisTaskPhiFlow.cxx:695
 AliAnalysisTaskPhiFlow.cxx:696
 AliAnalysisTaskPhiFlow.cxx:697
 AliAnalysisTaskPhiFlow.cxx:698
 AliAnalysisTaskPhiFlow.cxx:699
 AliAnalysisTaskPhiFlow.cxx:700
 AliAnalysisTaskPhiFlow.cxx:701
 AliAnalysisTaskPhiFlow.cxx:702
 AliAnalysisTaskPhiFlow.cxx:703
 AliAnalysisTaskPhiFlow.cxx:704
 AliAnalysisTaskPhiFlow.cxx:705
 AliAnalysisTaskPhiFlow.cxx:706
 AliAnalysisTaskPhiFlow.cxx:707
 AliAnalysisTaskPhiFlow.cxx:708
 AliAnalysisTaskPhiFlow.cxx:709
 AliAnalysisTaskPhiFlow.cxx:710
 AliAnalysisTaskPhiFlow.cxx:711
 AliAnalysisTaskPhiFlow.cxx:712
 AliAnalysisTaskPhiFlow.cxx:713
 AliAnalysisTaskPhiFlow.cxx:714
 AliAnalysisTaskPhiFlow.cxx:715
 AliAnalysisTaskPhiFlow.cxx:716
 AliAnalysisTaskPhiFlow.cxx:717
 AliAnalysisTaskPhiFlow.cxx:718
 AliAnalysisTaskPhiFlow.cxx:719
 AliAnalysisTaskPhiFlow.cxx:720
 AliAnalysisTaskPhiFlow.cxx:721
 AliAnalysisTaskPhiFlow.cxx:722
 AliAnalysisTaskPhiFlow.cxx:723
 AliAnalysisTaskPhiFlow.cxx:724
 AliAnalysisTaskPhiFlow.cxx:725
 AliAnalysisTaskPhiFlow.cxx:726
 AliAnalysisTaskPhiFlow.cxx:727
 AliAnalysisTaskPhiFlow.cxx:728
 AliAnalysisTaskPhiFlow.cxx:729
 AliAnalysisTaskPhiFlow.cxx:730
 AliAnalysisTaskPhiFlow.cxx:731
 AliAnalysisTaskPhiFlow.cxx:732
 AliAnalysisTaskPhiFlow.cxx:733
 AliAnalysisTaskPhiFlow.cxx:734
 AliAnalysisTaskPhiFlow.cxx:735
 AliAnalysisTaskPhiFlow.cxx:736
 AliAnalysisTaskPhiFlow.cxx:737
 AliAnalysisTaskPhiFlow.cxx:738
 AliAnalysisTaskPhiFlow.cxx:739
 AliAnalysisTaskPhiFlow.cxx:740
 AliAnalysisTaskPhiFlow.cxx:741
 AliAnalysisTaskPhiFlow.cxx:742
 AliAnalysisTaskPhiFlow.cxx:743
 AliAnalysisTaskPhiFlow.cxx:744
 AliAnalysisTaskPhiFlow.cxx:745
 AliAnalysisTaskPhiFlow.cxx:746
 AliAnalysisTaskPhiFlow.cxx:747
 AliAnalysisTaskPhiFlow.cxx:748
 AliAnalysisTaskPhiFlow.cxx:749
 AliAnalysisTaskPhiFlow.cxx:750
 AliAnalysisTaskPhiFlow.cxx:751
 AliAnalysisTaskPhiFlow.cxx:752
 AliAnalysisTaskPhiFlow.cxx:753
 AliAnalysisTaskPhiFlow.cxx:754
 AliAnalysisTaskPhiFlow.cxx:755
 AliAnalysisTaskPhiFlow.cxx:756
 AliAnalysisTaskPhiFlow.cxx:757
 AliAnalysisTaskPhiFlow.cxx:758
 AliAnalysisTaskPhiFlow.cxx:759
 AliAnalysisTaskPhiFlow.cxx:760
 AliAnalysisTaskPhiFlow.cxx:761
 AliAnalysisTaskPhiFlow.cxx:762
 AliAnalysisTaskPhiFlow.cxx:763
 AliAnalysisTaskPhiFlow.cxx:764
 AliAnalysisTaskPhiFlow.cxx:765
 AliAnalysisTaskPhiFlow.cxx:766
 AliAnalysisTaskPhiFlow.cxx:767
 AliAnalysisTaskPhiFlow.cxx:768
 AliAnalysisTaskPhiFlow.cxx:769
 AliAnalysisTaskPhiFlow.cxx:770
 AliAnalysisTaskPhiFlow.cxx:771
 AliAnalysisTaskPhiFlow.cxx:772
 AliAnalysisTaskPhiFlow.cxx:773
 AliAnalysisTaskPhiFlow.cxx:774
 AliAnalysisTaskPhiFlow.cxx:775
 AliAnalysisTaskPhiFlow.cxx:776
 AliAnalysisTaskPhiFlow.cxx:777
 AliAnalysisTaskPhiFlow.cxx:778
 AliAnalysisTaskPhiFlow.cxx:779
 AliAnalysisTaskPhiFlow.cxx:780
 AliAnalysisTaskPhiFlow.cxx:781
 AliAnalysisTaskPhiFlow.cxx:782
 AliAnalysisTaskPhiFlow.cxx:783
 AliAnalysisTaskPhiFlow.cxx:784
 AliAnalysisTaskPhiFlow.cxx:785
 AliAnalysisTaskPhiFlow.cxx:786
 AliAnalysisTaskPhiFlow.cxx:787
 AliAnalysisTaskPhiFlow.cxx:788
 AliAnalysisTaskPhiFlow.cxx:789
 AliAnalysisTaskPhiFlow.cxx:790
 AliAnalysisTaskPhiFlow.cxx:791
 AliAnalysisTaskPhiFlow.cxx:792
 AliAnalysisTaskPhiFlow.cxx:793
 AliAnalysisTaskPhiFlow.cxx:794
 AliAnalysisTaskPhiFlow.cxx:795
 AliAnalysisTaskPhiFlow.cxx:796
 AliAnalysisTaskPhiFlow.cxx:797
 AliAnalysisTaskPhiFlow.cxx:798
 AliAnalysisTaskPhiFlow.cxx:799
 AliAnalysisTaskPhiFlow.cxx:800
 AliAnalysisTaskPhiFlow.cxx:801
 AliAnalysisTaskPhiFlow.cxx:802
 AliAnalysisTaskPhiFlow.cxx:803
 AliAnalysisTaskPhiFlow.cxx:804
 AliAnalysisTaskPhiFlow.cxx:805
 AliAnalysisTaskPhiFlow.cxx:806
 AliAnalysisTaskPhiFlow.cxx:807
 AliAnalysisTaskPhiFlow.cxx:808
 AliAnalysisTaskPhiFlow.cxx:809
 AliAnalysisTaskPhiFlow.cxx:810
 AliAnalysisTaskPhiFlow.cxx:811
 AliAnalysisTaskPhiFlow.cxx:812
 AliAnalysisTaskPhiFlow.cxx:813
 AliAnalysisTaskPhiFlow.cxx:814
 AliAnalysisTaskPhiFlow.cxx:815
 AliAnalysisTaskPhiFlow.cxx:816
 AliAnalysisTaskPhiFlow.cxx:817
 AliAnalysisTaskPhiFlow.cxx:818
 AliAnalysisTaskPhiFlow.cxx:819
 AliAnalysisTaskPhiFlow.cxx:820
 AliAnalysisTaskPhiFlow.cxx:821
 AliAnalysisTaskPhiFlow.cxx:822
 AliAnalysisTaskPhiFlow.cxx:823
 AliAnalysisTaskPhiFlow.cxx:824
 AliAnalysisTaskPhiFlow.cxx:825
 AliAnalysisTaskPhiFlow.cxx:826
 AliAnalysisTaskPhiFlow.cxx:827
 AliAnalysisTaskPhiFlow.cxx:828
 AliAnalysisTaskPhiFlow.cxx:829
 AliAnalysisTaskPhiFlow.cxx:830
 AliAnalysisTaskPhiFlow.cxx:831
 AliAnalysisTaskPhiFlow.cxx:832
 AliAnalysisTaskPhiFlow.cxx:833
 AliAnalysisTaskPhiFlow.cxx:834
 AliAnalysisTaskPhiFlow.cxx:835
 AliAnalysisTaskPhiFlow.cxx:836
 AliAnalysisTaskPhiFlow.cxx:837
 AliAnalysisTaskPhiFlow.cxx:838
 AliAnalysisTaskPhiFlow.cxx:839
 AliAnalysisTaskPhiFlow.cxx:840
 AliAnalysisTaskPhiFlow.cxx:841
 AliAnalysisTaskPhiFlow.cxx:842
 AliAnalysisTaskPhiFlow.cxx:843
 AliAnalysisTaskPhiFlow.cxx:844
 AliAnalysisTaskPhiFlow.cxx:845
 AliAnalysisTaskPhiFlow.cxx:846
 AliAnalysisTaskPhiFlow.cxx:847
 AliAnalysisTaskPhiFlow.cxx:848
 AliAnalysisTaskPhiFlow.cxx:849
 AliAnalysisTaskPhiFlow.cxx:850
 AliAnalysisTaskPhiFlow.cxx:851
 AliAnalysisTaskPhiFlow.cxx:852
 AliAnalysisTaskPhiFlow.cxx:853
 AliAnalysisTaskPhiFlow.cxx:854
 AliAnalysisTaskPhiFlow.cxx:855
 AliAnalysisTaskPhiFlow.cxx:856
 AliAnalysisTaskPhiFlow.cxx:857
 AliAnalysisTaskPhiFlow.cxx:858
 AliAnalysisTaskPhiFlow.cxx:859
 AliAnalysisTaskPhiFlow.cxx:860
 AliAnalysisTaskPhiFlow.cxx:861
 AliAnalysisTaskPhiFlow.cxx:862
 AliAnalysisTaskPhiFlow.cxx:863
 AliAnalysisTaskPhiFlow.cxx:864
 AliAnalysisTaskPhiFlow.cxx:865
 AliAnalysisTaskPhiFlow.cxx:866
 AliAnalysisTaskPhiFlow.cxx:867
 AliAnalysisTaskPhiFlow.cxx:868
 AliAnalysisTaskPhiFlow.cxx:869
 AliAnalysisTaskPhiFlow.cxx:870
 AliAnalysisTaskPhiFlow.cxx:871
 AliAnalysisTaskPhiFlow.cxx:872
 AliAnalysisTaskPhiFlow.cxx:873
 AliAnalysisTaskPhiFlow.cxx:874
 AliAnalysisTaskPhiFlow.cxx:875
 AliAnalysisTaskPhiFlow.cxx:876
 AliAnalysisTaskPhiFlow.cxx:877
 AliAnalysisTaskPhiFlow.cxx:878
 AliAnalysisTaskPhiFlow.cxx:879
 AliAnalysisTaskPhiFlow.cxx:880
 AliAnalysisTaskPhiFlow.cxx:881
 AliAnalysisTaskPhiFlow.cxx:882
 AliAnalysisTaskPhiFlow.cxx:883
 AliAnalysisTaskPhiFlow.cxx:884
 AliAnalysisTaskPhiFlow.cxx:885
 AliAnalysisTaskPhiFlow.cxx:886
 AliAnalysisTaskPhiFlow.cxx:887
 AliAnalysisTaskPhiFlow.cxx:888
 AliAnalysisTaskPhiFlow.cxx:889
 AliAnalysisTaskPhiFlow.cxx:890
 AliAnalysisTaskPhiFlow.cxx:891
 AliAnalysisTaskPhiFlow.cxx:892
 AliAnalysisTaskPhiFlow.cxx:893
 AliAnalysisTaskPhiFlow.cxx:894
 AliAnalysisTaskPhiFlow.cxx:895
 AliAnalysisTaskPhiFlow.cxx:896
 AliAnalysisTaskPhiFlow.cxx:897
 AliAnalysisTaskPhiFlow.cxx:898
 AliAnalysisTaskPhiFlow.cxx:899
 AliAnalysisTaskPhiFlow.cxx:900
 AliAnalysisTaskPhiFlow.cxx:901
 AliAnalysisTaskPhiFlow.cxx:902
 AliAnalysisTaskPhiFlow.cxx:903
 AliAnalysisTaskPhiFlow.cxx:904
 AliAnalysisTaskPhiFlow.cxx:905
 AliAnalysisTaskPhiFlow.cxx:906
 AliAnalysisTaskPhiFlow.cxx:907
 AliAnalysisTaskPhiFlow.cxx:908
 AliAnalysisTaskPhiFlow.cxx:909
 AliAnalysisTaskPhiFlow.cxx:910
 AliAnalysisTaskPhiFlow.cxx:911
 AliAnalysisTaskPhiFlow.cxx:912
 AliAnalysisTaskPhiFlow.cxx:913
 AliAnalysisTaskPhiFlow.cxx:914
 AliAnalysisTaskPhiFlow.cxx:915
 AliAnalysisTaskPhiFlow.cxx:916
 AliAnalysisTaskPhiFlow.cxx:917
 AliAnalysisTaskPhiFlow.cxx:918
 AliAnalysisTaskPhiFlow.cxx:919
 AliAnalysisTaskPhiFlow.cxx:920
 AliAnalysisTaskPhiFlow.cxx:921
 AliAnalysisTaskPhiFlow.cxx:922
 AliAnalysisTaskPhiFlow.cxx:923
 AliAnalysisTaskPhiFlow.cxx:924
 AliAnalysisTaskPhiFlow.cxx:925
 AliAnalysisTaskPhiFlow.cxx:926
 AliAnalysisTaskPhiFlow.cxx:927
 AliAnalysisTaskPhiFlow.cxx:928
 AliAnalysisTaskPhiFlow.cxx:929
 AliAnalysisTaskPhiFlow.cxx:930
 AliAnalysisTaskPhiFlow.cxx:931
 AliAnalysisTaskPhiFlow.cxx:932
 AliAnalysisTaskPhiFlow.cxx:933
 AliAnalysisTaskPhiFlow.cxx:934
 AliAnalysisTaskPhiFlow.cxx:935
 AliAnalysisTaskPhiFlow.cxx:936
 AliAnalysisTaskPhiFlow.cxx:937
 AliAnalysisTaskPhiFlow.cxx:938
 AliAnalysisTaskPhiFlow.cxx:939
 AliAnalysisTaskPhiFlow.cxx:940
 AliAnalysisTaskPhiFlow.cxx:941
 AliAnalysisTaskPhiFlow.cxx:942
 AliAnalysisTaskPhiFlow.cxx:943
 AliAnalysisTaskPhiFlow.cxx:944
 AliAnalysisTaskPhiFlow.cxx:945
 AliAnalysisTaskPhiFlow.cxx:946
 AliAnalysisTaskPhiFlow.cxx:947
 AliAnalysisTaskPhiFlow.cxx:948
 AliAnalysisTaskPhiFlow.cxx:949
 AliAnalysisTaskPhiFlow.cxx:950
 AliAnalysisTaskPhiFlow.cxx:951
 AliAnalysisTaskPhiFlow.cxx:952
 AliAnalysisTaskPhiFlow.cxx:953
 AliAnalysisTaskPhiFlow.cxx:954
 AliAnalysisTaskPhiFlow.cxx:955
 AliAnalysisTaskPhiFlow.cxx:956
 AliAnalysisTaskPhiFlow.cxx:957
 AliAnalysisTaskPhiFlow.cxx:958
 AliAnalysisTaskPhiFlow.cxx:959
 AliAnalysisTaskPhiFlow.cxx:960
 AliAnalysisTaskPhiFlow.cxx:961
 AliAnalysisTaskPhiFlow.cxx:962
 AliAnalysisTaskPhiFlow.cxx:963
 AliAnalysisTaskPhiFlow.cxx:964
 AliAnalysisTaskPhiFlow.cxx:965
 AliAnalysisTaskPhiFlow.cxx:966
 AliAnalysisTaskPhiFlow.cxx:967
 AliAnalysisTaskPhiFlow.cxx:968
 AliAnalysisTaskPhiFlow.cxx:969
 AliAnalysisTaskPhiFlow.cxx:970
 AliAnalysisTaskPhiFlow.cxx:971
 AliAnalysisTaskPhiFlow.cxx:972
 AliAnalysisTaskPhiFlow.cxx:973
 AliAnalysisTaskPhiFlow.cxx:974
 AliAnalysisTaskPhiFlow.cxx:975
 AliAnalysisTaskPhiFlow.cxx:976
 AliAnalysisTaskPhiFlow.cxx:977
 AliAnalysisTaskPhiFlow.cxx:978
 AliAnalysisTaskPhiFlow.cxx:979
 AliAnalysisTaskPhiFlow.cxx:980
 AliAnalysisTaskPhiFlow.cxx:981
 AliAnalysisTaskPhiFlow.cxx:982
 AliAnalysisTaskPhiFlow.cxx:983
 AliAnalysisTaskPhiFlow.cxx:984
 AliAnalysisTaskPhiFlow.cxx:985
 AliAnalysisTaskPhiFlow.cxx:986
 AliAnalysisTaskPhiFlow.cxx:987
 AliAnalysisTaskPhiFlow.cxx:988
 AliAnalysisTaskPhiFlow.cxx:989
 AliAnalysisTaskPhiFlow.cxx:990
 AliAnalysisTaskPhiFlow.cxx:991
 AliAnalysisTaskPhiFlow.cxx:992
 AliAnalysisTaskPhiFlow.cxx:993
 AliAnalysisTaskPhiFlow.cxx:994
 AliAnalysisTaskPhiFlow.cxx:995
 AliAnalysisTaskPhiFlow.cxx:996
 AliAnalysisTaskPhiFlow.cxx:997
 AliAnalysisTaskPhiFlow.cxx:998
 AliAnalysisTaskPhiFlow.cxx:999
 AliAnalysisTaskPhiFlow.cxx:1000