]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
including changes from user fzhou
authormcosenti <mcosenti@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Jun 2012 10:38:00 +0000 (10:38 +0000)
committermcosenti <mcosenti@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Jun 2012 10:38:00 +0000 (10:38 +0000)
PWGGA/EMCALTasks/AliAnalysisTaskPi0V2.cxx
PWGGA/EMCALTasks/AliAnalysisTaskPi0V2.h

index 7f524578be68d8831b9096e99ea66d8e5510ebc6..e84bd125e0b814b7e3fe4269112c110737f47708 100644 (file)
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
 /* $Id: AliAnalysisTaskPi0V2.cxx 55404 2012-03-29 10:10:19Z fca $ */
 
+/* AliAnalysisTaskPi0V2.cxx
+ *
+ * Template task producing a P_t spectrum and pseudorapidity distribution.
+ * Includes explanations of physics and primary track selections
+ *
+ * Instructions for adding histograms can be found below, starting with NEW HISTO
+ *
+ * Based on tutorial example from offline pages
+ * Edited by Arvinder Palaha
+ */
 #include "AliAnalysisTaskPi0V2.h"
 
-#include <Riostream.h>
-#include <TCanvas.h>
-#include <TChain.h>
-#include <TH1F.h>
-#include <TH2F.h>
-#include <THnSparse.h>
-#include <TList.h>
-#include <TTree.h>
+#include "Riostream.h"
+#include "TChain.h"
+#include "TTree.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TH3F.h"
+#include "TCanvas.h"
+#include "TList.h"
 
-#include "AliAODEvent.h"
-#include "AliAnalysisManager.h"
 #include "AliAnalysisTaskSE.h"
-#include "AliEMCALGeometry.h"
+#include "AliAnalysisManager.h"
+#include "AliStack.h"
+#include "AliESDtrackCuts.h"
 #include "AliESDEvent.h"
 #include "AliESDInputHandler.h"
-#include "AliESDtrackCuts.h"
-#include "AliEventplane.h"
+#include "AliAODEvent.h"
 #include "AliMCEvent.h"
-#include "AliStack.h"
+
+#include "AliEventplane.h"
+#include "AliEMCALGeometry.h"
+#include "THnSparse.h"
 
 ClassImp(AliAnalysisTaskPi0V2)
 
 //________________________________________________________________________
-AliAnalysisTaskPi0V2::AliAnalysisTaskPi0V2() :
-  AliAnalysisTaskSE(),
-  fOutput(0),
-  fTrackCuts(0),
-  fESD(0),
-  fcheckEP2sub(1),
-  fCentrality(99.),
-  fEPTPC(-999.),
-  fEPTPCreso(0.), 
-  fEPV0(-999.), fEPV0A(-999.), fEPV0C(-999.), fEPV0Ar(-999.), fEPV0Cr(-999.), fEPV0r(-999.),
-  fEPV0AR4(-999.), fEPV0AR5(-999.), fEPV0AR6(-999.), fEPV0AR7(-999.), fEPV0CR0(-999.), fEPV0CR1(-999.), fEPV0CR2(-999.), fEPV0CR3(-999.),
-  hEPTPC(0), hresoTPC(0),
-  hEPV0(0), hEPV0A(0), hEPV0C(0), hEPV0Ar(0), hEPV0Cr(0), hEPV0r(0), hEPV0AR4(0), hEPV0AR7(0), hEPV0CR0(0), hEPV0CR3(0),
-  hdifV0A_V0CR0(0), hdifV0A_V0CR3(0), hdifV0ACR0_V0CR3(0), hdifV0C_V0AR4(0), hdifV0C_V0AR7(0), hdifV0AR4_V0AR7(0),
-  fHEPV0r(0), fHEPV0A(0), fHEPV0C(0), fHEPTPC(0)
+AliAnalysisTaskPi0V2::AliAnalysisTaskPi0V2() // All data members should be initialised here
+ //  :AliAnalysisTaskSE(),
+   :AliAnalysisTaskSE(),
+    fOutput(0),
+    fTrackCuts(0),
+    fESD(0),
+    fcheckEP2sub(1),
+    fCentrality(99.),
+    fEPTPC(-999.),
+    fEPTPCreso(0.), 
+    fEPV0(-999.), fEPV0A(-999.), fEPV0C(-999.), fEPV0Ar(-999.), fEPV0Cr(-999.), fEPV0r(-999.),
+    fEPV0AR4(-999.), fEPV0AR5(-999.), fEPV0AR6(-999.), fEPV0AR7(-999.), fEPV0CR0(-999.), fEPV0CR1(-999.), fEPV0CR2(-999.), fEPV0CR3(-999.),
+    hEPTPC(0), hresoTPC(0),
+    hEPV0(0), hEPV0A(0), hEPV0C(0), hEPV0Ar(0), hEPV0Cr(0), hEPV0r(0), hEPV0AR4(0), hEPV0AR7(0), hEPV0CR0(0), hEPV0CR3(0),
+    hdifV0A_V0CR0(0), hdifV0A_V0CR3(0), hdifV0ACR0_V0CR3(0), hdifV0C_V0AR4(0), hdifV0C_V0AR7(0), hdifV0AR4_V0AR7(0),
+    hdifV0A_V0C(0), hdifV0A_TPC(0), hdifV0C_TPC(0), hdifV0C_V0A(0), 
+    hdifEMC_EP(0), hdifful_EP(0), hdifout_EP(0),
+    fHEPV0r(0), fHEPV0A(0), fHEPV0C(0), fHEPTPC(0)
+
 {
-  // Dummy constructor.
+    // Dummy constructor ALWAYS needed for I/O.
+    DefineInput(0, TChain::Class());
+    DefineOutput(1, TList::Class());                                            // for output list
 }
 
 //________________________________________________________________________
