]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Added three new histograms for resolution + modified thnsparse branch definition
authorlramona <Ramona.Lea@cern.ch>
Wed, 2 Jul 2014 10:35:32 +0000 (12:35 +0200)
committerlramona <Ramona.Lea@cern.ch>
Wed, 2 Jul 2014 10:35:32 +0000 (12:35 +0200)
PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2.cxx
PWGLF/STRANGENESS/Hypernuclei/AliAnalysisTaskNucleiv2.h

index 13befeae86d6241c98c6dd63907cd9ebf8aa66bc..94cbc34c6099ef40b03aa9cad652df22e0cdc351 100644 (file)
@@ -53,6 +53,13 @@ class AliCascadeVertexer;
 #include "AliAnalysisTaskNucleiv2.h"
 #include "AliESDtrackCuts.h"
 #include "AliCentrality.h"
+#include "AliFlowCandidateTrack.h"
+#include "AliFlowTrackCuts.h"
+#include "AliFlowEventSimple.h"
+#include "AliFlowCommonConstants.h"
+#include "AliFlowEvent.h"
+#include "AliFlowTrack.h"
+#include "TProfile.h"
 
 ClassImp(AliAnalysisTaskNucleiv2)
 
@@ -62,11 +69,16 @@ using std::endl;
 //________________________________________________________________________
 AliAnalysisTaskNucleiv2::AliAnalysisTaskNucleiv2() 
 : AliAnalysisTaskSE(), 
-  fAnalysisType("ESD"), 
+  fAnalysisType(0), 
   fCollidingSystems(0), 
-  fDataType("REAL"),
-  fFillNtuple(kFALSE),
-  fListHistCascade(0), 
+  fDataType(0),
+  fFillNtuple(0),
+  fCentralityMin(0),
+  fCentralityMax(0), 
+  fCutsRP(0),
+  fNullCuts(0),
+  fFlowEvent(0),
+  fListHist(0), 
   fHistEventMultiplicity(0), 
   fHistTrackMultiplicity(0),
   fHistTrackMultiplicityCentral(0),    
@@ -77,78 +89,47 @@ AliAnalysisTaskNucleiv2::AliAnalysisTaskNucleiv2()
   fhPtDeu(0),
   fhTOF(0),
   fhMassTOF(0),
-  hRPangleTPCvsCentrality(0),           //RESOLUTION Histrograms
-  hPlaneResoTPCvsCentrality(0),
-  hRPangleVZEROvsCentrality(0),
-  hRPangleVZEROAvsCentrality(0),
-  hRPangleVZEROCvsCentrality(0),
-  hPlaneResoVZEROvsCentrality(0),
-  hPlaneResoVZEROAvsCentrality(0),
-  hPlaneResoVZEROCvsCentrality(0),
-  hCosPhivsPt(0),                         
-  hSinPhivsPt(0),                         
-  hPhivsPt(0),                         
-  hAntiCosPhivsPt(0),                     
-  hAntiSinPhivsPt(0),                     
-  hAntiPhivsPt(0),                     
-  hCosDeltaPhivsPt075(0),                      
-  hSinDeltaPhivsPt075(0),                      
-  hDeltaPhivsPt075(0),                      
-  hCosDeltaPhiVZEROvsPt075(0),                               
-  hSinDeltaPhiVZEROvsPt075(0),                               
-  hDeltaPhiVZEROvsPt075(0),                 
-  hCosDeltaPhivsPt1530(0),                     
-  hSinDeltaPhivsPt1530(0),                     
-  hDeltaPhivsPt1530(0),                     
-  hCosDeltaPhiVZEROvsPt1530(0),                
-  hSinDeltaPhiVZEROvsPt1530(0),                
-  hDeltaPhiVZEROvsPt1530(0),                
-  hCosDeltaPhivsPt3050(0),                     
-  hSinDeltaPhivsPt3050(0),                     
-  hDeltaPhivsPt3050(0),                     
-  hCosDeltaPhiVZEROvsPt3050(0),                
-  hSinDeltaPhiVZEROvsPt3050(0),                
-  hDeltaPhiVZEROvsPt3050(0),                
-  hCosDeltaPhivsPt1550(0),                     
-  hSinDeltaPhivsPt1550(0),                     
-  hDeltaPhivsPt1550(0),                     
-  hCosDeltaPhiVZEROvsPt1550(0),                
-  hSinDeltaPhiVZEROvsPt1550(0),                
-  hDeltaPhiVZEROvsPt1550(0),                
-  hAntiCosDeltaPhivsPt075(0),                  
-  hAntiSinDeltaPhivsPt075(0),                  
-  hAntiDeltaPhivsPt075(0),                  
-  hAntiCosDeltaPhiVZEROvsPt075(0),             
-  hAntiSinDeltaPhiVZEROvsPt075(0),             
-  hAntiDeltaPhiVZEROvsPt075(0),             
-  hAntiCosDeltaPhivsPt1530(0),                 
-  hAntiSinDeltaPhivsPt1530(0),                 
-  hAntiDeltaPhivsPt1530(0),                 
-  hAntiCosDeltaPhiVZEROvsPt1530(0),            
-  hAntiSinDeltaPhiVZEROvsPt1530(0),            
-  hAntiDeltaPhiVZEROvsPt1530(0),            
-  hAntiCosDeltaPhivsPt3050(0),                 
-  hAntiSinDeltaPhivsPt3050(0),                 
-  hAntiDeltaPhivsPt3050(0),                 
-  hAntiCosDeltaPhiVZEROvsPt3050(0),            
-  hAntiSinDeltaPhiVZEROvsPt3050(0),            
-  hAntiDeltaPhiVZEROvsPt3050(0),            
-  hAntiCosDeltaPhivsPt1550(0),                 
-  hAntiSinDeltaPhivsPt1550(0),                 
-  hAntiDeltaPhivsPt1550(0),                 
-  hAntiCosDeltaPhiVZEROvsPt1550(0),            
-  hAntiSinDeltaPhiVZEROvsPt1550(0),            
-  hAntiDeltaPhiVZEROvsPt1550(0),     
+  EPVzAvsCentrality(0), 
+  EPVzCvsCentrality(0), 
+  EPTPCvsCentrality(0), 
+  EPVzvsCentrality(0), 
+  EPTPCpvsCentrality(0), 
+  EPTPCnvsCentrality(0), 
+  fSubEventDPhiv205(0), 
+  fSubEventDPhiv2new05(0),
+  fSubEventDPhiv22040(0), 
+  fSubEventDPhiv2new2040(0),
+  fSubEventDPhiv24060(0), 
+  fSubEventDPhiv2new4060(0),
+  hCos2DeltaPhiVzAvsCentrality(0),
+  hCos2DeltaPhiVzCvsCentrality(0),
+  hCos2DeltaPhiVzMvsCentrality(0),
+  hCos2DeltaPhiTPCfvsCentrality(0),
+  hCos2DeltaPhiTPCpvsCentrality(0),
+  hCos2DeltaPhiTPCnvsCentrality(0),
+  hEvPlaneTPCvsEvPVz05(0),                      
+  hEvPlaneTPCvsEvPVz075(0), 
+  hEvPlaneTPCvsEvPVz1530(0),
+  hEvPlaneTPCvsEvPVz3050(0),                      
+  hEvPlaneTPCvsEvPVz2040(0),                      
+  hEvPlaneTPCvsEvPVz4060(0),       
+  hCos2DeltaPhivsPt075(0),                      
+  hCos2DeltaPhiVZEROvsPt075(0),                 
+  hCos2DeltaPhivsPt1530(0),                      
+  hCos2DeltaPhiVZEROvsPt1530(0),                 
+  hCos2DeltaPhivsPt3050(0),                      
+  hCos2DeltaPhiVZEROvsPt3050(0),                 
+  hCos2DeltaPhivsPt05(0),                      
+  hCos2DeltaPhiVZEROvsPt05(0),                 
+  hCos2DeltaPhivsPt2040(0),                      
+  hCos2DeltaPhiVZEROvsPt2040(0),                 
+  hCos2DeltaPhivsPt4060(0),                      
+  hCos2DeltaPhiVZEROvsPt4060(0),           
   fESDtrackCuts(0),
+  fESDtrackCutsEP(0),
   fPIDResponse(0),
   fNtuple1(0),
-  tCentrality(0),
-  tTPCMomentum(0),      
-  tdEdx(0),             
-  tEta(0),              
-  tITSclustermap(0),    
-  tCharge(0),           
-  tPtCorr(0),           
+  tCharge(0),
   tPhi(0),              
   trpangleTPC(0),       
   tPDGCode(0),          
@@ -165,119 +146,94 @@ AliAnalysisTaskNucleiv2::AliAnalysisTaskNucleiv2()
 {
   // Dummy Constructor 
   fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
+  fESDtrackCutsEP = new AliESDtrackCuts("AliESDtrackCutsEP","AliESDtrackCutsEP");
   //
   Initialize();
 }
 
 //________________________________________________________________________
-AliAnalysisTaskNucleiv2::AliAnalysisTaskNucleiv2(const char *name,const char *datatype,Bool_t filltree) 
-  : AliAnalysisTaskSE(name), 
-    fAnalysisType("ESD"), 
-    fCollidingSystems(0), 
-    fDataType(datatype),
-    fFillNtuple(filltree),
-    fListHistCascade(0), 
-    fHistEventMultiplicity(0), 
-    fHistTrackMultiplicity(0),
-    fHistTrackMultiplicityCentral(0),    
-    fHistTrackMultiplicitySemiCentral(0),
-    fHistTrackMultiplicityMB(0),
-    fhBB(0),
-    fhBBDeu(0),
-    fhPtDeu(0),
-    fhTOF(0),
-    fhMassTOF(0),
-    hRPangleTPCvsCentrality(0),           //RESOLUTION Histrograms
-    hPlaneResoTPCvsCentrality(0),
-    hRPangleVZEROvsCentrality(0),
-    hRPangleVZEROAvsCentrality(0),
-    hRPangleVZEROCvsCentrality(0),
-    hPlaneResoVZEROvsCentrality(0),
-    hPlaneResoVZEROAvsCentrality(0),
-    hPlaneResoVZEROCvsCentrality(0),
-    hCosPhivsPt(0),                         
-    hSinPhivsPt(0),                         
-    hPhivsPt(0),                         
-    hAntiCosPhivsPt(0),                     
-    hAntiSinPhivsPt(0),                     
-    hAntiPhivsPt(0),                     
-    hCosDeltaPhivsPt075(0),                      
-    hSinDeltaPhivsPt075(0),                      
-    hDeltaPhivsPt075(0),                      
-    hCosDeltaPhiVZEROvsPt075(0),                             
-    hSinDeltaPhiVZEROvsPt075(0),                             
-    hDeltaPhiVZEROvsPt075(0),                 
-    hCosDeltaPhivsPt1530(0),                     
-    hSinDeltaPhivsPt1530(0),                     
-    hDeltaPhivsPt1530(0),                     
-    hCosDeltaPhiVZEROvsPt1530(0),                
-    hSinDeltaPhiVZEROvsPt1530(0),                
-    hDeltaPhiVZEROvsPt1530(0),                
-    hCosDeltaPhivsPt3050(0),                     
-    hSinDeltaPhivsPt3050(0),                     
-    hDeltaPhivsPt3050(0),                     
-    hCosDeltaPhiVZEROvsPt3050(0),                
-    hSinDeltaPhiVZEROvsPt3050(0),                
-    hDeltaPhiVZEROvsPt3050(0),                
-    hCosDeltaPhivsPt1550(0),                     
-    hSinDeltaPhivsPt1550(0),                     
-    hDeltaPhivsPt1550(0),                     
-    hCosDeltaPhiVZEROvsPt1550(0),                
-    hSinDeltaPhiVZEROvsPt1550(0),                
-    hDeltaPhiVZEROvsPt1550(0),                
-    hAntiCosDeltaPhivsPt075(0),                  
-    hAntiSinDeltaPhivsPt075(0),                  
-    hAntiDeltaPhivsPt075(0),                  
-    hAntiCosDeltaPhiVZEROvsPt075(0),             
-    hAntiSinDeltaPhiVZEROvsPt075(0),             
-    hAntiDeltaPhiVZEROvsPt075(0),             
-    hAntiCosDeltaPhivsPt1530(0),                 
-    hAntiSinDeltaPhivsPt1530(0),                 
-    hAntiDeltaPhivsPt1530(0),                 
-    hAntiCosDeltaPhiVZEROvsPt1530(0),            
-    hAntiSinDeltaPhiVZEROvsPt1530(0),            
-    hAntiDeltaPhiVZEROvsPt1530(0),            
-    hAntiCosDeltaPhivsPt3050(0),                 
-    hAntiSinDeltaPhivsPt3050(0),                 
-    hAntiDeltaPhivsPt3050(0),                 
-    hAntiCosDeltaPhiVZEROvsPt3050(0),            
-    hAntiSinDeltaPhiVZEROvsPt3050(0),            
-    hAntiDeltaPhiVZEROvsPt3050(0),            
-    hAntiCosDeltaPhivsPt1550(0),                 
-    hAntiSinDeltaPhivsPt1550(0),                 
-    hAntiDeltaPhivsPt1550(0),                 
-    hAntiCosDeltaPhiVZEROvsPt1550(0),            
-    hAntiSinDeltaPhiVZEROvsPt1550(0),            
-    hAntiDeltaPhiVZEROvsPt1550(0),     
-    fESDtrackCuts(0),
-    fPIDResponse(0),
-    fNtuple1(0),
-    tCentrality(0),
-    tTPCMomentum(0),      
-    tdEdx(0),             
-    tEta(0),              
-    tITSclustermap(0),    
-    tCharge(0),           
-    tPtCorr(0),           
-    tPhi(0),              
-    trpangleTPC(0),       
-    tPDGCode(0),          
-    tPDGCodeMum(0),       
-    tIsPrimaryTr(0),
-    fNtuple2(0) ,
-    tCentralityMC(0),
-    tPDGCodeMC(0),
-    tPDGCodeMumMC(0),
-    tIsPrimary(0),
-    tEtaMC(0),
-    tPtMC(0),
-    tYMC(0)
-    
+AliAnalysisTaskNucleiv2::AliAnalysisTaskNucleiv2(const char *name) 
+  :  AliAnalysisTaskSE(name), 
+     fAnalysisType(0), 
+     fCollidingSystems(0), 
+     fDataType(0),
+     fFillNtuple(0),
+     fCentralityMin(0),
+     fCentralityMax(0),
+     fCutsRP(0),  
+     fNullCuts(0),
+     fFlowEvent(0),
+     fListHist(0), 
+     fHistEventMultiplicity(0), 
+     fHistTrackMultiplicity(0),
+     fHistTrackMultiplicityCentral(0),    
+     fHistTrackMultiplicitySemiCentral(0),
+     fHistTrackMultiplicityMB(0),
+     fhBB(0),
+     fhBBDeu(0),
+     fhPtDeu(0),
+     fhTOF(0),
+     fhMassTOF(0),
+     EPVzAvsCentrality(0), 
+     EPVzCvsCentrality(0), 
+     EPTPCvsCentrality(0), 
+     EPVzvsCentrality(0), 
+     EPTPCpvsCentrality(0), 
+     EPTPCnvsCentrality(0), 
+     fSubEventDPhiv205(0), 
+     fSubEventDPhiv2new05(0),
+     fSubEventDPhiv22040(0), 
+     fSubEventDPhiv2new2040(0),
+     fSubEventDPhiv24060(0), 
+     fSubEventDPhiv2new4060(0),
+     hCos2DeltaPhiVzAvsCentrality(0),
+     hCos2DeltaPhiVzCvsCentrality(0),
+     hCos2DeltaPhiVzMvsCentrality(0),
+     hCos2DeltaPhiTPCfvsCentrality(0),
+     hCos2DeltaPhiTPCpvsCentrality(0),
+     hCos2DeltaPhiTPCnvsCentrality(0),
+     hEvPlaneTPCvsEvPVz05(0),                      
+     hEvPlaneTPCvsEvPVz075(0), 
+     hEvPlaneTPCvsEvPVz1530(0),
+     hEvPlaneTPCvsEvPVz3050(0),                      
+     hEvPlaneTPCvsEvPVz2040(0),                      
+     hEvPlaneTPCvsEvPVz4060(0),   
+     hCos2DeltaPhivsPt075(0),                      
+     hCos2DeltaPhiVZEROvsPt075(0),                 
+     hCos2DeltaPhivsPt1530(0),                      
+     hCos2DeltaPhiVZEROvsPt1530(0),                 
+     hCos2DeltaPhivsPt3050(0),                      
+     hCos2DeltaPhiVZEROvsPt3050(0),                 
+     hCos2DeltaPhivsPt05(0),                      
+     hCos2DeltaPhiVZEROvsPt05(0),                 
+     hCos2DeltaPhivsPt2040(0),                      
+     hCos2DeltaPhiVZEROvsPt2040(0),                 
+     hCos2DeltaPhivsPt4060(0),                      
+     hCos2DeltaPhiVZEROvsPt4060(0),           
+     fESDtrackCuts(0),
+     fESDtrackCutsEP(0),
+     fPIDResponse(0),
+     fNtuple1(0),
+     tCharge(0),
+     tPhi(0),              
+     trpangleTPC(0),       
+     tPDGCode(0),          
+     tPDGCodeMum(0),       
+     tIsPrimaryTr(0),
+     fNtuple2(0) ,
+     tCentralityMC(0),
+     tPDGCodeMC(0),
+     tPDGCodeMumMC(0),
+     tIsPrimary(0),
+     tEtaMC(0),
+     tPtMC(0),
+     tYMC(0)
+     
 {
   // Define input and output slots here
   // Input slot #0 works with a TChain
   //DefineInput(0, TChain::Class());
-  // Output slot #0 writes into a TList container (Cascade)
+  // Output slot #0 writes into a TList container ()
 
   //
   // create track cuts
@@ -285,15 +241,13 @@ AliAnalysisTaskNucleiv2::AliAnalysisTaskNucleiv2(const char *name,const char *da
   fESDtrackCuts = new AliESDtrackCuts("AliESDtrackCuts","AliESDtrackCuts");
   //
   Initialize();
-  SetDataType(datatype);
-  SetFillTree(filltree);
 
   DefineInput(0, TChain::Class());
   
   DefineOutput(1, TList::Class());
   DefineOutput(2, TTree::Class());
   DefineOutput(3, TTree::Class());
-
+  DefineOutput(4, AliFlowEventSimple::Class());
 }
 
 void AliAnalysisTaskNucleiv2::Initialize()
@@ -308,10 +262,67 @@ void AliAnalysisTaskNucleiv2::Initialize()
   //
   //
  
+  fESDtrackCutsEP = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();  
   //  Printf("Initizialize\n");
  
 }
 
