]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGCF/Correlations/DPhi/AliAnalysisTaskDptDptCorrelations.cxx
Merge branch 'TPCdev'
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / AliAnalysisTaskDptDptCorrelations.cxx
index c76cf92063ba26d3ae136e342161bb4e1359385a..3d0359d48be036c8021fc7fa590a38790e514b51 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/* $Id:$ */
+#include "TChain.h"
+#include "TList.h"
+#include "TFile.h"
+#include "TTree.h"
+#include "TH1D.h"
+#include "TH2D.h"
+#include "TH3D.h"
+#include "THnSparse.h"
+#include "TCanvas.h"
 
 #include <TROOT.h>
 #include <TChain.h>
@@ -33,7 +41,6 @@
 
 #include "AliAODHandler.h"
 #include "AliAODInputHandler.h"
-//#include "AliAODMCParticle.h"
 #include "AliInputEventHandler.h"
 #include "AliLog.h"
 #include "AliESDEvent.h"
 #include "AliCentrality.h"
 #include "AliAnalysisTaskDptDptCorrelations.h"
 
+#include "AliPID.h"
+#include "AliPIDResponse.h"
+
+#include "AliESDVertex.h"
+#include "AliESDEvent.h"
+#include "AliESDInputHandler.h"
+#include "AliAODEvent.h"
+#include "AliAODTrack.h"
+#include "AliAODInputHandler.h"
+#include "AliESD.h"
+#include "AliESDEvent.h"
+#include "AliAODEvent.h"
+#include "AliStack.h"
+#include "AliESDtrackCuts.h"
+#include "AliAODMCHeader.h"
+
+
+#include "AliGenHijingEventHeader.h"
+#include "AliGenEventHeader.h"
+#include "AliPID.h"
+#include "AliAODPid.h"
+#include "AliPIDResponse.h"
+#include "AliAODpidUtil.h"
+#include "AliPIDCombined.h"
+
+
 ClassImp(AliAnalysisTaskDptDptCorrelations)
 
 AliAnalysisTaskDptDptCorrelations::AliAnalysisTaskDptDptCorrelations()
@@ -49,6 +82,7 @@ AliAnalysisTaskDptDptCorrelations::AliAnalysisTaskDptDptCorrelations()
 fAODEvent(0), 
 fESDEvent(0),             //! ESD Event 
 fInputHandler(0),
+fPIDResponse(0x0),
 _outputHistoList(0),
 _twoPi         ( 2.0 * 3.1415927),
 _eventCount    ( 0), 
@@ -69,12 +103,13 @@ _requestedCharge_1    (   1),
 _requestedCharge_2    (  -1),
 _dcaZMin              ( -3), 
 _dcaZMax              (  3.), 
-_dcaXYMin             ( -3.), 
-_dcaXYMax             (  3.),
+_dcaXYMin             ( -2.4), 
+_dcaXYMax             (  2.4),
 _dedxMin              ( 0),
 _dedxMax              ( 100000),
-_nClusterMin          ( 70), 
-_trackFilterBit       ( 128),
+_nClusterMin          ( 80), 
+_trackFilterBit       (0),
+fNSigmaCut            (3.),
 _field    ( 1.),
 _nTracks  ( 0 ),
 _mult0    ( 0 ),
@@ -82,6 +117,7 @@ _mult1    ( 0 ),
 _mult2    ( 0 ),
 _mult3    ( 0 ),
 _mult4    ( 0 ),
+_mult4a    ( 0 ),
 _mult5    ( 0 ),
 _mult6    ( 0 ),
 arraySize ( 2000),
@@ -118,7 +154,7 @@ _nBins_vertexZ(40),   _min_vertexZ(-10), _max_vertexZ(10),        _width_vertexZ
 
 _nBins_pt_1(18),      _min_pt_1(0.2),    _max_pt_1(2.0),          _width_pt_1(0.1),
 _nBins_phi_1(72),     _min_phi_1(0),     _max_phi_1(2.*3.1415927),_width_phi_1(2.*3.1415927/72.),
-_nBins_eta_1(20),     _min_eta_1(-1),    _max_eta_1(1),           _width_eta_1(0.1),
+_nBins_eta_1(0),      _min_eta_1(0),  _max_eta_1(0),           _width_eta_1(0.1),
 
 _nBins_etaPhi_1(0), 
 _nBins_etaPhiPt_1(0),
@@ -126,7 +162,7 @@ _nBins_zEtaPhiPt_1(0),
 
 _nBins_pt_2(18),     _min_pt_2(0.2),     _max_pt_2(2.0),          _width_pt_2(0.1),
 _nBins_phi_2(72),    _min_phi_2(0),      _max_phi_2(2.*3.1415927),_width_phi_2(2.*3.1415927/72),
-_nBins_eta_2(20),    _min_eta_2(-1),     _max_eta_2(1),           _width_eta_2(0.1),
+_nBins_eta_2(0),     _min_eta_2(0),     _max_eta_2(0),           _width_eta_2(0.1),
 
 _nBins_etaPhi_2(0), 
 _nBins_etaPhiPt_2(0),
@@ -171,14 +207,21 @@ _m3 ( 0),
 _m4 ( 0),
 _m5 ( 0),
 _m6 ( 0),
-_vertexZ           ( 0),
+_vertexZ ( 0),
+  
+_Ncluster1  ( 0),
+_Ncluster2  ( 0),
+_etadis ( 0),
+_phidis ( 0),
+_dcaz   ( 0),
+_dcaxy  ( 0),
 _n1_1_vsPt         ( 0),         
 _n1_1_vsEtaVsPhi   ( 0),
 _s1pt_1_vsEtaVsPhi ( 0), 
 _n1_1_vsZVsEtaVsPhiVsPt ( 0),
-_n1_1_vsM          ( 0),  // w/ weight
+_n1_1_vsM          ( 0), 
 _s1pt_1_vsM        ( 0),
-_n1Nw_1_vsM        ( 0), // w/o weight
+_n1Nw_1_vsM        ( 0),
 _s1ptNw_1_vsM      ( 0),
 _dedxVsP_1         ( 0),
 _corrDedxVsP_1     ( 0),