-AliAnalysisTaskPi0V2::AliAnalysisTaskPi0V2(const char *name) :
-  AliAnalysisTaskSE(name),
-  fOutput(0),
-  fTrackCuts(0),
-  fESD(0),
-  fcheckEP2sub(1),
-  fCentrality(99.),
-  fEPTPC(-999.),
-  fEPTPCreso(0.),
-  fEPV0(-999.), fEPV0A(-999.), fEPV0C(-999.), fEPV0Ar(-999.), fEPV0Cr(-999.), fEPV0r(-999.),
-  fEPV0AR4(-999.), fEPV0AR5(-999.), fEPV0AR6(-999.), fEPV0AR7(-999.), fEPV0CR0(-999.), fEPV0CR1(-999.), fEPV0CR2(-999.), fEPV0CR3(-999.),
-  hEPTPC(0), hresoTPC(0),
-  hEPV0(0), hEPV0A(0), hEPV0C(0), hEPV0Ar(0), hEPV0Cr(0), hEPV0r(0), hEPV0AR4(0), hEPV0AR7(0), hEPV0CR0(0), hEPV0CR3(0),
-  hdifV0A_V0CR0(0), hdifV0A_V0CR3(0), hdifV0ACR0_V0CR3(0), hdifV0C_V0AR4(0), hdifV0C_V0AR7(0), hdifV0AR4_V0AR7(0),
-  fHEPV0r(0), fHEPV0A(0), fHEPV0C(0), fHEPTPC(0)
+AliAnalysisTaskPi0V2::AliAnalysisTaskPi0V2(const char *name) // All data members should be initialised here
+   :AliAnalysisTaskSE(name),
+    fOutput(0),
+    fTrackCuts(0),
+    fESD(0),
+    fcheckEP2sub(1),
+    fCentrality(99.),
+    fEPTPC(-999.),
+    fEPTPCreso(0.),
+    fEPV0(-999.), fEPV0A(-999.), fEPV0C(-999.), fEPV0Ar(-999.), fEPV0Cr(-999.), fEPV0r(-999.),
+    fEPV0AR4(-999.), fEPV0AR5(-999.), fEPV0AR6(-999.), fEPV0AR7(-999.), fEPV0CR0(-999.), fEPV0CR1(-999.), fEPV0CR2(-999.), fEPV0CR3(-999.),
+    hEPTPC(0), hresoTPC(0),
+    hEPV0(0), hEPV0A(0), hEPV0C(0), hEPV0Ar(0), hEPV0Cr(0), hEPV0r(0), hEPV0AR4(0), hEPV0AR7(0), hEPV0CR0(0), hEPV0CR3(0),
+    hdifV0A_V0CR0(0), hdifV0A_V0CR3(0), hdifV0ACR0_V0CR3(0), hdifV0C_V0AR4(0), hdifV0C_V0AR7(0), hdifV0AR4_V0AR7(0),
+    hdifV0A_V0C(0), hdifV0A_TPC(0), hdifV0C_TPC(0), hdifV0C_V0A(0),  
+    hdifEMC_EP(0), hdifful_EP(0), hdifout_EP(0),
+    fHEPV0r(0), fHEPV0A(0), fHEPV0C(0), fHEPTPC(0)
 {
-  // Constructor
-  // Define input and output slots here (never in the dummy constructor)
-  // Input slot #0 works with a TChain - it is connected to the default input container
-  // Output slot #1 writes into a TH1 container
-  DefineInput(0, TChain::Class());
-  DefineOutput(1, TList::Class());
+    // Constructor
+    // Define input and output slots here (never in the dummy constructor)
+    // Input slot #0 works with a TChain - it is connected to the default input container
+    // Output slot #1 writes into a TH1 container
+    DefineInput(0, TChain::Class());
+    DefineOutput(1, TList::Class());                                            // for output list
 }
 
 //________________________________________________________________________
 AliAnalysisTaskPi0V2::~AliAnalysisTaskPi0V2()
 {
-  // Destructor. Clean-up the output list, but not the histograms that are put inside
-  // (the list is owner and will clean-up these histograms). Protect in PROOF case.
-  if (fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
-    delete fOutput;
-  }
-  delete fTrackCuts;
+    // Destructor. Clean-up the output list, but not the histograms that are put inside
+    // (the list is owner and will clean-up these histograms). Protect in PROOF case.
+    if (fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
+        delete fOutput;
+    }
+    delete fTrackCuts;
 }
-
 //_____________________________________________________________________
 Double_t AliAnalysisTaskPi0V2::GetMaxCellEnergy(const AliVCluster *cluster, Short_t &id) const
 {
@@ -106,7 +140,6 @@ Double_t AliAnalysisTaskPi0V2::GetMaxCellEnergy(const AliVCluster *cluster, Shor
   }
   return maxe;
 }