+//________________________________________________________________________
+Float_t AliAnalysisTaskNucleiv2::GetEventPlaneForCandidate(AliESDtrack* track0, const TVector2* q,AliEventplane *pl, const TVector2* qsub1, const TVector2* qsub2){
+  // remove autocorrelations 
+  TArrayF* qx = 0x0;
+  TArrayF* qy = 0x0;
+  TVector2 qcopy; 
+  // if(!fEtaGap){
+  qx = pl->GetQContributionXArray();
+  qy = pl->GetQContributionYArray();
+  qcopy = *q;
+  // }else {
+  // if(d->Eta()<0.){
+  //   qx = pl->GetQContributionXArraysub1();
+  //   qy = pl->GetQContributionYArraysub1();
+  //   qcopy = *qsub1;
+  // }else{
+  //   qx = pl->GetQContributionXArraysub2();
+  //   qy = pl->GetQContributionYArraysub2();
+  //   qcopy = *qsub2;
+  // }
+  //}
+  
+  TVector2 q0;
+  if((track0->GetID()) < qx->fN){
+    q0.Set(qx->At(track0->GetID()),qy->At(track0->GetID()));
+  }
+  
+  qcopy = qcopy - q0;
+  
+  return qcopy.Phi()/2.;
+  
+}
+//_____________________________________________________________________________
+template <typename T> void AliAnalysisTaskNucleiv2::SetNullCuts(T* event)
+{
+    //Set null cuts
+  if (fDebug) cout << " fCutsRP " << 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 AliAnalysisTaskNucleiv2::PrepareFlowEvent(Int_t iMulti, AliFlowEvent *FlowEv) const
+{
+    //Prepare flow events
+    FlowEv->ClearFast();
+    FlowEv->Fill(fCutsRP, fNullCuts);
+    FlowEv->SetReferenceMultiplicity(iMulti);
+    FlowEv->DefineDeadZone(0, 0, 0, 0);
+    //  FlowEv->TagSubeventsInEta(-0.7, 0, 0, 0.7);
+}
+
 //________________________________________________________________________
 Float_t AliAnalysisTaskNucleiv2::GetPhi0Pi(Float_t phi){
   // Sets the phi angle in the range 0-pi
@@ -325,13 +336,46 @@ Float_t AliAnalysisTaskNucleiv2::GetPhi0Pi(Float_t phi){
    return result;
 }
 
-
+//_____________________________________________________________________________
+void AliAnalysisTaskNucleiv2::SetCentralityParameters(Double_t CentralityMin, Double_t CentralityMax)
+{
+    // Set a centrality range ]min, max] 
+  fCentralityMin = CentralityMin;
+  fCentralityMax = CentralityMax;
+  
+}
 //==================DEFINITION OF OUTPUT OBJECTS==============================
 
 void AliAnalysisTaskNucleiv2::UserCreateOutputObjects()
 {
-  fListHistCascade = new TList();
-  fListHistCascade->SetOwner();  // IMPORTANT!
+  //-------------------------------------------------------
+  fNullCuts = new AliFlowTrackCuts("null_cuts");
+
+  AliFlowCommonConstants* cc = AliFlowCommonConstants::GetMaster();
+  cc->SetNbinsMult(10000);
+  cc->SetMultMin(0);
+  cc->SetMultMax(10000);
+  
+  cc->SetNbinsPt(100);
+  cc->SetPtMin(0);
+  cc->SetPtMax(50);
+    
+  cc->SetNbinsPhi(180);
+  cc->SetPhiMin(0.0);
+  cc->SetPhiMax(TMath::TwoPi());
+  
+  cc->SetNbinsEta(30);
+  cc->SetEtaMin(-7.0);
+  cc->SetEtaMax(+7.0);
+  
+  cc->SetNbinsQ(500);
+  cc->SetQMin(0.0);
+  cc->SetQMax(3.0);
+  
+  //------------------------------------------------------
+
+  fListHist = new TList();
+  fListHist->SetOwner();  // IMPORTANT!
 
   if(! fHistEventMultiplicity ){
 
@@ -350,250 +394,186 @@ void AliAnalysisTaskNucleiv2::UserCreateOutputObjects()
     fHistEventMultiplicity->GetXaxis()->SetBinLabel(10,"out of pt bounds");
     fHistEventMultiplicity->GetXaxis()->SetBinLabel(11,"mismatch lab");
     fHistEventMultiplicity->GetXaxis()->SetBinLabel(12,"non valid TPC EP");
-    fListHistCascade->Add(fHistEventMultiplicity);
+    fListHist->Add(fHistEventMultiplicity);
   }
 
   if(! fHistTrackMultiplicity ){
     fHistTrackMultiplicity  = new TH2F( "fHistTrackMultiplicity", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
     fHistTrackMultiplicity->GetXaxis()->SetTitle("Number of tracks");
     fHistTrackMultiplicity->GetYaxis()->SetTitle("Percentile");
-    fListHistCascade->Add(fHistTrackMultiplicity);
+    fListHist->Add(fHistTrackMultiplicity);
   } 
 
   if(! fHistTrackMultiplicityCentral ){
     fHistTrackMultiplicityCentral  = new TH2F( "fHistTrackMultiplicityCentral", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
     fHistTrackMultiplicityCentral->GetXaxis()->SetTitle("Number of tracks");
     fHistTrackMultiplicityCentral->GetYaxis()->SetTitle("Percentile");
-    fListHistCascade->Add(fHistTrackMultiplicityCentral);
+    fListHist->Add(fHistTrackMultiplicityCentral);
   } 
   if(! fHistTrackMultiplicitySemiCentral ){
     fHistTrackMultiplicitySemiCentral  = new TH2F( "fHistTrackMultiplicitySemiCentral", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
     fHistTrackMultiplicitySemiCentral->GetXaxis()->SetTitle("Number of tracks");
     fHistTrackMultiplicitySemiCentral->GetYaxis()->SetTitle("Percentile");
-    fListHistCascade->Add(fHistTrackMultiplicitySemiCentral);
+    fListHist->Add(fHistTrackMultiplicitySemiCentral);
   } 
   if(! fHistTrackMultiplicityMB ){
     fHistTrackMultiplicityMB  = new TH2F( "fHistTrackMultiplicityMB", "Nb of Tracks MB Events |Vz| < 10", 25000,0, 25000,105,-0.5,104.5);
     fHistTrackMultiplicityMB->GetXaxis()->SetTitle("Number of tracks");
     fHistTrackMultiplicityMB->GetYaxis()->SetTitle("Percentile");
-    fListHistCascade->Add(fHistTrackMultiplicityMB);
+    fListHist->Add(fHistTrackMultiplicityMB);
   } 
  
   if(! fhBB ){
     fhBB = new TH2F( "fhBB" , "BetheBlochTPC" , 240,-6,6,1000,0,1000);
-    fListHistCascade->Add(fhBB);
+    fListHist->Add(fhBB);
   }
   
   if(! fhBBDeu ){
     fhBBDeu = new TH2F( "fhBBDeu" , "BetheBlochTPC - Deuteron" , 240,-6,6,1000,0,1000);
-    fListHistCascade->Add(fhBBDeu);
+    fListHist->Add(fhBBDeu);
   }
  
   if(!fhPtDeu  ){
     fhPtDeu = new TH2F( "fhPtDeu" , "pt corretto vs pt track - Deuteron" , 120,0,6,120,0,6);
-    fListHistCascade->Add(fhPtDeu);
+    fListHist->Add(fhPtDeu);
   }
 
   if(! fhTOF ){
     fhTOF = new TH2F( "fhTOF" , "Scatter Plot TOF" , 240,-6,6,1000,0,1.2);
-    fListHistCascade->Add(fhTOF);
+    fListHist->Add(fhTOF);
   }
   if(! fhMassTOF){
     fhMassTOF=new TH1F ("fhMassTOF","Particle Mass - TOF", 300,-5 ,5);
-    fListHistCascade->Add(fhMassTOF);
-  }
-  
-  if(!hRPangleTPCvsCentrality){
-    hRPangleTPCvsCentrality     = new TH2F("hRPangleTPCvsCentrality"    ,"hRPangleTPCvsCentrality"    ,100,0,TMath::Pi(),210,-0.5,105.5);
-    fListHistCascade->Add(hRPangleTPCvsCentrality);
-  }
-  if(!hPlaneResoTPCvsCentrality){
-    hPlaneResoTPCvsCentrality   = new TH2F("hPlaneResoTPCvsCentrality"  ,"hPlaneResoTPCvsCentrality"  ,500,-1,1,210,-0.5,105.5);
-    fListHistCascade->Add(hPlaneResoTPCvsCentrality);
-  }
-  if(!hRPangleVZEROvsCentrality){
-    hRPangleVZEROvsCentrality   = new TH2F("hRPangleVZEROvsCentrality"  ,"hRPangleVZEROvsCentrality"  ,100,0,TMath::Pi(),210,-0.5,105.5);
-    fListHistCascade->Add(hRPangleVZEROvsCentrality);
+    fListHist->Add(fhMassTOF);
   }
   
-  if(!hRPangleVZEROAvsCentrality){
-    hRPangleVZEROAvsCentrality   = new TH2F("hRPangleVZEROAvsCentrality"  ,"hRPangleVZEROAvsCentrality"  ,100,0,TMath::Pi(),210,-0.5,105.5);
-    fListHistCascade->Add(hRPangleVZEROAvsCentrality);
-  }
-
-  if(!hRPangleVZEROCvsCentrality){
-    hRPangleVZEROCvsCentrality   = new TH2F("hRPangleVZEROCvsCentrality"  ,"hRPangleVZEROCvsCentrality"  ,100,0,TMath::Pi(),210,-0.5,105.5);
-    fListHistCascade->Add(hRPangleVZEROCvsCentrality);
-  }
-
-  if(!hPlaneResoVZEROvsCentrality){
-    hPlaneResoVZEROvsCentrality = new TH2F("hPlaneResoVZEROvsCentrality","hPlaneResoVZEROvsCentrality",500,-1,1,210,-0.5,105.5);
-    fListHistCascade->Add(hPlaneResoVZEROvsCentrality);
-  }
-
-  if(!hPlaneResoVZEROAvsCentrality){
-    hPlaneResoVZEROAvsCentrality = new TH2F("hPlaneResoVZEROAvsCentrality","hPlaneResoVZEROAvsCentrality",500,-1,1,210,-0.5,105.5);
-    fListHistCascade->Add(hPlaneResoVZEROAvsCentrality);
-  }
-
-  if(!hPlaneResoVZEROCvsCentrality){
-    hPlaneResoVZEROCvsCentrality = new TH2F("hPlaneResoVZEROCvsCentrality","hPlaneResoVZEROCvsCentrality",500,-1,1,210,-0.5,105.5);
-    fListHistCascade->Add(hPlaneResoVZEROCvsCentrality);
-  }
+  EPVzAvsCentrality = new TH2D("EPVzAvsCentrality", "EPVzAvsCentrality", 80, -2, 2,105,-0.5,105.5);
+  fListHist->Add(EPVzAvsCentrality);
+  EPVzCvsCentrality = new TH2D("EPVzCvsCentrality", "EPVzCvsCentrality", 80, -2, 2,105,-0.5,105.5);
+  fListHist->Add(EPVzCvsCentrality);
+  EPTPCvsCentrality = new TH2D("EPTPCvsCentrality", "EPTPCvsCentrality", 80, -2, 2,105,-0.5,105.5);
+  fListHist->Add(EPTPCvsCentrality);
+    
+    
+  EPVzvsCentrality = new TH2D("EPVzvsCentrality", "EPVzvsCentrality", 80, -2, 2,105,-0.5,105.5);
+  fListHist->Add(EPVzvsCentrality);
+  EPTPCpvsCentrality = new TH2D("EPTPCpvsCentrality", "EPTPCpvsCentrality", 80, -2, 2,105,-0.5,105.5);
+  fListHist->Add(EPTPCpvsCentrality);
+  EPTPCnvsCentrality = new TH2D("EPTPCnvsCentrality", "EPTPCnvsCentrality", 80, -2, 2,105,-0.5,105.5);
+  fListHist->Add(EPTPCnvsCentrality);
+
+  //1
  
-  hCosPhivsPt      = new TH2F("hCosPhivsPt","hCosPhivsPt",200,-1,1,60,0,3.0);       
-  hSinPhivsPt      = new TH2F("hSinPhivsPt","hSinPhivsPt",100, 0,1,60,0,3.0);       
-  hPhivsPt         = new TH2F("hPhivsPt","hPhivsPt"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-  
-  hAntiCosPhivsPt      = new TH2F("hAntiCosPhivsPt","hAntiCosPhivsPt",200,-1,1,60,0,3.0);           
-  hAntiSinPhivsPt      = new TH2F("hAntiSinPhivsPt","hAntiSinPhivsPt",100, 0,1,60,0,3.0);           
-  hAntiPhivsPt         = new TH2F("hAntiPhivsPt","hAntiPhivsPt"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-  
-
-  hCosDeltaPhivsPt075 = new TH2F("hCosDeltaPhivsPt075","hCosDeltaPhivsPt075",200,-1,1,60,0,3.0);
-  hSinDeltaPhivsPt075 = new TH2F("hSinDeltaPhivsPt075","hSinDeltaPhivsPt075",100, 0,1,60,0,3.0);
-  hDeltaPhivsPt075    = new TH2F("hDeltaPhivsPt075","hDeltaPhivsPt075"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-  
-  hCosDeltaPhiVZEROvsPt075 = new TH2F("hCosDeltaPhiVZEROvsPt075","hCosDeltaPhiVZEROvsPt075",200,-1,1,60,0,3.0);              
-  hSinDeltaPhiVZEROvsPt075 = new TH2F("hSinDeltaPhiVZEROvsPt075","hSinDeltaPhiVZEROvsPt075",100, 0,1,60,0,3.0);              
-  hDeltaPhiVZEROvsPt075    = new TH2F("hDeltaPhiVZEROvsPt075","hDeltaPhiVZEROvsPt075"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-
-  hCosDeltaPhivsPt1530 = new TH2F("hCosDeltaPhivsPt1530","hCosDeltaPhivsPt1530",200,-1,1,60,0,3.0);
-  hSinDeltaPhivsPt1530 = new TH2F("hSinDeltaPhivsPt1530","hSinDeltaPhivsPt1530",100, 0,1,60,0,3.0);
-  hDeltaPhivsPt1530    = new TH2F("hDeltaPhivsPt1530","hDeltaPhivsPt1530"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-  
-  hCosDeltaPhiVZEROvsPt1530 = new TH2F("hCosDeltaPhiVZEROvsPt1530","hCosDeltaPhiVZEROvsPt1530",200,-1,1,60,0,3.0);           
-  hSinDeltaPhiVZEROvsPt1530 = new TH2F("hSinDeltaPhiVZEROvsPt1530","hSinDeltaPhiVZEROvsPt1530",100, 0,1,60,0,3.0);           
-  hDeltaPhiVZEROvsPt1530    = new TH2F("hDeltaPhiVZEROvsPt1530","hDeltaPhiVZEROvsPt1530"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-
-  hCosDeltaPhivsPt3050 = new TH2F("hCosDeltaPhivsPt3050","hCosDeltaPhivsPt3050",200,-1,1,60,0,3.0);
-  hSinDeltaPhivsPt3050 = new TH2F("hSinDeltaPhivsPt3050","hSinDeltaPhivsPt3050",100, 0,1,60,0,3.0);
-  hDeltaPhivsPt3050    = new TH2F("hDeltaPhivsPt3050","hDeltaPhivsPt3050"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-  
-  hCosDeltaPhiVZEROvsPt3050 = new TH2F("hCosDeltaPhiVZEROvsPt3050","hCosDeltaPhiVZEROvsPt3050",200,-1,1,60,0,3.0);           
-  hSinDeltaPhiVZEROvsPt3050 = new TH2F("hSinDeltaPhiVZEROvsPt3050","hSinDeltaPhiVZEROvsPt3050",100, 0,1,60,0,3.0);           
-  hDeltaPhiVZEROvsPt3050    = new TH2F("hDeltaPhiVZEROvsPt3050","hDeltaPhiVZEROvsPt3050"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-
-  hCosDeltaPhivsPt1550 = new TH2F("hCosDeltaPhivsPt1550","hCosDeltaPhivsPt1550",200,-1,1,60,0,3.0);
-  hSinDeltaPhivsPt1550 = new TH2F("hSinDeltaPhivsPt1550","hSinDeltaPhivsPt1550",100, 0,1,60,0,3.0);
-  hDeltaPhivsPt1550    = new TH2F("hDeltaPhivsPt1550","hDeltaPhivsPt1550"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-  
-  hCosDeltaPhiVZEROvsPt1550 = new TH2F("hCosDeltaPhiVZEROvsPt1550","hCosDeltaPhiVZEROvsPt1550",200,-1,1,60,0,3.0);           
-  hSinDeltaPhiVZEROvsPt1550 = new TH2F("hSinDeltaPhiVZEROvsPt1550","hSinDeltaPhiVZEROvsPt1550",100, 0,1,60,0,3.0);           
-  hDeltaPhiVZEROvsPt1550    = new TH2F("hDeltaPhiVZEROvsPt1550","hDeltaPhiVZEROvsPt1550"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-
-  
-  hAntiCosDeltaPhivsPt075 = new TH2F("hAntiCosDeltaPhivsPt075","hAntiCosDeltaPhivsPt075",200,-1,1,60,0,3.0);
-  hAntiSinDeltaPhivsPt075 = new TH2F("hAntiSinDeltaPhivsPt075","hAntiSinDeltaPhivsPt075",100, 0,1,60,0,3.0);
-  hAntiDeltaPhivsPt075    = new TH2F("hAntiDeltaPhivsPt075","hAntiDeltaPhivsPt075"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-  
-  hAntiCosDeltaPhiVZEROvsPt075 = new TH2F("hAntiCosDeltaPhiVZEROvsPt075","hAntiCosDeltaPhiVZEROvsPt075",200,-1,1,60,0,3.0);          
-  hAntiSinDeltaPhiVZEROvsPt075 = new TH2F("hAntiSinDeltaPhiVZEROvsPt075","hAntiSinDeltaPhiVZEROvsPt075",100, 0,1,60,0,3.0);          
-  hAntiDeltaPhiVZEROvsPt075    = new TH2F("hAntiDeltaPhiVZEROvsPt075","hAntiDeltaPhiVZEROvsPt075"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-
-  hAntiCosDeltaPhivsPt1530 = new TH2F("hAntiCosDeltaPhivsPt1530","hAntiCosDeltaPhivsPt1530",200,-1,1,60,0,3.0);
-  hAntiSinDeltaPhivsPt1530 = new TH2F("hAntiSinDeltaPhivsPt1530","hAntiSinDeltaPhivsPt1530",100, 0,1,60,0,3.0);
-  hAntiDeltaPhivsPt1530    = new TH2F("hAntiDeltaPhivsPt1530","hAntiDeltaPhivsPt1530"      ,36, 0,2*TMath::Pi(),60,0,3.0);
+  fSubEventDPhiv205 = new TProfile("fSubEventDPhiv205", "fSubEventDPhiv205", 3, 0, 3);
+  fSubEventDPhiv205->GetXaxis()->SetBinLabel(1, "<cos(2(#Psi_{a} - #Psi_{b}))>");
+  fSubEventDPhiv205->GetXaxis()->SetBinLabel(2, "<cos(2(#Psi_{a} - #Psi_{c}>))");
+  fSubEventDPhiv205->GetXaxis()->SetBinLabel(3, "<cos(2(#Psi_{b} - #Psi_{c}>))");
+  fListHist->Add(fSubEventDPhiv205);
+      
+  fSubEventDPhiv2new05 = new TProfile("fSubEventDPhiv2new05", "fSubEventDPhiv2new05", 3, 0, 3);
+  fSubEventDPhiv2new05->GetXaxis()->SetBinLabel(1, "<cos(2(#Psi_{a} - #Psi_{b}))>");
+  fSubEventDPhiv2new05->GetXaxis()->SetBinLabel(2, "<cos(2(#Psi_{a} - #Psi_{c}>))");
+  fSubEventDPhiv2new05->GetXaxis()->SetBinLabel(3, "<cos(2(#Psi_{b} - #Psi_{c}>))");
+  fListHist->Add(fSubEventDPhiv2new05);
   
-  hAntiCosDeltaPhiVZEROvsPt1530 = new TH2F("hAntiCosDeltaPhiVZEROvsPt1530","hAntiCosDeltaPhiVZEROvsPt1530",200,-1,1,60,0,3.0);       
-  hAntiSinDeltaPhiVZEROvsPt1530 = new TH2F("hAntiSinDeltaPhiVZEROvsPt1530","hAntiSinDeltaPhiVZEROvsPt1530",100, 0,1,60,0,3.0);       
-  hAntiDeltaPhiVZEROvsPt1530    = new TH2F("hAntiDeltaPhiVZEROvsPt1530","hAntiDeltaPhiVZEROvsPt1530"      ,36, 0,2*TMath::Pi(),60,0,3.0);
+  //2
 
-  hAntiCosDeltaPhivsPt3050 = new TH2F("hAntiCosDeltaPhivsPt3050","hAntiCosDeltaPhivsPt3050",200,-1,1,60,0,3.0);
-  hAntiSinDeltaPhivsPt3050 = new TH2F("hAntiSinDeltaPhivsPt3050","hAntiSinDeltaPhivsPt3050",100, 0,1,60,0,3.0);
-  hAntiDeltaPhivsPt3050    = new TH2F("hAntiDeltaPhivsPt3050","hAntiDeltaPhivsPt3050"      ,36, 0,2*TMath::Pi(),60,0,3.0);
-  
-  hAntiCosDeltaPhiVZEROvsPt3050 = new TH2F("hAntiCosDeltaPhiVZEROvsPt3050","hAntiCosDeltaPhiVZEROvsPt3050",200,-1,1,60,0,3.0);       
-  hAntiSinDeltaPhiVZEROvsPt3050 = new TH2F("hAntiSinDeltaPhiVZEROvsPt3050","hAntiSinDeltaPhiVZEROvsPt3050",100, 0,1,60,0,3.0);       
-  hAntiDeltaPhiVZEROvsPt3050    = new TH2F("hAntiDeltaPhiVZEROvsPt3050","hAntiDeltaPhiVZEROvsPt3050"      ,36, 0,2*TMath::Pi(),60,0,3.0);
+  fSubEventDPhiv22040 = new TProfile("fSubEventDPhiv22040", "fSubEventDPhiv22040", 3, 0, 3);
+  fSubEventDPhiv22040->GetXaxis()->SetBinLabel(1, "<cos(2(#Psi_{a} - #Psi_{b}))>");
+  fSubEventDPhiv22040->GetXaxis()->SetBinLabel(2, "<cos(2(#Psi_{a} - #Psi_{c}>))");
+  fSubEventDPhiv22040->GetXaxis()->SetBinLabel(3, "<cos(2(#Psi_{b} - #Psi_{c}>))");
+  fListHist->Add(fSubEventDPhiv22040);
+      
+  fSubEventDPhiv2new2040 = new TProfile("fSubEventDPhiv2new2040", "fSubEventDPhiv2new2040", 3, 0, 3);
+  fSubEventDPhiv2new2040->GetXaxis()->SetBinLabel(1, "<cos(2(#Psi_{a} - #Psi_{b}))>");
+  fSubEventDPhiv2new2040->GetXaxis()->SetBinLabel(2, "<cos(2(#Psi_{a} - #Psi_{c}>))");
+  fSubEventDPhiv2new2040->GetXaxis()->SetBinLabel(3, "<cos(2(#Psi_{b} - #Psi_{c}>))");
+  fListHist->Add(fSubEventDPhiv2new2040);
 
-  hAntiCosDeltaPhivsPt1550 = new TH2F("hAntiCosDeltaPhivsPt1550","hAntiCosDeltaPhivsPt1550",200,-1,1,60,0,3.0);
-  hAntiSinDeltaPhivsPt1550 = new TH2F("hAntiSinDeltaPhivsPt1550","hAntiSinDeltaPhivsPt1550",100, 0,1,60,0,3.0);
-  hAntiDeltaPhivsPt1550    = new TH2F("hAntiDeltaPhivsPt1550","hAntiDeltaPhivsPt1550"      ,36, 0,2*TMath::Pi(),60,0,3.0);
+  //3
+  fSubEventDPhiv24060 = new TProfile("fSubEventDPhiv24060", "fSubEventDPhiv24060", 3, 0, 3);
+  fSubEventDPhiv24060->GetXaxis()->SetBinLabel(1, "<cos(2(#Psi_{a} - #Psi_{b}))>");
+  fSubEventDPhiv24060->GetXaxis()->SetBinLabel(2, "<cos(2(#Psi_{a} - #Psi_{c}>))");
+  fSubEventDPhiv24060->GetXaxis()->SetBinLabel(3, "<cos(2(#Psi_{b} - #Psi_{c}>))");
+  fListHist->Add(fSubEventDPhiv24060);
+      
+  fSubEventDPhiv2new4060 = new TProfile("fSubEventDPhiv2new4060", "fSubEventDPhiv2new4060", 3, 0, 3);
+  fSubEventDPhiv2new4060->GetXaxis()->SetBinLabel(1, "<cos(2(#Psi_{a} - #Psi_{b}))>");
+  fSubEventDPhiv2new4060->GetXaxis()->SetBinLabel(2, "<cos(2(#Psi_{a} - #Psi_{c}>))");
+  fSubEventDPhiv2new4060->GetXaxis()->SetBinLabel(3, "<cos(2(#Psi_{b} - #Psi_{c}>))");
+  fListHist->Add(fSubEventDPhiv2new4060);
   
-  hAntiCosDeltaPhiVZEROvsPt1550 = new TH2F("hAntiCosDeltaPhiVZEROvsPt1550","hAntiCosDeltaPhiVZEROvsPt1550",200,-1,1,60,0,3.0);       
-  hAntiSinDeltaPhiVZEROvsPt1550 = new TH2F("hAntiSinDeltaPhiVZEROvsPt1550","hAntiSinDeltaPhiVZEROvsPt1550",100, 0,1,60,0,3.0);       
-  hAntiDeltaPhiVZEROvsPt1550    = new TH2F("hAntiDeltaPhiVZEROvsPt1550","hAntiDeltaPhiVZEROvsPt1550"      ,36, 0,2*TMath::Pi(),60,0,3.0);
+  //------------------
+
+  hCos2DeltaPhiVzAvsCentrality  = new TH2F("hCos2DeltaPhiVzAvsCentrality" ,"hCos2DeltaPhiVzAvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaPhiVzCvsCentrality  = new TH2F("hCos2DeltaPhiVzCvsCentrality" ,"hCos2DeltaPhiVzCvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaPhiVzMvsCentrality  = new TH2F("hCos2DeltaPhiVzMvsCentrality" ,"hCos2DeltaPhiVzMvsCentrality" ,100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaPhiTPCfvsCentrality = new TH2F("hCos2DeltaPhiTPCfvsCentrality","hCos2DeltaPhiTPCfvsCentrality",100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaPhiTPCpvsCentrality = new TH2F("hCos2DeltaPhiTPCpvsCentrality","hCos2DeltaPhiTPCpvsCentrality",100,-1.1,1.1,105,-0.5,105.5);
+  hCos2DeltaPhiTPCnvsCentrality = new TH2F("hCos2DeltaPhiTPCnvsCentrality","hCos2DeltaPhiTPCnvsCentrality",100,-1.1,1.1,105,-0.5,105.5);
+
+  fListHist->Add(hCos2DeltaPhiVzAvsCentrality);
+  fListHist->Add(hCos2DeltaPhiVzCvsCentrality);
+  fListHist->Add(hCos2DeltaPhiVzMvsCentrality);
+  fListHist->Add(hCos2DeltaPhiTPCfvsCentrality);
+  fListHist->Add(hCos2DeltaPhiTPCpvsCentrality);
+  fListHist->Add(hCos2DeltaPhiTPCnvsCentrality);
+
+  hEvPlaneTPCvsEvPVz05   = new TH2F("hEvPlaneTPCvsEvPVz05"  ,"hEvPlaneTPCvsEvPVz05"  ,100,-2*TMath::Pi(),2*TMath::Pi(),100,-2*TMath::Pi(),2*TMath::Pi());                      
+  hEvPlaneTPCvsEvPVz075  = new TH2F("hEvPlaneTPCvsEvPVz075" ,"hEvPlaneTPCvsEvPVz075" ,100,-2*TMath::Pi(),2*TMath::Pi(),100,-2*TMath::Pi(),2*TMath::Pi()); 
+  hEvPlaneTPCvsEvPVz1530 = new TH2F("hEvPlaneTPCvsEvPVz1530","hEvPlaneTPCvsEvPVz1530",100,-2*TMath::Pi(),2*TMath::Pi(),100,-2*TMath::Pi(),2*TMath::Pi());
+  hEvPlaneTPCvsEvPVz3050 = new TH2F("hEvPlaneTPCvsEvPVz3050","hEvPlaneTPCvsEvPVz3050",100,-2*TMath::Pi(),2*TMath::Pi(),100,-2*TMath::Pi(),2*TMath::Pi());                      
+  hEvPlaneTPCvsEvPVz2040 = new TH2F("hEvPlaneTPCvsEvPVz2040","hEvPlaneTPCvsEvPVz2040",100,-2*TMath::Pi(),2*TMath::Pi(),100,-2*TMath::Pi(),2*TMath::Pi());                      
+  hEvPlaneTPCvsEvPVz4060 = new TH2F("hEvPlaneTPCvsEvPVz4060","hEvPlaneTPCvsEvPVz4060",100,-2*TMath::Pi(),2*TMath::Pi(),100,-2*TMath::Pi(),2*TMath::Pi());   
+  fListHist->Add(hEvPlaneTPCvsEvPVz05);                      
+  fListHist->Add(hEvPlaneTPCvsEvPVz075); 
+  fListHist->Add(hEvPlaneTPCvsEvPVz1530);
+  fListHist->Add(hEvPlaneTPCvsEvPVz3050);                      
+  fListHist->Add(hEvPlaneTPCvsEvPVz2040);                      
+  fListHist->Add(hEvPlaneTPCvsEvPVz4060);   
+
+  hCos2DeltaPhivsPt075          = new TH2F("hCos2DeltaPhivsPt075",      "hCos2DeltaPhivsPt075"       ,75, -1.1,1.1,210,-5.5,5.5);
+  hCos2DeltaPhiVZEROvsPt075     = new TH2F("hCos2DeltaPhiVZEROvsPt075", "hCos2DeltaPhiVZEROvsPt075"  ,75, -1.1,1.1,210,-5.5,5.5);
+  hCos2DeltaPhivsPt1530         = new TH2F("hCos2DeltaPhivsPt1530",     "hCos2DeltaPhivsPt1530"      ,75, -1.1,1.1,210,-5.5,5.5);
+  hCos2DeltaPhiVZEROvsPt1530    = new TH2F("hCos2DeltaPhiVZEROvsPt1530","hCos2DeltaPhiVZEROvsPt1530" ,75, -1.1,1.1,210,-5.5,5.5);
+  hCos2DeltaPhivsPt3050         = new TH2F("hCos2DeltaPhivsPt3050",     "hCos2DeltaPhivsPt3050"      ,75, -1.1,1.1,210,-5.5,5.5);
+  hCos2DeltaPhiVZEROvsPt3050    = new TH2F("hCos2DeltaPhiVZEROvsPt3050","hCos2DeltaPhiVZEROvsPt3050" ,75, -1.1,1.1,210,-5.5,5.5);
+  hCos2DeltaPhivsPt05           = new TH2F("hCos2DeltaPhivsPt05",       "hCos2DeltaPhivsPt05"        ,75, -1.1,1.1,210,-5.5,5.5);
+  hCos2DeltaPhiVZEROvsPt05      = new TH2F("hCos2DeltaPhiVZEROvsPt05",  "hCos2DeltaPhiVZEROvsPt05"   ,75, -1.1,1.1,210,-5.5,5.5);
+  hCos2DeltaPhivsPt2040         = new TH2F("hCos2DeltaPhivsPt2040",     "hCos2DeltaPhivsPt2040"      ,75, -1.1,1.1,210,-5.5,5.5);
+  hCos2DeltaPhiVZEROvsPt2040    = new TH2F("hCos2DeltaPhiVZEROvsPt2040","hCos2DeltaPhiVZEROvsPt2040" ,75, -1.1,1.1,210,-5.5,5.5);
+  hCos2DeltaPhivsPt4060         = new TH2F("hCos2DeltaPhivsPt4060",     "hCos2DeltaPhivsPt4060"      ,75, -1.1,1.1,210,-5.5,5.5);
+  hCos2DeltaPhiVZEROvsPt4060    = new TH2F("hCos2DeltaPhiVZEROvsPt4060","hCos2DeltaPhiVZEROvsPt4060" ,75, -1.1,1.1,210,-5.5,5.5);
 
   //--------------
-  fListHistCascade->Add(hCosPhivsPt);                         
-  fListHistCascade->Add(hSinPhivsPt);                         
-  fListHistCascade->Add(hPhivsPt);                         
-  fListHistCascade->Add(hAntiCosPhivsPt);                     
-  fListHistCascade->Add(hAntiSinPhivsPt);                     
-  fListHistCascade->Add(hAntiPhivsPt);                     
-  fListHistCascade->Add(hCosDeltaPhivsPt075);                      
-  fListHistCascade->Add(hSinDeltaPhivsPt075);                      
-  fListHistCascade->Add(hDeltaPhivsPt075);                      
-  fListHistCascade->Add(hCosDeltaPhiVZEROvsPt075);                           
-  fListHistCascade->Add(hSinDeltaPhiVZEROvsPt075);                           
-  fListHistCascade->Add(hDeltaPhiVZEROvsPt075);                 
-  fListHistCascade->Add(hCosDeltaPhivsPt1530);                     
-  fListHistCascade->Add(hSinDeltaPhivsPt1530);                     
-  fListHistCascade->Add(hDeltaPhivsPt1530);                     
-  fListHistCascade->Add(hCosDeltaPhiVZEROvsPt1530);                
-  fListHistCascade->Add(hSinDeltaPhiVZEROvsPt1530);                
-  fListHistCascade->Add(hDeltaPhiVZEROvsPt1530);                
-  fListHistCascade->Add(hCosDeltaPhivsPt3050);                     
-  fListHistCascade->Add(hSinDeltaPhivsPt3050);                     
-  fListHistCascade->Add(hDeltaPhivsPt3050);                     
-  fListHistCascade->Add(hCosDeltaPhiVZEROvsPt3050);                
-  fListHistCascade->Add(hSinDeltaPhiVZEROvsPt3050);                
-  fListHistCascade->Add(hDeltaPhiVZEROvsPt3050);                
-  fListHistCascade->Add(hCosDeltaPhivsPt1550);                     
-  fListHistCascade->Add(hSinDeltaPhivsPt1550);                     
-  fListHistCascade->Add(hDeltaPhivsPt1550);                     
-  fListHistCascade->Add(hCosDeltaPhiVZEROvsPt1550);                
-  fListHistCascade->Add(hSinDeltaPhiVZEROvsPt1550);                
-  fListHistCascade->Add(hDeltaPhiVZEROvsPt1550);                
-  fListHistCascade->Add(hAntiCosDeltaPhivsPt075);                  
-  fListHistCascade->Add(hAntiSinDeltaPhivsPt075);                  
-  fListHistCascade->Add(hAntiDeltaPhivsPt075);                  
-  fListHistCascade->Add(hAntiCosDeltaPhiVZEROvsPt075);             
-  fListHistCascade->Add(hAntiSinDeltaPhiVZEROvsPt075);             
-  fListHistCascade->Add(hAntiDeltaPhiVZEROvsPt075);             
-  fListHistCascade->Add(hAntiCosDeltaPhivsPt1530);                 
-  fListHistCascade->Add(hAntiSinDeltaPhivsPt1530);                 
-  fListHistCascade->Add(hAntiDeltaPhivsPt1530);                 
-  fListHistCascade->Add(hAntiCosDeltaPhiVZEROvsPt1530);            
-  fListHistCascade->Add(hAntiSinDeltaPhiVZEROvsPt1530);            
-  fListHistCascade->Add(hAntiDeltaPhiVZEROvsPt1530);            
-  fListHistCascade->Add(hAntiCosDeltaPhivsPt3050);                 
-  fListHistCascade->Add(hAntiSinDeltaPhivsPt3050);                 
-  fListHistCascade->Add(hAntiDeltaPhivsPt3050);                 
-  fListHistCascade->Add(hAntiCosDeltaPhiVZEROvsPt3050);            
-  fListHistCascade->Add(hAntiSinDeltaPhiVZEROvsPt3050);            
-  fListHistCascade->Add(hAntiDeltaPhiVZEROvsPt3050);            
-  fListHistCascade->Add(hAntiCosDeltaPhivsPt1550);                 
-  fListHistCascade->Add(hAntiSinDeltaPhivsPt1550);                 
-  fListHistCascade->Add(hAntiDeltaPhivsPt1550);                 
-  fListHistCascade->Add(hAntiCosDeltaPhiVZEROvsPt1550);            
-  fListHistCascade->Add(hAntiSinDeltaPhiVZEROvsPt1550);            
-  fListHistCascade->Add(hAntiDeltaPhiVZEROvsPt1550);            
+  fListHist->Add(hCos2DeltaPhivsPt075);
+  fListHist->Add(hCos2DeltaPhiVZEROvsPt075);
+  fListHist->Add(hCos2DeltaPhivsPt1530);
+  fListHist->Add(hCos2DeltaPhiVZEROvsPt1530);
+  fListHist->Add(hCos2DeltaPhivsPt3050);
+  fListHist->Add(hCos2DeltaPhiVZEROvsPt3050);
+  fListHist->Add(hCos2DeltaPhivsPt05);    
+  fListHist->Add(hCos2DeltaPhiVZEROvsPt05);    
+  fListHist->Add(hCos2DeltaPhivsPt2040); 
+  fListHist->Add(hCos2DeltaPhiVZEROvsPt2040);                
+  fListHist->Add(hCos2DeltaPhivsPt4060);             
+  fListHist->Add(hCos2DeltaPhiVZEROvsPt4060); 
+
 
   if(! fNtuple1 ) {
 
     fNtuple1 = new TTree("fNtuple1","fNtuple1");
  
-    fNtuple1->Branch("tEventNumber"  ,&tEventNumber  ,"tEventNumber[7]/D");
-    fNtuple1->Branch("tCentrality"   ,&tCentrality   ,"tCentrality/D"    );
-    fNtuple1->Branch("tVertexCoord"  ,&tVertexCoord  ,"tVertexCoord[3]/D");
-    fNtuple1->Branch("tPIDITS"       ,&tPIDITS       ,"tPIDITS[9]/D"     );
-    fNtuple1->Branch("tPIDTPC"       ,&tPIDTPC       ,"tPIDTPC[9]/D"     );
-    fNtuple1->Branch("tPIDTOF"       ,&tPIDTOF       ,"tPIDTOF[9]/D"     );
-    fNtuple1->Branch("tPulls"        ,&tPulls        ,"tPulls[2]/D"   );
-    fNtuple1->Branch("tMomentum"     ,&tMomentum     ,"tMomentum[3]/D"   );
-    fNtuple1->Branch("tTPCMomentum"  ,&tTPCMomentum  ,"tTPCMomentum/D"   );
-    fNtuple1->Branch("tdEdx"        ,&tdEdx         ,"tdEdx/D"          );
-    fNtuple1->Branch("tEta"         ,&tEta          ,"tEta/D"           );
+    fNtuple1->Branch("tCentrality"   ,&tCentrality   ,"tCentrality[2]/D"    );
+    fNtuple1->Branch("tPulls"        ,&tPulls        ,"tPulls[3]/D"   );
+    fNtuple1->Branch("tMomentum"     ,&tMomentum     ,"tMomentum[4]/D"   );
     fNtuple1->Branch("tDCA"         ,&tDCA          ,"tDCA[2]/D"        );
-    fNtuple1->Branch("tTracksTPC"    ,&tTracksTPC    ,"tTracksTPC[2]/D"  );
-    fNtuple1->Branch("tITSclustermap",&tITSclustermap,"tITSclustermap"   );
-    fNtuple1->Branch("tITSsample"    ,&tITSsample    ,"tITSsample[4]/D"  );
-    fNtuple1->Branch("tisTOF[2]"     ,&tisTOF       ,"tisTOF[2]/I"      );
+    fNtuple1->Branch("tisTOF"        ,&tisTOF       ,"tisTOF[2]/I"      );
     fNtuple1->Branch("tTOFtrack"     ,&tTOFtrack     ,"tTOFtrack[3]/D"   );
     fNtuple1->Branch("tCharge"       ,&tCharge       ,"tCharge/I"        );
-    fNtuple1->Branch("tPtCorr"       ,&tPtCorr       ,"tPtCorr/D"        );
     fNtuple1->Branch("tPhi"          ,&tPhi          ,"tPhi/D"           );
     fNtuple1->Branch("trpangleTPC"   ,&trpangleTPC   ,"trpangleTPC/D"    );
     fNtuple1->Branch("trpangleVZERO" ,&trpangleVZERO ,"trpangleVZERO[3]/D"  );
@@ -606,8 +586,6 @@ void AliAnalysisTaskNucleiv2::UserCreateOutputObjects()
     }
      
   }
-
-
   
   
   if(fDataType == "SIM"){
@@ -616,7 +594,6 @@ void AliAnalysisTaskNucleiv2::UserCreateOutputObjects()
       
       fNtuple2 = new TTree("fNtuple2","fNtuple2");
       
-      fNtuple2->Branch("tEventNumberMC"  ,&tEventNumberMC  ,"tEventNumberMC[6]/D");
       fNtuple2->Branch("tCentralityMC"   ,&tCentralityMC   ,"tCentralityMC/D"    );
       fNtuple2->Branch("tVertexCoordMC"  ,&tVertexCoordMC  ,"tVertexCoordMC[3]/D");
       fNtuple2->Branch("tMomentumMC"     ,&tMomentumMC     ,"tMomentumMC[3]/D"   );
@@ -631,10 +608,14 @@ void AliAnalysisTaskNucleiv2::UserCreateOutputObjects()
     } 
     
   }
-
-  PostData(1,  fListHistCascade);
+  PostData(1,  fListHist);
   PostData(2,  fNtuple1);
   PostData(3,  fNtuple2);
+
+  fFlowEvent = new AliFlowEvent(10000);
+  PostData(4, fFlowEvent);
+
 }// end UserCreateOutputObjects
 
 
@@ -652,8 +633,8 @@ void AliAnalysisTaskNucleiv2::UserExec(Option_t *)
   if (!event) { Printf("ERROR: Could not retrieve event"); return; }
   
   AliStack *stack = 0;
+  
   if(fDataType == "SIM"){
-    
     AliMCEvent *mcEvent = MCEvent();
     if (!mcEvent) { 
       Printf("ERROR: Could not retrieve MC event"); 
@@ -668,746 +649,610 @@ void AliAnalysisTaskNucleiv2::UserExec(Option_t *)
   }
   
   // create pointer to event
-  
-  AliESDEvent* lESDevent = dynamic_cast<AliESDEvent*>(event);
-  if (!lESDevent) {
-    AliError("Cannot get the ESD event");
-    return;
-  }  
-
-  fHistEventMultiplicity->Fill(1);
-  fHistEventMultiplicity->Fill(7);
-  
-  //_____________________________________________________
-  //   Centrality  
-  
-  AliCentrality *centrality = lESDevent->GetCentrality();
-  Float_t percentile=centrality->GetCentralityPercentile("V0M");
-
-  Int_t TrackNumber = lESDevent->GetNumberOfTracks();
-  fHistTrackMultiplicity->Fill(TrackNumber,percentile); //tracce per evento
-  
-  //______________________________________________________
-  // PID
-  
-  AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
-  AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
-  fPIDResponse=inputHandler->GetPIDResponse(); 
-  
-  //=================================================================
-  
-  //!*********************!//
-  //!  Define variables   !//
-  //!*********************!//
-  
-  Double_t evNumber     = 0.;
-  Double_t runNumber    = 0.;
-  Double_t BCNumber     = 0.;
-  Double_t OrbitNumber  = 0.;
-  Double_t PeriodNumber = 0.;
-
-  
-  Double_t ITSsample[4];
-  for(Int_t i=0;i<4;i++)ITSsample[i]=0;
-  
-  Double_t xPrimaryVertex=0.,yPrimaryVertex=0.,zPrimaryVertex=0.;
-  Float_t impactXY=-999., impactZ=-999.;
-  Double_t pinTPC=0.,poutTPC=0.,TPCSignal=0.;
-  
-  ULong_t  status=0;
-  Bool_t   isTPC=kFALSE;
-
+  if(fAnalysisType == "ESD"){
     
-  // Primary vertex cut
-  
-  const AliESDVertex *vtx = lESDevent->GetPrimaryVertexTracks();
+    AliESDEvent* lESDevent = dynamic_cast<AliESDEvent*>(event);
+    if (!lESDevent) {
+      AliError("Cannot get the ESD event");
+      return;
+    }  
+    
+    fHistEventMultiplicity->Fill(1);
+    fHistEventMultiplicity->Fill(7);
   
-  if(vtx->GetNContributors()<1) {
+    //_____________________________________________________
+    //   Centrality  
+    
+    AliCentrality *centrality = lESDevent->GetCentrality();
+    Float_t percentile=centrality->GetCentralityPercentile("V0M");
+    
+    Int_t TrackNumber = lESDevent->GetNumberOfTracks();
+    fHistTrackMultiplicity->Fill(TrackNumber,percentile); //tracce per evento
     
-    // SPD vertex cut
-    vtx = lESDevent->GetPrimaryVertexSPD();
+    //______________________________________________________
+    // PID
+    
+    AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
+    AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
+    fPIDResponse=inputHandler->GetPIDResponse(); 
+    
+    //=================================================================
+        
+    Float_t impactXY=-999., impactZ=-999.;
+    Double_t pinTPC=0.,poutTPC=0.,TPCSignal=0.;
+    
+    ULong_t  status=0;
+    Bool_t   isTPC=kFALSE;
+    
+    
+    // Primary vertex cut
+  
+    const AliESDVertex *vtx = lESDevent->GetPrimaryVertexTracks();
     
     if(vtx->GetNContributors()<1) {
-      Info("AliAnalysisTaskHelium3Pi","No good vertex, skip event");
-      return; // NO GOOD VERTEX, SKIP EVENT 
+      
+      // SPD vertex cut
+      vtx = lESDevent->GetPrimaryVertexSPD();
+      
+      if(vtx->GetNContributors()<1) {
+       Info("AliAnalysisTaskHelium3Pi","No good vertex, skip event");
+       return; // NO GOOD VERTEX, SKIP EVENT 
+      }
     }
-  }
-  
-  fHistEventMultiplicity->Fill(2); // analyzed events with PV
-  
-  xPrimaryVertex=vtx->GetXv();
-  yPrimaryVertex=vtx->GetYv();
-  zPrimaryVertex=vtx->GetZv();  
-
-  if(TMath::Abs(zPrimaryVertex)>10) return;
-  fHistEventMultiplicity->Fill(3);
-
-  Bool_t isSelectedCentral     = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kCentral);
-  Bool_t isSelectedSemiCentral = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kSemiCentral);
-  Bool_t isSelectedMB          = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
-  
-  fHistTrackMultiplicity->Fill(TrackNumber,percentile); 
-  
-  Int_t eventtype = -999;
-  
-  //  cout<<"ET 1: "<<eventtype<<endl;
+    
+    fHistEventMultiplicity->Fill(2); // analyzed events with PV
+    
+    if(TMath::Abs(vtx->GetZv())>10) return;
+    fHistEventMultiplicity->Fill(3);
 
-  if(fDataType == "REAL"){
-   
-    if(isSelectedCentral){
-      if(percentile<0)return;
-      if(percentile>=7.5)return;
-      fHistEventMultiplicity->Fill(4);
-      fHistTrackMultiplicityCentral->Fill(TrackNumber,percentile); 
-      eventtype =1;
-    }
+    Bool_t isSelectedCentral     = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kCentral);
+    Bool_t isSelectedSemiCentral = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kSemiCentral);
+    Bool_t isSelectedMB          = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & AliVEvent::kMB);
     
-    if(isSelectedSemiCentral){
-      if(percentile<15)return;
-      if(percentile>=50)return;
-      fHistEventMultiplicity->Fill(5);
-      fHistTrackMultiplicitySemiCentral->Fill(TrackNumber,percentile); 
-      eventtype =2;
-    }
+    fHistTrackMultiplicity->Fill(TrackNumber,percentile); 
     
-    if(isSelectedMB){
-      if(percentile<0)return;
-      if(percentile>=80)return;
-      fHistEventMultiplicity->Fill(6);
-      fHistTrackMultiplicityMB->Fill(TrackNumber,percentile); 
-      eventtype =3;
-    }
+    Int_t eventtype = -999;
     
-    //    cout<<"ET 2: "<<eventtype<<endl;
+    //  cout<<"ET 1: "<<eventtype<<endl;
     
-    if(eventtype!=1 && eventtype!=2 && eventtype!=3 )return;
-  }
-  
-  if(fDataType == "SIM"){
-    cout<<"Take SIM event"<<endl;
-    eventtype = -999;
-    //cout<<"ET MC: "<<eventtype<<endl;
-    if(eventtype!=-999)return;
+    if(fDataType == "REAL"){
+   
+      if(isSelectedCentral){
+       // if(percentile<0)return;
+       // if(percentile>=7.5)return;
+       fHistEventMultiplicity->Fill(4);
+       fHistTrackMultiplicityCentral->Fill(TrackNumber,percentile); 
+       eventtype =1;
+      }
       
-  }
-  
-  evNumber    = lESDevent->GetEventNumberInFile();
-  runNumber   = lESDevent->GetRunNumber(); 
-  BCNumber    = lESDevent->GetBunchCrossNumber();
-  OrbitNumber = lESDevent->GetOrbitNumber();
-  PeriodNumber= lESDevent->GetPeriodNumber();
-  
-  AliEventplane *pl=lESDevent->GetEventplane();
-  
-  if(fDataType == "REAL"){
+      if(isSelectedSemiCentral){
+       // if(percentile<15)return;
+       // if(percentile>=50)return;
+       fHistEventMultiplicity->Fill(5);
+       fHistTrackMultiplicitySemiCentral->Fill(TrackNumber,percentile); 
+       eventtype =2;
+      }
+      
+      if(isSelectedMB){
+       if(percentile<0)return;
+       if(percentile>=80)return;
+       fHistEventMultiplicity->Fill(6);
+       fHistTrackMultiplicityMB->Fill(TrackNumber,percentile); 
+       eventtype =3;
+      }
     
-    if(!pl ){
-      AliError("AliAnalysisTaskSENucleiv2::UserExec:no eventplane! v2 analysis without eventplane not possible!\n");
-      fHistEventMultiplicity->Fill(12);
+      //    cout<<"ET 2: "<<eventtype<<endl;
+      
+      if(eventtype!=1 && eventtype!=2 && eventtype!=3 )return;
     }
-  }
-  
-  //Event plane
-  
-  Double_t rpangleTPC    =0;
-  Double_t rpangleVZERO  =0;
-
-  Double_t rpangleeventATPC =0;
-  Double_t rpangleeventBTPC =0;
-  Double_t deltaPsiTPC      =0;
-  Double_t planeresoTPC     =0;
-
-  Double_t rpangleeventAVZERO =0;
-  Double_t rpangleeventBVZERO =0;
-  Double_t rpangleeventCVZERO =0;
-  Double_t deltaPsiVZERO      =0;
-  Double_t planeresoVZERO     =0;
-
-  //For candidate removal from TPC EP
-
-  TVector2 *qsub1=0x0;
-  TVector2 *qsub2=0x0;
-
-  rpangleTPC   = pl->GetEventplane("Q");
-  
-  if(fDataType == "REAL"){
-    if(rpangleTPC<0){
-      fHistEventMultiplicity->Fill(11);
-      return;
+    
+    if(fDataType == "SIM"){
+      cout<<"Take SIM event"<<endl;
+      eventtype = -999;
+      if(eventtype!=-999)return;
     }
-  }
+    //----------------
+    SetNullCuts(lESDevent);
+    PrepareFlowEvent(TrackNumber,fFlowEvent);    //Calculate event plane Qvector and EP resolution for inclusive
   
-  //TPC resolution 
+    AliEventplane *pl=lESDevent->GetEventplane();
+    
+    if(fDataType == "REAL"){
+      
+      if(!pl ){
+       AliError("AliAnalysisTaskSENucleiv2::UserExec:no eventplane! v2 analysis without eventplane not possible!\n");
+       fHistEventMultiplicity->Fill(12);
+      }
+    }
+     
    
-  hRPangleTPCvsCentrality->Fill(rpangleTPC,percentile);
-
-  qsub1 = pl->GetQsub1();
-  qsub2 = pl->GetQsub2();
-
-  if(fDataType == "REAL"){  
-    if(!qsub1 || !qsub2){
-      AliError("AliAnalysisTaskSENucleiv2::UserExec:no qsub1 or qsub2!\n");
-      return;
+    //Event plane from FLOW
+    //=============================================V0EP from Alex======================================================================
+    
+    Double_t qxEPa = 0, qyEPa = 0;
+    Double_t qxEPc = 0, qyEPc = 0;
+    Double_t qxEP = 0, qyEP = 0;
+    
+    Double_t evPlAngV0A = pl->CalculateVZEROEventPlane(lESDevent, 8, 2, qxEPa, qyEPa);
+    Double_t evPlAngV0C = pl->CalculateVZEROEventPlane(lESDevent, 9, 2, qxEPc, qyEPc);
+    Double_t evPlAngV0  = pl->CalculateVZEROEventPlane(lESDevent,10, 2, qxEP,  qyEP);
+    
+    Double_t Qx2  = 0, Qy2  = 0;
+    Double_t Qx2p = 0, Qy2p = 0;
+    Double_t Qx2n = 0, Qy2n = 0;
+    
+    for (Int_t iT = 0; iT < TrackNumber; iT++){
+      AliESDtrack* track = lESDevent->GetTrack(iT);
+    
+      if (!track)
+       continue;
+      
+      if ((TMath::Abs(track->Eta()) > 0.8) || (track->Pt() < 0.2) || (track->GetTPCNcls() < 70) || (track->Pt() >= 20.0))
+       continue;
+      
+      if(!fESDtrackCutsEP->AcceptTrack(track))
+       continue;
+      
+      if(track->Eta()>0 && track->Eta()<0.8){
+        
+       Qx2p += TMath::Cos(2*track->Phi());
+       Qy2p += TMath::Sin(2*track->Phi());
+      }
+      if(track->Eta()<0 && track->Eta()> -0.8){
+       
+       Qx2n += TMath::Cos(2*track->Phi());
+       Qy2n += TMath::Sin(2*track->Phi());
+      }
+         
+      Qx2 += TMath::Cos(2*track->Phi());
+      Qy2 += TMath::Sin(2*track->Phi());
+      
     }
-    //TPC event Plane
     
-    rpangleeventATPC = qsub1->Phi()/2.;
-    rpangleeventBTPC = qsub2->Phi()/2.;
+    Double_t evPlAngTPC  = TMath::ATan2(Qy2, Qx2)/2.;
+    Double_t evPlAngTPCn = TMath::ATan2(Qy2n, Qx2n)/2.;
+    Double_t evPlAngTPCp = TMath::ATan2(Qy2p, Qx2p)/2.;
     
-    deltaPsiTPC =rpangleeventATPC-rpangleeventBTPC;
+    EPVzAvsCentrality->Fill(evPlAngV0A,percentile);
+    EPVzCvsCentrality->Fill(evPlAngV0C,percentile);
+    EPTPCvsCentrality->Fill(evPlAngTPC,percentile);
     
-    if(TMath::Abs(deltaPsiTPC)>TMath::Pi()/2.){
-      if(deltaPsiTPC>0.) deltaPsiTPC-=TMath::Pi();
-      else deltaPsiTPC +=TMath::Pi();
-    } // difference of subevents reaction plane angle cannot be bigger than phi/2
+    EPTPCnvsCentrality->Fill(evPlAngTPCn,percentile);
+    EPTPCpvsCentrality->Fill(evPlAngTPCp,percentile);
+    EPVzvsCentrality->Fill(evPlAngV0,percentile);
     
-    planeresoTPC = TMath::Cos(2.*deltaPsiTPC); // reaction plane resolution
+    // For TPC resolution
+    // Cos(2*(tpc-v0A)) vs Centrality
+    // Cos(2*(tpc-v0C)) vs Centrality
+    // Cos(2*(v0A-v0C)) vs Centrality
+    // For VZEROM resolution :
+    // Cos(2*(V0-TPCp)) vs Centrality
+    // Cos(2*(V0-TPCn)) vs Centrality
+    // Cos(2*(TPCp-TPCn)) vs Centrality
+
+    hCos2DeltaPhiVzAvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0-evPlAngTPCp))  ,percentile);
+    hCos2DeltaPhiVzCvsCentrality ->Fill(TMath::Cos(2.*(evPlAngV0-evPlAngTPCn))  ,percentile);
+    hCos2DeltaPhiVzMvsCentrality ->Fill(TMath::Cos(2.*(evPlAngTPCp-evPlAngTPCn)),percentile);
+    hCos2DeltaPhiTPCfvsCentrality->Fill(TMath::Cos(2.*(evPlAngTPC-evPlAngV0A))  ,percentile);
+    hCos2DeltaPhiTPCpvsCentrality->Fill(TMath::Cos(2.*(evPlAngTPC-evPlAngV0C))  ,percentile);
+    hCos2DeltaPhiTPCnvsCentrality->Fill(TMath::Cos(2.*(evPlAngV0C-evPlAngV0A))  ,percentile);
     
-    hPlaneResoTPCvsCentrality->Fill(planeresoTPC,percentile);
-  
-    //VZERO event plane
-  
-    rpangleVZERO = GetPhi0Pi(pl->GetEventplane("V0",lESDevent,2));
-    rpangleeventBVZERO=GetPhi0Pi(pl->GetEventplane("V0A",lESDevent,2));
-    rpangleeventCVZERO=GetPhi0Pi(pl->GetEventplane("V0C",lESDevent,2));
-
-    hRPangleVZEROvsCentrality->Fill(rpangleVZERO,percentile);
-    hRPangleVZEROAvsCentrality->Fill(rpangleeventBVZERO,percentile);
-    hRPangleVZEROCvsCentrality->Fill(rpangleeventCVZERO,percentile);
-
-    //Resolution V0 : V0M - V0A
-    rpangleeventAVZERO = rpangleVZERO;
-    deltaPsiVZERO =rpangleeventAVZERO-rpangleeventBVZERO;
-
-    if(TMath::Abs(deltaPsiVZERO)>TMath::Pi()/2.){
-      if(deltaPsiVZERO>0.) deltaPsiVZERO-=TMath::Pi();
-      else deltaPsiVZERO +=TMath::Pi();
-    } // difference of subevents reaction plane angle cannot be bigger than phi/2
-  
-    planeresoVZERO = TMath::Cos(2.*deltaPsiVZERO);
-
-    hPlaneResoVZEROvsCentrality->Fill(planeresoVZERO,percentile);
-
-    //Resolution V0 : V0M - V0C
 
-    deltaPsiVZERO =rpangleeventAVZERO-rpangleeventCVZERO;
-
-    if(TMath::Abs(deltaPsiVZERO)>TMath::Pi()/2.){
-      if(deltaPsiVZERO>0.) deltaPsiVZERO-=TMath::Pi();
-      else deltaPsiVZERO +=TMath::Pi();
-    } // difference of subevents reaction plane angle cannot be bigger than phi/2
-  
-    planeresoVZERO = TMath::Cos(2.*deltaPsiVZERO);
+    // e volendo 3 per il vzero come sotto
 
-    hPlaneResoVZEROAvsCentrality->Fill(planeresoVZERO,percentile);
+    if(percentile>=0 || percentile<=5){
+      //This is v0 resolution 
+      fSubEventDPhiv205->Fill(0.5, TMath::Cos(2.*(evPlAngV0A-evPlAngTPC))); // vzeroa - tpc
+      fSubEventDPhiv205->Fill(1.5, TMath::Cos(2.*(evPlAngV0A-evPlAngV0C))); // vzeroa - vzeroc
+      fSubEventDPhiv205->Fill(2.5, TMath::Cos(2.*(evPlAngV0C-evPlAngTPC))); // tpc - vzeroc
+      
+      
+      fSubEventDPhiv2new05->Fill(0.5, TMath::Cos(2.*(evPlAngV0-evPlAngTPCp))  ); // vzero - tpcp
+      fSubEventDPhiv2new05->Fill(1.5, TMath::Cos(2.*(evPlAngV0-evPlAngTPCn))  ); // vzero - tpcn
+      fSubEventDPhiv2new05->Fill(2.5, TMath::Cos(2.*(evPlAngTPCp-evPlAngTPCn))); // tpcp - tpcn
+      
+      hEvPlaneTPCvsEvPVz05  ->Fill(  evPlAngTPC,evPlAngV0);    
+    }
     
-    //Resolution V0 : V0A - V0C
-
-    deltaPsiVZERO =rpangleeventBVZERO-rpangleeventCVZERO;
-
-    if(TMath::Abs(deltaPsiVZERO)>TMath::Pi()/2.){
-      if(deltaPsiVZERO>0.) deltaPsiVZERO-=TMath::Pi();
-      else deltaPsiVZERO +=TMath::Pi();
-    } // difference of subevents reaction plane angle cannot be bigger than phi/2
-  
-    planeresoVZERO = TMath::Cos(2.*deltaPsiVZERO);
-
-    hPlaneResoVZEROCvsCentrality->Fill(planeresoVZERO,percentile);
-  
-    //rpangleeventBVZERO
+    if(percentile>=20 || percentile<=40){
+      fSubEventDPhiv22040->Fill(0.5, TMath::Cos(2.*(evPlAngV0A-evPlAngTPC))); // vzeroa - tpc
+      fSubEventDPhiv22040->Fill(1.5, TMath::Cos(2.*(evPlAngV0A-evPlAngV0C))); // vzeroa - vzeroc
+      fSubEventDPhiv22040->Fill(2.5, TMath::Cos(2.*(evPlAngV0C-evPlAngTPC))); // tpc - vzeroc
+      
+      
+      fSubEventDPhiv2new2040->Fill(0.5, TMath::Cos(2.*(evPlAngV0-evPlAngTPCp))); // vzero - tpcp
+      fSubEventDPhiv2new2040->Fill(1.5, TMath::Cos(2.*(evPlAngV0-evPlAngTPCn))); // vzero - tpcn
+      fSubEventDPhiv2new2040->Fill(2.5, TMath::Cos(2.*(evPlAngTPCp-evPlAngTPCn))); // tpcp - tpcn
+      
+      hEvPlaneTPCvsEvPVz2040   ->Fill(  evPlAngTPC,evPlAngV0); 
+      
+    }
+    
+    if(percentile>=40 || percentile<=60){
+      fSubEventDPhiv24060->Fill(0.5, TMath::Cos(2.*(evPlAngV0A-evPlAngTPC))); // vzeroa - tpc
+      fSubEventDPhiv24060->Fill(1.5, TMath::Cos(2.*(evPlAngV0A-evPlAngV0C))); // vzeroa - vzeroc
+      fSubEventDPhiv24060->Fill(2.5, TMath::Cos(2.*(evPlAngV0C-evPlAngTPC))); // tpc - vzeroc
+            
+      fSubEventDPhiv2new4060->Fill(0.5, TMath::Cos(2.*(evPlAngV0-evPlAngTPCp))); // vzero - tpcp
+      fSubEventDPhiv2new4060->Fill(1.5, TMath::Cos(2.*(evPlAngV0-evPlAngTPCn))); // vzero - tpcn
+      fSubEventDPhiv2new4060->Fill(2.5, TMath::Cos(2.*(evPlAngTPCp-evPlAngTPCn))); // tpcp - tpcn
 
-    if(TMath::Abs(rpangleTPC-rpangleVZERO)>10)return;
-  
-    trpangleTPC      = rpangleTPC;
-    trpangleVZERO[0] = rpangleVZERO;
-    trpangleVZERO[1] = rpangleeventBVZERO;
-    trpangleVZERO[2] = rpangleeventCVZERO;
-  }
-  // cout<<"rpangle TPC: "<<rpangleTPC<<endl;
+      hEvPlaneTPCvsEvPVz4060 ->Fill(  evPlAngTPC,evPlAngV0);
+    }
   
-  Int_t isTOF=0;
-  Int_t isoutTPC=0;
-  //  cout<<"TRack number MC "<<TrackNumber<<endl;
+    if(percentile>=0 || percentile<=7.5)               
+      hEvPlaneTPCvsEvPVz075->Fill(  evPlAngTPC,evPlAngV0);
+    if(percentile>=15 || percentile<=30)
+      hEvPlaneTPCvsEvPVz1530->Fill(  evPlAngTPC,evPlAngV0);
+    if(percentile>=30 || percentile<=50)
+      hEvPlaneTPCvsEvPVz3050->Fill(  evPlAngTPC,evPlAngV0);
+    
+    //====================================================================================================================
+    
+    // To remove auto-correlation
+    TVector2 *q = 0x0;
+    TVector2 *qsub1=0x0;
+    TVector2 *qsub2=0x0;
+    qsub1 = pl->GetQsub1();
+    qsub2 = pl->GetQsub2();
+            
+    q = pl->GetQVector();
 
-  for (Int_t j=0; j<TrackNumber; j++) { //loop on tracks
+    trpangleTPC      = evPlAngTPC;
+    trpangleVZERO[0] = evPlAngV0;
+    trpangleVZERO[1] = evPlAngV0A;
+    trpangleVZERO[2] = evPlAngV0C;
     
-    AliESDtrack *esdtrack=lESDevent->GetTrack(j);
-    if (!fESDtrackCuts->AcceptTrack(esdtrack)) continue;
+    // cout<<"rpangle TPC: "<<rpangleTPC<<endl;
   
-    status  = (ULong_t)esdtrack->GetStatus();
-    
-    isTPC    = (((status) & AliESDtrack::kTPCin)   != 0);
-    isTOF    = ((((status) & AliESDtrack::kTOFout) != 0) && (((status) & AliESDtrack::kTIME) != 0));
-    isoutTPC = (((status) & AliESDtrack::kTPCout)  != 0);
+    Int_t isTOF=0;
+    Int_t isoutTPC=0;
+    //  cout<<"TRack number MC "<<TrackNumber<<endl;
     
-    TPCSignal=esdtrack->GetTPCsignal(); 
-
-    if (TPCSignal<10)continue;
-    if (TPCSignal>1000)continue;
-    if (!isTPC)continue;
+    for (Int_t j=0; j<TrackNumber; j++) { //loop on tracks
+      
+      AliESDtrack *esdtrack=lESDevent->GetTrack(j);
+      if (!fESDtrackCuts->AcceptTrack(esdtrack)) continue;
       
-    if(!esdtrack->GetTPCInnerParam())continue;
-    AliExternalTrackParam trackIn(*esdtrack->GetInnerParam()); 
-    pinTPC= trackIn.GetP(); 
+      status  = (ULong_t)esdtrack->GetStatus();
+      
+      isTPC    = (((status) & AliESDtrack::kTPCin)   != 0);
+      isTOF    = ((((status) & AliESDtrack::kTOFout) != 0) && (((status) & AliESDtrack::kTIME) != 0));
+      isoutTPC = (((status) & AliESDtrack::kTPCout)  != 0);
+      
+      TPCSignal=esdtrack->GetTPCsignal(); 
+      
+      if (TPCSignal<10)continue;
+      if (TPCSignal>1000)continue;
+      if (!isTPC)continue;
+      
+      if(!esdtrack->GetTPCInnerParam())continue;
+      AliExternalTrackParam trackIn(*esdtrack->GetInnerParam()); 
+      pinTPC= trackIn.GetP(); 
 
-    fhBB->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
+      fhBB->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
 
-    if(isTOF){
-      if(!esdtrack->GetOuterParam())continue;    
-      AliExternalTrackParam trackOut(*esdtrack->GetOuterParam()); 
-      poutTPC = trackOut.GetP();  
-      fhTOF->Fill(poutTPC*esdtrack->GetSign(),(esdtrack->GetIntegratedLength()/esdtrack->GetTOFsignal())/2.99792458e-2);
+      if(isTOF){
+       if(!esdtrack->GetOuterParam())continue;    
+       AliExternalTrackParam trackOut(*esdtrack->GetOuterParam()); 
+       poutTPC = trackOut.GetP();  
+       fhTOF->Fill(poutTPC*esdtrack->GetSign(),(esdtrack->GetIntegratedLength()/esdtrack->GetTOFsignal())/2.99792458e-2);
     
-    }
+      }
 
-    Int_t   fIdxInt[200]; //dummy array
-    Int_t   nClustersTPC = esdtrack->GetTPCclusters(fIdxInt);
-    Float_t chi2PerClusterTPC = esdtrack->GetTPCchi2()/(Float_t)(nClustersTPC);
+      Int_t   fIdxInt[200]; //dummy array
+      Int_t   nClustersTPC = esdtrack->GetTPCclusters(fIdxInt);
+      Float_t chi2PerClusterTPC = esdtrack->GetTPCchi2()/(Float_t)(nClustersTPC);
 
-    esdtrack->GetImpactParameters(impactXY, impactZ);
+      esdtrack->GetImpactParameters(impactXY, impactZ);
 
-    Float_t deutExp  = -999;
-    Float_t hel3Exp  = -999;
+      Float_t deutExp  = -999;
+      Float_t tritExp  = -999;
+      Float_t hel3Exp  = -999;
   
-    if(fDataType == "REAL"){
-      deutExp  = AliExternalTrackParam::BetheBlochAleph(pinTPC/(0.938*2),1.45802,27.4992,4.00313e-15,2.48485,8.31768);
-      hel3Exp = 4*AliExternalTrackParam::BetheBlochAleph(2*pinTPC/(0.938*3),1.74962,27.4992,4.00313e-15,2.42485,8.31768);
-    }
+      if(fDataType == "REAL"){
+       deutExp  = AliExternalTrackParam::BetheBlochAleph(pinTPC/(0.938*2),1.45802,27.4992,4.00313e-15,2.48485,8.31768);
+       tritExp  = AliExternalTrackParam::BetheBlochAleph(pinTPC/(0.938*3),1.45802,27.4992,4.00313e-15,2.48485,8.31768);
+       hel3Exp  = 4*AliExternalTrackParam::BetheBlochAleph(2*pinTPC/(0.938*3),1.74962,27.4992,4.00313e-15,2.42485,8.31768);
+      }
 
-    if(fDataType == "SIM"){
-      Double_t parMC[5] = {1.17329, 27.4992, 4.00313e-15, 2.1204316, 4.1373729}; // NEW!!!
-      deutExp = AliExternalTrackParam::BetheBlochAleph(pinTPC/(0.938*2),parMC[0],parMC[1],parMC[2],parMC[3],parMC[4]);
-      hel3Exp = 4*AliExternalTrackParam::BetheBlochAleph(2*pinTPC/(0.938*3),parMC[0],parMC[1],parMC[2],parMC[3],parMC[4]);
-    }
+      if(fDataType == "SIM"){
+       Double_t parMC[5] = {1.17329, 27.4992, 4.00313e-15, 2.1204316, 4.1373729}; // NEW!!!
+       deutExp = AliExternalTrackParam::BetheBlochAleph(pinTPC/(0.938*2),parMC[0],parMC[1],parMC[2],parMC[3],parMC[4]);
+       tritExp = AliExternalTrackParam::BetheBlochAleph(pinTPC/(0.938*3),parMC[0],parMC[1],parMC[2],parMC[3],parMC[4]);
+       hel3Exp = 4*AliExternalTrackParam::BetheBlochAleph(2*pinTPC/(0.938*3),parMC[0],parMC[1],parMC[2],parMC[3],parMC[4]);
+      }
     
-    Double_t pullTPC = (TPCSignal - deutExp)/(0.07*deutExp);
-    Double_t pullTPChel3 = (TPCSignal - hel3Exp)/(0.07*hel3Exp);
-  
-    tPulls[0] = pullTPC;
-    tPulls[1] = pullTPChel3;
+      Double_t pullTPC     = (TPCSignal - deutExp)/(0.07*deutExp);
+      Double_t pullTPChel3 = (TPCSignal - hel3Exp)/(0.07*hel3Exp);
+      Double_t pullTPCtrit = (TPCSignal - tritExp)/(0.07*tritExp);
+    
+      tPulls[0] = pullTPC;
+      tPulls[1] = pullTPChel3;
+      tPulls[2] = pullTPCtrit;
 
-    //Fill the tree
+      //Fill the tree
 
-    tEventNumber[0] = evNumber    ;
-    tEventNumber[1] = runNumber   ;
-    tEventNumber[2] = BCNumber    ;
-    tEventNumber[3] = OrbitNumber ;
-    tEventNumber[4] = PeriodNumber;
-    tEventNumber[5] = TrackNumber;
-    tEventNumber[6] = eventtype ;
+      tCentrality[0] = percentile;
+      tCentrality[1] = eventtype;
 
-    tCentrality = percentile;
-        
-    tVertexCoord[0] = xPrimaryVertex;
-    tVertexCoord[1] = yPrimaryVertex;
-    tVertexCoord[2] = zPrimaryVertex;
-
-    if(TMath::Abs(zPrimaryVertex)>10)continue;
-
-    // bbtheo = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 7);
-
-    tPIDITS[0] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 0);
-    tPIDITS[1] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 1);
-    tPIDITS[2] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 2);
-    tPIDITS[3] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 3);
-    tPIDITS[4] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 4);
-    tPIDITS[5] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 5);
-    tPIDITS[6] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 6);
-    tPIDITS[7] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 7);
-    tPIDITS[8] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)0,esdtrack,(AliPID::EParticleType) 8);
-
-    tPIDTPC[0] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 0);
-    tPIDTPC[1] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 1);
-    tPIDTPC[2] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 2);
-    tPIDTPC[3] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 3);
-    tPIDTPC[4] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 4);
-    tPIDTPC[5] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 5);
-    tPIDTPC[6] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 6);
-    tPIDTPC[7] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 7);
-    tPIDTPC[8] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)1,esdtrack,(AliPID::EParticleType) 8);
-
-    tPIDTOF[0] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 0);
-    tPIDTOF[1] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 1);
-    tPIDTOF[2] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 2);
-    tPIDTOF[3] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 3);
-    tPIDTOF[4] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 4);
-    tPIDTOF[5] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 5);
-    tPIDTOF[6] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 6);
-    tPIDTOF[7] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 7);
-    tPIDTOF[8] = fPIDResponse->NumberOfSigmas((AliPIDResponse::EDetector)3,esdtrack,(AliPID::EParticleType) 8);
-
-    tMomentum[0] = esdtrack->Px();
-    tMomentum[1] = esdtrack->Py();
-    tMomentum[2] = esdtrack->Pz();
     