@@ -322,6 +365,7 @@ AliAnalysisTaskDptDptCorrelations::AliAnalysisTaskDptDptCorrelations(const TStri
 fAODEvent(0), 
 fESDEvent(0),  
 fInputHandler(0),
+fPIDResponse(0),
 _outputHistoList(0),
 _twoPi         ( 2.0 * 3.1415927),
 _eventCount    ( 0), 
@@ -342,12 +386,13 @@ _requestedCharge_1    (   1),
 _requestedCharge_2    (  -1),
 _dcaZMin              ( -3), 
 _dcaZMax              (  3.), 
-_dcaXYMin             ( -3.), 
-_dcaXYMax             (  3.),
+_dcaXYMin             ( -2.4), 
+_dcaXYMax             (  2.4),
 _dedxMin              ( 0),
 _dedxMax              ( 100000),
-_nClusterMin          ( 70), 
-_trackFilterBit       ( 128),
+_nClusterMin          ( 80), 
+_trackFilterBit       ( 0),
+fNSigmaCut            ( 3.),
 _field    ( 1.),
 _nTracks  ( 0 ),
 _mult0    ( 0 ),
@@ -355,6 +400,7 @@ _mult1    ( 0 ),
 _mult2    ( 0 ),
 _mult3    ( 0 ),
 _mult4    ( 0 ),
+_mult4a    ( 0 ),
 _mult5    ( 0 ),
 _mult6    ( 0 ),
 arraySize ( 2000),
@@ -391,7 +437,7 @@ _nBins_vertexZ(40),   _min_vertexZ(-10), _max_vertexZ(10),        _width_vertexZ
 
 _nBins_pt_1(18),      _min_pt_1(0.2),    _max_pt_1(2.0),          _width_pt_1(0.1),
 _nBins_phi_1(72),     _min_phi_1(0),     _max_phi_1(2.*3.1415927),_width_phi_1(2.*3.1415927/72.),
-_nBins_eta_1(20),     _min_eta_1(-1),    _max_eta_1(1),           _width_eta_1(0.1),
+_nBins_eta_1(0),      _min_eta_1(0),    _max_eta_1(0),           _width_eta_1(0.1),
 
 _nBins_etaPhi_1(0), 
 _nBins_etaPhiPt_1(0),
@@ -399,7 +445,7 @@ _nBins_zEtaPhiPt_1(0),
 
 _nBins_pt_2(18),     _min_pt_2(0.2),     _max_pt_2(2.0),          _width_pt_2(0.1),
 _nBins_phi_2(72),    _min_phi_2(0),      _max_phi_2(2.*3.1415927),_width_phi_2(2.*3.1415927/72),
-_nBins_eta_2(20),    _min_eta_2(-1),     _max_eta_2(1),           _width_eta_2(0.1),
+_nBins_eta_2(0),    _min_eta_2(0),     _max_eta_2(0),           _width_eta_2(0.1),
 
 _nBins_etaPhi_2(0), 
 _nBins_etaPhiPt_2(0),
@@ -444,14 +490,21 @@ _m3 ( 0),
 _m4 ( 0),
 _m5 ( 0),
 _m6 ( 0),
-_vertexZ           ( 0),
+_vertexZ ( 0),
+_Ncluster1  ( 0),
+_Ncluster2  ( 0),
+_etadis ( 0),
+_phidis ( 0),
+
+_dcaz ( 0),
+_dcaxy ( 0),
 _n1_1_vsPt         ( 0),         
 _n1_1_vsEtaVsPhi   ( 0),
 _s1pt_1_vsEtaVsPhi ( 0), 
 _n1_1_vsZVsEtaVsPhiVsPt ( 0),
-_n1_1_vsM          ( 0),  // w/ weight
+_n1_1_vsM          ( 0), 
 _s1pt_1_vsM        ( 0),
-_n1Nw_1_vsM        ( 0), // w/o weight
+_n1Nw_1_vsM        ( 0), 
 _s1ptNw_1_vsM      ( 0),
 _dedxVsP_1         ( 0),
 _corrDedxVsP_1     ( 0),
@@ -594,63 +647,15 @@ vsPtVsPt("NA")
 
 AliAnalysisTaskDptDptCorrelations::~AliAnalysisTaskDptDptCorrelations()
 {
-  /*
-   delete _id_1;
-   delete _charge_1; 
-   delete _iEtaPhi_1; 
-   delete _iPt_1;  
-   delete _pt_1;    
-   delete _px_1;   
-   delete _py_1;   
-   delete _pz_1;   
-   delete _correction_1;
-   delete _dedx_1;
-   delete __n1_1_vsPt;
-   delete __n1_1_vsEtaPhi;
-   delete __s1pt_1_vsEtaPhi;
-   delete __n1_1_vsZEtaPhiPt; 
-   if (_correctionWeight_1) delete _correctionWeight_1;
-   
-   if (!_sameFilter)
-   {
-   delete _id_2;
-   delete _charge_2; 
-   delete _iEtaPhi_2; 
-   delete _iPt_2;  
-   delete _pt_2;    
-   delete _px_2;   
-   delete _py_2;   
-   delete _pz_2;   
-   delete _correction_2;
-   delete _dedx_2;
-   delete __n1_2_vsPt;
-   delete __n1_2_vsEtaPhi;
-   delete __s1pt_2_vsEtaPhi;
-   delete __n1_2_vsZEtaPhiPt; 
-   if (_correctionWeight_2) delete _correctionWeight_2;
-   }
-   
-   if (!_singlesOnly)
-   {
-   delete __n2_12_vsPtPt;
-   delete __n2_12_vsEtaPhi;
-   delete __s2ptpt_12_vsEtaPhi;
-   delete __s2PtN_12_vsEtaPhi;
-   delete __s2NPt_12_vsEtaPhi;
-   }
-   */
+  
 }
 
 void AliAnalysisTaskDptDptCorrelations::UserCreateOutputObjects()
 {
-  cout<< "AliAnalysisTaskDptDptCorrelations::CreateOutputObjects() Starting " << endl;
   OpenFile(0);
   _outputHistoList = new TList();
   _outputHistoList->SetOwner();
   
-  //if (_useWeights) DefineInput(2, TList::Class());
-  
-  //Setup the parameters of the histograms
   _nBins_M0 = 500; _min_M0   = 0.;    _max_M0    = 5000.;  _width_M0 = (_max_M0-_min_M0)/_nBins_M0;
   _nBins_M1 = 500; _min_M1   = 0.;    _max_M1    = 5000.;  _width_M1 = (_max_M1-_min_M1)/_nBins_M1;
   _nBins_M2 = 500; _min_M2   = 0.;    _max_M2    = 5000.;  _width_M2 = (_max_M2-_min_M2)/_nBins_M2;
@@ -677,54 +682,37 @@ void AliAnalysisTaskDptDptCorrelations::UserCreateOutputObjects()
   _nBins_etaPhiPt_2  = _nBins_etaPhi_2 * _nBins_pt_2;
   _nBins_zEtaPhiPt_2 = _nBins_vertexZ  * _nBins_etaPhiPt_2;
   _nBins_etaPhi_12   = _nBins_etaPhi_1 * _nBins_etaPhi_2;
-  
-  //setup the work arrays
-  
+    
   _id_1       = new int[arraySize];   
   _charge_1   = new int[arraySize]; 
-  //_iPhi_1 = new int[arraySize]; 
-  //_iEta_1 = new int[arraySize]; 
   _iEtaPhi_1  = new int[arraySize]; 
   _iPt_1      = new int[arraySize];  
   _pt_1       = new float[arraySize];    
   _px_1       = new float[arraySize];   
   _py_1       = new float[arraySize];   
   _pz_1       = new float[arraySize];   
-  //_phi_1 = new float[arraySize];  
-  //_eta_1 = new float[arraySize];  
   _correction_1 = new float[arraySize];
-  _dedx_1     = new float[arraySize];
-  
+    
   __n1_1_vsPt              = getDoubleArray(_nBins_pt_1,        0.);
   __n1_1_vsEtaPhi          = getDoubleArray(_nBins_etaPhi_1,    0.);
   __s1pt_1_vsEtaPhi        = getDoubleArray(_nBins_etaPhi_1,    0.);
   __n1_1_vsZEtaPhiPt       = getFloatArray(_nBins_zEtaPhiPt_1,  0.);
   
-  cout << "==========================================================================================" << endl;
-  cout << "=============== Booking for particle 1 done." << endl;
-  cout << "_requestedCharge_1: " << _requestedCharge_1 << endl;
-  cout << "_requestedCharge_2: " << _requestedCharge_2 << endl;
-  
+    
   if (_requestedCharge_2!=_requestedCharge_1)
     {
-    cout << " creating arrays for particle 2 with size: " << arraySize << endl;
-    _sameFilter = 0;
+      _sameFilter = 0;
     //particle 2
     _id_2       = new int[arraySize];   
     _charge_2   = new int[arraySize]; 
-    //_iPhi_2   = new int[arraySize]; 
-    //_iEta_2   = new int[arraySize]; 
     _iEtaPhi_2  = new int[arraySize]; 
     _iPt_2      = new int[arraySize];  
     _pt_2       = new float[arraySize];   
     _px_2       = new float[arraySize];   
     _py_2       = new float[arraySize];   
     _pz_2       = new float[arraySize];   
-    //_phi_2    = new float[arraySize];  
-    //_eta_2    = new float[arraySize];  
     _correction_2 = new float[arraySize];
-    _dedx_2       = new float[arraySize];
-    
+        
     __n1_2_vsPt              = getDoubleArray(_nBins_pt_2,        0.);
     __n1_2_vsEtaPhi          = getDoubleArray(_nBins_etaPhi_2,    0.);
     __s1pt_2_vsEtaPhi        = getDoubleArray(_nBins_etaPhi_2,    0.);
@@ -887,7 +875,7 @@ void AliAnalysisTaskDptDptCorrelations::UserCreateOutputObjects()
   createHistograms();
   PostData(0,_outputHistoList);
   
-  cout<< "AliAnalysisTaskDptDptCorrelations::CreateOutputObjects() DONE " << endl;
+  //cout<< "AliAnalysisTaskDptDptCorrelations::CreateOutputObjects() DONE " << endl;
   
 }
 
@@ -898,73 +886,69 @@ void  AliAnalysisTaskDptDptCorrelations::createHistograms()
   
   name = "eventAccounting";
   
-  // bin index : what it is...
-  //         0 :  number of event submitted
-  //         1 :  number accepted by centrality cut
-  //         2 :  number accepted by centrality cut and z cut
-  //         3 :  total number of particles that satisfied filter 1
-  //         4 :  total number of particles that satisfied filter 2
-  _eventAccounting      = createHisto(name,name,10, -0.5, 9.5, "event Code", _title_counts);
-  
-  name = "m0"; _m0      = createHisto(name,name,_nBins_M1, _min_M1, _max_M1, _title_m0, _title_counts);
-  name = "m1"; _m1      = createHisto(name,name,_nBins_M1, _min_M1, _max_M1, _title_m1, _title_counts);
-  name = "m2"; _m2      = createHisto(name,name,_nBins_M2, _min_M2, _max_M2, _title_m2, _title_counts);
-  name = "m3"; _m3      = createHisto(name,name,_nBins_M3, _min_M3, _max_M3, _title_m3, _title_counts);
-  name = "m4"; _m4      = createHisto(name,name,_nBins_M4, _min_M4, _max_M4, _title_m4, _title_counts);
-  name = "m5"; _m5      = createHisto(name,name,_nBins_M5, _min_M5, _max_M5, _title_m5, _title_counts);
-  name = "m6"; _m6      = createHisto(name,name,_nBins_M6, _min_M6, _max_M6, _title_m6, _title_counts);
-  name = "zV"; _vertexZ = createHisto(name,name,_nBins_vertexZ, _min_vertexZ, _max_vertexZ, "z-Vertex (cm)", _title_counts);
-  
-  AliInfo(" AliAnalysisTaskDptDptCorrelations::createHistoHistograms() Creating Part 1 Histos");
+   _eventAccounting      = createHisto1D(name,name,10, -0.5, 9.5, "event Code", _title_counts);
   
-  name = n1Name+part_1_Name+vsPt;              _n1_1_vsPt              = createHisto(name,name, _nBins_pt_1,  _min_pt_1,  _max_pt_1,   _title_pt_1,  _title_AvgN_1);
-  name = n1Name+part_1_Name+vsEtaPhi;          _n1_1_vsEtaVsPhi        = createHisto(name,name, _nBins_eta_1, _min_eta_1, _max_eta_1,  _nBins_phi_1, _min_phi_1, _max_phi_1,  _title_eta_1,  _title_phi_1,  _title_AvgN_1);
-  name = s1ptName+part_1_Name+vsEtaPhi;        _s1pt_1_vsEtaVsPhi      = createHisto(name,name, _nBins_eta_1, _min_eta_1, _max_eta_1,  _nBins_phi_1, _min_phi_1, _max_phi_1,  _title_eta_1,  _title_phi_1,  _title_AvgSumPt_1);
-  name = n1Name+part_1_Name+vsZ+vsEtaPhi+vsPt; _n1_1_vsZVsEtaVsPhiVsPt = createHisto(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_1, 0., double(_nBins_etaPhi_1), _nBins_pt_1, _min_pt_1, _max_pt_1, "zVertex", _title_etaPhi_1,  _title_pt_1);
-  name = n1Name+part_1_Name+vsM;               _n1_1_vsM               = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN_1);
-  name = s1ptName+part_1_Name+vsM;             _s1pt_1_vsM             = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPt_1);
-  name = n1NwName+part_1_Name+vsM;             _n1Nw_1_vsM             = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN_1);
-  name = s1ptNwName+part_1_Name+vsM;           _s1ptNw_1_vsM           = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPt_1);
-  name = "dedxVsP_1";                          _dedxVsP_1              = createHisto(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
-  name = "corrDedxVsP_1";                      _corrDedxVsP_1          = createHisto(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
-  name = "betaVsP_1";                          _betaVsP_1              = createHisto(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
+  name = "m0"; _m0      = createHisto1D(name,name,_nBins_M1, _min_M1, _max_M1, _title_m0, _title_counts);
+  name = "m1"; _m1      = createHisto1D(name,name,_nBins_M1, _min_M1, _max_M1, _title_m1, _title_counts);
+  name = "m2"; _m2      = createHisto1D(name,name,_nBins_M2, _min_M2, _max_M2, _title_m2, _title_counts);
+  name = "m3"; _m3      = createHisto1D(name,name,_nBins_M3, _min_M3, _max_M3, _title_m3, _title_counts);
+  name = "m4"; _m4      = createHisto1D(name,name,_nBins_M4, _min_M4, _max_M4, _title_m4, _title_counts);
+  name = "m5"; _m5      = createHisto1D(name,name,_nBins_M5, _min_M5, _max_M5, _title_m5, _title_counts);
+  name = "m6"; _m6      = createHisto1D(name,name,_nBins_M6, _min_M6, _max_M6, _title_m6, _title_counts);
+  name = "zV"; _vertexZ = createHisto1D(name,name,_nBins_vertexZ, _min_vertexZ, _max_vertexZ, "z-Vertex (cm)", _title_counts);
   
-  AliInfo(" AliAnalysisTaskDptDptCorrelations::createHistoHistograms() Creating Part 2 Histos");
-  
-  name = n1Name+part_2_Name+vsPt;              _n1_2_vsPt              = createHisto(name,name, _nBins_pt_2,  _min_pt_2,  _max_pt_2,   _title_pt_2,  _title_AvgN_2);
-  name = n1Name+part_2_Name+vsEtaPhi;          _n1_2_vsEtaVsPhi        = createHisto(name,name, _nBins_eta_2, _min_eta_2, _max_eta_2,  _nBins_phi_2, _min_phi_2, _max_phi_2,  _title_eta_2,  _title_phi_2,  _title_AvgN_2);
-  name = s1ptName+part_2_Name+vsEtaPhi;        _s1pt_2_vsEtaVsPhi      = createHisto(name,name, _nBins_eta_2, _min_eta_2, _max_eta_2,  _nBins_phi_2, _min_phi_2, _max_phi_2,  _title_eta_2,  _title_phi_2,  _title_AvgSumPt_2);
-  name = n1Name+part_2_Name+vsZ+vsEtaPhi+vsPt; _n1_2_vsZVsEtaVsPhiVsPt = createHisto(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_2, 0., double(_nBins_etaPhi_2), _nBins_pt_2, _min_pt_2, _max_pt_2, "zVertex", _title_etaPhi_2,  _title_pt_2);
-  name = n1Name+part_2_Name + vsM;             _n1_2_vsM               = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN_2);
-  name = s1ptName+part_2_Name + vsM;           _s1pt_2_vsM             = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPt_2);
-  name = n1NwName+part_2_Name+vsM;             _n1Nw_2_vsM             = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN_1);
-  name = s1ptNwName+part_2_Name+vsM;           _s1ptNw_2_vsM           = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPt_1);
-  name = "dedxVsP_2";                          _dedxVsP_2              = createHisto(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
-  name = "corrDedxVsP_2";                      _corrDedxVsP_2          = createHisto(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
-  name = "betaVsP_2";                          _betaVsP_2              = createHisto(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
+
+  name = "Eta";     _etadis   = createHisto1F(name,name, 200, -1.0, 1.0, "#eta","counts");
+  name = "Phi";     _phidis   = createHisto1F(name,name, 360, 0.0, 6.4, "#phi","counts");
+  name = "DCAz";    _dcaz     = createHisto1F(name,name, 500, -5.0, 5.0, "dcaZ","counts");
+  name = "DCAxy";   _dcaxy    = createHisto1F(name,name, 500, -5.0, 5.0, "dcaXY","counts");
+
+  //name = "Nclus1";   _Ncluster1    = createHisto1F(name,name, 200, 0, 200, "Ncluster1","counts");
+  //name = "Nclus2";   _Ncluster2    = createHisto1F(name,name, 200, 0, 200, "Ncluster2","counts");
   
-  if (!_singlesOnly)
+  if (_singlesOnly)
     {
-    AliInfo(" AliAnalysisTaskDptDptCorrelations::createHistoHistograms() Creating Pair Histos");
-    
-    name = n2Name+pair_12_Name+vsEtaPhi;       _n2_12_vsEtaPhi     = createHisto(name,name, _nBins_etaPhi_12, 0.,        double(_nBins_etaPhi_12), _title_etaPhi_12, _title_AvgN2_12);        
-    name = n2Name+pair_12_Name+vsPtVsPt;       _n2_12_vsPtVsPt     = createHisto(name,name, _nBins_pt_1, _min_pt_1, _max_pt_1, _nBins_pt_2, _min_pt_2, _max_pt_2, _title_pt_1, _title_pt_2, _title_AvgN2_12);        
-    name = s2PtPtName+pair_12_Name + vsEtaPhi; _s2PtPt_12_vsEtaPhi = createHisto(name,name, _nBins_etaPhi_12, 0.,        double(_nBins_etaPhi_12), _title_etaPhi_12,  _title_AvgSumPtPt_12);    
-    name = s2PtNName+pair_12_Name + vsEtaPhi;  _s2PtN_12_vsEtaPhi  = createHisto(name,name, _nBins_etaPhi_12, 0.,        double(_nBins_etaPhi_12), _title_etaPhi_12,  _title_AvgSumPtN_12);    
-    name = s2NPtName+pair_12_Name + vsEtaPhi;  _s2NPt_12_vsEtaPhi  = createHisto(name,name, _nBins_etaPhi_12, 0.,        double(_nBins_etaPhi_12), _title_etaPhi_12,  _title_AvgNSumPt_12);    
+    name = n1Name+part_1_Name+vsPt;              _n1_1_vsPt              = createHisto1F(name,name, _nBins_pt_1,  _min_pt_1,  _max_pt_1,   _title_pt_1,  _title_AvgN_1);
+    name = n1Name+part_1_Name+vsZ+vsEtaPhi+vsPt; _n1_1_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_1, 0., double(_nBins_etaPhi_1), _nBins_pt_1, _min_pt_1, _max_pt_1, "zVertex", _title_etaPhi_1,  _title_pt_1);
+
+    name = n1Name+part_2_Name+vsPt;              _n1_2_vsPt              = createHisto1F(name,name, _nBins_pt_2,  _min_pt_2,  _max_pt_2,   _title_pt_2,  _title_AvgN_2);
+    name = n1Name+part_2_Name+vsZ+vsEtaPhi+vsPt; _n1_2_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_2, 0., double(_nBins_etaPhi_2), _nBins_pt_2, _min_pt_2, _max_pt_2, "zVertex", _title_etaPhi_2,  _title_pt_2);
+
+    }
+  else
+    {
+    name = n1Name+part_1_Name+vsEtaPhi;       _n1_1_vsEtaVsPhi      = createHisto2F(name,name, _nBins_eta_1, _min_eta_1, _max_eta_1,  _nBins_phi_1, _min_phi_1, _max_phi_1,  _title_eta_1,  _title_phi_1,  _title_AvgN_1);
+    name = s1ptName+part_1_Name+vsEtaPhi;     _s1pt_1_vsEtaVsPhi    = createHisto2F(name,name, _nBins_eta_1, _min_eta_1, _max_eta_1,  _nBins_phi_1, _min_phi_1, _max_phi_1,  _title_eta_1,  _title_phi_1,  _title_AvgSumPt_1);
+    name = n1Name+part_1_Name+vsM;            _n1_1_vsM             = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN_1);
+    name = s1ptName+part_1_Name+vsM;          _s1pt_1_vsM           = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPt_1);
+    name = n1NwName+part_1_Name+vsM;          _n1Nw_1_vsM           = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN_1);
+    name = s1ptNwName+part_1_Name+vsM;        _s1ptNw_1_vsM         = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPt_1);
+
+    name = n1Name+part_2_Name+vsEtaPhi;       _n1_2_vsEtaVsPhi      = createHisto2F(name,name, _nBins_eta_2, _min_eta_2, _max_eta_2,  _nBins_phi_2, _min_phi_2, _max_phi_2,  _title_eta_2,  _title_phi_2,  _title_AvgN_2);
+    name = s1ptName+part_2_Name+vsEtaPhi;     _s1pt_2_vsEtaVsPhi    = createHisto2F(name,name, _nBins_eta_2, _min_eta_2, _max_eta_2,  _nBins_phi_2, _min_phi_2, _max_phi_2,  _title_eta_2,  _title_phi_2,  _title_AvgSumPt_2);
+    name = n1Name+part_2_Name + vsM;          _n1_2_vsM             = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN_2);
+    name = s1ptName+part_2_Name + vsM;        _s1pt_2_vsM           = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPt_2);
+    name = n1NwName+part_2_Name+vsM;          _n1Nw_2_vsM           = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN_1);
+    name = s1ptNwName+part_2_Name+vsM;        _s1ptNw_2_vsM         = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPt_1);
+
+    name = n2Name+pair_12_Name+vsEtaPhi;      _n2_12_vsEtaPhi       = createHisto1F(name,name, _nBins_etaPhi_12, 0.,        double(_nBins_etaPhi_12), _title_etaPhi_12, _title_AvgN2_12);        
+    name = s2PtPtName+pair_12_Name + vsEtaPhi;_s2PtPt_12_vsEtaPhi   = createHisto1F(name,name, _nBins_etaPhi_12, 0.,        double(_nBins_etaPhi_12), _title_etaPhi_12,  _title_AvgSumPtPt_12);    
+    name = s2PtNName+pair_12_Name + vsEtaPhi; _s2PtN_12_vsEtaPhi    = createHisto1F(name,name, _nBins_etaPhi_12, 0.,        double(_nBins_etaPhi_12), _title_etaPhi_12,  _title_AvgSumPtN_12);    
+    name = s2NPtName+pair_12_Name + vsEtaPhi; _s2NPt_12_vsEtaPhi    = createHisto1F(name,name, _nBins_etaPhi_12, 0.,        double(_nBins_etaPhi_12), _title_etaPhi_12,  _title_AvgNSumPt_12);    
+    name = n2Name+pair_12_Name+vsPtVsPt;      _n2_12_vsPtVsPt       = createHisto2F(name,name, _nBins_pt_1, _min_pt_1, _max_pt_1, _nBins_pt_2, _min_pt_2, _max_pt_2, _title_pt_1, _title_pt_2, _title_AvgN2_12);        
     