-
 //_____________________________________________________________________
 Double_t AliAnalysisTaskPi0V2::GetCrossEnergy(const AliVCluster *cluster, Short_t &idmax) const
 {
@@ -157,7 +190,6 @@ Double_t AliAnalysisTaskPi0V2::GetCrossEnergy(const AliVCluster *cluster, Short_
 
   return crossEnergy;
 }
-
 //_____________________________________________________________________
 Bool_t AliAnalysisTaskPi0V2::IsWithinFiducialVolume(Short_t id) const
 {
@@ -175,7 +207,7 @@ Bool_t AliAnalysisTaskPi0V2::IsWithinFiducialVolume(Short_t id) const
   Bool_t okrow = kFALSE;
   Bool_t okcol = kFALSE;
 
-  AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance("EMCAL_COMPLETEV1");
+  AliEMCALGeometry *geom = AliEMCALGeometry::GetInstance();
   if (!geom)
     return kFALSE;
 
@@ -210,11 +242,9 @@ Bool_t AliAnalysisTaskPi0V2::IsWithinFiducialVolume(Short_t id) const
 
   return kFALSE;
 }
-
 //______________________________________________________________________
 Bool_t AliAnalysisTaskPi0V2::IsGoodCluster(const AliESDCaloCluster *c) const
 {
-  // Check if cluster is good cluster.
 
   if(!c)
     return kFALSE;
@@ -244,14 +274,17 @@ Bool_t AliAnalysisTaskPi0V2::IsGoodCluster(const AliESDCaloCluster *c) const
   if(c->GetM02() >0.5 )
     return kFALSE;
 
+//  if(c->M20 >)
+
   return kTRUE;
-}
 
+}
 //_____________________________________________________________________
 Bool_t AliAnalysisTaskPi0V2::IsGoodPion(const TLorentzVector &p1, const TLorentzVector &p2) const
 {
   // Is good pion?
 
+
   Double_t asym = TMath::Abs(p1.E()-p2.E())/(p1.E()+p2.E());
   if (asym>0.7)
     return kFALSE;
@@ -269,7 +302,6 @@ Bool_t AliAnalysisTaskPi0V2::IsGoodPion(const TLorentzVector &p1, const TLorentz
 
   return kTRUE;
 }
-
 //_______________________________________________________________________
 void AliAnalysisTaskPi0V2::FillPion(const TLorentzVector& p1, const TLorentzVector& p2, Double_t EPV0r, Double_t EPV0A, Double_t EPV0C, Double_t EPTPC)
 {
@@ -294,16 +326,20 @@ void AliAnalysisTaskPi0V2::FillPion(const TLorentzVector& p1, const TLorentzVect
   Double_t cos2phiV0C = TMath::Cos(2.*(dphiV0C));
   Double_t cos2phiTPC = TMath::Cos(2.*(dphiTPC));
 
-  dphiV0  = TVector2::Phi_0_2pi(dphiV0);  
-  dphiV0A = TVector2::Phi_0_2pi(dphiV0A);
-  dphiV0C = TVector2::Phi_0_2pi(dphiV0C);
-  dphiTPC = TVector2::Phi_0_2pi(dphiTPC);
+  if(dphiV0  < 0.)  dphiV0  += TMath::Pi();
+  if(dphiV0A < 0.)  dphiV0A += TMath::Pi();
+  if(dphiV0C < 0.)  dphiV0C += TMath::Pi();
+  if(dphiTPC < 0.)  dphiTPC += TMath::Pi();
 
   if(dphiV0  > TMath::Pi())  dphiV0  -= TMath::Pi();
   if(dphiV0A > TMath::Pi())  dphiV0A -= TMath::Pi();
   if(dphiV0C > TMath::Pi())  dphiV0C -= TMath::Pi();
   if(dphiTPC > TMath::Pi())  dphiTPC -= TMath::Pi();
 
+cout<<"cos2V0: "<<cos2phiV0<<"  cos2V0A: "<<cos2phiV0A<<"  cos2V0C: "<<cos2phiV0C<<endl;
+cout<<mass<<"  "<<pt<<"  "<<phi<<"  "<<endl;
+cout<<" dphiV0: "<<dphiV0<<"    dphiV0A: "<<dphiV0A<<"  dphiV0C: "<<dphiV0C<<"+++++++"<<endl;
+
   Double_t xV0[5]; // Match ndims in fH  V0 EP
   xV0[0]       = mass;
   xV0[1]       = pt;
@@ -335,8 +371,9 @@ void AliAnalysisTaskPi0V2::FillPion(const TLorentzVector& p1, const TLorentzVect
   xTPC[3]       = dphiTPC;
   xTPC[4]       = cos2phiTPC;
   fHEPTPC->Fill(xTPC);
-}
 
+
+}
 //_________________________________________________________________________________________________
 void AliAnalysisTaskPi0V2::GetMom(TLorentzVector& p, const AliESDCaloCluster *c, Double_t *vertex)
 {
@@ -359,193 +396,253 @@ void AliAnalysisTaskPi0V2::GetMom(TLorentzVector& p, const AliESDCaloCluster *c,
 
   Double_t rad = pos.Mag();
   p.SetPxPyPzE(e*pos.x()/rad, e*pos.y()/rad, e*pos.z()/rad, e);
-}
 
+}
 //________________________________________________________________________
 void AliAnalysisTaskPi0V2::UserCreateOutputObjects()
 {
-  // Create histograms.
+    // Create histograms
+    // Called once (on the worker node)
         
-  fOutput = new TList();
-  fOutput->SetOwner(); 
+    fOutput = new TList();
+    fOutput->SetOwner();  // IMPORTANT!
+    
+    fTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE);
+
+    hEPTPC   = new TH2F("hEPTPC",   "EPTPC     vs cent", 100, 0., 100., 152, 0., 3.2);
+    hresoTPC = new TH2F("hresoTPC", "TPc reso  vs cent", 100, 0., 100., 152, 0., 3.2);
+    hEPV0    = new TH2F("hEPV0",    "EPV0      vs cent", 100, 0., 100., 152, 0., 3.2);
+    hEPV0A   = new TH2F("hEPV0A",   "EPV0A     vs cent", 100, 0., 100., 152, 0., 3.2);
+    hEPV0C   = new TH2F("hEPV0C",   "EPV0C     vs cent", 100, 0., 100., 152, 0., 3.2);
+    hEPV0Ar  = new TH2F("hEPV0Ar",  "EPV0Ar    vs cent", 100, 0., 100., 152, 0., 3.2);
+    hEPV0Cr  = new TH2F("hEPV0Cr",  "EPV0Cr    vs cent", 100, 0., 100., 152, 0., 3.2);
+    hEPV0r   = new TH2F("hEPV0r",   "EPV0r     vs cent", 100, 0., 100., 152, 0., 3.2);
+    hEPV0AR4 = new TH2F("hEPV0AR4", "EPV0AR4   vs cent", 100, 0., 100., 152, 0., 3.2);
+    hEPV0AR7 = new TH2F("hEPV0AR7", "EPV0AR7   vs cent", 100, 0., 100., 152, 0., 3.2);
+    hEPV0CR0 = new TH2F("hEPV0CR0", "EPV0CR0   vs cent", 100, 0., 100., 152, 0., 3.2);
+    hEPV0CR3 = new TH2F("hEPV0CR3", "EPV0CR3   vs cent", 100, 0., 100., 152, 0., 3.2);
+    fOutput->Add(hEPTPC);
+    fOutput->Add(hresoTPC);
+    fOutput->Add(hEPV0);
+    fOutput->Add(hEPV0A);
+    fOutput->Add(hEPV0C);
+    fOutput->Add(hEPV0Ar);
+    fOutput->Add(hEPV0Cr);
+    fOutput->Add(hEPV0r);
+    fOutput->Add(hEPV0AR4);
+    fOutput->Add(hEPV0AR7);
+    fOutput->Add(hEPV0CR0);
+    fOutput->Add(hEPV0CR3);
+
+    hdifV0A_V0CR0    = new TH2F("hdifV0A_V0CR0",    "EP A-R0 ",  100, 0., 100., 152, 0., 3.2);    
+    hdifV0A_V0CR3    = new TH2F("hdifV0A_V0CR3",    "EP A-R3 ",  100, 0., 100., 152, 0., 3.2);    
+    hdifV0ACR0_V0CR3 = new TH2F("hdifV0ACR0_V0CR3", "EP R0-R3 ", 100, 0., 100., 152, 0., 3.2);    
+    hdifV0C_V0AR4    = new TH2F("hdifV0C_V0AR4",    "EP C-R4 ",  100, 0., 100., 152, 0., 3.2);    
+    hdifV0C_V0AR7    = new TH2F("hdifV0C_V0AR7",    "EP C-R7 ",  100, 0., 100., 152, 0., 3.2);    
+    hdifV0AR4_V0AR7  = new TH2F("hdifV0AR4_V0AR7",  "EP R4-R7 ", 100, 0., 100., 152, 0., 3.2);    
+    fOutput->Add(hdifV0A_V0CR0);
+    fOutput->Add(hdifV0A_V0CR3);
+    fOutput->Add(hdifV0ACR0_V0CR3);
+    fOutput->Add(hdifV0C_V0AR4);
+    fOutput->Add(hdifV0C_V0AR7);
+    fOutput->Add(hdifV0AR4_V0AR7);
+
+    hdifV0A_V0C = new TH2F("hdifV0A_V0C", "EP A-C  ", 100, 0., 100., 152, 0., 3.2);
+    hdifV0A_TPC = new TH2F("hdifV0A_TPC", "EP A-TPC", 100, 0., 100., 152, 0., 3.2);
+    hdifV0C_TPC = new TH2F("hdifV0C_TPC", "EP C-TPC", 100, 0., 100., 152, 0., 3.2);
+    hdifV0C_V0A = new TH2F("hdifV0C_V0A", "EP C-A  ", 100, 0., 100., 152, 0., 3.2);
+    fOutput->Add(hdifV0A_V0C);
+    fOutput->Add(hdifV0A_TPC);
+    fOutput->Add(hdifV0C_TPC);
+    fOutput->Add(hdifV0C_V0A);
+
+
+
+    hdifEMC_EP = new TH3F("hdifEMC_EP", "dif phi in EMC with EP",  100, 0., 100., 100., 0., TMath::Pi(), 15, 0., 15.);
+    hdifful_EP = new TH3F("hdifful_EP", "dif phi in full with EP", 100, 0., 100., 100., 0., TMath::Pi(), 15, 0., 15.);
+    hdifout_EP = new TH3F("hdifout_EP", "dif phi NOT in EMC with EP", 100, 0., 100., 100., 0., TMath::Pi(), 15, 0., 15.);
+    fOutput->Add(hdifEMC_EP);
+    fOutput->Add(hdifful_EP);
+    fOutput->Add(hdifout_EP);
+
+    const Int_t ndims = 5;
+    Int_t nMgg=500, nPt=40, nCent=20, nDeltaPhi=315,  ncos2phi=500;
+    Int_t bins[ndims] = {nMgg, nPt, nCent, nDeltaPhi, ncos2phi};
+    Double_t xmin[ndims] = { 0,   0.,  0,   0.,     -1.};
+    Double_t xmax[ndims] = { 0.5, 20., 100, 3.15,   1.};
+    fHEPV0r  = new THnSparseF("fHEPV0r",  "Flow histogram EPV0",  ndims, bins, xmin, xmax);
+    fHEPV0A = new THnSparseF("fHEPV0A",   "Flow histogram EPV0A", ndims, bins, xmin, xmax);
+    fHEPV0C = new THnSparseF("fHEPV0C",   "Flow histogram EPV0C", ndims, bins, xmin, xmax);
+    fHEPTPC = new THnSparseF("fHEPTPC",   "Flow histogram EPTPC", ndims, bins, xmin, xmax);
+    fOutput->Add(fHEPV0r);
+    fOutput->Add(fHEPV0A);
+    fOutput->Add(fHEPV0C);
+    fOutput->Add(fHEPTPC);
+
     
-  fTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE);
-
-  hEPTPC   = new TH2F("hEPTPC",   "EPTPC     vs cent", 100, 0., 100., 152, 0., 3.2);
-  hresoTPC = new TH2F("hresoTPC", "TPc reso  vs cent", 100, 0., 100., 152, 0., 3.2);
-  hEPV0    = new TH2F("hEPV0",    "EPV0      vs cent", 100, 0., 100., 152, 0., 3.2);
-  hEPV0A   = new TH2F("hEPV0A",   "EPV0A     vs cent", 100, 0., 100., 152, 0., 3.2);
-  hEPV0C   = new TH2F("hEPV0C",   "EPV0C     vs cent", 100, 0., 100., 152, 0., 3.2);
-  hEPV0Ar  = new TH2F("hEPV0Ar",  "EPV0Ar    vs cent", 100, 0., 100., 152, 0., 3.2);
-  hEPV0Cr  = new TH2F("hEPV0Cr",  "EPV0Cr    vs cent", 100, 0., 100., 152, 0., 3.2);
-  hEPV0r   = new TH2F("hEPV0r",   "EPV0r     vs cent", 100, 0., 100., 152, 0., 3.2);
-  hEPV0AR4 = new TH2F("hEPV0AR4", "EPV0AR4   vs cent", 100, 0., 100., 152, 0., 3.2);
-  hEPV0AR7 = new TH2F("hEPV0AR7", "EPV0AR7   vs cent", 100, 0., 100., 152, 0., 3.2);
-  hEPV0CR0 = new TH2F("hEPV0CR0", "EPV0CR0   vs cent", 100, 0., 100., 152, 0., 3.2);
-  hEPV0CR3 = new TH2F("hEPV0CR3", "EPV0CR3   vs cent", 100, 0., 100., 152, 0., 3.2);
-  fOutput->Add(hEPTPC);
-  fOutput->Add(hresoTPC);
-  fOutput->Add(hEPV0);
-  fOutput->Add(hEPV0A);
-  fOutput->Add(hEPV0C);
-  fOutput->Add(hEPV0Ar);
-  fOutput->Add(hEPV0Cr);
-  fOutput->Add(hEPV0r);
-  fOutput->Add(hEPV0AR4);
-  fOutput->Add(hEPV0AR7);
-  fOutput->Add(hEPV0CR0);
-  fOutput->Add(hEPV0CR3);
-
-  hdifV0A_V0CR0    = new TH2F("hdifV0A_V0CR0",    "EP A-R0 ",  100, 0., 100., 152, 0., 3.2);    
-  hdifV0A_V0CR3    = new TH2F("hdifV0A_V0CR3",    "EP A-R3 ",  100, 0., 100., 152, 0., 3.2);    
-  hdifV0ACR0_V0CR3 = new TH2F("hdifV0ACR0_V0CR3", "EP R0-R3 ", 100, 0., 100., 152, 0., 3.2);    
-  hdifV0C_V0AR4    = new TH2F("hdifV0C_V0AR4",    "EP C-R4 ",  100, 0., 100., 152, 0., 3.2);    
-  hdifV0C_V0AR7    = new TH2F("hdifV0C_V0AR7",    "EP C-R7 ",  100, 0., 100., 152, 0., 3.2);    
-  hdifV0AR4_V0AR7  = new TH2F("hdifV0AR4_V0AR7",  "EP R4-R7 ", 100, 0., 100., 152, 0., 3.2);    
-  fOutput->Add(hdifV0A_V0CR0);
-  fOutput->Add(hdifV0A_V0CR3);
-  fOutput->Add(hdifV0ACR0_V0CR3);
-  fOutput->Add(hdifV0C_V0AR4);
-  fOutput->Add(hdifV0C_V0AR7);
-  fOutput->Add(hdifV0AR4_V0AR7);
-
-  const Int_t ndims = 5;
-  Int_t nMgg=500, nPt=40, nCent=20, nDeltaPhi=315,  ncos2phi=500;
-  Int_t bins[ndims] = {nMgg, nPt, nCent, nDeltaPhi, ncos2phi};
-  Double_t xmin[ndims] = { 0,   0.,  0,   0.,     -1.};
-  Double_t xmax[ndims] = { 0.5, 20., 100, 3.15,   1.};
-  fHEPV0r  = new THnSparseF("fHEPV0r",  "Flow histogram EPV0",  ndims, bins, xmin, xmax);
-  fHEPV0A = new THnSparseF("fHEPV0A",   "Flow histogram EPV0A", ndims, bins, xmin, xmax);
-  fHEPV0C = new THnSparseF("fHEPV0C",   "Flow histogram EPV0C", ndims, bins, xmin, xmax);
-  fHEPTPC = new THnSparseF("fHEPTPC",   "Flow histogram EPTPC", ndims, bins, xmin, xmax);
-  fOutput->Add(fHEPV0r);
-  fOutput->Add(fHEPV0A);
-  fOutput->Add(fHEPV0C);
-  fOutput->Add(fHEPTPC);
-
-  PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
+
+    PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
 }
 
 //________________________________________________________________________
 void AliAnalysisTaskPi0V2::UserExec(Option_t *) 
 {
-  // Main loop.
-  
-  // Create pointer to reconstructed event
-  AliVEvent *event = InputEvent();
-  if (!event) { Printf("ERROR: Could not retrieve event"); return; }
-
-  // create pointer to event
-  fESD = dynamic_cast<AliESDEvent*>(event);
-  if (!fESD) {
-    AliError("Cannot get the ESD event");
-    return;
-  }  
-  const AliESDVertex* fvertex = fESD->GetPrimaryVertex();
-
-  if(!(fvertex->GetStatus())) return;
-  // if vertex is from spd vertexZ, require more stringent cut
-  if (fvertex->IsFromVertexerZ()) {
-    if (fvertex->GetDispersion()>0.02 ||  fvertex->GetZRes()>0.25 ) return; // bad vertex from VertexerZ
-  }
-  Double_t vertex[3] = {fvertex->GetX(), fvertex->GetY(), fvertex->GetZ()};
+    // Main loop
+    // Called for each event
+        
+        
+    // Create pointer to reconstructed event
+   AliVEvent *event = InputEvent();
+   if (!event) { Printf("ERROR: Could not retrieve event"); return; }
+
+    // create pointer to event
+    fESD = dynamic_cast<AliESDEvent*>(event);
+    if (!fESD) {
+        AliError("Cannot get the ESD event");
+        return;
+    }  
+    const AliESDVertex* fvertex = fESD->GetPrimaryVertex();
+
+    if(!(fvertex->GetStatus())) return;
+    // if vertex is from spd vertexZ, require more stringent cut
+    if (fvertex->IsFromVertexerZ()) {
+        if (fvertex->GetDispersion()>0.02 ||  fvertex->GetZRes()>0.25 ) return; // bad vertex from VertexerZ
+    }
+    Double_t vertex[3] = {fvertex->GetX(), fvertex->GetY(), fvertex->GetZ()};
 
-  if(fESD->GetCentrality()) {
-    fCentrality = 
-      fESD->GetCentrality()->GetCentralityPercentile("V0M");
-  }
+    if(fESD->GetCentrality()) {
+      fCentrality = 
+       fESD->GetCentrality()->GetCentralityPercentile("V0M");
+    }
 
-  AliEventplane *ep = fESD->GetEventplane();
-  if (ep) {
-    if (ep->GetQVector())
-      fEPTPC    = ep->GetQVector()->Phi()/2. ;
-    else
-      fEPTPC = -999.;
-    if (ep->GetQsub1()&&ep->GetQsub2())
-      fEPTPCreso  = TMath::Cos(2.*(ep->GetQsub1()->Phi()/2.-ep->GetQsub2()->Phi()/2.));
-    else
-      fEPTPCreso = -1;
-
-    fEPV0    = ep->GetEventplane("V0",  fESD);
-    fEPV0A   = ep->GetEventplane("V0A", fESD);
-    fEPV0C   = ep->GetEventplane("V0C", fESD);
-    Double_t qx=0, qy=0;
-    Double_t qxr=0, qyr=0;
-    fEPV0Ar  = ep->CalculateVZEROEventPlane(fESD, 4, 5, 2, qxr, qyr);
-    fEPV0Cr  = ep->CalculateVZEROEventPlane(fESD, 2, 3, 2, qx,  qy);
-    qxr += qx;
-    qyr += qy;
-    fEPV0r   = TMath::ATan2(qyr,qxr)/2.;
-    fEPV0AR4 = ep->CalculateVZEROEventPlane(fESD, 4, 2, qx, qy);
-    fEPV0AR5 = ep->CalculateVZEROEventPlane(fESD, 5, 2, qx, qy);
-    fEPV0AR6 = ep->CalculateVZEROEventPlane(fESD, 6, 2, qx, qy);
-    fEPV0AR7 = ep->CalculateVZEROEventPlane(fESD, 7, 2, qx, qy);
-    fEPV0CR0 = ep->CalculateVZEROEventPlane(fESD, 0, 2, qx, qy);
-    fEPV0CR1 = ep->CalculateVZEROEventPlane(fESD, 1, 2, qx, qy);
-    fEPV0CR2 = ep->CalculateVZEROEventPlane(fESD, 2, 2, qx, qy);
-    fEPV0CR3 = ep->CalculateVZEROEventPlane(fESD, 3, 2, qx, qy);
+    AliEventplane *ep = fESD->GetEventplane();
+      if (ep) {
+      if (ep->GetQVector())
+        fEPTPC    = ep->GetQVector()->Phi()/2. ;
+      else
+        fEPTPC = -999.;
+      if (ep->GetQsub1()&&ep->GetQsub2())
+        fEPTPCreso  = TMath::Cos(2.*(ep->GetQsub1()->Phi()/2.-ep->GetQsub2()->Phi()/2.));
+      else
+        fEPTPCreso = -1;
+
+      fEPV0    = ep->GetEventplane("V0",  fESD);
+      fEPV0A   = ep->GetEventplane("V0A", fESD);
+      fEPV0C   = ep->GetEventplane("V0C", fESD);
+      Double_t qx=0, qy=0;
+      Double_t qxr=0, qyr=0;
+      fEPV0Ar  = ep->CalculateVZEROEventPlane(fESD, 4, 5, 2, qxr, qyr);
+      fEPV0Cr  = ep->CalculateVZEROEventPlane(fESD, 2, 3, 2, qx,  qy);
+      qxr += qx;
+      qyr += qy;
+      fEPV0r   = TMath::ATan2(qyr,qxr)/2.;
+      fEPV0AR4 = ep->CalculateVZEROEventPlane(fESD, 4, 2, qx, qy);
+      fEPV0AR5 = ep->CalculateVZEROEventPlane(fESD, 5, 2, qx, qy);
+      fEPV0AR6 = ep->CalculateVZEROEventPlane(fESD, 6, 2, qx, qy);
+      fEPV0AR7 = ep->CalculateVZEROEventPlane(fESD, 7, 2, qx, qy);
+      fEPV0CR0 = ep->CalculateVZEROEventPlane(fESD, 0, 2, qx, qy);
+      fEPV0CR1 = ep->CalculateVZEROEventPlane(fESD, 1, 2, qx, qy);
+      fEPV0CR2 = ep->CalculateVZEROEventPlane(fESD, 2, 2, qx, qy);
+      fEPV0CR3 = ep->CalculateVZEROEventPlane(fESD, 3, 2, qx, qy);
 
-  }
+    }
 //cout<<" fEPV0:"<<fEPV0<<" fEPV0A:"<<fEPV0A<<" fEPV0C:"<<fEPV0C<<" fEPV0Ar:"<<fEPV0Ar<<" fEPV0Cr:"<<fEPV0Cr<<" fEPV0r:"<<fEPV0AR4<<" fEPV0AR7:"<<fEPV0AR7<<" fEPV0CR0:"<<fEPV0CR0<<" fEPV0CR3:"<<fEPV0CR3<<"--------------------------------------------"<<endl;
-  if(fcheckEP2sub){
-    if(fEPV0r<-2. || fEPV0Ar<-2. || fEPV0Cr<-2.) return; 
-  }
-  if(fcheckEP2sub){
-    if(fEPV0A<-2. || fEPV0C<-2. || fEPV0AR4<-2. || fEPV0AR7<-2. || fEPV0CR0<-2. || fEPV0CR3<-2.) return;
-  }
+    if(fcheckEP2sub){
+      if(fEPV0r<-2. || fEPV0Ar<-2. || fEPV0Cr<-2.) return; 
+    }
+    if(!fcheckEP2sub){
+      if(fEPV0A<-2. || fEPV0C<-2. || fEPV0AR4<-2. || fEPV0AR7<-2. || fEPV0CR0<-2. || fEPV0CR3<-2.) return;
+    }
 
-  if(fEPV0   < TMath::Pi())   fEPV0  += TMath::Pi();
-  if(fEPV0A  < TMath::Pi())   fEPV0A += TMath::Pi();
-  if(fEPV0C  < TMath::Pi())   fEPV0C += TMath::Pi();
-  if(fEPV0Ar < TMath::Pi())   fEPV0A += TMath::Pi();
-  if(fEPV0Cr < TMath::Pi())   fEPV0C += TMath::Pi();
-  if(fEPV0r  < TMath::Pi())   fEPV0A += TMath::Pi();
-  if(fEPV0AR4  < TMath::Pi())   fEPV0AR4 += TMath::Pi();
-  if(fEPV0AR7  < TMath::Pi())   fEPV0AR7 += TMath::Pi();
-  if(fEPV0CR0  < TMath::Pi())   fEPV0CR0 += TMath::Pi();
-  if(fEPV0CR3  < TMath::Pi())   fEPV0CR3 += TMath::Pi();
+   if(fEPV0   < TMath::Pi())   fEPV0  += TMath::Pi();
+   if(fEPV0A  < TMath::Pi())   fEPV0A += TMath::Pi();
+   if(fEPV0C  < TMath::Pi())   fEPV0C += TMath::Pi();
+   if(fEPV0Ar < TMath::Pi())   fEPV0A += TMath::Pi();
+   if(fEPV0Cr < TMath::Pi())   fEPV0C += TMath::Pi();
+   if(fEPV0r  < TMath::Pi())   fEPV0A += TMath::Pi();
+   if(fEPV0AR4  < TMath::Pi())   fEPV0AR4 += TMath::Pi();
+   if(fEPV0AR7  < TMath::Pi())   fEPV0AR7 += TMath::Pi();
+   if(fEPV0CR0  < TMath::Pi())   fEPV0CR0 += TMath::Pi();
+   if(fEPV0CR3  < TMath::Pi())   fEPV0CR3 += TMath::Pi();
   
 //cout<<" fEPV0:"<<fEPV0<<" fEPV0A:"<<fEPV0A<<" fEPV0C:"<<fEPV0C<<" fEPV0Ar:"<<fEPV0Ar<<" fEPV0Cr:"<<fEPV0Cr<<" fEPV0r:"<<fEPV0AR4<<" fEPV0AR7:"<<fEPV0AR7<<" fEPV0CR0:"<<fEPV0CR0<<" fEPV0CR3:"<<fEPV0CR3<<"--------------------------------------------"<<endl;
-  hEPTPC->Fill(fCentrality,  fEPTPC); 
-  if(fEPTPCreso!=-1) hresoTPC->Fill(fCentrality, fEPTPCreso);
-  hEPV0->Fill(fCentrality,   fEPV0);
-  hEPV0A->Fill(fCentrality,  fEPV0A);
-  hEPV0C->Fill(fCentrality,  fEPV0C);
-  hEPV0Ar->Fill(fCentrality, fEPV0Ar);
-  hEPV0Cr->Fill(fCentrality, fEPV0Cr);
-  hEPV0r->Fill(fCentrality,  fEPV0r);
-
-  hdifV0A_V0CR0->Fill(fCentrality, TMath::Cos(2.*(fEPV0A - fEPV0CR0)));
-  hdifV0A_V0CR3->Fill(fCentrality, TMath::Cos(2.*(fEPV0A - fEPV0CR3)));
-  hdifV0ACR0_V0CR3->Fill(fCentrality, TMath::Cos(2*(fEPV0CR0 - fEPV0CR3)));
-  hdifV0C_V0AR4->Fill(fCentrality, TMath::Cos(2*(fEPV0C - fEPV0AR4)));
-  hdifV0C_V0AR7->Fill(fCentrality, TMath::Cos(2*(fEPV0C - fEPV0AR7)));
-  hdifV0AR4_V0AR7->Fill(fCentrality, TMath::Cos(2*(fEPV0AR4 - fEPV0AR7)));
+   hEPTPC->Fill(fCentrality,  fEPTPC); 
+   if(fEPTPCreso!=-1) hresoTPC->Fill(fCentrality, fEPTPCreso);
+   hEPV0->Fill(fCentrality,   fEPV0);
+   hEPV0A->Fill(fCentrality,  fEPV0A);
+   hEPV0C->Fill(fCentrality,  fEPV0C);
+   hEPV0Ar->Fill(fCentrality, fEPV0Ar);
+   hEPV0Cr->Fill(fCentrality, fEPV0Cr);
+   hEPV0r->Fill(fCentrality,  fEPV0r);
+
+   hdifV0A_V0CR0->Fill(fCentrality, TMath::Cos(2.*(fEPV0A - fEPV0CR0)));
+   hdifV0A_V0CR3->Fill(fCentrality, TMath::Cos(2.*(fEPV0A - fEPV0CR3)));
+   hdifV0ACR0_V0CR3->Fill(fCentrality, TMath::Cos(2*(fEPV0CR0 - fEPV0CR3)));
+   hdifV0C_V0AR4->Fill(fCentrality, TMath::Cos(2*(fEPV0C - fEPV0AR4)));
+   hdifV0C_V0AR7->Fill(fCentrality, TMath::Cos(2*(fEPV0C - fEPV0AR7)));
+   hdifV0AR4_V0AR7->Fill(fCentrality, TMath::Cos(2*(fEPV0AR4 - fEPV0AR7)));
         
-  // Cluster loop for reconstructed event
+   hdifV0A_V0C->Fill(fCentrality, TMath::Cos(2*(fEPV0A - fEPV0C)));
+   hdifV0A_TPC->Fill(fCentrality, TMath::Cos(2*(fEPV0A - fEPTPC)));
+   hdifV0C_TPC->Fill(fCentrality, TMath::Cos(2*(fEPV0C - fEPTPC)));
+   hdifV0C_V0A->Fill(fCentrality, TMath::Cos(2*(fEPV0C - fEPV0A)));
+    // Cluster loop for reconstructed event
    
-  Int_t nCluster =  fESD->GetNumberOfCaloClusters(); 
-  for(Int_t i=0; i<nCluster; ++i){
-    AliESDCaloCluster *c1 = fESD->GetCaloCluster(i);
-    if(!IsGoodCluster(c1)) continue;
-    for(Int_t j=i+1; j<nCluster; ++j){
-      AliESDCaloCluster *c2 = fESD->GetCaloCluster(j);
-      if(!IsGoodCluster(c2)) continue;
-      TLorentzVector p1;
-      GetMom(p1, c1, vertex);
-      TLorentzVector p2;
-      GetMom(p2, c2, vertex);
-      FillPion(p1, p2, fEPV0r, fEPV0A, fEPV0C, fEPTPC);
-    } 
-  }
+    Int_t nCluster =  fESD->GetNumberOfCaloClusters(); 
+    for(Int_t i=0; i<nCluster; ++i){
+      AliESDCaloCluster *c1 = fESD->GetCaloCluster(i);
+      if(!IsGoodCluster(c1)) continue;
+      for(Int_t j=i+1; j<nCluster; ++j){
+       AliESDCaloCluster *c2 = fESD->GetCaloCluster(j);
+        if(!IsGoodCluster(c2)) continue;
+        TLorentzVector p1;
+        GetMom(p1, c1, vertex);
+        TLorentzVector p2;
+        GetMom(p2, c2, vertex);
+        FillPion(p1, p2, fEPV0r, fEPV0A, fEPV0C, fEPTPC);
+      } 
+    }
+
 
-  // NEW HISTO should be filled before this point, as PostData puts the
-  // information for this iteration of the UserExec in the container
-  PostData(1, fOutput);
+    Int_t nTrack = fESD->GetNumberOfTracks();
+    for(Int_t i=0; i<nTrack; ++i){
+        AliESDtrack* esdtrack = fESD->GetTrack(i); // pointer to reconstructed to track          
+        if(!esdtrack) {
+            AliError(Form("ERROR: Could not retrieve esdtrack %d",i));
+            continue;
+        }
+       Double_t tPhi = esdtrack->Phi();
+       Double_t tPt  = esdtrack->Pt();
+//     if(tPhi*TMath::RadToDeg() > 80. && tPhi*TMath::RadToDeg()<180.){
+       if(esdtrack->IsEMCAL()){        
+          hdifEMC_EP->Fill(fCentrality, tPhi-fEPV0r, tPt);
+       }else{
+         hdifout_EP->Fill(fCentrality, tPhi-fEPV0r, tPt);
+       }
+       hdifful_EP->Fill(fCentrality, tPhi-fEPV0r, tPt);
+    }
+
+    // NEW HISTO should be filled before this point, as PostData puts the
+    // information for this iteration of the UserExec in the container
+    PostData(1, fOutput);
 }
 