-    tTPCMomentum = pinTPC;
-    tEta         = esdtrack->Eta();
-    tdEdx        = TPCSignal;
-    tDCA[0]      = impactXY;
-    tDCA[1]      = impactZ;
-
-    // if(nClustersTPC<80)
-    //   cout<<"!!!!! TPC cls: "<<nClustersTPC<<endl;
-
-    tTracksTPC[0] = chi2PerClusterTPC;
-    tTracksTPC[1] = nClustersTPC;
-
-    tITSclustermap = esdtrack->GetITSClusterMap();
-    esdtrack->GetITSdEdxSamples(ITSsample);
-    tITSsample[0] = ITSsample[0];
-    tITSsample[1] = ITSsample[1];
-    tITSsample[2] = ITSsample[2];
-    tITSsample[3] = ITSsample[3];
-
-    tisTOF[0] = isTOF;
-    tisTOF[1] = isoutTPC;
-    Double_t p = esdtrack->P();
-    Double_t tof = esdtrack->GetTOFsignal()-fPIDResponse->GetTOFResponse().GetStartTime(p);
-
-    tTOFtrack[0] = poutTPC;
-    tTOFtrack[1] = tof;    //esdtrack->GetTOFsignal();         //ps = Time
-    tTOFtrack[2] = esdtrack->GetIntegratedLength(); //cm
+      tMomentum[0] = esdtrack->Px();
+      tMomentum[1] = esdtrack->Py();
+      tMomentum[2] = esdtrack->Pz();
+    
+      //Corrected momentum from Alexander
+      Double_t pT = esdtrack->Pt()/(1 - 0.333303/TMath::Power(esdtrack->Pt() + 0.651111, 5.27268));
+      tMomentum[3] = pT;
     