-    name = n2Name+pair_12_Name + vsM;         _n2_12_vsM         = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN2_12);        
-    name = s2PtPtName+pair_12_Name + vsM;     _s2PtPt_12_vsM     = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPtPt_12);    
-    name = s2PtNName+pair_12_Name + vsM;      _s2PtN_12_vsM      = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPtN_12);       
-    name = s2NPtName+pair_12_Name + vsM;      _s2NPt_12_vsM      = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgNSumPt_12);     
+    name = n2Name+pair_12_Name + vsM;         _n2_12_vsM            = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN2_12);        
+    name = s2PtPtName+pair_12_Name + vsM;     _s2PtPt_12_vsM        = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPtPt_12);    
+    name = s2PtNName+pair_12_Name + vsM;      _s2PtN_12_vsM         = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPtN_12);       
+    name = s2NPtName+pair_12_Name + vsM;      _s2NPt_12_vsM         = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgNSumPt_12);     
     
-    name = n2NwName+pair_12_Name + vsM;         _n2Nw_12_vsM         = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN2_12);        
-    name = s2PtPtNwName+pair_12_Name + vsM;     _s2PtPtNw_12_vsM     = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPtPt_12);    
-    name = s2PtNNwName+pair_12_Name + vsM;      _s2PtNNw_12_vsM      = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPtN_12);       
-    name = s2NPtNwName+pair_12_Name + vsM;      _s2NPtNw_12_vsM      = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgNSumPt_12);     
+    name = n2NwName+pair_12_Name + vsM;       _n2Nw_12_vsM          = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgN2_12);        
+    name = s2PtPtNwName+pair_12_Name + vsM;   _s2PtPtNw_12_vsM      = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPtPt_12);    
+    name = s2PtNNwName+pair_12_Name + vsM;    _s2PtNNw_12_vsM       = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgSumPtN_12);       
+    name = s2NPtNwName+pair_12_Name + vsM;    _s2NPtNw_12_vsM       = createProfile(name,name, _nBins_M4, _min_M4, _max_M4, _title_m4, _title_AvgNSumPt_12);     
     
-    name = "mInv"; _invMass = createHisto(name,name, 500, 0., 1.000, "M_{inv}","counts"); 
-    name = "mInvElec"; _invMassElec = createHisto(name,name, 500, 0., 1.000, "M_{inv}","counts"); 
+    name = "mInv";     _invMass     = createHisto1F(name,name, 500, 0., 1.000, "M_{inv}","counts"); 
+    name = "mInvElec"; _invMassElec = createHisto1F(name,name, 500, 0., 1.000, "M_{inv}","counts"); 
     }
   
   AliInfo(" AliAnalysisTaskDptDptCorrelations::createHistoHistograms() All Done"); 
@@ -976,96 +960,111 @@ void  AliAnalysisTaskDptDptCorrelations::finalizeHistograms()
   
   AliInfo("AliAnalysisTaskDptDptCorrelations::finalizeHistograms() starting");
   AliInfo(Form("CorrelationAnalyzers::finalizeHistograms()   _eventCount : %d",int(_eventCount)));