+
 //________________________________________________________________________
 void AliAnalysisTaskPi0V2::Terminate(Option_t *) 
 {
-  // Called once at the end of the query.
+    // Draw result to screen, or perform fitting, normalizations
+    // Called once at the end of the query
+//    fOutput = dynamic_cast<TList*> (GetOutputData(1));
+ //   if(!fOutput) { Printf("ERROR: could not retrieve TList fOutput"); return; }
+        
+    // Get the physics selection histograms with the selection statistics
+    //AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+    //AliESDInputHandler *inputH = dynamic_cast<AliESDInputHandler*>(mgr->GetInputEventHandler());
+    //TH2F *histStat = (TH2F*)inputH->GetStatistics();
+   
+   
+    // NEW HISTO should be retrieved from the TList container in the above way,
+    // so it is available to draw on a canvas such as below
+
 }
index b1e56568c51278fa1b8d9f8b932b957ad3d75bf8..7fd4c306977eef745e4a8aaac8fa9533fac3e065 100644 (file)
-#ifndef ALIANALYSISTASKPI0V2_H
-#define ALIANALYSISTASKPI0V2_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
 
-// $Id: $
+/* $Id: AliAnalysisTaskPi0V2.h 45956 2010-12-10 12:55:37Z agheata $ */
+/* AliAnalysisTaskPi0V2.h
+ *
+ * Template task producing a P_t spectrum and pseudorapidity distribution.
+ * Includes explanations of physics and primary track selections
+ *
+ * Based on tutorial example from offline pages
+ * Edited by Arvinder Palaha
+ */
+#ifndef ALIANALYSISTASKEX01_H
+#define ALIANALYSISTASKEX01_H
 
 class TH1F;
 class TH2F;