-    tCharge =  esdtrack->Charge();
-    tPhi    =  esdtrack->Phi();
+      tDCA[0]      = impactXY;
+      tDCA[1]      = impactZ;
 
-    //Corrected momentum from Alexander
+      tisTOF[0] = isTOF;
+      tisTOF[1] = isoutTPC;
+      Double_t p   = esdtrack->P();
+      Double_t tof = esdtrack->GetTOFsignal()-fPIDResponse->GetTOFResponse().GetStartTime(p);
+    
+      tTOFtrack[0] = poutTPC;
+      tTOFtrack[1] = tof;                             //ps = Time
+      tTOFtrack[2] = esdtrack->GetIntegratedLength(); //cm
+    
+      tCharge =  esdtrack->Charge();
+      tPhi    =  esdtrack->Phi();
+    
+      Float_t beta = 0;
+      Float_t gamma = 0;
+      Float_t deltaMass = 0;
 
-    Double_t pT = esdtrack->Pt()/(1 - 0.333303/TMath::Power(esdtrack->Pt() + 0.651111, 5.27268));
-    tPtCorr = pT;
+      if(fDataType == "REAL"){
+       if(TMath::Abs(pinTPC) < 6 && TMath::Abs(pullTPC) < 3){
 
-    if(fDataType == "REAL"){
-      if(pinTPC < 3. && TMath::Abs(pullTPC) < 3){
-       if(fFillNtuple == kTRUE)
-         fNtuple1->Fill();
-       fhBBDeu->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
-      }
+         fhBBDeu->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
+       
+         if(pinTPC < 1.0 && fFillNtuple == kTRUE)
+           fNtuple1->Fill();
+       
+         if(tTOFtrack[1] > 0 ){
+           beta = tTOFtrack[2]/(tTOFtrack[1] * 2.99792457999999984e-02);
+           gamma = 1/TMath::Sqrt(1 - beta*beta);
+           deltaMass = poutTPC/TMath::Sqrt(gamma*gamma - 1) - 1.8756;
+           fhMassTOF->Fill(deltaMass);
+         }
+       
+         if(pinTPC >= 1.0 && tTOFtrack[1] > 0 && TMath::Abs(deltaMass)<0.5 && fFillNtuple == kTRUE )
+           fNtuple1->Fill();
+       }
       
-      if(pinTPC < 10. && TMath::Abs(pullTPChel3) < 3){
-       if(fFillNtuple == kTRUE)
-         fNtuple1->Fill();
-       fhBBDeu->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
-      }
+       if(pinTPC < 10. && TMath::Abs(pullTPChel3) < 3){
+         if(fFillNtuple == kTRUE)
+           fNtuple1->Fill();
+         fhBBDeu->Fill(pinTPC*esdtrack->GetSign(),TPCSignal);
+       }
       
-      if(TMath::Abs(pullTPC)<2){
+      
+       //Fill also things for flow package
+
+       if(TMath::Abs(pullTPC)<2){
        
-       fhPtDeu->Fill(esdtrack->Pt(),pT);
+         fhPtDeu->Fill(esdtrack->Pt(),pT);
        
-       Float_t deltaphiTPC=2*GetPhi0Pi(tPhi-trpangleTPC);
-       Float_t deltaphiV0 =2*GetPhi0Pi(tPhi-trpangleVZERO[0]);
+         //Remove AutoCorrelation
+         trpangleTPC = GetEventPlaneForCandidate(esdtrack,q,pl,qsub1,qsub2);
+
+         Float_t deltaphiTPC=2*GetPhi0Pi(tPhi-trpangleTPC);
+         Float_t deltaphiV0 =2*GetPhi0Pi(tPhi-trpangleVZERO[0]);
        
        
-       if(tTPCMomentum < 1.0){
+         if(pinTPC < 1.0){
          
-         if(tCharge > 0){
-           
-           hCosPhivsPt           ->Fill(TMath::Cos(tPhi),tPtCorr);
-           hSinPhivsPt           ->Fill(TMath::Sin(tPhi),tPtCorr);
-           hPhivsPt              ->Fill(tPhi,tPtCorr);
-           
-           if(tCentrality>0 && tCentrality<7.5){
-             hCosDeltaPhivsPt075        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hSinDeltaPhivsPt075        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hDeltaPhivsPt075           ->Fill(deltaphiTPC,tPtCorr);          
-             hCosDeltaPhiVZEROvsPt075   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hSinDeltaPhiVZEROvsPt075   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hDeltaPhiVZEROvsPt075      ->Fill(deltaphiV0,tPtCorr);       
-             
-           }
-           
-           if(tCentrality>15 && tCentrality<30){
-             hCosDeltaPhivsPt1530        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hSinDeltaPhivsPt1530        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hDeltaPhivsPt1530           ->Fill(deltaphiTPC,tPtCorr);         
-             hCosDeltaPhiVZEROvsPt1530   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hSinDeltaPhiVZEROvsPt1530   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hDeltaPhiVZEROvsPt1530      ->Fill(deltaphiV0,tPtCorr);         
-           }
-       
-           if(tCentrality>30 && tCentrality<50){
-             hCosDeltaPhivsPt3050        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hSinDeltaPhivsPt3050        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hDeltaPhivsPt3050           ->Fill(deltaphiTPC,tPtCorr);         
-             hCosDeltaPhiVZEROvsPt3050   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hSinDeltaPhiVZEROvsPt3050   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hDeltaPhiVZEROvsPt3050      ->Fill(deltaphiV0,tPtCorr);             
-           }
-           
-           if(tCentrality>15 && tCentrality<50){
-             hCosDeltaPhivsPt1550        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hSinDeltaPhivsPt1550        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hDeltaPhivsPt1550           ->Fill(deltaphiTPC,tPtCorr);         
-             hCosDeltaPhiVZEROvsPt1550   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hSinDeltaPhiVZEROvsPt1550   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hDeltaPhiVZEROvsPt1550      ->Fill(deltaphiV0,tPtCorr); 
-           }
-         }
+           //Here
+
+           //==================================================================
+           //----------------------Flow of Inclusive Particles --------------------------------------------------------
+        
+           AliFlowTrack *sTrack = new AliFlowTrack();
+           sTrack->Set(esdtrack);
+           sTrack->SetID(esdtrack->GetID());
+           sTrack->SetForRPSelection(kTRUE);
+           sTrack->SetForPOISelection(kTRUE);
          
-         if(tCharge < 0){
+           for(int iRPs=0; iRPs!=fFlowEvent->NumberOfTracks(); ++iRPs)
+             {
+               //   cout << " no of rps " << iRPs << endl;
+               AliFlowTrack *iRP = dynamic_cast<AliFlowTrack*>(fFlowEvent->GetTrack( iRPs ));
+               if (!iRP) continue;
+               if (!iRP->InRPSelection()) continue;
+               if( sTrack->GetID() == iRP->GetID())
+                 {
+                   if(fDebug) printf(" was in RP set");
+                   //       cout << sTrack->GetID() <<"   ==  " << iRP->GetID() << " was in RP set" <<endl;
+                   iRP->SetForRPSelection(kFALSE);
+                   // fFlowEvent->SetNumberOfRPs(fFlowEvent->GetNumberOfRPs() - 1);
+                 }
+             } //end of for loop on RPs
+           fFlowEvent->InsertTrack(((AliFlowTrack*) sTrack));
+           fFlowEvent->SetNumberOfPOIs(fFlowEvent->GetNumberOfPOIs()+1);
            
-           hAntiCosPhivsPt           ->Fill(TMath::Cos(tPhi),tPtCorr);
-           hAntiSinPhivsPt           ->Fill(TMath::Sin(tPhi),tPtCorr);
-           hAntiPhivsPt              ->Fill(tPhi,tPtCorr);
-           if(tCentrality>0 && tCentrality<7.5){
-             hAntiCosDeltaPhivsPt075        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hAntiSinDeltaPhivsPt075        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hAntiDeltaPhivsPt075           ->Fill(deltaphiTPC,tPtCorr);              
-             hAntiCosDeltaPhiVZEROvsPt075   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hAntiSinDeltaPhiVZEROvsPt075   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hAntiDeltaPhiVZEROvsPt075      ->Fill(deltaphiV0,tPtCorr); 
-           }
 
-           if(tCentrality>15 && tCentrality<30){
-             hAntiCosDeltaPhivsPt1530        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hAntiSinDeltaPhivsPt1530        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hAntiDeltaPhivsPt1530           ->Fill(deltaphiTPC,tPtCorr);             
-             hAntiCosDeltaPhiVZEROvsPt1530   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hAntiSinDeltaPhiVZEROvsPt1530   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hAntiDeltaPhiVZEROvsPt1530      ->Fill(deltaphiV0,tPtCorr);         
-           }
-         
-           if(tCentrality>30 && tCentrality<50){
-             hAntiCosDeltaPhivsPt3050        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hAntiSinDeltaPhivsPt3050        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hAntiDeltaPhivsPt3050           ->Fill(deltaphiTPC,tPtCorr);             
-             hAntiCosDeltaPhiVZEROvsPt3050   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hAntiSinDeltaPhiVZEROvsPt3050   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hAntiDeltaPhiVZEROvsPt3050      ->Fill(deltaphiV0,tPtCorr);                
-           }
+           //=================================================================
+
+           //  if(tCharge > 0){
          
-           if(tCentrality>15 && tCentrality<50){
-             hAntiCosDeltaPhivsPt1550        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hAntiSinDeltaPhivsPt1550        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hAntiDeltaPhivsPt1550           ->Fill(deltaphiTPC,tPtCorr);             
-             hAntiCosDeltaPhiVZEROvsPt1550   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hAntiSinDeltaPhiVZEROvsPt1550   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hAntiDeltaPhiVZEROvsPt1550      ->Fill(deltaphiV0,tPtCorr);                
+           if(tCentrality[0]>0 && tCentrality[0]<7.5){
+             hCos2DeltaPhivsPt075           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);             
+             hCos2DeltaPhiVZEROvsPt075      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);       
+           
            }
-         
-         }
-         
-       }
 
-       if(tTPCMomentum > 1.0 && tTPCMomentum < 3.0){
-         if(tPIDTOF[5]>2 || tPIDTOF[5]< -2)continue;
-       
-         if(tCharge > 0){
-           
-           hCosPhivsPt           ->Fill(TMath::Cos(tPhi),tPtCorr);
-           hSinPhivsPt           ->Fill(TMath::Sin(tPhi),tPtCorr);
-           hPhivsPt              ->Fill(tPhi,tPtCorr);
-           
-           
-           if(tCentrality>0 && tCentrality<7.5){
-             hCosDeltaPhivsPt075        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hSinDeltaPhivsPt075        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hDeltaPhivsPt075           ->Fill(deltaphiTPC,tPtCorr);          
-             hCosDeltaPhiVZEROvsPt075   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hSinDeltaPhiVZEROvsPt075   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hDeltaPhiVZEROvsPt075      ->Fill(deltaphiV0,tPtCorr);                
-             
+           if(tCentrality[0]>0 && tCentrality[0]<5){
+             hCos2DeltaPhivsPt05           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);              
+             hCos2DeltaPhiVZEROvsPt05      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);       
            }
            
-           if(tCentrality>15 && tCentrality<30){
-             hCosDeltaPhivsPt1530        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hSinDeltaPhivsPt1530        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hDeltaPhivsPt1530           ->Fill(deltaphiTPC,tPtCorr);         
-             hCosDeltaPhiVZEROvsPt1530   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hSinDeltaPhiVZEROvsPt1530   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hDeltaPhiVZEROvsPt1530      ->Fill(deltaphiV0,tPtCorr);          
+           if(tCentrality[0]>15 && tCentrality[0]<30){
+             hCos2DeltaPhivsPt1530           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);
+             hCos2DeltaPhiVZEROvsPt1530      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);
            }
        
-           if(tCentrality>30 && tCentrality<50){
-             hCosDeltaPhivsPt3050        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hSinDeltaPhivsPt3050        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hDeltaPhivsPt3050           ->Fill(deltaphiTPC,tPtCorr);         
-             hCosDeltaPhiVZEROvsPt3050   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hSinDeltaPhiVZEROvsPt3050   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hDeltaPhiVZEROvsPt3050      ->Fill(deltaphiV0,tPtCorr);      
-           
+           if(tCentrality[0]>20 && tCentrality[0]<40){
+             hCos2DeltaPhivsPt2040           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);
+             hCos2DeltaPhiVZEROvsPt2040      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);
            }
          
-           if(tCentrality>15 && tCentrality<50){
-             hCosDeltaPhivsPt1550        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hSinDeltaPhivsPt1550        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hDeltaPhivsPt1550           ->Fill(deltaphiTPC,tPtCorr);         
-             hCosDeltaPhiVZEROvsPt1550   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hSinDeltaPhiVZEROvsPt1550   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hDeltaPhiVZEROvsPt1550      ->Fill(deltaphiV0,tPtCorr);       
+           if(tCentrality[0]>30 && tCentrality[0]<50){
+             hCos2DeltaPhivsPt3050           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);     
+             hCos2DeltaPhiVZEROvsPt3050      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);        
            }
+           
+           if(tCentrality[0]>40 && tCentrality[0]<60){
+             hCos2DeltaPhivsPt4060           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);
+             hCos2DeltaPhiVZEROvsPt4060      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);
+           } 
          }