-  if (_sameFilter)
+  if (_singlesOnly)
     {
-    fillHistoWithArray(_n1_1_vsPt,              __n1_1_vsPt,        _nBins_pt_1);
-    fillHistoWithArray(_n1_1_vsEtaVsPhi,        __n1_1_vsEtaPhi,    _nBins_eta_1,   _nBins_phi_1);
-    fillHistoWithArray(_s1pt_1_vsEtaVsPhi,      __s1pt_1_vsEtaPhi,  _nBins_eta_1,   _nBins_phi_1);
-    fillHistoWithArray(_n1_1_vsZVsEtaVsPhiVsPt, __n1_1_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
-    
-    fillHistoWithArray(_n1_2_vsPt,              __n1_1_vsPt,        _nBins_pt_1);
-    fillHistoWithArray(_n1_2_vsEtaVsPhi,        __n1_1_vsEtaPhi,    _nBins_eta_1,   _nBins_phi_1);
-    fillHistoWithArray(_s1pt_2_vsEtaVsPhi,      __s1pt_1_vsEtaPhi,  _nBins_eta_1,   _nBins_phi_1);
-    fillHistoWithArray(_n1_2_vsZVsEtaVsPhiVsPt, __n1_1_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
+    if (_sameFilter)
+      {
+      fillHistoWithArray(_n1_1_vsPt,              __n1_1_vsPt,        _nBins_pt_1);
+      fillHistoWithArray(_n1_1_vsZVsEtaVsPhiVsPt, __n1_1_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
+      fillHistoWithArray(_n1_2_vsPt,              __n1_1_vsPt,        _nBins_pt_1);
+      fillHistoWithArray(_n1_2_vsZVsEtaVsPhiVsPt, __n1_1_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
+      }
+    else
+      {
+      fillHistoWithArray(_n1_1_vsPt,              __n1_1_vsPt,        _nBins_pt_1);
+      fillHistoWithArray(_n1_1_vsZVsEtaVsPhiVsPt, __n1_1_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
+      fillHistoWithArray(_n1_2_vsPt,              __n1_2_vsPt,        _nBins_pt_2);
+      fillHistoWithArray(_n1_2_vsZVsEtaVsPhiVsPt, __n1_2_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_2, _nBins_pt_2);
+      }
     }
   else
     {
-    fillHistoWithArray(_n1_1_vsPt,              __n1_1_vsPt,        _nBins_pt_1);
-    fillHistoWithArray(_n1_1_vsEtaVsPhi,        __n1_1_vsEtaPhi,    _nBins_eta_1,   _nBins_phi_1);
-    fillHistoWithArray(_s1pt_1_vsEtaVsPhi,      __s1pt_1_vsEtaPhi,  _nBins_eta_1,   _nBins_phi_1);
-    fillHistoWithArray(_n1_1_vsZVsEtaVsPhiVsPt, __n1_1_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
-    
-    fillHistoWithArray(_n1_2_vsPt,              __n1_2_vsPt,        _nBins_pt_2);
-    fillHistoWithArray(_n1_2_vsEtaVsPhi,        __n1_2_vsEtaPhi,    _nBins_eta_2,   _nBins_phi_2);
-    fillHistoWithArray(_s1pt_2_vsEtaVsPhi,      __s1pt_2_vsEtaPhi,  _nBins_eta_2,   _nBins_phi_2);
-    fillHistoWithArray(_n1_2_vsZVsEtaVsPhiVsPt, __n1_2_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_2, _nBins_pt_2);
-    }
-  if (!_singlesOnly)
-    {
+    if (_sameFilter)
+      {
+      fillHistoWithArray(_n1_1_vsEtaVsPhi,        __n1_1_vsEtaPhi,    _nBins_eta_1,   _nBins_phi_1);
+      fillHistoWithArray(_s1pt_1_vsEtaVsPhi,      __s1pt_1_vsEtaPhi,  _nBins_eta_1,   _nBins_phi_1);
+      fillHistoWithArray(_n1_2_vsEtaVsPhi,        __n1_1_vsEtaPhi,    _nBins_eta_1,   _nBins_phi_1);
+      fillHistoWithArray(_s1pt_2_vsEtaVsPhi,      __s1pt_1_vsEtaPhi,  _nBins_eta_1,   _nBins_phi_1);
+      }
+    else
+      {
+      fillHistoWithArray(_n1_1_vsEtaVsPhi,        __n1_1_vsEtaPhi,    _nBins_eta_1,   _nBins_phi_1);
+      fillHistoWithArray(_s1pt_1_vsEtaVsPhi,      __s1pt_1_vsEtaPhi,  _nBins_eta_1,   _nBins_phi_1);
+      fillHistoWithArray(_n1_2_vsEtaVsPhi,        __n1_2_vsEtaPhi,    _nBins_eta_2,   _nBins_phi_2);
+      fillHistoWithArray(_s1pt_2_vsEtaVsPhi,      __s1pt_2_vsEtaPhi,  _nBins_eta_2,   _nBins_phi_2);
+      }
     fillHistoWithArray(_n2_12_vsEtaPhi,     __n2_12_vsEtaPhi,     _nBins_etaPhi_12);
     fillHistoWithArray(_s2PtPt_12_vsEtaPhi, __s2ptpt_12_vsEtaPhi, _nBins_etaPhi_12);
     fillHistoWithArray(_s2PtN_12_vsEtaPhi,  __s2PtN_12_vsEtaPhi,  _nBins_etaPhi_12);
     fillHistoWithArray(_s2NPt_12_vsEtaPhi,  __s2NPt_12_vsEtaPhi,  _nBins_etaPhi_12);
-    fillHistoWithArray(_n2_12_vsPtVsPt,     __n2_12_vsPtPt,  _nBins_pt_1, _nBins_pt_2);
-    }
-  
+    fillHistoWithArray(_n2_12_vsPtVsPt,     __n2_12_vsPtPt,       _nBins_pt_1,    _nBins_pt_2);
+
+    }  
   AliInfo("AliAnalysisTaskDptDptCorrelations::finalizeHistograms()  Done ");
 }
 //--------------//
 
 
-void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
+void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t */*option*/)
 {
   
   int    k1,k2;
   int    iPhi, iEta, iEtaPhi, iPt, charge;
-  float  q, p, phi, pt, eta, corr, dedx, px, py, pz;
+  float  q, phi, pt, eta, corr, corrPt, px, py, pz;
   int    ij;
   int    id_1, q_1, iEtaPhi_1, iPt_1;
-  float  pt_1, px_1, py_1, pz_1, corr_1, dedx_1;
+  float  pt_1, px_1, py_1, pz_1, corr_1;
   int    id_2, q_2, iEtaPhi_2, iPt_2;
-  float  pt_2, px_2, py_2, pz_2, corr_2, dedx_2;
+  float  pt_2, px_2, py_2, pz_2, corr_2;
   float  ptpt;
   int    iVertex, iVertexP1, iVertexP2;
   int    iZEtaPhiPt;
   float  massElecSq = 2.5e-7;
-  double b[2];
-  double bCov[3];
   const  AliAODVertex* vertex;
-  int    nClus;
   bool   bitOK;
-  
-  //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - Starting." << endl;
-  
+    
+  AliAnalysisManager* manager = AliAnalysisManager::GetAnalysisManager();
+  if (!manager) {
+    return;
+  }
+  AliAODInputHandler* inputHandler = dynamic_cast<AliAODInputHandler*> (manager->GetInputEventHandler());
+  if (!inputHandler) {
+    return;
+  }
+
+  fAODEvent = dynamic_cast<AliAODEvent*>(InputEvent());
+  //AliAODEvent* fAODEvent = dynamic_cast<AliAODEvent*>(InputEvent());
+
+  if (!fAODEvent)
+    {
+      return;
+    }
+  fPIDResponse =inputHandler->GetPIDResponse();
+  if (!fPIDResponse){
+    AliFatal("This Task needs the PID response attached to the inputHandler");
+    return;
+  }
+
   // count all events looked at here
   _eventCount++;
-  if (!_eventAccounting)
-    cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - !_eventAccounting" << endl;
-  _eventAccounting->Fill(0);// count all calls to this function
-  
-  //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 1" << endl;
-  
-  //Get pointer to current event
-  fESDEvent = dynamic_cast<AliESDEvent*> (InputEvent());
-  fAODEvent = dynamic_cast<AliAODEvent*> (InputEvent());
-  
-  ////cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 2" << endl;
-  
-  if(!fAODEvent && !fESDEvent)
+
+  if (_eventAccounting)
     {
-    AliError("AliAnalysisTaskDptDptCorrelations::Exec(Option_t *option) !fAODEvent && !fESDEvent ");;
+      _eventAccounting->Fill(0);// count all calls to this function
+    }
+  else 
+    {
+
     return;
     }
   
   _eventAccounting->Fill(1);// count all calls to this function with a valid pointer
-  
-  //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 3" << endl;
-  
   //reset single particle counters
   k1 = k2 = 0;
   __n1_1 = __n1_2 = __s1pt_1 = __s1pt_2 = __n1Nw_1 = __n1Nw_2 = __s1ptNw_1 = __s1ptNw_2 = 0;
   
   float v0Centr  = -999.;
+  float v0ACentr  = -999.;
   float trkCentr = -999.;
   float spdCentr = -999.;
   
@@ -1073,18 +1072,12 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
   float vertexY  = -999;
   float vertexZ  = -999;
   float vertexXY = -999;
-  //float dcaX     = -999;
-  //float dcaY     = -999;
   float dcaZ     = -999;
   float dcaXY    = -999;
   float centrality = -999;
-  
-  //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 4" << endl;
-  
+
   if(fAODEvent)
     {
-    //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 5" << endl;
-    
     //Centrality
     AliCentrality* centralityObject =  fAODEvent->GetHeader()->GetCentralityP();
     if (centralityObject)
@@ -1092,50 +1085,40 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
       //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 6" << endl;
       
       v0Centr  = centralityObject->GetCentralityPercentile("V0M");
+      v0ACentr  = centralityObject->GetCentralityPercentile("V0A");
       trkCentr = centralityObject->GetCentralityPercentile("TRK"); 
       spdCentr = centralityObject->GetCentralityPercentile("CL1");
-      //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 7" << endl;
       
       }
-    //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 8" << endl;
-    
-    _nTracks  = fAODEvent->GetNTracks();
-    _mult0    = 0;
-    _mult1    = 0;
-    _mult2    = 0;
+
+    _nTracks  =fAODEvent->GetNumberOfTracks();//NEW Test
+
     _mult3    = _nTracks; 
     _mult4    = v0Centr;
+    _mult4a    = v0ACentr;
     _mult5    = trkCentr;
     _mult6    = spdCentr;
     _field    = fAODEvent->GetMagneticField(); 
     
-    //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - _field:" << _field << endl;
-    
     //_centralityMethod
     switch (_centralityMethod)
       {
-        case 0: centrality = _mult0; break;
-        case 1: centrality = _mult1; break;
-        case 2: centrality = _mult2; break;
-        case 3: centrality = _mult3; break;
-        case 4: centrality = _mult4; break;
-        case 5: centrality = _mult5; break;
-        case 6: centrality = _mult6; break;
+      case 0: centrality = _mult0; break;
+      case 1: centrality = _mult1; break;
+      case 2: centrality = _mult2; break;
+      case 3: centrality = _mult3; break;
+      case 4: centrality = _mult4; break;
+      case 5: centrality = _mult5; break;
+      case 6: centrality = _mult6; break;
+      case 7: centrality = _mult4a; break;
       }
     
-    //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 10" << endl;
     
-    //filter on centrality
-    if ( centrality < _centralityMin ||
-        centrality > _centralityMax)
+    if ( centrality < _centralityMin ||  centrality > _centralityMax )
       {
-      //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 11" << endl;
-      
-      // we dont analyze this event here... 
       return;
       }
     _eventAccounting->Fill(2);// count all events with right centrality
-    //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 12" << endl;
     
     // filter on z and xy vertex
     vertex = (AliAODVertex*) fAODEvent->GetPrimaryVertexSPD();
@@ -1143,7 +1126,7 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
       {
       vertexZ  = -999;
       vertexXY = -999;
-      cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - No valid vertex object or poor vertex" << endl;
+      AliInfo("AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - No valid vertex object or poor vertex");
       }
     else
       { 
@@ -1152,15 +1135,6 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
         vertexZ = vertex->GetZ();
         vertexXY = sqrt(vertexX*vertexX+vertexY*vertexY);
       }
-    //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 13" << endl;
-    
-    //cout << "vertexZ : " << vertexZ  << endl;
-    //cout << "vertexXY: " << vertexXY << endl;
-    //cout << "_vertexZMin: " << _vertexZMin << endl;
-    //cout << "_vertexZMax: " << _vertexZMax << endl;
-    //cout << "_vertexXYMin: " << _vertexXYMin << endl;
-    //cout << "_vertexXYMax: " << _vertexXYMax << endl;
-    
     if (!vertex ||
         vertexZ  < _vertexZMin  || 
         vertexZ  > _vertexZMax  ||
@@ -1168,9 +1142,8 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
         vertexXY > _vertexXYMax)
       return;
     
-    
-    //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 14" << endl;
-    
+    _vertexZ->Fill(vertexZ);
+
     iVertex = int((vertexZ-_min_vertexZ)/_width_vertexZ);
     iVertexP1 = iVertex*_nBins_etaPhiPt_1;
     iVertexP2 = iVertex*_nBins_etaPhiPt_2;
@@ -1180,80 +1153,85 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
       return;
       }
     _eventAccounting->Fill(3);// count all calls to this function with a valid pointer
-    //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 15" << endl;
+    //====================== 
+    
+     TExMap *trackMap = new TExMap();//Mapping matrix----                                            
+    //1st loop track                                                                                
+    for(Int_t i = 0; i < _nTracks; i++)
+      {
+        AliAODTrack* aodTrack = dynamic_cast<AliAODTrack *>(fAODEvent->GetTrack(i));
+        if(!aodTrack) {
+          AliError(Form("ERROR: Could not retrieve AODtrack %d",i));
+          continue;
+        }
+        Int_t gID = aodTrack->GetID();
+        if (aodTrack->TestFilterBit(1)) trackMap->Add(gID, i);//Global tracks                       
+      }
     
+
+     AliAODTrack* newAodTrack;
     
-    // loop over all particles for singles
-    //debug() << "_nTracks:"<< _nTracks << endl;
+    //Track Loop starts here
     for (int iTrack=0; iTrack< _nTracks; iTrack++)
       {
-      //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - 16 iTrack:" << iTrack << endl;
-      
-      AliAODTrack * t = (AliAODTrack *) fAODEvent->GetTrack(iTrack);
-      if (!t) 
-        {
-        AliError(Form("AliAnalysisTaskDptDptCorrelations::Exec(Option_t *option) No track ofr iTrack=%d", iTrack));
-        continue;
+       AliAODTrack* t = dynamic_cast<AliAODTrack *>(fAODEvent->GetTrack(iTrack));
+        if (!t) {
+          AliError(Form("Could not receive track %d", iTrack));
+          continue;
         }
-      
-      q      = t->Charge();
-      charge = int(q);
-      phi    = t->Phi();
-      p      = t->P();
-      pt     = t->Pt();
-      px     = t->Px();
-      py     = t->Py();
-      pz     = t->Pz();
-      eta    = t->Eta();
-      dedx   = t->GetTPCsignal();
-      nClus  = t->GetTPCNcls();
-      bitOK  = t->TestFilterBit(_trackFilterBit);
-      
-      //cout << "_trackFilterBit:" << _trackFilterBit << " Track returns:" << bitOK << endl;
-      //cout << "    q:" << q    << " _requestedCharge_1:" << _requestedCharge_1 << endl;
-      //cout << "   pt:" << pt   << " _min_pt_1:" << _min_pt_1 << " _max_pt_1:" << _max_pt_1<< endl;
-      //cout << "  phi:" << phi  << endl;
-      //cout << "  eta:" << eta  << " _min_eta_1:" << _min_eta_1 << " _max_eta_1:" << _max_eta_1<< endl;
-      //cout << " dedx:" << dedx << " _dedxMin:" << _dedxMin << " _dedxMax:" << _dedxMax << endl;
-      //cout << "nclus:" << nClus<< " _nClusterMin:" << _nClusterMin << endl;
-      if (bitOK &&
-          _requestedCharge_1 == charge &&
-          pt       >=  _min_pt_1 && 
-          pt       <   _max_pt_1 && 
-          eta      >=  _min_eta_1 && 
-          eta      <   _max_eta_1 && 
-          dedx     >=  _dedxMin &&
-          dedx     <   _dedxMax &&
-          nClus    >=  _nClusterMin) 
+       
+       bitOK  = t->TestFilterBit(_trackFilterBit);
+       if (!bitOK) continue; 
+       
+       
+       Int_t gID = t->GetID();
+       newAodTrack = gID >= 0 ?t : fAODEvent->GetTrack(trackMap->GetValue(-1-gID));
+       
+       q      = t->Charge();
+       charge = int(q);
+       phi    = t->Phi();
+       pt     = t->Pt();
+       px     = t->Px();
+       py     = t->Py();
+       pz     = t->Pz();
+       eta    = t->Eta();
+       dcaXY = t->DCA(); 
+       dcaZ  = t->ZAtDCA();  
+       
+       Double_t nsigmaelectron = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(newAodTrack,(AliPID::EParticleType)AliPID::kElectron));
+       Double_t nsigmapion = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(newAodTrack,(AliPID::EParticleType)AliPID::kPion));
+       Double_t nsigmakaon = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(newAodTrack,(AliPID::EParticleType)AliPID::kKaon));
+       Double_t nsigmaproton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(newAodTrack,(AliPID::EParticleType)AliPID::kProton));
+       
+       //nsigma cut to reject electron 
+       
+       if(nsigmaelectron  < fNSigmaCut
+          && nsigmapion   > fNSigmaCut
+          && nsigmakaon   > fNSigmaCut
+          && nsigmaproton > fNSigmaCut ) continue;
+       
+       if(charge == 0) continue;
+       
+       // Kinematics cuts used                                                                                        
+       if( pt < _min_pt_1 || pt > _max_pt_1)      continue;
+       if( eta < _min_eta_1 || eta > _max_eta_1)  continue;
+       
+        //==== QA ===========================
+          _dcaz->Fill(dcaZ);
+          _dcaxy->Fill(dcaXY);
+          _etadis->Fill(eta);
+          _phidis->Fill(phi);
+          //===================================
+         
+          //Particle 1
+      if (_requestedCharge_1 == charge) 
         {
-        //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - check vertex  for 1:" << endl;
-        // Get the dca information
-        if (t->PropagateToDCA(vertex, _field, 100., b, bCov) )
-          {
-          dcaXY = b[0];
-          dcaZ  = b[1];
-          } 
-        else
-          {
-          dcaXY = -999999;
-          dcaZ  = -999999;
-          }
-        //cout << "1 dcaZ:" << dcaZ << " _dcaZMin:" << _dcaZMin << " _dcaZMax:" << _dcaZMax << endl;
-        //cout << "1 dcaXY:" << dcaXY << " _dcaXYMin:" << _dcaXYMin << " _dcaXYMax:" << _dcaXYMax << endl;
-
-        // skip track if DCA too large
-        if (dcaZ     >=  _dcaZMin && 
-            dcaZ     <   _dcaZMax && 
-            dcaXY    >=  _dcaXYMin && 
-            dcaXY    <   _dcaXYMax)
-          continue; //track does not have a valid DCA
-        //cout << "keep track:" << endl;
-     
-        iPhi   = int( phi/_width_phi_1);
-        ////cout << " AliAnalysisTaskDptDptCorrelations::analyze(Event * event) -1- iTrack:" << iTrack<< endl<< "pt:" << pt << " phi:" <<  phi << " eta:" << eta << endl;
-        if (iPhi<0 || iPhi>=_nBins_phi_1 ) 
-          {
-          AliWarning("AliAnalysisTaskDptDptCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
+        
+         iPhi   = int( phi/_width_phi_1);
+        
+         if (iPhi<0 || iPhi>=_nBins_phi_1 ) 
+           {
+             AliWarning("AliAnalysisTaskDptDptCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
           return;
           }
         
@@ -1281,74 +1259,47 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
           AliWarning("AliAnalysisTaskDptDptCorrelations::analyze(AliceEvent * event) iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_1");
           continue;
           }
-        //cout << "all good; process track:" << endl;
-
-        _id_1[k1]                   = iTrack;     
-        _charge_1[k1]               = charge;
-        _iEtaPhi_1[k1]              = iEtaPhi; 
-        _iPt_1[k1]                  = iPt;   
-        _pt_1[k1]                   = pt;   
-        _px_1[k1]                   = px;   
-        _py_1[k1]                   = py;   
-        _pz_1[k1]                   = pz;   
-        _correction_1[k1]           = corr; 
-        __n1_1                      += corr;
-        __n1_1_vsEtaPhi[iEtaPhi]    += corr; 
-        __n1_1_vsZEtaPhiPt[iZEtaPhiPt] += corr;
-        __s1pt_1                    += corr*pt;
-        __s1pt_1_vsEtaPhi[iEtaPhi]  += corr*pt;
-        __n1_1_vsPt[iPt]            += corr;
-        __n1Nw_1                    += 1;
-        __s1ptNw_1                  += pt;
-        
-        //_betaVsP_1->Fill(p*q,_trackFilter_1->getBeta() );
-        _dedxVsP_1->Fill(p*q,dedx);
-        //_corrDedxVsP_1->Fill(p*q,_trackFilter_1->getCorrectedDedx() );
         
+
+        if (_singlesOnly)
+          {
         
-        ++k1;
-        if (k1>=arraySize)
+          __n1_1_vsPt[iPt]               += corr;          //cout << "step 15" << endl;
+          __n1_1_vsZEtaPhiPt[iZEtaPhiPt] += corr;       //cout << "step 12" << endl;
+   
+          }
+        else
           {
-          AliError(Form("AliAnalysisTaskDptDptCorrelations::analyze(AliceEvent * event) k1 >=arraySize; arraySize: %d",arraySize));
-          return;
+          corrPt                      = corr*pt;
+          _id_1[k1]                   = iTrack;     
+          _charge_1[k1]               = charge;
+          _iEtaPhi_1[k1]              = iEtaPhi; 
+          _iPt_1[k1]                  = iPt;   
+          _pt_1[k1]                   = pt;   
+          _px_1[k1]                   = px;   
+          _py_1[k1]                   = py;   
+          _pz_1[k1]                   = pz;   
+          _correction_1[k1]           = corr; 
+          __n1_1                      += corr;
+          __n1_1_vsEtaPhi[iEtaPhi]    += corr; 
+          __s1pt_1                    += corrPt;
+          __s1pt_1_vsEtaPhi[iEtaPhi]  += corrPt;
+          __n1Nw_1                    += 1;
+          __s1ptNw_1                  += pt;
+          ++k1;
+          if (k1>=arraySize)
+            {
+            AliError(Form("AliAnalysisTaskDptDptCorrelations::analyze(AliceEvent * event) k1 >=arraySize; arraySize: %d",arraySize));
+            return;
+            }
           }
         }
       
-      if (!_sameFilter &&
-          bitOK && 
-          _requestedCharge_2 == charge &&
-          pt       >=  _min_pt_2 && 
-          pt       <   _max_pt_2 && 
-          eta      >=  _min_eta_2 && 
-          eta      <   _max_eta_2 && 
-          dedx     >=  _dedxMin &&
-          dedx     <   _dedxMax &&
-          nClus    >=  _nClusterMin)  
+      if (!_sameFilter && _requestedCharge_2 == charge)  
         {
-        // Get the dca information
-        //cout << "AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option) - check vertex for 2:" << endl;
-        if (t->PropagateToDCA(vertex, _field, 100., b, bCov) )
-          {
-          dcaXY = b[0];
-          dcaZ  = b[1];
-          } 
-        else
-          {
-          dcaXY = -999999;
-          dcaZ  = -999999;
-          }
-        //cout << "2 dcaZ:" << dcaZ << " _dcaZMin:" << _dcaZMin << " _dcaZMax:" << _dcaZMax << endl;
-        //cout << "2 dcaXY:" << dcaXY << " _dcaXYMin:" << _dcaXYMin << " _dcaXYMax:" << _dcaXYMax << endl;
-       // skip track if DCA too large
-        if (dcaZ     >=  _dcaZMin && 
-            dcaZ     <   _dcaZMax && 
-            dcaXY    >=  _dcaXYMin && 
-            dcaXY    <   _dcaXYMax)
-          continue; //track does not have a valid DCA
-        
-        iPhi   = int( phi/_width_phi_2);
-        //cout << " AliAnalysisTaskDptDptCorrelations::analyze(Event * event) -1- iTrack:" << iTrack  << endl
-        //<< "pt:" << pt << " phi:" <<  phi << " eta:" << eta << endl;
+       
+         iPhi   = int( phi/_width_phi_2);
+         
         if (iPhi<0 || iPhi>=_nBins_phi_2 ) 
           {
           AliWarning("AliAnalysisTaskDptDptCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
@@ -1376,85 +1327,48 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
           continue;
           }
         
-        //cout << " iEtaPhi:" << iEtaPhi << "  _nBins_etaPhi_1: "<< _nBins_etaPhi_1<< "  _nBins_etaPhi_2: "<< _nBins_etaPhi_2<< endl;
-        //if (_useEbyECorrections)  corr = (charge>0) ? _correction_2p[iEtaPhi] : _correction_2m[iEtaPhi];      else   
-        //cout << "_correctionWeight_2:" << _correctionWeight_2 << endl;
+
         if (_correctionWeight_2)
           corr = _correctionWeight_2[iZEtaPhiPt];
         else
           corr = 1;
-        //dpt = pt - (charge>0) ? _avgPt_vsEtaPhi_2p[iEtaPhi] : _avgPt_vsEtaPhi_2m[iEtaPhi];       
-
-        //cout << " k2:" << k2 << endl;
-        //cout << "iZEtaPhiPt: " << iZEtaPhiPt << endl;
-        //cout << "iEtaPhi:" << iEtaPhi << endl;
-        _id_2[k2]                   = iTrack;     
-        //cout << "step 1" << endl;
-        _charge_2[k2]               = charge;
-        //cout << "step 2" << endl;
-        _iEtaPhi_2[k2]              = iEtaPhi; 
-        //cout << "step 3" << endl;
-        _iPt_2[k2]                  = iPt;   
-        //cout << "step 4" << endl;
-        _pt_2[k2]                   = pt;   
-        //cout << "step 5" << endl;
-        _px_2[k2]                   = px;   
-        //cout << "step 6" << endl;
-        _py_2[k2]                   = py;   
-        //cout << "step 7" << endl;
-        _pz_2[k2]                   = pz;   
-        //cout << "step 8" << endl;
-        _correction_2[k2]           = corr; 
-        //cout << "step 9" << endl;
-        __n1_2                      += corr;
-        //cout << "step 10" << endl;
-        __n1_2_vsEtaPhi[iEtaPhi]    += corr; 
-        //cout << "step 11" << endl;
-        __n1_2_vsZEtaPhiPt[iZEtaPhiPt] += corr;
-        //cout << "step 12" << endl;
-        __s1pt_2                    += corr*pt;
-        //cout << "step 13" << endl;
-        __s1pt_2_vsEtaPhi[iEtaPhi]  += corr*pt;
-        //cout << "step 14" << endl;
-        __n1_2_vsPt[iPt]            += corr;
-        //cout << "step 15" << endl;
-        
-        __n1Nw_2                    += 1;
-        __s1ptNw_2                  += pt;
-
-        //cout << " data stored:" << endl;
-
-        //_betaVsP_2->Fill(p*q,_trackFilter_2->getBeta() );
-        if (!_dedxVsP_2) {
-          //cout << "_dedxVsP_2 does not exist...." << endl;
-          continue;
-        }
-        //cout << " fill histo _dedxVsP_2" << endl;
-
-        _dedxVsP_2->Fill(p*q,dedx);
-        //_corrDedxVsP_2->Fill(p*q,_trackFilter_2->getCorrectedDedx() );
-        ++k2;
-        //cout << " k2 incremented:" << endl;
-        if (k2>=arraySize)
+       
+        if (_singlesOnly)
           {
-          AliWarning(Form("-W- k2 >=arraySize; arraySize: %d",arraySize)); 
-          return;
+           __n1_2_vsPt[iPt]               += corr;          //cout << "step 15" << endl;
+           __n1_2_vsZEtaPhiPt[iZEtaPhiPt] += corr;       //cout << "step 12" << endl;
+          }
+        else
+          {
+          corrPt                      = corr*pt;
+          _id_2[k2]                   = iTrack;         //cout << "step 1" << endl;
+          _charge_2[k2]               = charge;         //cout << "step 2" << endl;
+          _iEtaPhi_2[k2]              = iEtaPhi;        //cout << "step 3" << endl;
+          _iPt_2[k2]                  = iPt;            //cout << "step 4" << endl;
+          _pt_2[k2]                   = pt;             //cout << "step 5" << endl;
+          _px_2[k2]                   = px;             //cout << "step 6" << endl;
+          _py_2[k2]                   = py;             //cout << "step 7" << endl;
+          _pz_2[k2]                   = pz;             //cout << "step 8" << endl;
+          _correction_2[k2]           = corr;           //cout << "step 9" << endl;
+          __n1_2                      += corr;          //cout << "step 10" << endl;
+          __s1pt_2                    += corrPt;        //cout << "step 13" << endl;
+          __n1Nw_2                    += 1;
+          __n1_2_vsEtaPhi[iEtaPhi]    += corr;          //cout << "step 11" << endl;
+          __s1pt_2_vsEtaPhi[iEtaPhi]  += corrPt;        //cout << "step 14" << endl;
+          __s1ptNw_2                  += pt;
+          ++k2;
+          if (k2>=arraySize)
+            {
+            AliWarning(Form("-W- k2 >=arraySize; arraySize: %d",arraySize)); 
+            return;
+            }
           }
-        }
       
       //cout << "done with track" << endl;
       } //iTrack
-    
-    } //aod
-  
-  
-  else if (fESDEvent)
-    {
-    //AliCentrality* centrality = esdEvent->GetCentrality();
-    //Float_t centV0 = centrality->GetCentralityPercentile("V0M");
-    //Float_t centTrk = centrality->GetCentralityPercentile("TRK");
-    //Float_t centSPD = centrality->GetCentralityPercentile("CL1");
+    } //aod 
     }
+
   
   //cout << "Filling histograms now" << endl;
   _m0->Fill(_mult0);
@@ -1464,93 +1378,151 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
   _m4->Fill(_mult4);
   _m5->Fill(_mult5);
   _m6->Fill(_mult6);
-  _vertexZ->Fill(vertexZ);
-  _n1_1_vsM->Fill(_mult4,      __n1_1);
-  _s1pt_1_vsM->Fill(_mult4,    __s1pt_1);
-  _n1Nw_1_vsM->Fill(_mult4,    __n1Nw_1);
-  _s1ptNw_1_vsM->Fill(_mult4,  __s1ptNw_1);
-  if (_sameFilter)
+  //_vertexZ->Fill(vertexZ);
+  
+  if (_singlesOnly)
     {
-    _n1_2_vsM->Fill(_mult4,    __n1_1);
-    _s1pt_2_vsM->Fill(_mult4,  __s1pt_1);
-    _n1Nw_2_vsM->Fill(_mult4,  __n1Nw_1);
-    _s1ptNw_2_vsM->Fill(_mult4,__s1ptNw_1);
+    // nothing to do here.
     }
   else
     {
-    _n1_2_vsM->Fill(_mult4,      __n1_2);
-    _s1pt_2_vsM->Fill(_mult4,    __s1pt_2);
-    _n1Nw_2_vsM->Fill(_mult4,    __n1Nw_2);
-    _s1ptNw_2_vsM->Fill(_mult4,  __s1ptNw_2);
-    }
-  
-  //if singels only selected, do not fill pair histograms.
-  if (_singlesOnly) return;
-  
-  // reset pair counters
-  __n2_12   = __s2ptpt_12   = __s2NPt_12    = __s2PtN_12    = 0;
-  __n2Nw_12 = __s2ptptNw_12 = __s2NPtNw_12  = __s2PtNNw_12  = 0;
-  
-  //info() <<" singles done" << endl;
-  if (_sameFilter) // filter 1 and 2 are the same -- only do pairs i<j
-    {
-    if (_field>0)
+    if (_sameFilter)
       {
-      for (int i1=0; i1<k1; i1++)
+      _n1_1_vsM->Fill(centrality,      __n1_1);
+      _s1pt_1_vsM->Fill(centrality,    __s1pt_1);
+      _n1Nw_1_vsM->Fill(centrality,    __n1Nw_1);
+      _s1ptNw_1_vsM->Fill(centrality,  __s1ptNw_1);
+      _n1_2_vsM->Fill(centrality,      __n1_1);
+      _s1pt_2_vsM->Fill(centrality,    __s1pt_1);
+      _n1Nw_2_vsM->Fill(centrality,    __n1Nw_1);
+      _s1ptNw_2_vsM->Fill(centrality,  __s1ptNw_1);
+      // reset pair counters
+      __n2_12   = __s2ptpt_12   = __s2NPt_12    = __s2PtN_12    = 0;
+      __n2Nw_12 = __s2ptptNw_12 = __s2NPtNw_12  = __s2PtNNw_12  = 0;
+      if (_field>0)
         {
-        ////cout << "         i1:" << i1 << endl;
-        id_1      = _id_1[i1];           ////cout << "       id_1:" << id_1 << endl;
-        q_1       = _charge_1[i1];       ////cout << "        q_1:" << q_1 << endl;
-        iEtaPhi_1 = _iEtaPhi_1[i1];      ////cout << "  iEtaPhi_1:" << iEtaPhi_1 << endl;
-        iPt_1     = _iPt_1[i1];          ////cout << "      iPt_1:" << iPt_1 << endl;
-        corr_1    = _correction_1[i1];   ////cout << "     corr_1:" << corr_1 << endl;
-        pt_1      = _pt_1[i1];           ////cout << "       pt_1:" << pt_1 << endl;
-        dedx_1    = _dedx_1[i1];         ////cout << "     dedx_1:" << dedx_1 << endl;
-                                         //1 and 2
-        for (int i2=i1+1; i2<k1; i2++)
-          {        
-            ////cout << "         i2:" << i2 << endl;
-            id_2      = _id_1[i2];              ////cout << "       id_2:" << id_2 << endl;
-            if (id_1!=id_2)
-              {
-              q_2       = _charge_1[i2];     ////cout << "        q_1:" << q_1 << endl;
-              iEtaPhi_2 = _iEtaPhi_1[i2];    ////cout << "  iEtaPhi_1:" << iEtaPhi_1 << endl;
-              iPt_2     = _iPt_1[i2];        ////cout << "      iPt_1:" << iPt_1 << endl;
-              corr_2    = _correction_1[i2]; ////cout << "     corr_1:" << corr_1 << endl;
-              pt_2      = _pt_1[i2];         ////cout << "       pt_1:" << pt_1 << endl;
-              dedx_2    = _dedx_1[i2];       ////cout << "     dedx_2:" << dedx_2 << endl;
-              corr      = corr_1*corr_2;
-              if (q_2>q_1 || (q_1>0 && q_2>0 && pt_2<=pt_1) || (q_1<0 && q_2<0 && pt_2>=pt_1))
+        for (int i1=0; i1<k1; i1++)
+          {
+          ////cout << "         i1:" << i1 << endl;
+          id_1      = _id_1[i1];           ////cout << "       id_1:" << id_1 << endl;
+          q_1       = _charge_1[i1];       ////cout << "        q_1:" << q_1 << endl;
+          iEtaPhi_1 = _iEtaPhi_1[i1];      ////cout << "  iEtaPhi_1:" << iEtaPhi_1 << endl;
+          iPt_1     = _iPt_1[i1];          ////cout << "      iPt_1:" << iPt_1 << endl;
+          corr_1    = _correction_1[i1];   ////cout << "     corr_1:" << corr_1 << endl;
+          pt_1      = _pt_1[i1];           ////cout << "       pt_1:" << pt_1 << endl;
+          //dedx_1    = _dedx_1[i1];         ////cout << "     dedx_1:" << dedx_1 << endl;
+                                           //1 and 2
+          for (int i2=i1+1; i2<k1; i2++)
+            {        
+              ////cout << "         i2:" << i2 << endl;
+              id_2      = _id_1[i2];              ////cout << "       id_2:" << id_2 << endl;
+              if (id_1!=id_2)
                 {
-                ij = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2;   ////cout << " ij:" << ij<< endl;
+                q_2       = _charge_1[i2];     ////cout << "        q_1:" << q_1 << endl;
+                iEtaPhi_2 = _iEtaPhi_1[i2];    ////cout << "  iEtaPhi_1:" << iEtaPhi_1 << endl;
+                iPt_2     = _iPt_1[i2];        ////cout << "      iPt_1:" << iPt_1 << endl;
+                corr_2    = _correction_1[i2]; ////cout << "     corr_1:" << corr_1 << endl;
+                pt_2      = _pt_1[i2];         ////cout << "       pt_1:" << pt_1 << endl;
+                //dedx_2    = _dedx_1[i2];       ////cout << "     dedx_2:" << dedx_2 << endl;
+                corr      = corr_1*corr_2;
+                if (q_2>q_1 || (q_1>0 && q_2>0 && pt_2<=pt_1) || (q_1<0 && q_2<0 && pt_2>=pt_1))
+                  {
+                  ij = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2;   ////cout << " ij:" << ij<< endl;
+                  }
+                else // swap particles
+                  {
+                  ij = iEtaPhi_2*_nBins_etaPhi_1 + iEtaPhi_1;   ////cout << " ij:" << ij<< endl;
+                  }
+                
+                __n2_12                  += corr;
+                __n2_12_vsEtaPhi[ij]     += corr;
+                ptpt                     = pt_1*pt_2;
+                __s2ptpt_12              += corr*ptpt;
+                __s2PtN_12               += corr*pt_1;
+                __s2NPt_12               += corr*pt_2;
+                __s2ptpt_12_vsEtaPhi[ij] += corr*ptpt;
+                __s2PtN_12_vsEtaPhi[ij]  += corr*pt_1;
+                __s2NPt_12_vsEtaPhi[ij]  += corr*pt_2;
+                __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;
+                
+                __n2Nw_12                  += 1;
+                __s2ptptNw_12              += ptpt;
+                __s2PtNNw_12               += pt_1;
+                __s2NPtNw_12               += pt_2;
+                
                 }
-              else // swap particles
+            } //i2       
+          } //i1       
+        }
+      else // field<0
+        {
+        for (int i1=0; i1<k1; i1++)
+          {
+          ////cout << "         i1:" << i1 << endl;
+          id_1      = _id_1[i1];           ////cout << "       id_1:" << id_1 << endl;
+          q_1       = _charge_1[i1];       ////cout << "        q_1:" << q_1 << endl;
+          iEtaPhi_1 = _iEtaPhi_1[i1];      ////cout << "  iEtaPhi_1:" << iEtaPhi_1 << endl;
+          iPt_1     = _iPt_1[i1];          ////cout << "      iPt_1:" << iPt_1 << endl;
+          corr_1    = _correction_1[i1];   ////cout << "     corr_1:" << corr_1 << endl;
+          pt_1      = _pt_1[i1];           ////cout << "       pt_1:" << pt_1 << endl;
+          //dedx_1    = _dedx_1[i1];         ////cout << "     dedx_1:" << dedx_1 << endl;
+                                           //1 and 2
+          for (int i2=i1+1; i2<k1; i2++)
+            {        
+              ////cout << "         i2:" << i2 << endl;
+              id_2      = _id_1[i2];              ////cout << "       id_2:" << id_2 << endl;
+              if (id_1!=id_2)
                 {
-                ij = iEtaPhi_2*_nBins_etaPhi_1 + iEtaPhi_1;   ////cout << " ij:" << ij<< endl;
+                q_2       = _charge_1[i2];     ////cout << "        q_2:" << q_2 << endl;
+                iEtaPhi_2 = _iEtaPhi_1[i2];    ////cout << "  iEtaPhi_2:" << iEtaPhi_2 << endl;
+                iPt_2     = _iPt_1[i2];        ////cout << "      iPt_2:" << iPt_2 << endl;
+                corr_2    = _correction_1[i2]; ////cout << "     corr_2:" << corr_2 << endl;
+                pt_2      = _pt_1[i2];         ////cout << "       pt_2:" << pt_2 << endl;
+                //dedx_2    = _dedx_1[i2];       ////cout << "     dedx_2:" << dedx_2 << endl;
+                corr      = corr_1*corr_2;
+                if ( q_2<q_1 || (q_1>0 && q_2>0 && pt_2>=pt_1) || (q_1<0 && q_2<0 && pt_2<=pt_1))
+                  {
+                  ij = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2;   ////cout << " ij:" << ij<< endl;
+                  }
+                else // swap particles
+                  {
+                  ij = iEtaPhi_2*_nBins_etaPhi_1 + iEtaPhi_1;   ////cout << " ij:" << ij<< endl;
+                  }
+                
+                __n2_12                  += corr;
+                __n2_12_vsEtaPhi[ij]     += corr;
+                ptpt                     = pt_1*pt_2;
+                __s2ptpt_12              += corr*ptpt;
+                __s2PtN_12               += corr*pt_1;
+                __s2NPt_12               += corr*pt_2;
+                __s2ptpt_12_vsEtaPhi[ij] += corr*ptpt;
+                __s2PtN_12_vsEtaPhi[ij]  += corr*pt_1;
+                __s2NPt_12_vsEtaPhi[ij]  += corr*pt_2;
+                __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;
+                
+                __n2Nw_12                  += 1;
+                __s2ptptNw_12              += ptpt;
+                __s2PtNNw_12               += pt_1;
+                __s2NPtNw_12               += pt_2;
+                
                 }
-              
-              __n2_12                  += corr;
-              __n2_12_vsEtaPhi[ij]     += corr;
-              ptpt                     = pt_1*pt_2;
-              __s2ptpt_12              += corr*ptpt;
-              __s2PtN_12               += corr*pt_1;
-              __s2NPt_12               += corr*pt_2;
-              __s2ptpt_12_vsEtaPhi[ij] += corr*ptpt;
-              __s2PtN_12_vsEtaPhi[ij]  += corr*pt_1;
-              __s2NPt_12_vsEtaPhi[ij]  += corr*pt_2;
-              __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;
-              
-              __n2Nw_12                  += 1;
-              __s2ptptNw_12              += ptpt;
-              __s2PtNNw_12               += pt_1;
-              __s2NPtNw_12               += pt_2;
-              
-              }
-          } //i2       
-        } //i1       
+            } //i2       
+          } //i1  
+        }
       }
-    else // field<0
+    else  // filter 1 and 2 are different -- must do all particle pairs...
       {
+      _n1_1_vsM->Fill(centrality,      __n1_1);
+      _s1pt_1_vsM->Fill(centrality,    __s1pt_1);
+      _n1Nw_1_vsM->Fill(centrality,    __n1Nw_1);
+      _s1ptNw_1_vsM->Fill(centrality,  __s1ptNw_1);
+      _n1_2_vsM->Fill(centrality,      __n1_2);
+      _s1pt_2_vsM->Fill(centrality,    __s1pt_2);
+      _n1Nw_2_vsM->Fill(centrality,    __n1Nw_2);
+      _s1ptNw_2_vsM->Fill(centrality,  __s1ptNw_2);
+      // reset pair counters
+      __n2_12   = __s2ptpt_12   = __s2NPt_12    = __s2PtN_12    = 0;
+      __n2Nw_12 = __s2ptptNw_12 = __s2NPtNw_12  = __s2PtNNw_12  = 0;
       for (int i1=0; i1<k1; i1++)
         {
         ////cout << "         i1:" << i1 << endl;
@@ -1560,30 +1532,40 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
         iPt_1     = _iPt_1[i1];          ////cout << "      iPt_1:" << iPt_1 << endl;
         corr_1    = _correction_1[i1];   ////cout << "     corr_1:" << corr_1 << endl;
         pt_1      = _pt_1[i1];           ////cout << "       pt_1:" << pt_1 << endl;
-        dedx_1    = _dedx_1[i1];         ////cout << "     dedx_1:" << dedx_1 << endl;
-                                         //1 and 2
-        for (int i2=i1+1; i2<k1; i2++)
+        px_1      = _px_1[i1];          ////cout << "      px_1:" << px_1 << endl;
+        py_1      = _py_1[i1];          ////cout << "      py_1:" << py_1 << endl;
+        pz_1      = _pz_1[i1];          ////cout << "      pz_1:" << pz_1 << endl;
+        //dedx_1    = _dedx_1[i1];        ////cout << "     dedx_1:" << dedx_1 << endl;
+        
+        //1 and 2
+        for (int i2=0; i2<k2; i2++)
           {        
             ////cout << "         i2:" << i2 << endl;
-            id_2      = _id_1[i2];              ////cout << "       id_2:" << id_2 << endl;
-            if (id_1!=id_2)
+            id_2   = _id_2[i2];              ////cout << "       id_2:" << id_2 << endl;
+            if (id_1!=id_2)  // exclude auto correlation
               {
-              q_2       = _charge_1[i2];     ////cout << "        q_2:" << q_2 << endl;
-              iEtaPhi_2 = _iEtaPhi_1[i2];    ////cout << "  iEtaPhi_2:" << iEtaPhi_2 << endl;
-              iPt_2     = _iPt_1[i2];        ////cout << "      iPt_2:" << iPt_2 << endl;
-              corr_2    = _correction_1[i2]; ////cout << "     corr_2:" << corr_2 << endl;
-              pt_2      = _pt_1[i2];         ////cout << "       pt_2:" << pt_2 << endl;
-              dedx_2    = _dedx_1[i2];       ////cout << "     dedx_2:" << dedx_2 << endl;
-              corr      = corr_1*corr_2;
-              if ( q_2<q_1 || (q_1>0 && q_2>0 && pt_2>=pt_1) || (q_1<0 && q_2<0 && pt_2<=pt_1))
-                {
-                ij = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2;   ////cout << " ij:" << ij<< endl;
-                }
-              else // swap particles
-                {
-                ij = iEtaPhi_2*_nBins_etaPhi_1 + iEtaPhi_1;   ////cout << " ij:" << ij<< endl;
-                }
+              q_2       = _charge_2[i2];     ////cout << "        q_2:" << q_2 << endl;
+              iEtaPhi_2 = _iEtaPhi_2[i2];    ////cout << "  iEtaPhi_2:" << iEtaPhi_2 << endl;
+              iPt_2     = _iPt_2[i2];        ////cout << "      iPt_2:" << iPt_2 << endl;
+              corr_2    = _correction_2[i2]; ////cout << "     corr_2:" << corr_2 << endl;
+              pt_2      = _pt_2[i2];         ////cout << "       pt_2:" << pt_2 << endl;
+              px_2      = _px_2[i2];          ////cout << "      px_2:" << px_2 << endl;
+              py_2      = _py_2[i2];          ////cout << "      py_2:" << py_2 << endl;
+              pz_2      = _pz_2[i2];          ////cout << "      pz_2:" << pz_2 << endl;
+              //dedx_2    = _dedx_2[i2];        ////cout << "     dedx_2:" << dedx_2 << endl;
               
+
+             if (_rejectPairConversion)
+                {
+                float e1Sq = massElecSq + pt_1*pt_1 + pz_1*pz_1;
+                float e2Sq = massElecSq + pt_2*pt_2 + pz_2*pz_2;
+                float mInvSq = 2*(massElecSq + sqrt(e1Sq*e2Sq) - px_1*px_2 - py_1*py_2 - pz_1*pz_2 );
+                float mInv = sqrt(mInvSq);
+                _invMass->Fill(mInv);
+               }
+
+              corr      = corr_1*corr_2;
+              ij        = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2;   ////cout << " ij:" << ij<< endl;
               __n2_12                  += corr;
               __n2_12_vsEtaPhi[ij]     += corr;
               ptpt                     = pt_1*pt_2;
@@ -1593,8 +1575,7 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
               __s2ptpt_12_vsEtaPhi[ij] += corr*ptpt;
               __s2PtN_12_vsEtaPhi[ij]  += corr*pt_1;
               __s2NPt_12_vsEtaPhi[ij]  += corr*pt_2;
-              __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;
-              
+              __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;         
               __n2Nw_12                  += 1;
               __s2ptptNw_12              += ptpt;
               __s2PtNNw_12               += pt_1;
@@ -1602,105 +1583,41 @@ void  AliAnalysisTaskDptDptCorrelations::UserExec(Option_t *option)
               
               }
           } //i2       
-        } //i1  
+        } //i1         
       }
     