-class THnSparse;
+class TH3F;
 class TList;
 class AliESDCaloCluster;
 class AliESDtrackCuts;
 class AliESDEvent;
+class THnSparse;
 
+#ifndef ALIANALYSISTASKSE_H
 #include "AliAnalysisTaskSE.h"
+#endif
 
 class AliAnalysisTaskPi0V2 : public AliAnalysisTaskSE {
  public:
-  AliAnalysisTaskPi0V2();
-  AliAnalysisTaskPi0V2(const char *name);
-  virtual ~AliAnalysisTaskPi0V2();
+    AliAnalysisTaskPi0V2();
+    AliAnalysisTaskPi0V2(const char *name);
+    virtual ~AliAnalysisTaskPi0V2();
     
-  virtual void     UserCreateOutputObjects();
-  virtual void     UserExec(Option_t *option);
-  virtual void     Terminate(Option_t *);
-  
-  Double_t        GetCrossEnergy(const AliVCluster *cluster, Short_t &idmax) const;
-  Double_t        GetMaxCellEnergy(const AliVCluster *cluster, Short_t &id) const;
-  void                    GetMom(TLorentzVector& p, const AliESDCaloCluster *c, Double_t *vertex);             
-  Bool_t          IsGoodCluster(const AliESDCaloCluster *c) const;
-  Bool_t          IsGoodPion(const TLorentzVector& p1, const TLorentzVector& p2) const;
-  Bool_t          IsWithinFiducialVolume(Short_t id) const;
-  void            FillPion(const TLorentzVector& p1, const TLorentzVector& p2, Double_t EPV0r, Double_t EPV0A, Double_t EPV0C, Double_t EPTPC);
-  void            SetsubEventMethod(Bool_t b ) { fcheckEP2sub =b ;}
+    virtual void     UserCreateOutputObjects();
+    virtual void     UserExec(Option_t *option);
+    virtual void     Terminate(Option_t *);
+    Double_t           GetCrossEnergy(const AliVCluster *cluster, Short_t &idmax) const;
+    Double_t           GetMaxCellEnergy(const AliVCluster *cluster, Short_t &id) const;
+    Bool_t             IsWithinFiducialVolume(Short_t id) const;
+    Bool_t             IsGoodCluster(const AliESDCaloCluster *c) const;
+    Bool_t             IsGoodPion(const TLorentzVector& p1, const TLorentzVector& p2) const;
+    void               FillPion(const TLorentzVector& p1, const TLorentzVector& p2, Double_t EPV0r, Double_t EPV0A, Double_t EPV0C, Double_t EPTPC);
+    void               GetMom(TLorentzVector& p, const AliESDCaloCluster *c, Double_t *vertex);                
+    void               SetsubEventMethod(Bool_t b )    { fcheckEP2sub =b ;}
+
     
  private:
-  TList                *fOutput;          // Output list
-  AliESDtrackCuts      *fTrackCuts;       // Track cuts
-  AliESDEvent          *fESD;             //!ESD object
-  Bool_t                fcheckEP2sub;     //! do 2 sub event method
-  Double_t              fCentrality;      //! Centrality
-  Double_t              fEPTPC;           //! Evt plane TPC
-  Double_t              fEPTPCreso;       //! resolution of TPC method
-  Double_t              fEPV0;            //! EP V0
-  Double_t              fEPV0A;           //! EP V0A
-  Double_t              fEPV0C;           //! EP V0C
-  Double_t              fEPV0Ar;          //! EP V0A reduced
-  Double_t              fEPV0Cr;          //! EP V0C reduced
-  Double_t              fEPV0r;           //! EP V0 reduced
-  Double_t              fEPV0AR4;         //! EP V0A ring4 only
-  Double_t              fEPV0AR5;         //! EP V0A ring5 only
-  Double_t              fEPV0AR6;         //! EP V0A ring6 only
-  Double_t              fEPV0AR7;         //! EP V0A ring7 only
-  Double_t              fEPV0CR0;         //! EP V0C ring0 only        
-  Double_t              fEPV0CR1;         //! EP V0C ring1 only        
-  Double_t              fEPV0CR2;         //! EP V0C ring2 only        
-  Double_t              fEPV0CR3;         //! EP V0C ring3 only        
-  TH2F                 *hEPTPC;           //! 2-D histo EPTPC  vs cent
-  TH2F                 *hresoTPC;         //! 2-D histo TPC resolution vs cent
-  TH2F                 *hEPV0;            //! 2-D histo EPV0   vs cent
-  TH2F                 *hEPV0A;           //! 2-D histo EPV0A  vs cent
-  TH2F                 *hEPV0C;           //! 2-D histo EPV0C  vs cent
-  TH2F                 *hEPV0Ar;          //! 2-D histo EPV0Ar vs cent
-  TH2F                 *hEPV0Cr;          //! 2-D histo EPV0Cr vs cent
-  TH2F                 *hEPV0r;           //! 2-D histo EPV0r  vs cent
-  TH2F                 *hEPV0AR4;         //! 2-D histo EPV0AR4 vs cent
-  TH2F                 *hEPV0AR7;         //! 2-D histo EPV0AR7 vs cent
-  TH2F                 *hEPV0CR0;         //! 2-D histo EPV0AR0 vs cent
-  TH2F                 *hEPV0CR3;         //! 2-D histo EPV0AR3 vs cent
-  TH2F                 *hdifV0A_V0CR0;    //! 2-D histo diff V0A, V0CR0 vs cent
-  TH2F                 *hdifV0A_V0CR3;    //! 2-D histo diff V0A, V0CR3 vs cent
-  TH2F                 *hdifV0ACR0_V0CR3; //! 2-D histo diff V0CR0, V0CR3 vs cent
-  TH2F                 *hdifV0C_V0AR4;    //! 2-D histo diff V0C, V0AR4 vs cent
-  TH2F                 *hdifV0C_V0AR7;    //! 2-D histo diff V0C, V0AR7 vs cent
-  TH2F                 *hdifV0AR4_V0AR7;  //! 2-D histo diff V0AR7, V0AR4 vs cent
-  THnSparse             *fHEPV0r;          //! Flow 4-D Histo
-  THnSparse             *fHEPV0A;          //! Flow 4-D Histo
-  THnSparse             *fHEPV0C;          //! Flow 4-D Histo
-  THnSparse             *fHEPTPC;          //! Flow 4-D Histo
-  
-  AliAnalysisTaskPi0V2(const AliAnalysisTaskPi0V2&); // not implemented
-  AliAnalysisTaskPi0V2& operator=(const AliAnalysisTaskPi0V2&); // not implemented
+    TList                      *fOutput;        // Output list
+    AliESDtrackCuts            *fTrackCuts;     // Track cuts
+    AliESDEvent                        *fESD;          //!ESD object
+
+    Bool_t                     fcheckEP2sub;   //! do 2 sub event method
+    // NEW HISTO to be declared here
+    Double_t                   fCentrality;    //! Centrality
+    Double_t                   fEPTPC; //! Evt plane TPC
+    Double_t                   fEPTPCreso;     //! resolution of TPC method
+    Double_t                   fEPV0;          //! EP V0
+    Double_t                   fEPV0A; //! EP V0A
+    Double_t                   fEPV0C; //! EP V0C
+    Double_t                   fEPV0Ar;        //! EP V0A reduced
+    Double_t                   fEPV0Cr;        //! EP V0C reduced
+    Double_t                   fEPV0r; //! EP V0 reduced
+    Double_t                   fEPV0AR4;       //! EP V0A ring4 only
+    Double_t                   fEPV0AR5;       //! EP V0A ring5 only
+    Double_t                   fEPV0AR6;       //! EP V0A ring6 only
+    Double_t                   fEPV0AR7;       //! EP V0A ring7 only
+    Double_t                   fEPV0CR0;       //! EP V0C ring0 only   
+    Double_t                   fEPV0CR1;       //! EP V0C ring1 only   
+    Double_t                   fEPV0CR2;       //! EP V0C ring2 only   
+    Double_t                   fEPV0CR3;       //! EP V0C ring3 only   
+
+    TH2F                       *hEPTPC;        //! 2-D histo EPTPC  vs cent
+    TH2F                       *hresoTPC;      //! 2-D histo TPC resolution vs cent
+    TH2F                       *hEPV0;         //! 2-D histo EPV0   vs cent
+    TH2F                       *hEPV0A;        //! 2-D histo EPV0A  vs cent
+    TH2F                       *hEPV0C;        //! 2-D histo EPV0C  vs cent
+    TH2F                       *hEPV0Ar;       //! 2-D histo EPV0Ar vs cent
+    TH2F                       *hEPV0Cr;       //! 2-D histo EPV0Cr vs cent
+    TH2F                       *hEPV0r;        //! 2-D histo EPV0r  vs cent
+    TH2F                       *hEPV0AR4;      //! 2-D histo EPV0AR4 vs cent
+    TH2F                       *hEPV0AR7;      //! 2-D histo EPV0AR7 vs cent
+    TH2F                       *hEPV0CR0;      //! 2-D histo EPV0AR0 vs cent
+    TH2F                       *hEPV0CR3;      //! 2-D histo EPV0AR3 vs cent
+
+    TH2F                       *hdifV0A_V0CR0;         //! 2-D histo diff V0A, V0CR0 vs cent
+    TH2F                       *hdifV0A_V0CR3;         //! 2-D histo diff V0A, V0CR3 vs cent
+    TH2F                       *hdifV0ACR0_V0CR3;      //! 2-D histo diff V0CR0, V0CR3 vs cent
+    TH2F                       *hdifV0C_V0AR4;         //! 2-D histo diff V0C, V0AR4 vs cent
+    TH2F                       *hdifV0C_V0AR7;         //! 2-D histo diff V0C, V0AR7 vs cent
+    TH2F                       *hdifV0AR4_V0AR7;       //! 2-D histo diff V0AR7, V0AR4 vs cent
+
+    TH2F                       *hdifV0A_V0C;           //! 2-D histo diff V0A - V0C
+    TH2F                       *hdifV0A_TPC;           //! 2-D histo diff V0A - TPC
+    TH2F                       *hdifV0C_TPC;           //! 2-D histo diff V0C - TPC
+    TH2F                       *hdifV0C_V0A;           //! 2-D histo diff V0C - V0A
+
+    TH3F                       *hdifEMC_EP;            //! 2-D histo dif phi in EMC with EP
+    TH3F                       *hdifful_EP;            //! 2-D histo dif phi in full with EP
+    TH3F                       *hdifout_EP;            //! 2-D histo dif phi NOT in EMC with EP
+
+    THnSparse                   *fHEPV0r;         //! Flow 4-D Histo
+    THnSparse                   *fHEPV0A;        //! Flow 4-D Histo
+    THnSparse                   *fHEPV0C;        //! Flow 4-D Histo
+    THnSparse                   *fHEPTPC;        //! Flow 4-D Histo
+
+    
     
-  ClassDef(AliAnalysisTaskPi0V2, 1); // example of analysis
+    AliAnalysisTaskPi0V2(const AliAnalysisTaskPi0V2&); // not implemented
+    AliAnalysisTaskPi0V2& operator=(const AliAnalysisTaskPi0V2&); // not implemented
+    
+    ClassDef(AliAnalysisTaskPi0V2, 1); // example of analysis
 };
+
 #endif
+