-       
-         if(tCharge < 0){
          
-           hAntiCosPhivsPt           ->Fill(TMath::Cos(tPhi),tPtCorr);
-           hAntiSinPhivsPt           ->Fill(TMath::Sin(tPhi),tPtCorr);
-           hAntiPhivsPt              ->Fill(tPhi,tPtCorr);
-
-           if(tCentrality>0 && tCentrality<7.5){
-             hAntiCosDeltaPhivsPt075        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hAntiSinDeltaPhivsPt075        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hAntiDeltaPhivsPt075           ->Fill(deltaphiTPC,tPtCorr);              
-             hAntiCosDeltaPhiVZEROvsPt075   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hAntiSinDeltaPhiVZEROvsPt075   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hAntiDeltaPhiVZEROvsPt075      ->Fill(deltaphiV0,tPtCorr);                
-
+         if(pinTPC > 1.0 && pinTPC  < 6.0 && tTOFtrack[1] > 0 && TMath::Abs(deltaMass)<0.5){
          
+                 
+           if(tCentrality[0]>0 && tCentrality[0]<7.5){
+             hCos2DeltaPhivsPt075           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);             
+             hCos2DeltaPhiVZEROvsPt075      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);       
+           
            }
 
-           if(tCentrality>15 && tCentrality<30){
-             hAntiCosDeltaPhivsPt1530        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hAntiSinDeltaPhivsPt1530        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hAntiDeltaPhivsPt1530           ->Fill(deltaphiTPC,tPtCorr);             
-             hAntiCosDeltaPhiVZEROvsPt1530   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hAntiSinDeltaPhiVZEROvsPt1530   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hAntiDeltaPhiVZEROvsPt1530      ->Fill(deltaphiV0,tPtCorr);  
+           if(tCentrality[0]>0 && tCentrality[0]<5){
+             hCos2DeltaPhivsPt05           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);              
+             hCos2DeltaPhiVZEROvsPt05      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);       
+           }
            