+    _n2_12_vsM->Fill(centrality,     __n2_12);
+    _s2PtPt_12_vsM->Fill(centrality, __s2ptpt_12); 
+    _s2PtN_12_vsM->Fill(centrality,  __s2NPt_12);
+    _s2NPt_12_vsM->Fill(centrality,  __s2PtN_12);
     
+    _n2Nw_12_vsM->Fill(centrality,     __n2Nw_12);
+    _s2PtPtNw_12_vsM->Fill(centrality, __s2ptptNw_12); 
+    _s2PtNNw_12_vsM->Fill(centrality,  __s2NPtNw_12);
+    _s2NPtNw_12_vsM->Fill(centrality,  __s2PtNNw_12);
+
     }
-  else // filter 1 and 2 are different -- must do all particle pairs...
-    {
-    for (int i1=0; i1<k1; i1++)
-      {
-      ////cout << "         i1:" << i1 << endl;
-      id_1      = _id_1[i1];           ////cout << "       id_1:" << id_1 << endl;
-      q_1       = _charge_1[i1];       ////cout << "        q_1:" << q_1 << endl;
-      iEtaPhi_1 = _iEtaPhi_1[i1];      ////cout << "  iEtaPhi_1:" << iEtaPhi_1 << endl;
-      iPt_1     = _iPt_1[i1];          ////cout << "      iPt_1:" << iPt_1 << endl;
-      corr_1    = _correction_1[i1];   ////cout << "     corr_1:" << corr_1 << endl;
-      pt_1      = _pt_1[i1];           ////cout << "       pt_1:" << pt_1 << endl;
-      px_1      = _px_1[i1];          ////cout << "      px_1:" << px_1 << endl;
-      py_1      = _py_1[i1];          ////cout << "      py_1:" << py_1 << endl;
-      pz_1      = _pz_1[i1];          ////cout << "      pz_1:" << pz_1 << endl;
-      dedx_1    = _dedx_1[i1];        ////cout << "     dedx_1:" << dedx_1 << endl;
-      
-      //1 and 2
-      for (int i2=0; i2<k2; i2++)
-        {        
-          ////cout << "         i2:" << i2 << endl;
-          id_2   = _id_2[i2];              ////cout << "       id_2:" << id_2 << endl;
-          if (id_1!=id_2)  // exclude auto correlation
-            {
-            q_2       = _charge_2[i2];     ////cout << "        q_2:" << q_2 << endl;
-            iEtaPhi_2 = _iEtaPhi_2[i2];    ////cout << "  iEtaPhi_2:" << iEtaPhi_2 << endl;
-            iPt_2     = _iPt_2[i2];        ////cout << "      iPt_2:" << iPt_2 << endl;
-            corr_2    = _correction_2[i2]; ////cout << "     corr_2:" << corr_2 << endl;
-            pt_2      = _pt_2[i2];         ////cout << "       pt_2:" << pt_2 << endl;
-            px_2      = _px_2[i2];          ////cout << "      px_2:" << px_2 << endl;
-            py_2      = _py_2[i2];          ////cout << "      py_2:" << py_2 << endl;
-            pz_2      = _pz_2[i2];          ////cout << "      pz_2:" << pz_2 << endl;
-            dedx_2    = _dedx_2[i2];        ////cout << "     dedx_2:" << dedx_2 << endl;
-            if (_rejectPairConversion)
-              {
-              float e1Sq = massElecSq + pt_1*pt_1 + pz_1*pz_1;
-              float e2Sq = massElecSq + pt_2*pt_2 + pz_2*pz_2;
-              float mInvSq = 2*(massElecSq + sqrt(e1Sq*e2Sq) - px_1*px_2 - py_1*py_2 - pz_1*pz_2 );
-              float mInv = sqrt(mInvSq);
-              _invMass->Fill(mInv);
-              if (mInv<0.5)
-                {
-                if (dedx_1>75. && dedx_2>75.)
-                  {
-                  _invMassElec->Fill(mInv);
-                  if (mInv<0.05) continue;
-                  }
-                }
-              }
-            corr      = corr_1*corr_2;
-            ij        = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2;   ////cout << " ij:" << ij<< endl;
-            __n2_12                  += corr;
-            __n2_12_vsEtaPhi[ij]     += corr;
-            ptpt                     = pt_1*pt_2;
-            __s2ptpt_12              += corr*ptpt;
-            __s2PtN_12               += corr*pt_1;
-            __s2NPt_12               += corr*pt_2;
-            __s2ptpt_12_vsEtaPhi[ij] += corr*ptpt;
-            __s2PtN_12_vsEtaPhi[ij]  += corr*pt_1;
-            __s2NPt_12_vsEtaPhi[ij]  += corr*pt_2;
-            __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;         
-            __n2Nw_12                  += 1;
-            __s2ptptNw_12              += ptpt;
-            __s2PtNNw_12               += pt_1;
-            __s2NPtNw_12               += pt_2;
-            
-            }
-        } //i2       
-      } //i1  
-    }
-  ////cout << "_mult4:"<< _mult4 << " __s2ptpt_12:" << __s2ptpt_12 << " __s2PtN_12:" << __s2PtN_12 << endl;
-  _n2_12_vsM->Fill(_mult4,     __n2_12);
-  _s2PtPt_12_vsM->Fill(_mult4, __s2ptpt_12); 
-  _s2PtN_12_vsM->Fill(_mult4,  __s2NPt_12);
-  _s2NPt_12_vsM->Fill(_mult4,  __s2PtN_12);
   