-             
+           if(tCentrality[0]>15 && tCentrality[0]<30){
+             hCos2DeltaPhivsPt1530           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);
+             hCos2DeltaPhiVZEROvsPt1530      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);
            }
        
-           if(tCentrality>30 && tCentrality<50){
-             hAntiCosDeltaPhivsPt3050        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hAntiSinDeltaPhivsPt3050        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hAntiDeltaPhivsPt3050           ->Fill(deltaphiTPC,tPtCorr);             
-             hAntiCosDeltaPhiVZEROvsPt3050   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hAntiSinDeltaPhiVZEROvsPt3050   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hAntiDeltaPhiVZEROvsPt3050      ->Fill(deltaphiV0,tPtCorr);   
-           
-             
+           if(tCentrality[0]>20 && tCentrality[0]<40){
+             hCos2DeltaPhivsPt2040           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);
+             hCos2DeltaPhiVZEROvsPt2040      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);
            }
          
-           if(tCentrality>15 && tCentrality<50){
-             hAntiCosDeltaPhivsPt1550        ->Fill(TMath::Cos(deltaphiTPC),tPtCorr);   
-             hAntiSinDeltaPhivsPt1550        ->Fill(TMath::Sin(deltaphiTPC),tPtCorr);   
-             hAntiDeltaPhivsPt1550           ->Fill(deltaphiTPC,tPtCorr);             
-             hAntiCosDeltaPhiVZEROvsPt1550   ->Fill(TMath::Cos(deltaphiV0),tPtCorr);    
-             hAntiSinDeltaPhiVZEROvsPt1550   ->Fill(TMath::Sin(deltaphiV0),tPtCorr);    
-             hAntiDeltaPhiVZEROvsPt1550      ->Fill(deltaphiV0,tPtCorr);    
-           
-            
+           if(tCentrality[0]>30 && tCentrality[0]<50){
+             hCos2DeltaPhivsPt3050           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);     
+             hCos2DeltaPhiVZEROvsPt3050      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);        
            }