-  _n2Nw_12_vsM->Fill(_mult4,     __n2Nw_12);
-  _s2PtPtNw_12_vsM->Fill(_mult4, __s2ptptNw_12); 
-  _s2PtNNw_12_vsM->Fill(_mult4,  __s2NPtNw_12);
-  _s2NPtNw_12_vsM->Fill(_mult4,  __s2PtNNw_12);
   
-  ////cout << "Event Done " << endl;
+  AliInfo("AliAnalysisTaskDptDptCorrelations::UserExec()   -----------------Event Done ");
   PostData(0,_outputHistoList);
   
 }
 
 void   AliAnalysisTaskDptDptCorrelations::FinishTaskOutput()
 {
+  AliInfo("AliAnalysisTaskDptDptCorrelations::FinishTaskOutput() Starting.");
+  Printf("= 0 ====================================================================");
   finalizeHistograms();
+  AliInfo("= 1 ====================================================================");
   PostData(0,_outputHistoList);
+  AliInfo("= 2 ====================================================================");
+  AliInfo("AliAnalysisTaskDptDptCorrelations::FinishTaskOutput() Done.");
 }
 
-void   AliAnalysisTaskDptDptCorrelations::Terminate(Option_t* )
+void   AliAnalysisTaskDptDptCorrelations::Terminate(Option_t* /*option*/)
 {
-  
+  AliInfo("AliAnalysisTaskDptDptCorrelations::Terminate() Starting/Done.");
 }
 
 