-
+         
+           if(tCentrality[0]>40 && tCentrality[0]<60){
+             hCos2DeltaPhivsPt4060           ->Fill(TMath::Cos(deltaphiTPC),tMomentum[3]*tCharge);
+             hCos2DeltaPhiVZEROvsPt4060      ->Fill(TMath::Cos(deltaphiV0) ,tMomentum[3]*tCharge);
+           } 
          }
-       
-       }
-
-
-       if(tTOFtrack[1] > 0){
-         Double_t beta = tTOFtrack[2]/(tTOFtrack[1] * 2.99792457999999984e-02);
-         Float_t gamma = 1/TMath::Sqrt(1 - beta*beta);
-         fhMassTOF->Fill(poutTPC/TMath::Sqrt(gamma*gamma - 1) - 1.8756);
        }
       }
-    }
         
-    if(fDataType == "SIM"){
+      if(fDataType == "SIM"){
       
-      Int_t  label = TMath::Abs(esdtrack->GetLabel());
-      TParticle * part = stack->Particle(label);
-      Int_t PDGCode=part->GetPdgCode();
-
-      Int_t motherPDG=0;
+       Int_t  label = TMath::Abs(esdtrack->GetLabel());
+       TParticle * part = stack->Particle(label);
+       Int_t PDGCode=part->GetPdgCode();
+       
+       Int_t motherPDG=0;
       
-      Int_t mumid = part->GetFirstMother();
-      if(mumid>-1){
-       TParticle *mother=(TParticle*)stack->Particle(mumid);
-       motherPDG = mother->GetPdgCode();
-      }
+       Int_t mumid = part->GetFirstMother();
+       if(mumid>-1){
+         TParticle *mother=(TParticle*)stack->Particle(mumid);
+         motherPDG = mother->GetPdgCode();
+       }
       
-      if( PDGCode == 1000010020 || PDGCode == -1000010020 || PDGCode == 1000020030 || PDGCode == -1000020030){
+       if( PDGCode == 1000010020 || PDGCode == -1000010020 || PDGCode == 1000020030 || PDGCode == -1000020030){
        
-       tPDGCode=PDGCode;
-       tPDGCodeMum = motherPDG;
-
-       tIsPrimaryTr      = stack->IsPhysicalPrimary(label);
-       tIsSecondaryTr[0] = stack->IsSecondaryFromMaterial(label);
-       tIsSecondaryTr[1] = stack->IsSecondaryFromWeakDecay(label);
-
-       fNtuple1->Fill();
-       fhPtDeu->Fill(esdtrack->Pt(),pT);
+         tPDGCode=PDGCode;
+         tPDGCodeMum = motherPDG;
+       
+         tIsPrimaryTr      = stack->IsPhysicalPrimary(label);
+         tIsSecondaryTr[0] = stack->IsSecondaryFromMaterial(label);
+         tIsSecondaryTr[1] = stack->IsSecondaryFromWeakDecay(label);
+       
+         fNtuple1->Fill();
+         fhPtDeu->Fill(esdtrack->Pt(),pT);
        
-       if(tTOFtrack[1] > 0){
-         Double_t beta = tTOFtrack[2]/(tTOFtrack[1] * 2.99792457999999984e-02);
-         Float_t gamma = 1/TMath::Sqrt(1 - beta*beta);
-         fhMassTOF->Fill(poutTPC/TMath::Sqrt(gamma*gamma - 1) - 1.8756);
+         if(tTOFtrack[1] > 0){
+           beta = tTOFtrack[2]/(tTOFtrack[1] * 2.99792457999999984e-02);
+           gamma = 1/TMath::Sqrt(1 - beta*beta);
+           fhMassTOF->Fill(poutTPC/TMath::Sqrt(gamma*gamma - 1) - 1.8756);
+         }
        }
       }
-    }
-
-  }   //track
-  
-  //==END RECONSTRUCTION==
+    
+    }   //track
   
-
-  // MC truth
-
-  if(fDataType == "SIM"){
+    //==END RECONSTRUCTION==
     
-    for (Int_t iMC=0; iMC<stack->GetNtrack(); iMC++){
-      const TParticle *tparticle = stack->Particle(iMC);
-      Long_t PDGCode = tparticle->GetPdgCode();
-      
-      Double_t eta = tparticle->Eta();
-      Double_t pt  = tparticle->Pt();
-      Double_t rap = tparticle->Y();
-      
-      //check which particle it is 
-      
-      Float_t codemoth = 0;
-      
-      Int_t indexMoth=tparticle->GetFirstMother();
+    
+    // MC truth
+
+    if(fDataType == "SIM"){
       
-      if(indexMoth>=0){
-       TParticle* moth = stack->Particle(indexMoth);
-       codemoth = TMath::Abs(moth->GetPdgCode());
-      }
-       
-      //d, 3He
+      for (Int_t iMC=0; iMC<stack->GetNtrack(); iMC++){
+       
+       const TParticle *tparticle = stack->Particle(iMC);
+       Long_t PDGCode = tparticle->GetPdgCode();
+       
+       Double_t eta = tparticle->Eta();
+       Double_t pt  = tparticle->Pt();
+       Double_t rap = tparticle->Y();
       
-      if( PDGCode == 1000010020 || PDGCode == -1000010020 || PDGCode == 1000020030 || PDGCode == -1000020030){
+       //check which particle it is 
        
-       tEventNumberMC[0] = evNumber    ;
-       tEventNumberMC[1] = runNumber   ;
-       tEventNumberMC[2] = BCNumber    ;
-       tEventNumberMC[3] = OrbitNumber ;
-       tEventNumberMC[4] = PeriodNumber;
-       tEventNumberMC[5] = TrackNumber;
-         
-       tCentralityMC = percentile;
+       Float_t codemoth = 0;
        
-       tVertexCoordMC[0] = xPrimaryVertex;
-       tVertexCoordMC[1] = yPrimaryVertex;
-       tVertexCoordMC[2] = zPrimaryVertex;
+       Int_t indexMoth=tparticle->GetFirstMother();
        
-       tVertexCoordMC[0] = tparticle->Px();
-       tVertexCoordMC[1] = tparticle->Py();
-       tVertexCoordMC[2] = tparticle->Pz();
+       if(indexMoth>=0){
+         TParticle* moth = stack->Particle(indexMoth);
+         codemoth = TMath::Abs(moth->GetPdgCode());
+       }
        
-       tPDGCodeMC = PDGCode;
-       tPDGCodeMumMC = codemoth;
-       tEtaMC = eta;
+       //d, 3He
        
-       tPtMC = pt;
-       tYMC  = rap;
-
-       tIsPrimary      = stack->IsPhysicalPrimary(iMC);
-       tIsSecondary[0] = stack->IsSecondaryFromMaterial(iMC);
-       tIsSecondary[1] = stack->IsSecondaryFromWeakDecay(iMC);
-
+       if( PDGCode == 1000010020 || PDGCode == -1000010020 || PDGCode == 1000020030 || PDGCode == -1000020030){
+         
        
-       fNtuple2->Fill();
+         
+         tCentralityMC = percentile;
+         
+         tVertexCoordMC[0] = vtx->GetXv();
+         tVertexCoordMC[1] = vtx->GetYv();
+         tVertexCoordMC[2] = vtx->GetZv();
+         
+         tVertexCoordMC[0] = tparticle->Px();
+         tVertexCoordMC[1] = tparticle->Py();
+         tVertexCoordMC[2] = tparticle->Pz();
+         
+         tPDGCodeMC = PDGCode;
+         tPDGCodeMumMC = codemoth;
+         tEtaMC = eta;
+         
+         tPtMC = pt;
+         tYMC  = rap;
+         
+         tIsPrimary      = stack->IsPhysicalPrimary(iMC);
+         tIsSecondary[0] = stack->IsSecondaryFromMaterial(iMC);
+         tIsSecondary[1] = stack->IsSecondaryFromWeakDecay(iMC);
+         
+         
+         fNtuple2->Fill();
+       }
       }
+      
     }
-    
-   
-    
   }
-  PostData(1, fListHistCascade);
+  
+  PostData(1, fListHist);
   PostData(2,  fNtuple1);
   PostData(3,  fNtuple2);
+  
+  PostData(4, fFlowEvent);
+
 } //end userexec
 
 
index 66da86025fa25ac78461b844164528357aa6d2fa..4bf5f3252eba54d91de47f1a5020836b08fe7e78 100644 (file)
@@ -11,8 +11,15 @@ class TList;
 class TH1F;
 class TH2F;
 class TH3F;
+class TProfile;
 class TNtuple;
 class AliESDcascade;
+class AliFlowTrackCuts;
+class AliFlowTrack;
+class AliFlowEvent;
+class AliFlowCandidateTrack;
+class AliFlowEventSimple;
+
 //class AliCascadeVertexer; 
 #include <AliPIDResponse.h>
 #include "TString.h"
@@ -23,142 +30,125 @@ class AliAnalysisTaskNucleiv2 : public AliAnalysisTaskSE {
  public:
   //  AliAnalysisTaskNucleiv2(const char *datatype);
   AliAnalysisTaskNucleiv2();
-  AliAnalysisTaskNucleiv2(const char *name,const char *datatype,Bool_t filltree);
+  AliAnalysisTaskNucleiv2(const char *name);
   virtual ~AliAnalysisTaskNucleiv2() {}
   
   virtual void  UserCreateOutputObjects();
   virtual void  UserExec(Option_t *option);
   virtual void  Terminate(Option_t *);
   
-  void SetCollidingSystems(Short_t collidingSystems = 0)     {fCollidingSystems = collidingSystems;}
-  void SetAnalysisType    (const char* analysisType = "ESD") {fAnalysisType = analysisType;}
-  void SetDataType    (const char* dataType = "REAL") {fDataType = dataType;}
-  void SetFillTree    (Bool_t ifFill = kFALSE) {fFillNtuple = ifFill;}
-  //  void SetDataType    (const char* dataTypeS = datatype) {fDataType = dataTypeS;}
-  // void SetDataType    (const char* dataType) {fDataType = dataType;}
-  //Double_t BetheBloch(Double_t bg,Double_t Charge,Bool_t optMC);
-  //  Double_t BetheBloch(Double_t bg,Double_t Charge,Bool_t isPbPb);
-  //  Bool_t IsTrackAccepted(AliESDtrack * const track);
+  void    SetCollidingSystems(Short_t collidingSystems = 0) {fCollidingSystems = collidingSystems;}
+  void    SetAnalysisType(const char* analysisType)         {fAnalysisType = analysisType;}
+  void    SetDataType(const char* dataType)                 {fDataType = dataType;}
+  void    SetFillTree(Bool_t ifFill)                        {fFillNtuple = ifFill;}
+  void    SetCentralityParameters(Double_t CentralityMin, Double_t CentralityMax); //select centrality
+  Float_t GetEventPlaneForCandidate(AliESDtrack* track0, const TVector2* q,AliEventplane *pl, const TVector2* qsub1, const TVector2* qsub2);
+  template <typename T> void           SetNullCuts(T* aod);
+  void    PrepareFlowEvent(Int_t iMulti, AliFlowEvent *FlowEv) const;
   Float_t GetPhi0Pi(Float_t phi);
   void    Initialize();
  private:
   
-  TString fAnalysisType;             //! "ESD" or "AOD" analysis type  
+  TString  fAnalysisType;            //! "ESD" or "AOD" analysis type  
+  
+  Short_t  fCollidingSystems;        //! 0 = pp collisions or 1 = AA collisions
+  TString  fDataType;                //! "REAL" or "SIM" data type     
+  Bool_t   fFillNtuple;                      //! fill or not the tree  
   
-  Short_t fCollidingSystems;         //! 0 = pp collisions or 1 = AA collisions
-  TString fDataType;                 //! "REAL" or "SIM" data type     
-  Bool_t  fFillNtuple;               //! fill or not the tree  
+  Double_t fCentralityMin;            // lower bound of cenrality bin
+  Double_t fCentralityMax;            // upper bound of centrality bin
+
+  AliFlowTrackCuts     *fCutsRP; // track cuts for reference particles
+  AliFlowTrackCuts     *fNullCuts; // dummy cuts for flow event tracks
+  AliFlowEvent         *fFlowEvent; //! flow events 
+  TList        *fListHist;                //! List of  histograms
  
-  TList        *fListHistCascade;                 //! List of Cascade histograms
   TH1F  *fHistEventMultiplicity;           //! event multiplicity
   TH2F  *fHistTrackMultiplicity;           //! track multiplicity
   TH2F  *fHistTrackMultiplicityCentral;    //! track multiplicity
   TH2F  *fHistTrackMultiplicitySemiCentral;//! track multiplicity
   TH2F  *fHistTrackMultiplicityMB;         //! track multiplicity
+
   TH2F  *fhBB;                             //! ScatterPlot Total
   TH2F  *fhBBDeu;                          //! ScatterPlot Total
   TH2F  *fhPtDeu;                          //! correctet vs non correcter d pt
   TH2F  *fhTOF;                            //! ScatterPlot Total TOF
   TH1F  *fhMassTOF;                        //! Mass Distribution TOF
+  
+  //From Flow Analysis
+  TH2D *EPVzAvsCentrality  ; 
+  TH2D *EPVzCvsCentrality  ; 
+  TH2D *EPTPCvsCentrality  ; 
+  TH2D *EPVzvsCentrality   ; 
+  TH2D *EPTPCpvsCentrality ; 
+  TH2D *EPTPCnvsCentrality ; 
+  
+  //------------------------------
+  
+  TProfile *fSubEventDPhiv205; 
+  TProfile *fSubEventDPhiv2new05;
+  
+  TProfile *fSubEventDPhiv22040; 
+  TProfile *fSubEventDPhiv2new2040;
+  
+  TProfile *fSubEventDPhiv24060; 
+  TProfile *fSubEventDPhiv2new4060;
+  TH2F *hCos2DeltaPhiVzAvsCentrality;
+  TH2F *hCos2DeltaPhiVzCvsCentrality;
+  TH2F *hCos2DeltaPhiVzMvsCentrality;
+  TH2F *hCos2DeltaPhiTPCfvsCentrality;
+  TH2F *hCos2DeltaPhiTPCpvsCentrality;
+  TH2F *hCos2DeltaPhiTPCnvsCentrality;
+  //---------------------------------------------------------------------------
+  TH2F *hEvPlaneTPCvsEvPVz05;                      
+  TH2F *hEvPlaneTPCvsEvPVz075; 
+  TH2F *hEvPlaneTPCvsEvPVz1530;
+  TH2F *hEvPlaneTPCvsEvPVz3050;                      
+  TH2F *hEvPlaneTPCvsEvPVz2040;                      
+  TH2F *hEvPlaneTPCvsEvPVz4060;                      
+  
+  
+  // From D meson analysis
 
-  TH2F *hRPangleTPCvsCentrality;           //RESOLUTION Histrograms
-  TH2F *hPlaneResoTPCvsCentrality;
-  TH2F *hRPangleVZEROvsCentrality;
-  TH2F *hRPangleVZEROAvsCentrality;
-  TH2F *hRPangleVZEROCvsCentrality;
-  TH2F *hPlaneResoVZEROvsCentrality;
-  TH2F *hPlaneResoVZEROAvsCentrality;
-  TH2F *hPlaneResoVZEROCvsCentrality;
-  TH2F *hCosPhivsPt;                         
-  TH2F *hSinPhivsPt;                         
-  TH2F *hPhivsPt;                         
-  TH2F *hAntiCosPhivsPt;                     
-  TH2F *hAntiSinPhivsPt;                     
-  TH2F *hAntiPhivsPt;                     
-  TH2F *hCosDeltaPhivsPt075;                      
-  TH2F *hSinDeltaPhivsPt075;                      
-  TH2F *hDeltaPhivsPt075;                      
-  TH2F *hCosDeltaPhiVZEROvsPt075;                            
-  TH2F *hSinDeltaPhiVZEROvsPt075;                            
-  TH2F *hDeltaPhiVZEROvsPt075;                 
-  TH2F *hCosDeltaPhivsPt1530;                     
-  TH2F *hSinDeltaPhivsPt1530;                     
-  TH2F *hDeltaPhivsPt1530;                     
-  TH2F *hCosDeltaPhiVZEROvsPt1530;                
-  TH2F *hSinDeltaPhiVZEROvsPt1530;                
-  TH2F *hDeltaPhiVZEROvsPt1530;                
-  TH2F *hCosDeltaPhivsPt3050;                     
-  TH2F *hSinDeltaPhivsPt3050;                     
-  TH2F *hDeltaPhivsPt3050;                     
-  TH2F *hCosDeltaPhiVZEROvsPt3050;                
-  TH2F *hSinDeltaPhiVZEROvsPt3050;                
-  TH2F *hDeltaPhiVZEROvsPt3050;                
-  TH2F *hCosDeltaPhivsPt1550;                     
-  TH2F *hSinDeltaPhivsPt1550;                     
-  TH2F *hDeltaPhivsPt1550;                     
-  TH2F *hCosDeltaPhiVZEROvsPt1550;                
-  TH2F *hSinDeltaPhiVZEROvsPt1550;                
-  TH2F *hDeltaPhiVZEROvsPt1550;                
-  TH2F *hAntiCosDeltaPhivsPt075;                  
-  TH2F *hAntiSinDeltaPhivsPt075;                  
-  TH2F *hAntiDeltaPhivsPt075;                  
-  TH2F *hAntiCosDeltaPhiVZEROvsPt075;             
-  TH2F *hAntiSinDeltaPhiVZEROvsPt075;             
-  TH2F *hAntiDeltaPhiVZEROvsPt075;             
-  TH2F *hAntiCosDeltaPhivsPt1530;                 
-  TH2F *hAntiSinDeltaPhivsPt1530;                 
-  TH2F *hAntiDeltaPhivsPt1530;                 
-  TH2F *hAntiCosDeltaPhiVZEROvsPt1530;            
-  TH2F *hAntiSinDeltaPhiVZEROvsPt1530;            
-  TH2F *hAntiDeltaPhiVZEROvsPt1530;            
-  TH2F *hAntiCosDeltaPhivsPt3050;                 
-  TH2F *hAntiSinDeltaPhivsPt3050;                 
-  TH2F *hAntiDeltaPhivsPt3050;                 
-  TH2F *hAntiCosDeltaPhiVZEROvsPt3050;            
-  TH2F *hAntiSinDeltaPhiVZEROvsPt3050;            
-  TH2F *hAntiDeltaPhiVZEROvsPt3050;            
-  TH2F *hAntiCosDeltaPhivsPt1550;                 
-  TH2F *hAntiSinDeltaPhivsPt1550;                 
-  TH2F *hAntiDeltaPhivsPt1550;                 
-  TH2F *hAntiCosDeltaPhiVZEROvsPt1550;            
-  TH2F *hAntiSinDeltaPhiVZEROvsPt1550;            
-  TH2F *hAntiDeltaPhiVZEROvsPt1550;     
-
+  TH2F *hCos2DeltaPhivsPt075;                      
+  TH2F *hCos2DeltaPhiVZEROvsPt075;                 
+  TH2F *hCos2DeltaPhivsPt1530;                      
+  TH2F *hCos2DeltaPhiVZEROvsPt1530;                 
+  TH2F *hCos2DeltaPhivsPt3050;                      
+  TH2F *hCos2DeltaPhiVZEROvsPt3050;                 
+  TH2F *hCos2DeltaPhivsPt05;                      
+  TH2F *hCos2DeltaPhiVZEROvsPt05;                 
+  TH2F *hCos2DeltaPhivsPt2040;                      
+  TH2F *hCos2DeltaPhiVZEROvsPt2040;                 
+  TH2F *hCos2DeltaPhivsPt4060;                      
+  TH2F *hCos2DeltaPhiVZEROvsPt4060;                 
+  
+  
   AliESDtrackCuts * fESDtrackCuts; 
+  AliESDtrackCuts * fESDtrackCutsEP; 
   AliPIDResponse *fPIDResponse;   //! pointer to PID response
 
   //_______________________________________________________________________
 
   TTree *fNtuple1;                //! Some Information on the tracks
     
-  Double_t tEventNumber[7];       //ev number; run number; Bunch Cross - Orbit -  Period Number; #tracks; event type
-  Double_t tCentrality ;
-  Double_t tVertexCoord[3];
-  
-  //TRACKS
-  Double_t tPIDITS[9];            //n-signas different particle species ITS
-  Double_t tPIDTPC[9];            //n-signas different particle species TPC
-  Double_t tPIDTOF[9];            //n-signas different particle species TOF
-  Double_t tPulls[3];          //Pulls
+  Double_t tCentrality[2] ;       // Centrality + event type
+  Double_t tPulls[3];             // Pulls
  
-  Double_t tMomentum[3];          //pxpypz of the tracks
-  Double_t tTPCMomentum;          //momentum at theh TPC inner wall
-  Double_t tdEdx;                 //dEdx of the tracks
-  Double_t tEta;                  //eta of the tracks
+  Double_t tMomentum[4];          //pxpypz of the tracks +  corrected pt for d
   Double_t tDCA[2];               //dcaXY and dcaZ of the track
-  Double_t tTracksTPC[2];         //chi^2 and #TPCcluster
-  Double_t tITSclustermap;        //ITS cluster map
-  Double_t tITSsample[4];         //ITS samples 
   Int_t    tisTOF[2];             //isTOF, isOuterTPCwall   
   Double_t tTOFtrack[3];          //poutTPC,timeTOF,trackLenghtTOF;
-  Int_t    tCharge;               //Charge of the Track
-  Double_t tPtCorr;               //Corrected Momentum 
+  Int_t    tCharge;               //Charge of the Track (Pos or Neg)
   Double_t tPhi;                  //Phi 
   Double_t trpangleTPC;           //rpangleTPC
   Double_t trpangleVZERO[3];      //rpangleVZERO: V0M, V0A, V0C
   
+  // MC releted quantities
+
   Double_t tPDGCode;              //PDG code ptc
   Double_t tPDGCodeMum;           //PDG code mother ptc
   Double_t tIsPrimaryTr;
@@ -168,7 +158,6 @@ class AliAnalysisTaskNucleiv2 : public AliAnalysisTaskSE {
   
   TTree *fNtuple2;                  //! MC tree
 
-  Double_t tEventNumberMC[6];       //ev number; run number; Bunch Cross - Orbit -  Period Number; #tracks
   Double_t tCentralityMC;
   Double_t tVertexCoordMC[3];
   Double_t tMomentumMC[3];          //pxpypz of the tracks