@@ -1850,7 +1767,7 @@ float *  AliAnalysisTaskDptDptCorrelations::getFloatArray(int size, float v)
 
 
 //________________________________________________________________________
-TH1D * AliAnalysisTaskDptDptCorrelations::createHisto(const TString &  name, const TString &  title, 
+TH1D * AliAnalysisTaskDptDptCorrelations::createHisto1D(const TString &  name, const TString &  title, 
                                                       int n, double xMin, double xMax, 
                                                       const TString &  xTitle, const TString &  yTitle)
 {
@@ -1865,7 +1782,7 @@ TH1D * AliAnalysisTaskDptDptCorrelations::createHisto(const TString &  name, con
 
 
 //________________________________________________________________________
-TH1D * AliAnalysisTaskDptDptCorrelations::createHisto(const TString &  name, const TString &  title, 
+TH1D * AliAnalysisTaskDptDptCorrelations::createHisto1D(const TString &  name, const TString &  title, 
                                                       int n, double * bins, 
                                                       const TString &  xTitle, const TString &  yTitle)
 {
@@ -1879,7 +1796,7 @@ TH1D * AliAnalysisTaskDptDptCorrelations::createHisto(const TString &  name, con
 
 
 //________________________________________________________________________
-TH2D * AliAnalysisTaskDptDptCorrelations::createHisto(const TString &  name, const TString &  title, 
+TH2D * AliAnalysisTaskDptDptCorrelations::createHisto2D(const TString &  name, const TString &  title, 
                                                       int nx, double xMin, double xMax, int ny, double yMin, double yMax, 
                                                       const TString &  xTitle, const TString &  yTitle, const TString &  zTitle)
 {
@@ -1893,7 +1810,7 @@ TH2D * AliAnalysisTaskDptDptCorrelations::createHisto(const TString &  name, con
 }
 
 //________________________________________________________________________
-TH2D * AliAnalysisTaskDptDptCorrelations::createHisto(const TString &  name, const TString &  title, 
+TH2D * AliAnalysisTaskDptDptCorrelations::createHisto2D(const TString &  name, const TString &  title, 
                                                       int nx, double* xbins, int ny, double yMin, double yMax, 
                                                       const TString &  xTitle, const TString &  yTitle, const TString &  zTitle)
 {
@@ -1907,9 +1824,68 @@ TH2D * AliAnalysisTaskDptDptCorrelations::createHisto(const TString &  name, con
   return h;
 }
 
+//// F /////
+//________________________________________________________________________
+TH1F * AliAnalysisTaskDptDptCorrelations::createHisto1F(const TString &  name, const TString &  title, 
+                                                        int n, double xMin, double xMax, 
+                                                        const TString &  xTitle, const TString &  yTitle)
+{
+  //CreateHisto new 1D historgram
+  AliInfo(Form("createHisto 1D histo %s   nBins: %d  xMin: %f   xMax: %f",name.Data(),n,xMin,xMax));
+  TH1F * h = new TH1F(name,title,n,xMin,xMax);
+  h->GetXaxis()->SetTitle(xTitle);
+  h->GetYaxis()->SetTitle(yTitle);
+  addToList(h);
+  return h;
+}
+
+
+//________________________________________________________________________
+TH1F * AliAnalysisTaskDptDptCorrelations::createHisto1F(const TString &  name, const TString &  title, 
+                                                        int n, double * bins, 
+                                                        const TString &  xTitle, const TString &  yTitle)
+{
+  AliInfo(Form("createHisto 1D histo %s   with %d non uniform nBins",name.Data(),n));
+  TH1F * h = new TH1F(name,title,n,bins);
+  h->GetXaxis()->SetTitle(xTitle);
+  h->GetYaxis()->SetTitle(yTitle);
+  addToList(h);
+  return h;
+}
+
+
+//________________________________________________________________________
+TH2F * AliAnalysisTaskDptDptCorrelations::createHisto2F(const TString &  name, const TString &  title, 
+                                                        int nx, double xMin, double xMax, int ny, double yMin, double yMax, 
+                                                        const TString &  xTitle, const TString &  yTitle, const TString &  zTitle)
+{
+  AliInfo(Form("createHisto 2D histo %s  nx: %d  xMin: %f10.4 xMax: %f10.4  ny: %d   yMin: %f10.4 yMax: %f10.4",name.Data(),nx,xMin,xMax,ny,yMin,yMax));
+  TH2F * h = new TH2F(name,title,nx,xMin,xMax,ny,yMin,yMax);
+  h->GetXaxis()->SetTitle(xTitle);
+  h->GetYaxis()->SetTitle(yTitle);
+  h->GetZaxis()->SetTitle(zTitle);
+  addToList(h);
+  return h;
+}
+
+//________________________________________________________________________
+TH2F * AliAnalysisTaskDptDptCorrelations::createHisto2F(const TString &  name, const TString &  title, 
+                                                        int nx, double* xbins, int ny, double yMin, double yMax, 
+                                                        const TString &  xTitle, const TString &  yTitle, const TString &  zTitle)
+{
+  AliInfo(Form("createHisto 2D histo %s   with %d non uniform nBins",name.Data(),nx));
+  TH2F * h;
+  h = new TH2F(name,title,nx,xbins,ny,yMin,yMax);
+  h->GetXaxis()->SetTitle(xTitle);
+  h->GetYaxis()->SetTitle(yTitle);
+  h->GetZaxis()->SetTitle(zTitle);
+  addToList(h);
+  return h;
+}
+
 
 //________________________________________________________________________
-TH3F * AliAnalysisTaskDptDptCorrelations::createHisto(const TString &  name, const TString &  title, 
+TH3F * AliAnalysisTaskDptDptCorrelations::createHisto3F(const TString &  name, const TString &  title, 
                                                       int nx, double xMin, double xMax, 
                                                       int ny, double yMin, double yMax, 
                                                       int nz, double zMin, double zMax, 
@@ -1959,7 +1935,7 @@ void   AliAnalysisTaskDptDptCorrelations::addToList(TH1 *h)
     _outputHistoList->Add(h);
     }
   else
-    cout << "addToList(TH1 *h) _outputHistoList is null!!!!! Shoudl abort ship" << endl;
+    AliInfo("addToList(TH1 *h) _outputHistoList is null!!!!! Should abort ship");
 
 }