]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/QATasks/AliAnalysisTaskQAHighPtDeDx.cxx
Fix for end-of-line style
[u/mrichter/AliRoot.git] / PWGLF / QATasks / AliAnalysisTaskQAHighPtDeDx.cxx
index 7390a840673b977cc8cea6ba425ca374b47efdf7..270a69626adf2488186d43b83be063d8859c8f49 100644 (file)
- /*************************************************************************\r
-* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *\r
-*                                                                        *\r
-* Author: The ALICE Off-line Project.                                    *\r
-* Contributors are mentioned in the code where appropriate.              *\r
-*                                                                        *\r
-* Permission to use, copy, modify and distribute this software and its   *\r
-* documentation strictly for non-commercial purposes is hereby granted   *\r
-* without fee, provided that the above copyright notice appears in all   *\r
-* copies and that both the copyright notice and this permission notice   *\r
-* appear in the supporting documentation. The authors make no claims     *\r
-* about the suitability of this software for any purpose. It is          *\r
-* provided "as is" without express or implied warranty.                  * **************************************************************************/\r
-\r
-\r
-#include "AliAnalysisTaskQAHighPtDeDx.h"\r
-\r
-// ROOT includes\r
-#include <TList.h>\r
-#include <TTree.h>\r
-#include <TMath.h>\r
-#include <TH1.h>\r
-#include <TF1.h>\r
-#include <TProfile.h>\r
-#include <TParticle.h>\r
-#include <TFile.h>\r
-\r
-// AliRoot includes\r
-#include <AliAnalysisManager.h>\r
-#include <AliAnalysisFilter.h>\r
-#include <AliESDInputHandler.h>\r
-#include <AliESDEvent.h>\r
-#include <AliESDVertex.h>\r
-#include <AliLog.h>\r
-#include <AliExternalTrackParam.h>\r
-#include <AliESDtrackCuts.h>\r
-#include <AliESDVZERO.h>\r
-#include <AliAODVZERO.h>\r
-\r
-#include <AliMCEventHandler.h>\r
-#include <AliMCEvent.h>\r
-#include <AliStack.h>\r
-\r
-#include <TTreeStream.h>\r
-\r
-#include <AliHeader.h>\r
-#include <AliGenPythiaEventHeader.h>\r
-#include <AliGenDPMjetEventHeader.h>\r
-\r
-#include "AliCentrality.h" \r
-#include <AliESDv0.h>\r
-#include <AliKFVertex.h>\r
-#include <AliAODVertex.h>\r
-\r
-#include <AliAODTrack.h> \r
-#include <AliAODPid.h> \r
-#include <AliAODMCHeader.h> \r
-\r
-\r
-// STL includes\r
-#include <iostream>\r
-using namespace std;\r
-\r
-\r
-//\r
-// Responsible:\r
-// Antonio Ortiz (Lund)\r
-// Peter Christiansen (Lund)\r
-//\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-const Double_t AliAnalysisTaskQAHighPtDeDx::fgkClight = 2.99792458e-2;\r
-Float_t magf = -1;\r
-TF1* cutLow  = new TF1("StandardPhiCutLow",  "0.1/x/x+pi/18.0-0.025", 0, 50);\r
-TF1* cutHigh = new TF1("StandardPhiCutHigh", "0.12/x+pi/18.0+0.035", 0, 50);\r
-Double_t DeDxMIPMin  = 30;\r
-Double_t DeDxMIPMax  = 65;\r
-const Int_t nHists = 9;\r
-Float_t centralityGlobal = -10;\r
-Int_t etaLow[nHists]  = {-8, -8, -6, -4, -2, 0, 2, 4, 6};\r
-Int_t etaHigh[nHists] = { 8, -6, -4, -2,  0, 2, 4, 6, 8};\r
-\r
-Int_t nDeltaPiBins   = 80;\r
-Double_t deltaPiLow  = 20;\r
-Double_t deltaPiHigh = 100;\r
-const Char_t *Pid[7]={"Ch","Pion","Kaon","Proton","Electron","Muon","Oher"};\r
-ClassImp(AliAnalysisTaskQAHighPtDeDx)\r
-//_____________________________________________________________________________\r
-//AliAnalysisTaskQAHighPtDeDx::AliAnalysisTaskQAHighPtDeDx(const char *name):\r
-AliAnalysisTaskQAHighPtDeDx::AliAnalysisTaskQAHighPtDeDx():\r
-  AliAnalysisTaskSE(),\r
-  fESD(0x0),\r
-  fAOD(0x0),\r
-  fMC(0x0),\r
-  fMCStack(0x0),\r
-  fMCArray(0x0),\r
-  fTrackFilterGolden(0x0),\r
-  fTrackFilterTPC(0x0),\r
-  fCentEst("V0M"),\r
-  fAnalysisType("ESD"),\r
-  fAnalysisMC(kFALSE),\r
-  fAnalysisPbPb(kFALSE),\r
-  ftrigBit(0x0),\r
-  fRandom(0x0),\r
-  fPileUpRej(kFALSE),\r
-  fVtxCut(10.0),  \r
-  fEtaCut(0.9),  \r
-  fMinCent(0.0),\r
-  fMaxCent(100.0),\r
-  fStoreMcIn(kFALSE),//\r
-  fMcProcessType(-999),\r
-  fTriggeredEventMB(-999),\r
-  fVtxStatus(-999),\r
-  fZvtx(-999),\r
-  fZvtxMC(-999),\r
-  fRun(-999),\r
-  fEventId(-999),\r
-  fListOfObjects(0), \r
-  fEvents(0x0), fVtx(0x0), fVtxMC(0x0), fVtxBeforeCuts(0x0), fVtxAfterCuts(0x0),\r
-  fn1(0x0),\r
-  fcent(0x0),\r
-  hMIPVsEta(0x0),\r
-  pMIPVsEta(0x0),\r
-  hMIPVsEtaV0s(0x0),\r
-  pMIPVsEtaV0s(0x0),\r
-  hPlateauVsEta(0x0),\r
-  pPlateauVsEta(0x0),\r
-  hPhi(0x0)\r
-\r
-\r
-{\r
-  //default constructor\r
-}\r
-\r
-\r
-AliAnalysisTaskQAHighPtDeDx::AliAnalysisTaskQAHighPtDeDx(const char *name):\r
-  AliAnalysisTaskSE(name),\r
-  fESD(0x0),\r
-  fAOD(0x0),\r
-  fMC(0x0),\r
-  fMCStack(0x0),\r
-  fMCArray(0x0),\r
-  fTrackFilterGolden(0x0),\r
-  fTrackFilterTPC(0x0),\r
-  fCentEst("V0M"),\r
-  fAnalysisType("ESD"),\r
-  fAnalysisMC(kFALSE),\r
-  fAnalysisPbPb(kFALSE),\r
-  ftrigBit(0x0),\r
-  fRandom(0x0),\r
-  fPileUpRej(kFALSE),\r
-  fVtxCut(10.0),  \r
-  fEtaCut(0.9),  \r
-  fMinCent(0.0),\r
-  fMaxCent(100.0),\r
-  fStoreMcIn(kFALSE),//\r
-  fMcProcessType(-999),\r
-  fTriggeredEventMB(-999),\r
-  fVtxStatus(-999),\r
-  fZvtx(-999),\r
-  fZvtxMC(-999),\r
-  fRun(-999),\r
-  fEventId(-999),\r
-  fListOfObjects(0), \r
-  fEvents(0x0), fVtx(0x0), fVtxMC(0x0), fVtxBeforeCuts(0x0), fVtxAfterCuts(0x0),\r
-  fn1(0x0),\r
-  fcent(0x0),\r
-  hMIPVsEta(0x0),\r
-  pMIPVsEta(0x0),\r
-  hMIPVsEtaV0s(0x0),\r
-  pMIPVsEtaV0s(0x0),\r
-  hPlateauVsEta(0x0),\r
-  pPlateauVsEta(0x0),\r
-  hPhi(0x0)\r
-\r
-\r
-{\r
-  // Default constructor (should not be used)\r
-  for(Int_t i=0;i<9;++i){\r
\r
-    hMIPVsNch[i]=0;//TH2D, MIP vs Nch for different eta intervals\r
-    pMIPVsNch[i]=0;//TProfile, MIP vs Nch for different eta intervals\r
-    hMIPVsPhi[i]=0;//TH2D, MIP vs phi for different eta intervals\r
-    pMIPVsPhi[i]=0;//TProfile, MIP vs phi for different eta intervals\r
-    hPlateauVsPhi[i]=0;//TH2D, dE/dx vs Phi, electrons 0.4<p<0.6 GeV/c\r
-    pPlateauVsPhi[i]=0;//TProfile, dE/dx vs Phi, electrons 0.4<p<0.6 GeV/c\r
-    histPiV0[i]=0;//TH2D, dE/dx vs p, pi id by V0s\r
-    histpPiV0[i]=0;//TH1D, pi id by V0s\r
-    histPV0[i]=0;// TH2D, dE/dx vs p, p id by V0s\r
-    histpPV0[i]=0;// TH1D, p id by V0s\r
-    histAllCh[i]=0;//TH2D, dE/dx vs p for all charged particles\r
-    histPiTof[i]=0;//TH2D, dE/dx vs p for a "clean" sample of pions, beta>1\r
-    histpPiTof[i]=0;//TH1D, for a "clean" sample of pions, beta>1\r
-    histEV0[i]=0;\r
-\r
-    for(Int_t pid=0;pid<7;++pid){\r
-      hMcIn[pid][i]=0;\r
-      hMcOut[pid][i]=0;\r
-    }\r
-\r
-  }\r
-  DefineOutput(1, TList::Class());//esto es nuevo\r
-}\r
-\r
-\r
-\r
-\r
-AliAnalysisTaskQAHighPtDeDx::~AliAnalysisTaskQAHighPtDeDx() {\r
-  //\r
-  // Destructor\r
-  //\r
-\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-//______________________________________________________________________________\r
-void AliAnalysisTaskQAHighPtDeDx::UserCreateOutputObjects()\r
-{ \r
-  // This method is called once per worker node\r
-  // Here we define the output: histograms and debug tree if requested \r
-  // We also create the random generator here so it might get different seeds...\r
-  fRandom = new TRandom(0); // 0 means random seed\r
\r
-\r
-\r
-  //OpenFile(1);\r
-  fListOfObjects = new TList();\r
-  fListOfObjects->SetOwner();\r
-  \r
-\r
-\r
-\r
-  //\r
-  // Histograms\r
-  //  \r
-  fEvents = new TH1I("fEvents","Number of analyzed events; Events; Counts", 3, 0, 3);\r
-  fListOfObjects->Add(fEvents);\r
-\r
-  fn1=new TH1F("fn1","fn1",11,-1,10);\r
-  fListOfObjects->Add(fn1);\r
-\r
-  fcent=new TH1F("fcent","fcent",104,-2,102);\r
-  fListOfObjects->Add(fcent);\r
-\r
-  fVtx = new TH1I("fVtx","Vtx info (0=no, 1=yes); Vtx; Counts", 2, -0.5, 1.5);\r
-  fListOfObjects->Add(fVtx);\r
-\r
-  fVtxBeforeCuts = new TH1F("fVtxBeforeCuts", "Vtx distribution (before cuts); Vtx z [cm]; Counts", 120, -30, 30);\r
-  fListOfObjects->Add(fVtxBeforeCuts);\r
-  \r
-  fVtxAfterCuts = new TH1F("fVtxAfterCuts", "Vtx distribution (before cuts); Vtx z [cm]; Counts", 120, -30, 30);\r
-  fListOfObjects->Add(fVtxAfterCuts);\r
-\r
-\r
-  const Int_t nPtBinsV0s = 25;\r
-  Double_t ptBinsV0s[nPtBinsV0s+1] = { 0.0 , 0.1 , 0.2 , 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.8 , 0.9 , 1.0 ,\r
-                                      1.2 , 1.4 , 1.6 , 1.8 , 2.0 , 2.5 , 3.0 , 3.5 , 4.0 , 5.0 , 7.0 ,\r
-                                      9.0 , 12.0, 15.0, 20.0 };\r
-  \r
-\r
-\r
-\r
-  const Char_t* ending[nHists] = {"", "86", "64", "42", "20", "02", "24", "46", "68"};\r
-  \r
-  const Char_t* LatexEta[nHists] = {\r
-    "|#eta|<0.8", "-0.8<#eta<-0.6", "-0.6<#eta<-0.4", "-0.4<#eta<-0.2", "-0.2<#eta<0", \r
-    "0<#eta<0.2", "0.2<#eta<0.4", "0.4<#eta<0.6", "0.6<#eta<0.8" \r
-  };\r
-  hPhi = new TH2D("histPhi", "pt; #phi'", nPtBinsV0s, ptBinsV0s, 90, -0.05, 0.4); \r
-  //dE/dx vs phi, pions at the MIP\r
-  fListOfObjects->Add(hPhi);\r
-\r
-\r
-  \r
-\r
-  Int_t nPhiBins = 36;\r
-  \r
-  for(Int_t i = 0; i < nHists; i++) {\r
-    \r
-   \r
-    hMIPVsPhi[i]      = new TH2D(Form("hMIPVsPhi%s", ending[i]), Form("%s; #phi (rad); dE/dx MIP",LatexEta[i]), nPhiBins, 0, 2*TMath::Pi(), \r
-                                DeDxMIPMax-DeDxMIPMin, DeDxMIPMin, DeDxMIPMax);\r
-    hMIPVsPhi[i]->Sumw2();\r
-    \r
-    pMIPVsPhi[i]     = new TProfile(Form("pMIPVsPhi%s", ending[i]), Form("%s; #phi (rad); dE/dx MIP",LatexEta[i]),  nPhiBins, 0, 2*TMath::Pi(),\r
-                                   DeDxMIPMin, DeDxMIPMax);\r
-    pMIPVsPhi[i]->SetMarkerStyle(20);\r
-    pMIPVsPhi[i]->SetMarkerColor(1);\r
-    pMIPVsPhi[i]->SetLineColor(1);\r
-    pMIPVsPhi[i]->Sumw2();\r
-\r
-    fListOfObjects->Add(hMIPVsPhi[i]);\r
-    fListOfObjects->Add(pMIPVsPhi[i]);\r
-\r
-    hPlateauVsPhi[i]  = new TH2D(Form("hPlateauVsPhi%s", ending[i]), Form("%s; #phi (rad); dE/dx Plateau",LatexEta[i]),  nPhiBins, 0, 2*TMath::Pi(),\r
-                                 95-DeDxMIPMax, DeDxMIPMax, 95);\r
-    hPlateauVsPhi[i]->Sumw2();\r
-    \r
-    pPlateauVsPhi[i] = new TProfile(Form("pPlateauVsPhi%s", ending[i]), Form("%s; #phi (rad); dE/dx Plateau",LatexEta[i]), nPhiBins, 0, 2*TMath::Pi(),\r
-                                    DeDxMIPMax, 95);\r
-    pPlateauVsPhi[i]->SetMarkerStyle(20);\r
-    pPlateauVsPhi[i]->SetMarkerColor(1);\r
-    pPlateauVsPhi[i]->SetLineColor(1);\r
-    pPlateauVsPhi[i]->Sumw2();\r
-\r
-    fListOfObjects->Add(hPlateauVsPhi[i]);\r
-    fListOfObjects->Add(pPlateauVsPhi[i]);\r
-\r
-\r
-    hMIPVsNch[i]      = new TH2D(Form("hMIPVsNch%s", ending[i]), Form("%s; TPC track mult. |#eta|<0.8; dE/dx MIP",LatexEta[i]), 400, 1, 2001, \r
-                                 DeDxMIPMax-DeDxMIPMin, DeDxMIPMin, DeDxMIPMax);\r
-    hMIPVsNch[i]->Sumw2();\r
-    \r
-    pMIPVsNch[i] = new TProfile(Form("pMIPVsNch%s", ending[i]), Form("%s; TPC track mult. |#eta|<0.8; dE/dx MIP",LatexEta[i]), 400, 1, 2001, DeDxMIPMin, DeDxMIPMax);\r
-    pMIPVsNch[i]->SetMarkerStyle(20);\r
-    pMIPVsNch[i]->SetMarkerColor(1);\r
-    pMIPVsNch[i]->SetLineColor(1);\r
-    pMIPVsNch[i]->Sumw2();\r
-\r
-    fListOfObjects->Add(hMIPVsNch[i]);\r
-    fListOfObjects->Add(pMIPVsNch[i]);\r
-\r
-    //two dimmesional distributions dE/dx vs p for secondary pions\r
-    histPiV0[i]  = new TH2D(Form("histPiV0%s", ending[i]), "Pions id by V0", nPtBinsV0s, ptBinsV0s, nDeltaPiBins, deltaPiLow, deltaPiHigh);\r
-    histPiV0[i]->Sumw2();\r
-    fListOfObjects->Add(histPiV0[i]);\r
-\r
-    histpPiV0[i]  = new TH1D(Form("histPiV01D%s", ending[i]), "Pions id by V0; #it{p} (GeV/#it{c}); counts", 200, 0, 20);\r
-    histpPiV0[i]->Sumw2();\r
-    fListOfObjects->Add(histpPiV0[i]);\r
-\r
-    //two dimmesional distributions dE/dx vs p for secondary protons\r
-    histPV0[i]   = new TH2D(Form("histPV0%s", ending[i]), "Protons id by V0", nPtBinsV0s, ptBinsV0s, nDeltaPiBins, deltaPiLow, deltaPiHigh);\r
-    histPV0[i]->Sumw2();\r
-    fListOfObjects->Add(histPV0[i]);\r
-\r
-    histpPV0[i]  = new TH1D(Form("histPV01D%s", ending[i]), "Protons id by V0; #it{p} (GeV/#it{c}); counts", 200, 0, 20);\r
-    histpPV0[i]->Sumw2();\r
-    fListOfObjects->Add(histpPV0[i]);\r
-\r
-    //two dimmesional distributions dE/dx vs p for primary pions\r
-    histPiTof[i] = new TH2D(Form("histPiTof%s", ending[i]), "all charged", nPtBinsV0s, ptBinsV0s, nDeltaPiBins, deltaPiLow, deltaPiHigh);\r
-    histPiTof[i]->Sumw2();\r
-\r
-    histpPiTof[i]  = new TH1D(Form("histPiTof1D%s", ending[i]), "Protons id by V0; #it{p} (GeV/#it{c}); counts", 200, 0, 20);\r
-    histpPiTof[i]->Sumw2();\r
-    fListOfObjects->Add(histpPiTof[i]);\r
-\r
-\r
-    histAllCh[i] = new TH2D(Form("histAllCh%s", ending[i]), "Pions id by TOF", nPtBinsV0s, ptBinsV0s, nDeltaPiBins, deltaPiLow, deltaPiHigh);\r
-    histAllCh[i]->Sumw2();\r
-\r
-    fListOfObjects->Add(histPiTof[i]);\r
-    fListOfObjects->Add(histAllCh[i]);\r
-\r
-    histEV0[i]   = new TH2D(Form("histEV0%s", ending[i]), "Electrons id by V0", nPtBinsV0s, ptBinsV0s, nDeltaPiBins, deltaPiLow, deltaPiHigh);\r
-    histEV0[i]->Sumw2();\r
-    fListOfObjects->Add(histEV0[i]);\r
-\r
-\r
-\r
-  }\r
-\r
-\r
-  hMIPVsEta = new TH2D("hMIPVsEta","; #eta; dE/dx_{MIP, primary tracks}",16,-0.8,0.8,DeDxMIPMax-DeDxMIPMin, DeDxMIPMin, DeDxMIPMax);\r
-  pMIPVsEta = new TProfile("pMIPVsEta","; #eta; #LT dE/dx #GT_{MIP, primary tracks}",16,-0.8,0.8, DeDxMIPMin, DeDxMIPMax);\r
-  hMIPVsEtaV0s = new TH2D("hMIPVsEtaV0s","; #eta; dE/dx_{MIP, secondary tracks}",16,-0.8,0.8,DeDxMIPMax-DeDxMIPMin, DeDxMIPMin, DeDxMIPMax);\r
-  pMIPVsEtaV0s = new TProfile("pMIPVsEtaV0s","; #eta; #LT dE/dx #GT_{MIP, secondary tracks}",16,-0.8,0.8,DeDxMIPMin, DeDxMIPMax);\r
-  \r
-  hPlateauVsEta = new TH2D("hPlateauVsEta","; #eta; dE/dx_{Plateau, primary tracks}",16,-0.8,0.8,95-DeDxMIPMax, DeDxMIPMax, 95);\r
-  pPlateauVsEta = new TProfile("pPlateauVsEta","; #eta; #LT dE/dx #GT_{Plateau, primary tracks}",16,-0.8,0.8, DeDxMIPMax, 95);\r
-\r
-  fListOfObjects->Add(hMIPVsEta);\r
-  fListOfObjects->Add(pMIPVsEta);\r
-  fListOfObjects->Add(hMIPVsEtaV0s);\r
-  fListOfObjects->Add(pMIPVsEtaV0s);\r
-  fListOfObjects->Add(hPlateauVsEta);\r
-  fListOfObjects->Add(pPlateauVsEta);\r
-\r
-\r
-\r
-\r
-\r
-\r
-  if (fAnalysisMC) {    \r
-    for(Int_t i = 0; i < nHists; i++) {\r
-      for(Int_t pid = 0; pid < 7; pid++) {\r
-       \r
-       hMcIn[pid][i] = new TH1D(Form("hIn%s%s", Pid[pid],ending[i]), Form("MC in (pid %s)", Pid[pid]), \r
-                                nPtBinsV0s, ptBinsV0s);\r
-       fListOfObjects->Add(hMcIn[pid][i]);\r
-       \r
-       hMcOut[pid][i] = new TH1D(Form("hMcOut%s%s", Pid[pid],ending[i]), Form("MC out (pid %s)", Pid[pid]), \r
-                                 nPtBinsV0s, ptBinsV0s);\r
-       fListOfObjects->Add(hMcOut[pid][i]);\r
-       \r
-       \r
-      }\r
-    }\r
-\r
-    fVtxMC = new TH1F("fVtxMC","mc vtx", 120, -30, 30);\r
-    fListOfObjects->Add(fVtxMC);\r
-    \r
-  }\r
\r
-  // Post output data.\r
-  PostData(1, fListOfObjects);\r
-}\r
-\r
-//______________________________________________________________________________\r
-void AliAnalysisTaskQAHighPtDeDx::UserExec(Option_t *) \r
-{\r
-  // Main loop\r
-\r
-  //\r
-  // First we make sure that we have valid input(s)!\r
-  //\r
-\r
-\r
-\r
-  AliVEvent *event = InputEvent();\r
-  if (!event) {\r
-     Error("UserExec", "Could not retrieve event");\r
-     return;\r
-  }\r
-\r
-\r
-\r
-  if (fAnalysisType == "ESD"){\r
-    fESD = dynamic_cast<AliESDEvent*>(event);\r
-    if(!fESD){\r
-      Printf("%s:%d ESDEvent not found in Input Manager",(char*)__FILE__,__LINE__);\r
-      this->Dump();\r
-      return;\r
-    }    \r
-  } else {\r
-    fAOD = dynamic_cast<AliAODEvent*>(event);\r
-    if(!fAOD){\r
-      Printf("%s:%d AODEvent not found in Input Manager",(char*)__FILE__,__LINE__);\r
-      this->Dump();\r
-      return;\r
-    }    \r
-  }\r
-\r
-\r
-\r
-  if (fAnalysisMC) {\r
-\r
-    if (fAnalysisType == "ESD"){\r
-      fMC = dynamic_cast<AliMCEvent*>(MCEvent());\r
-      if(!fMC){\r
-       Printf("%s:%d MCEvent not found in Input Manager",(char*)__FILE__,__LINE__);\r
-       this->Dump();\r
-       return;\r
-      }    \r
-\r
-      fMCStack = fMC->Stack();\r
-      \r
-      if(!fMCStack){\r
-       Printf("%s:%d MCStack not found in Input Manager",(char*)__FILE__,__LINE__);\r
-       this->Dump();\r
-       return;\r
-      }    \r
-    } else { // AOD\r
-\r
-      fMC = dynamic_cast<AliMCEvent*>(MCEvent());\r
-      if(fMC)\r
-       fMC->Dump();\r
-\r
-      fMCArray = (TClonesArray*)fAOD->FindListObject("mcparticles");\r
-      if(!fMCArray){\r
-       Printf("%s:%d AOD MC array not found in Input Manager",(char*)__FILE__,__LINE__);\r
-       this->Dump();\r
-       return;\r
-      }    \r
-    }\r
-  }\r
-\r
-  \r
-  // Get trigger decision\r
-  fTriggeredEventMB = 0; //init\r
-  \r
-  fn1->Fill(0);\r
-  \r
-  if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))\r
-     ->IsEventSelected() & ftrigBit ){\r
-    fTriggeredEventMB = 1;  //event triggered as minimum bias\r
-  }\r
-\r
-  // Get process type for MC\r
-  fMcProcessType = 0; // -1=invalid, 0=data, 1=ND, 2=SD, 3=DD\r
-\r
-  // real data that are not triggered we skip\r
-  if(!fAnalysisMC && !fTriggeredEventMB)\r
-    return; \r
-  \r
-  fn1->Fill(1);\r
-\r
-\r
-  if (fAnalysisMC) {\r
-    \r
-\r
-\r
-    if (fAnalysisType == "ESD"){\r
-\r
-  \r
-\r
-      AliHeader* headerMC = fMC->Header();\r
-      if (headerMC) {\r
-       \r
-       AliGenEventHeader* genHeader = headerMC->GenEventHeader();\r
-       TArrayF vtxMC(3); // primary vertex  MC \r
-       vtxMC[0]=9999; vtxMC[1]=9999;  vtxMC[2]=9999; //initialize with dummy\r
-       if (genHeader) {\r
-         genHeader->PrimaryVertex(vtxMC);\r
-       }\r
-       fZvtxMC = vtxMC[2];\r
-       \r
-       // PYTHIA:\r
-       AliGenPythiaEventHeader* pythiaGenHeader =\r
-         dynamic_cast<AliGenPythiaEventHeader*>(headerMC->GenEventHeader());\r
-       if (pythiaGenHeader) {  //works only for pythia\r
-         fMcProcessType =  GetPythiaEventProcessType(pythiaGenHeader->ProcessType());\r
-       }\r
-       // PHOJET:\r
-       AliGenDPMjetEventHeader* dpmJetGenHeader =\r
-         dynamic_cast<AliGenDPMjetEventHeader*>(headerMC->GenEventHeader());\r
-       if (dpmJetGenHeader) {\r
-         fMcProcessType = GetDPMjetEventProcessType(dpmJetGenHeader->ProcessType());\r
-       }\r
-      }\r
-    } else { // AOD\r
-      \r
-  \r
-\r
-      AliAODMCHeader* mcHeader = dynamic_cast<AliAODMCHeader*>(fAOD->FindListObject("mcHeader")); \r
-\r
-\r
-      if(mcHeader) {\r
-       fZvtxMC = mcHeader->GetVtxZ();\r
-       \r
-\r
-\r
-       if(strstr(mcHeader->GetGeneratorName(), "Pythia")) {\r
-         fMcProcessType =  GetPythiaEventProcessType(mcHeader->GetEventType());\r
-       } else {\r
-         fMcProcessType =  GetDPMjetEventProcessType(mcHeader->GetEventType());\r
-       }\r
-      }\r
-    }\r
-\r
-\r
-  }\r
-  \r
-  \r
-\r
-  if (fAnalysisType == "ESD"){\r
-    \r
-    const AliESDVertex *vtxESD = fESD->GetPrimaryVertexTracks();\r
-    if(vtxESD->GetNContributors()<1) {\r
-      // SPD vertex\r
-      vtxESD = fESD->GetPrimaryVertexSPD();\r
-      /* quality checks on SPD-vertex */\r
-      TString vertexType = vtxESD->GetTitle();\r
-      if (vertexType.Contains("vertexer: Z") && (vtxESD->GetDispersion() > 0.04 || vtxESD->GetZRes() > 0.25))  \r
-       fZvtx  = -1599; //vertex = 0x0; //\r
-      else if (vtxESD->GetNContributors()<1) \r
-       fZvtx  = -999; //vertex = 0x0; //\r
-      else\r
-       fZvtx = vtxESD->GetZ();\r
-    }  \r
-    else\r
-      fZvtx = vtxESD->GetZ();\r
-    \r
-  }\r
-  else // AOD\r
-    fZvtx = GetVertex(fAOD);\r
-    \r
-  fVtxBeforeCuts->Fill(fZvtx);\r
-  \r
-  //cut on the z position of vertex\r
-  if (TMath::Abs(fZvtx) > fVtxCut) {   \r
-    return;\r
-  }\r
-  fn1->Fill(2);\r
-  \r
-\r
-\r
-\r
-\r
-\r
-  Float_t centrality = -10;\r
-\r
-  // only analyze triggered events\r
-  if(fTriggeredEventMB) {\r
-    \r
-    if (fAnalysisType == "ESD"){\r
-      if(fAnalysisPbPb){\r
-       AliCentrality *centObject = fESD->GetCentrality();\r
-       centrality = centObject->GetCentralityPercentile(fCentEst);\r
-       centralityGlobal = centrality;\r
-       if((centrality>fMaxCent)||(centrality<fMinCent))return;\r
-      }\r
-      fcent->Fill(centrality);\r
-      fn1->Fill(3);\r
-      if(fAnalysisMC){\r
-       if(TMath::Abs(fZvtxMC)<fVtxCut){\r
-         ProcessMCTruthESD();\r
-         fVtxMC->Fill(fZvtxMC);\r
-       }\r
-      }\r
-      AnalyzeESD(fESD);\r
-    } else { // AOD\r
-      if(fAnalysisPbPb){\r
-       AliCentrality *centObject = fAOD->GetCentrality();\r
-       if(centObject){\r
-         centrality = centObject->GetCentralityPercentile(fCentEst); \r
-       }\r
-       //cout<<"centrality="<<centrality<<endl;\r
-       if((centrality>fMaxCent)||(centrality<fMinCent))return;\r
-      }\r
-      fcent->Fill(centrality);\r
-      fn1->Fill(3);\r
-      if(fAnalysisMC){\r
-       if(TMath::Abs(fZvtxMC)<fVtxCut){\r
-\r
-         ProcessMCTruthAOD();\r
-         fVtxMC->Fill(fZvtxMC);\r
-       }\r
-      }\r
-      AnalyzeAOD(fAOD);\r
-    }\r
-  }\r
-\r
-  fVtxAfterCuts->Fill(fZvtx);\r
-\r
-  \r
-  \r
-\r
-  // Post output data.\r
-  PostData(1, fListOfObjects);\r
-}\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskQAHighPtDeDx::AnalyzeESD(AliESDEvent* esdEvent)\r
-{\r
-  fRun  = esdEvent->GetRunNumber();\r
-  fEventId = 0;\r
-  if(esdEvent->GetHeader())\r
-    fEventId = GetEventIdAsLong(esdEvent->GetHeader());\r
-  \r
-  cout << "centrality=" << centralityGlobal << endl;\r
-\r
-\r
-  Bool_t isPileup = esdEvent->IsPileupFromSPD();\r
-  if(fPileUpRej)\r
-    if(isPileup)\r
-      return;\r
-  fn1->Fill(4);\r
-\r
-\r
-  //  Int_t     event     = esdEvent->GetEventNumberInFile();\r
-  //UInt_t    time      = esdEvent->GetTimeStamp();\r
-  //  ULong64_t trigger   = esdEvent->GetTriggerMask();\r
-  magf      = esdEvent->GetMagneticField();\r
-\r
-\r
-\r
-\r
-\r
-  if(fTriggeredEventMB) {// Only MC case can we have not triggered events\r
-    \r
-    // accepted event\r
-    fEvents->Fill(0);\r
-    \r
-    \r
-    //Change, 10/04/13. Now accept all events to do a correct normalization\r
-    //if(fVtxStatus!=1) return; // accepted vertex\r
-    //Int_t nESDTracks = esdEvent->GetNumberOfTracks();\r
-    \r
-    ProduceArrayTrksESD( esdEvent );//produce array with global track parameters\r
-    ProduceArrayV0ESD( esdEvent );//v0's\r
-\r
-    \r
-    fEvents->Fill(1);\r
-\r
-\r
-\r
-\r
-  } // end if triggered\r
-\r
-\r
-}\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskQAHighPtDeDx::AnalyzeAOD(AliAODEvent* aodEvent)\r
-{\r
-  fRun  = aodEvent->GetRunNumber();\r
-  fEventId = 0;\r
-  if(aodEvent->GetHeader())\r
-    fEventId = GetEventIdAsLong(aodEvent->GetHeader());\r
-   \r
-  //UInt_t    time      = 0; // Missing AOD info? aodEvent->GetTimeStamp();\r
-  magf      = aodEvent->GetMagneticField();\r
-\r
-  //Int_t     trackmult = 0; // no pt cuts\r
-  //Int_t     nadded    = 0;\r
-\r
-  Bool_t isPileup = aodEvent->IsPileupFromSPD();\r
-  if(fPileUpRej)\r
-    if(isPileup)\r
-      return;\r
-  fn1->Fill(4);\r
-\r
-\r
-\r
-  if(fTriggeredEventMB) {// Only MC case can we have not triggered events\r
-    \r
-    // accepted event\r
-    fEvents->Fill(0);\r
-    \r
-    //if(fVtxStatus!=1) return; // accepted vertex\r
-    //Int_t nAODTracks = aodEvent->GetNumberOfTracks();  \r
-\r
-    ProduceArrayTrksAOD( aodEvent );\r
-    ProduceArrayV0AOD( aodEvent );\r
-\r
-    fEvents->Fill(1);\r
\r
-\r
-\r
-\r
-  } // end if triggered\r
-\r
-}\r
-\r
-//_____________________________________________________________________________\r
-Float_t AliAnalysisTaskQAHighPtDeDx::GetVertex(const AliVEvent* event) const\r
-{\r
-  Float_t zvtx = -999;\r
-  \r
-  const AliVVertex* primaryVertex = event->GetPrimaryVertex(); \r
-  \r
-  if(primaryVertex->GetNContributors()>0)\r
-    zvtx = primaryVertex->GetZ();\r
-\r
-  return zvtx;\r
-}\r
-\r
-//_____________________________________________________________________________\r
-Short_t AliAnalysisTaskQAHighPtDeDx::GetPidCode(Int_t pdgCode) const \r
-{\r
-  // return our internal code for pions, kaons, and protons\r
-  \r
-  Short_t pidCode = 6;\r
-  \r
-  switch (TMath::Abs(pdgCode)) {\r
-  case 211:\r
-    pidCode = 1; // pion\r
-    break;\r
-  case 321:\r
-    pidCode = 2; // kaon\r
-    break;\r
-  case 2212:\r
-    pidCode = 3; // proton\r
-    break;\r
-  case 11:\r
-    pidCode = 4; // electron\r
-    break;\r
-  case 13:\r
-    pidCode = 5; // muon\r
-    break;\r
-  default:\r
-    pidCode = 6;  // something else?\r
-  };\r
-  \r
-  return pidCode;\r
-}\r
-\r
-//_____________________________________________________________________________\r
-void AliAnalysisTaskQAHighPtDeDx::ProcessMCTruthESD() \r
-{\r
-  // Fill the special MC histogram with the MC truth info\r
-  \r
-  const Int_t nTracksMC = fMCStack->GetNtrack();\r
-\r
-  for (Int_t iTracks = 0; iTracks < nTracksMC; iTracks++) {\r
-    \r
-    //Cuts\r
-    if(!(fMCStack->IsPhysicalPrimary(iTracks)))\r
-      continue;\r
-    \r
-    TParticle* trackMC = fMCStack->Particle(iTracks);\r
-    \r
-    TParticlePDG* pdgPart = trackMC ->GetPDG();\r
-    Double_t chargeMC = pdgPart->Charge();\r
-\r
-    if(chargeMC==0)\r
-      continue;\r
-    \r
-    if (TMath::Abs(trackMC->Eta()) > fEtaCut )\r
-      continue;\r
-\r
-    Double_t etaMC = trackMC->Eta();\r
-    Int_t pdgCode = trackMC->GetPdgCode();\r
-    Short_t pidCodeMC = 0;\r
-    pidCodeMC = GetPidCode(pdgCode);\r
-    \r
-    \r
-    for(Int_t nh = 0; nh < 9; nh++) {\r
-      \r
-      if( etaMC > etaHigh[nh]/10.0 || etaMC < etaLow[nh]/10.0 )\r
-       continue;\r
-      \r
-      hMcIn[0][nh]->Fill(trackMC->Pt());\r
-      hMcIn[pidCodeMC][nh]->Fill(trackMC->Pt());\r
-      \r
-      \r
-    }\r
-\r
-  }//MC track loop\r
-  \r
\r
-  \r
-}\r
-\r
-//_____________________________________________________________________________\r
-void AliAnalysisTaskQAHighPtDeDx::ProcessMCTruthAOD() \r
-{\r
-  // Fill the special MC histogram with the MC truth info\r
-  \r
-\r
-  const Int_t nTracksMC = fMCArray->GetEntriesFast();\r
-  \r
-  for (Int_t iTracks = 0; iTracks < nTracksMC; iTracks++) {\r
-    \r
-    AliAODMCParticle* trackMC = dynamic_cast<AliAODMCParticle*>(fMCArray->At(iTracks));\r
-\r
-    if(!trackMC){\r
-      AliError("Cannot get MC particle");\r
-      continue;\r
-    }   \r
-    \r
-    //Cuts\r
-    if(!(trackMC->IsPhysicalPrimary()))\r
-      continue;\r
-    \r
-   \r
-    Double_t chargeMC = trackMC->Charge();\r
-    if(chargeMC==0)\r
-      continue;\r
-\r
-    \r
-    if (TMath::Abs(trackMC->Eta()) > fEtaCut )\r
-      continue;\r
-    \r
-    Double_t etaMC = trackMC->Eta();\r
-    Int_t pdgCode = trackMC->GetPdgCode();\r
-    Short_t pidCodeMC = 0;\r
-    pidCodeMC = GetPidCode(pdgCode);\r
-    \r
-    //cout<<"pidcode="<<pidCodeMC<<endl;\r
-    for(Int_t nh = 0; nh < 9; nh++) {\r
-      \r
-      if( etaMC > etaHigh[nh]/10.0 || etaMC < etaLow[nh]/10.0 )\r
-       continue;\r
-      \r
-      hMcIn[0][nh]->Fill(trackMC->Pt());\r
-      hMcIn[pidCodeMC][nh]->Fill(trackMC->Pt());\r
-      \r
-      \r
-    }\r
-    \r
-  }//MC track loop\r
-  \r
-  \r
-}\r
-\r
-\r
-//_____________________________________________________________________________\r
-Short_t AliAnalysisTaskQAHighPtDeDx::GetPythiaEventProcessType(Int_t pythiaType) {\r
-  //\r
-  // Get the process type of the event.  PYTHIA\r
-  //\r
-  // source PWG0   dNdpt \r
-\r
-  Short_t globalType = -1; //init\r
-      \r
-  if(pythiaType==92||pythiaType==93){\r
-    globalType = 2; //single diffractive\r
-  }\r
-  else if(pythiaType==94){\r
-    globalType = 3; //double diffractive\r
-  }\r
-  //else if(pythiaType != 91){ // also exclude elastic to be sure... CKB??\r
-  else {\r
-    globalType = 1;  //non diffractive\r
-  }\r
-  return globalType;\r
-}\r
-\r
-//_____________________________________________________________________________\r
-Short_t AliAnalysisTaskQAHighPtDeDx::GetDPMjetEventProcessType(Int_t dpmJetType) {\r
-  //\r
-  // get the process type of the event.  PHOJET\r
-  //\r
-  //source PWG0   dNdpt \r
-  // can only read pythia headers, either directly or from cocktalil header\r
-  Short_t globalType = -1;\r
-  \r
-  if (dpmJetType == 1 || dpmJetType == 4) { // explicitly inelastic plus central diffraction\r
-    globalType = 1;\r
-  }\r
-  else if (dpmJetType==5 || dpmJetType==6) {\r
-    globalType = 2;\r
-  }\r
-  else if (dpmJetType==7) {\r
-    globalType = 3;\r
-  }\r
-  return globalType;\r
-}\r
-\r
-//_____________________________________________________________________________\r
-ULong64_t AliAnalysisTaskQAHighPtDeDx::GetEventIdAsLong(AliVHeader* header) const\r
-{\r
-  // To have a unique id for each event in a run!\r
-  // Modified from AliRawReader.h\r
-  return ((ULong64_t)header->GetBunchCrossNumber()+\r
-         (ULong64_t)header->GetOrbitNumber()*3564+\r
-         (ULong64_t)header->GetPeriodNumber()*16777215*3564);\r
-}\r
-\r
-\r
-//____________________________________________________________________\r
-TParticle* AliAnalysisTaskQAHighPtDeDx::FindPrimaryMother(AliStack* stack, Int_t label)\r
-{\r
-  //\r
-  // Finds the first mother among the primary particles of the particle identified by <label>,\r
-  // i.e. the primary that "caused" this particle\r
-  //\r
-  // Taken from AliPWG0Helper class\r
-  //\r
-\r
-  Int_t motherLabel = FindPrimaryMotherLabel(stack, label);\r
-  if (motherLabel < 0)\r
-    return 0;\r
-\r
-  return stack->Particle(motherLabel);\r
-}\r
-\r
-//____________________________________________________________________\r
-Int_t AliAnalysisTaskQAHighPtDeDx::FindPrimaryMotherLabel(AliStack* stack, Int_t label)\r
-{\r
-  //\r
-  // Finds the first mother among the primary particles of the particle identified by <label>,\r
-  // i.e. the primary that "caused" this particle\r
-  //\r
-  // returns its label\r
-  //\r
-  // Taken from AliPWG0Helper class\r
-  //\r
-  const Int_t nPrim  = stack->GetNprimary();\r
-  \r
-  while (label >= nPrim) {\r
-\r
-    //printf("Particle %d (pdg %d) is not a primary. Let's check its mother %d\n", label, mother->GetPdgCode(), mother->GetMother(0));\r
-\r
-    TParticle* particle = stack->Particle(label);\r
-    if (!particle) {\r
-      \r
-      AliDebugGeneral("FindPrimaryMotherLabel", AliLog::kError, Form("UNEXPECTED: particle with label %d not found in stack.", label));\r
-      return -1;\r
-    }\r
-    \r
-    // find mother\r
-    if (particle->GetMother(0) < 0) {\r
-\r
-      AliDebugGeneral("FindPrimaryMotherLabel", AliLog::kError, Form("UNEXPECTED: Could not find mother of secondary particle %d.", label));\r
-      return -1;\r
-    }\r
-    \r
-    label = particle->GetMother(0);\r
-  }\r
-  \r
-  return label;\r
-}\r
-\r
-//____________________________________________________________________\r
-AliAODMCParticle* AliAnalysisTaskQAHighPtDeDx::FindPrimaryMotherAOD(AliAODMCParticle* startParticle)\r
-{\r
-  //\r
-  // Finds the first mother among the primary particles of the particle identified by <label>,\r
-  // i.e. the primary that "caused" this particle\r
-  //\r
-  // Taken from AliPWG0Helper class\r
-  //\r
-\r
-  AliAODMCParticle* mcPart = startParticle;\r
-\r
-  while (mcPart)\r
-    {\r
-      \r
-      if(mcPart->IsPrimary())\r
-       return mcPart;\r
-      \r
-      Int_t mother = mcPart->GetMother();\r
-\r
-      mcPart = dynamic_cast<AliAODMCParticle*>(fMCArray->At(mother));\r
-    }\r
-\r
-  return 0;\r
-}\r
-\r
-\r
-//V0______________________________________\r
-//____________________________________________________________________\r
-TParticle* AliAnalysisTaskQAHighPtDeDx::FindPrimaryMotherV0(AliStack* stack, Int_t label)\r
-{\r
-  //\r
-  // Finds the first mother among the primary particles of the particle identified by <label>,\r
-  // i.e. the primary that "caused" this particle\r
-  //\r
-  // Taken from AliPWG0Helper class\r
-  //\r
-\r
-  Int_t nSteps = 0;\r
-\r
-  Int_t motherLabel = FindPrimaryMotherLabelV0(stack, label, nSteps);\r
-  if (motherLabel < 0)\r
-    return 0;\r
-\r
-  return stack->Particle(motherLabel);\r
-}\r
-\r
-//____________________________________________________________________\r
-Int_t AliAnalysisTaskQAHighPtDeDx::FindPrimaryMotherLabelV0(AliStack* stack, Int_t label, Int_t& nSteps)\r
-{\r
-  //\r
-  // Finds the first mother among the primary particles of the particle identified by <label>,\r
-  // i.e. the primary that "caused" this particle\r
-  //\r
-  // returns its label\r
-  //\r
-  // Taken from AliPWG0Helper class\r
-  //\r
-  nSteps = 0;\r
-  const Int_t nPrim  = stack->GetNprimary();\r
-  \r
-  while (label >= nPrim) {\r
-\r
-    //printf("Particle %d (pdg %d) is not a primary. Let's check its mother %d\n", label, mother->GetPdgCode(), mother->GetMother(0));\r
-\r
-    nSteps++; // 1 level down\r
-    \r
-    TParticle* particle = stack->Particle(label);\r
-    if (!particle) {\r
-      \r
-      AliDebugGeneral("FindPrimaryMotherLabelV0", AliLog::kError, Form("UNEXPECTED: particle with label %d not found in stack.", label));\r
-      return -1;\r
-    }\r
-    \r
-    // find mother\r
-    if (particle->GetMother(0) < 0) {\r
-\r
-      AliDebugGeneral("FindPrimaryMotherLabelV0", AliLog::kError, Form("UNEXPECTED: Could not find mother of secondary particle %d.", label));\r
-      return -1;\r
-    }\r
-    \r
-    label = particle->GetMother(0);\r
-  }\r
-  \r
-  return label;\r
-}\r
-\r
-//____________________________________________________________________\r
-AliAODMCParticle* AliAnalysisTaskQAHighPtDeDx::FindPrimaryMotherAODV0(AliAODMCParticle* startParticle, Int_t& nSteps)\r
-{\r
-  //\r
-  // Finds the first mother among the primary particles of the particle identified by <label>,\r
-  // i.e. the primary that "caused" this particle\r
-  //\r
-  // Taken from AliPWG0Helper class\r
-  //\r
-\r
-  nSteps = 0;\r
-\r
-  AliAODMCParticle* mcPart = startParticle;\r
-\r
-  while (mcPart)\r
-    {\r
-      \r
-      if(mcPart->IsPrimary())\r
-       return mcPart;\r
-      \r
-      Int_t mother = mcPart->GetMother();\r
-\r
-      mcPart = dynamic_cast<AliAODMCParticle*>(fMCArray->At(mother));\r
-      nSteps++; // 1 level down\r
-    }\r
-\r
-  return 0;\r
-}\r
-\r
-\r
-\r
-//__________________________________________________________________\r
-void AliAnalysisTaskQAHighPtDeDx::ProduceArrayTrksESD( AliESDEvent *ESDevent ){\r
-  \r
-  const Int_t nESDTracks = ESDevent->GetNumberOfTracks();\r
-  //Int_t trackmult=0;\r
-\r
-\r
-  Int_t multTPC = 0;\r
-  \r
-  //get multiplicity tpc only track cuts\r
-  for(Int_t iT = 0; iT < nESDTracks; iT++) {\r
-    \r
-    AliESDtrack* esdTrack = ESDevent->GetTrack(iT);\r
-    \r
-    \r
-    if(TMath::Abs(esdTrack->Eta()) > fEtaCut)\r
-      continue;\r
-    \r
-    //only golden track cuts\r
-    UInt_t selectDebug = 0;\r
-    if (fTrackFilterTPC) {\r
-      selectDebug = fTrackFilterTPC->IsSelected(esdTrack);\r
-      if (!selectDebug) {\r
-       //cout<<"this is not a golden track"<<endl;\r
-       continue;\r
-      }\r
-    }\r
-   \r
-    multTPC++;\r
-    \r
-  }\r
-\r
-\r
-\r
-  for(Int_t iT = 0; iT < nESDTracks; iT++) {\r
-    \r
-    AliESDtrack* esdTrack = ESDevent->GetTrack(iT);\r
-    \r
-      \r
-    if(TMath::Abs(esdTrack->Eta()) > fEtaCut)\r
-      continue;\r
-    \r
-    //only golden track cuts\r
-    UInt_t selectDebug = 0;\r
-    if (fTrackFilterGolden) {\r
-      selectDebug = fTrackFilterGolden->IsSelected(esdTrack);\r
-      if (!selectDebug) {\r
-       //cout<<"this is not a golden track"<<endl;\r
-       continue;\r
-      }\r
-    }\r
-    \r
-    \r
-    //Int_t sharedtpcclusters = esdTrack->GetTPCnclsS();\r
-    Short_t ncl     = esdTrack->GetTPCsignalN();\r
-\r
-\r
-    if(ncl<70)\r
-      continue;\r
-    Double_t eta  = esdTrack->Eta();\r
-    Double_t phi  = esdTrack->Phi();\r
-    Double_t momentum = esdTrack->P();\r
-    Float_t  dedx    = esdTrack->GetTPCsignal();\r
-\r
-    //cout<<"magf="<<magf<<endl;\r
-\r
-    if(!PhiCut(esdTrack->Pt(), phi, esdTrack->Charge(), magf, cutLow, cutHigh))\r
-      continue;\r
-\r
-       \r
-\r
-\r
-    //TOF\r
-    \r
-    Bool_t IsTOFout=kFALSE;\r
-    if ((esdTrack->GetStatus()&AliESDtrack::kTOFout)==0)\r
-      IsTOFout=kTRUE;\r
-    Float_t lengthtrack=esdTrack->GetIntegratedLength();\r
-    Float_t timeTOF=esdTrack->GetTOFsignal();\r
-    Double_t inttime[5]={0,0,0,0,0}; \r
-    esdTrack->GetIntegratedTimes(inttime);// Returns the array with integrated times for each particle hypothesis\r
-    Float_t beta = -99;\r
-    if ( !IsTOFout ){\r
-      if ( ( lengthtrack != 0 ) && ( timeTOF != 0) )\r
-       beta = inttime[0] / timeTOF;\r
-    }\r
-\r
-    Short_t pidCode     = 0; \r
-    \r
-    if(fAnalysisMC) {\r
-      \r
-      const Int_t label = TMath::Abs(esdTrack->GetLabel());\r
-      TParticle* mcTrack = fMCStack->Particle(label);      \r
-      if (mcTrack){\r
-       \r
-       Int_t pdgCode = mcTrack->GetPdgCode();\r
-       pidCode = GetPidCode(pdgCode);\r
-       \r
-      }\r
-      \r
-    }\r
-\r
-\r
-    if( momentum <= 0.6 && momentum >= 0.4  ){//only p:0.4-0.6 GeV, pion MIP\r
-      \r
-      if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){      \r
-       if(momentum<0.6&&momentum>0.4){\r
-         hMIPVsEta->Fill(eta,dedx);\r
-         pMIPVsEta->Fill(eta,dedx);\r
-       }\r
-      }\r
-      if( dedx > DeDxMIPMax+1 && dedx < 95 ){\r
-       if(TMath::Abs(beta-1)<0.1){\r
-         hPlateauVsEta->Fill(eta,dedx);\r
-         pPlateauVsEta->Fill(eta,dedx); \r
-       }\r
-      }\r
-    }\r
-    \r
-    \r
-    for(Int_t nh = 0; nh < 9; nh++) {\r
-      \r
-      if( eta > etaHigh[nh]/10.0 || eta < etaLow[nh]/10.0 )\r
-       continue;\r
-      \r
-  \r
-      if(fAnalysisMC){\r
-       hMcOut[0][nh]->Fill(esdTrack->Pt());\r
-       hMcOut[pidCode][nh]->Fill(esdTrack->Pt());\r
-      }\r
-\r
-      histAllCh[nh]->Fill(momentum, dedx);\r
-      if(beta>1){\r
-       histPiTof[nh]->Fill(momentum, dedx);\r
-       histpPiTof[nh]->Fill(momentum);\r
-      }\r
-\r
-      if( momentum <= 0.6 && momentum >= 0.4  ){//only p:0.4-0.6 GeV, pion MIP\r
-       //Fill  pion MIP, before calibration\r
-       if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){     \r
-         hMIPVsPhi[nh]->Fill(phi,dedx);\r
-         pMIPVsPhi[nh]->Fill(phi,dedx);\r
-         \r
-         \r
-         hMIPVsNch[nh]->Fill(multTPC,dedx);\r
-         pMIPVsNch[nh]->Fill(multTPC,dedx);\r
-         \r
-       }\r
-       \r
-       //Fill electrons, before calibration\r
-       if( dedx > DeDxMIPMax+1 && dedx < 95 ){\r
-         if(TMath::Abs(beta-1)<0.1){\r
-           hPlateauVsPhi[nh]->Fill(phi,dedx);\r
-           pPlateauVsPhi[nh]->Fill(phi,dedx);\r
-         }\r
-       }\r
-\r
-      }\r
-\r
-\r
-    }//end loop over eta intervals\r
-\r
-    \r
-\r
-    \r
-    \r
-  }//end of track loop\r
-  \r
-  \r
-\r
-  \r
-}\r
-//__________________________________________________________________\r
-void AliAnalysisTaskQAHighPtDeDx::ProduceArrayTrksAOD( AliAODEvent *AODevent ){\r
-\r
-\r
-  Int_t nAODTracks = AODevent->GetNumberOfTracks();\r
-  Int_t multTPC = 0;\r
-  \r
-  //get multiplicity tpc only track cuts\r
-  for(Int_t iT = 0; iT < nAODTracks; iT++) {\r
-    \r
-    AliAODTrack* aodTrack = AODevent->GetTrack(iT);\r
-    \r
-    if(TMath::Abs(aodTrack->Eta()) > fEtaCut)\r
-      continue;\r
-    \r
-\r
-    if (fTrackFilterTPC) {\r
-      // TPC only cuts is bit 1\r
-      if(!aodTrack->TestFilterBit(1))\r
-       continue;\r
-    }\r
-   \r
-    multTPC++;\r
-    \r
-  }\r
-\r
-\r
-  for(Int_t iT = 0; iT < nAODTracks; iT++) {\r
-    \r
-    AliAODTrack* aodTrack = AODevent->GetTrack(iT);\r
-    \r
-    if (fTrackFilterGolden) {     \r
-      // "Global track RAA analysis QM2011 + Chi2ITS<36"; bit 1024\r
-      if(!aodTrack->TestFilterBit(1024))\r
-       continue;\r
-    }\r
-    \r
-    \r
-    if(TMath::Abs(aodTrack->Eta()) > fEtaCut)\r
-      continue;\r
-    \r
-    \r
-    Double_t eta  = aodTrack->Eta();\r
-    Double_t phi  = aodTrack->Phi();\r
-    Double_t momentum = aodTrack->P();\r
-    \r
\r
-    if(!PhiCut(aodTrack->Pt(), phi, aodTrack->Charge(), magf, cutLow, cutHigh))\r
-      continue;\r
-    \r
-\r
-    \r
-    AliAODPid* aodPid = aodTrack->GetDetPid();\r
-    Short_t ncl     = -10;\r
-    Float_t dedx    = -10;\r
-\r
-    //TOF    \r
-    Float_t beta = -99;\r
-\r
-\r
-    if(aodPid) {\r
-      ncl     = aodPid->GetTPCsignalN();\r
-      dedx    = aodPid->GetTPCsignal();\r
-      //TOF\r
-      Bool_t IsTOFout=kFALSE;\r
-      Float_t lengthtrack=-999;//in aod we do not have that information, beta must be: beta=inttime/timeTOF \r
-      Float_t timeTOF=-999;\r
-\r
-      if ((aodTrack->GetStatus()&AliESDtrack::kTOFout)==0)\r
-       IsTOFout=kTRUE;\r
-      \r
-      lengthtrack=-999;//in aod we do not have that information, beta must be: beta=inttime/timeTOF \r
-      \r
-      timeTOF=aodPid->GetTOFsignal();\r
-      \r
-      Double_t inttime[5]={0,0,0,0,0}; \r
-      aodPid->GetIntegratedTimes(inttime);// Returns the array with integrated times for each particle hypothesis\r
-\r
-      \r
-      if ( !IsTOFout ){\r
-       if ( ( lengthtrack != 0 ) && ( timeTOF != 0) )\r
-         beta = inttime[0] / timeTOF;\r
-      }\r
-      \r
-    }\r
-\r
-\r
-    if(ncl<70)\r
-      continue;\r
-\r
-\r
-    Short_t pidCode     = 0; \r
-    \r
-    if(fAnalysisMC) {\r
-      \r
-      const Int_t label = TMath::Abs(aodTrack->GetLabel());\r
-      AliAODMCParticle* mcTrack = dynamic_cast<AliAODMCParticle*>(fMCArray->At(label));\r
-      \r
-      if (mcTrack){\r
-       \r
-       Int_t pdgCode = mcTrack->GetPdgCode();\r
-       pidCode = GetPidCode(pdgCode);\r
-       \r
-      }\r
-      \r
-    }\r
-\r
-\r
-\r
-\r
-    //if(momentum>0.6||momentum<0.4)//only p:0.4-0.6 GeV\r
-       //continue;\r
-    \r
-    //etaLow\r
-    //etaHigh\r
-    if( momentum <= 0.6 && momentum >= 0.4  ){//only p:0.4-0.6 GeV, pion MIP\r
-      if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){      \r
-       if(momentum<0.6&&momentum>0.4){\r
-         hMIPVsEta->Fill(eta,dedx);\r
-         pMIPVsEta->Fill(eta,dedx);\r
-       }\r
-      }\r
-      if( dedx > DeDxMIPMax+1 && dedx < 95 ){\r
-       if(TMath::Abs(beta-1)<0.1){\r
-         hPlateauVsEta->Fill(eta,dedx);\r
-         pPlateauVsEta->Fill(eta,dedx); \r
-       }\r
-      }\r
-    }\r
-    \r
-    \r
-    for(Int_t nh = 0; nh < 9; nh++) {\r
-      \r
-      if( eta > etaHigh[nh]/10.0 || eta < etaLow[nh]/10.0 )\r
-       continue;\r
-      \r
-      \r
-      if(fAnalysisMC){\r
-       hMcOut[0][nh]->Fill(aodTrack->Pt());\r
-       hMcOut[pidCode][nh]->Fill(aodTrack->Pt());\r
-      }\r
-      \r
-      histAllCh[nh]->Fill(momentum, dedx);\r
-      if(beta>1){\r
-       histPiTof[nh]->Fill(momentum, dedx);\r
-       histpPiTof[nh]->Fill(momentum);\r
-      }\r
-\r
-      if( momentum <= 0.6 && momentum >= 0.4  ){//only p:0.4-0.6 GeV, pion MIP\r
-       //Fill  pion MIP, before calibration\r
-       if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){     \r
-         hMIPVsPhi[nh]->Fill(phi,dedx);\r
-         pMIPVsPhi[nh]->Fill(phi,dedx);\r
-         \r
-         \r
-         hMIPVsNch[nh]->Fill(multTPC,dedx);\r
-         pMIPVsNch[nh]->Fill(multTPC,dedx);\r
-         \r
-       }\r
-       \r
-       //Fill electrons, before calibration\r
-       if( dedx > DeDxMIPMax+1 && dedx < 95 ){\r
-         if(TMath::Abs(beta-1)<0.1){\r
-           hPlateauVsPhi[nh]->Fill(phi,dedx);\r
-           pPlateauVsPhi[nh]->Fill(phi,dedx);\r
-         }\r
-       }\r
-\r
-      }\r
-\r
-    }//end loop over eta intervals\r
-    \r
-    \r
-\r
-    \r
-    \r
-  }//end of track loop\r
-  \r
\r
-  \r
-  \r
-  \r
\r
-  \r
-}\r
-//__________________________________________________\r
-void AliAnalysisTaskQAHighPtDeDx::ProduceArrayV0ESD( AliESDEvent *ESDevent ){\r
-  Int_t nv0s = ESDevent->GetNumberOfV0s();\r
-  /*\r
-  if(nv0s<1){\r
-    return;\r
-    }*/\r
-  \r
-  const AliESDVertex *myBestPrimaryVertex = ESDevent->GetPrimaryVertex();\r
-  if (!myBestPrimaryVertex) return;\r
-  if (!(myBestPrimaryVertex->GetStatus())) return;\r
-  Double_t  lPrimaryVtxPosition[3];\r
-  myBestPrimaryVertex->GetXYZ(lPrimaryVtxPosition);\r
-  \r
-  Double_t  lPrimaryVtxCov[6];\r
-  myBestPrimaryVertex->GetCovMatrix(lPrimaryVtxCov);\r
-  Double_t  lPrimaryVtxChi2 = myBestPrimaryVertex->GetChi2toNDF();\r
-  \r
-  AliAODVertex* myPrimaryVertex = new AliAODVertex(lPrimaryVtxPosition, lPrimaryVtxCov, lPrimaryVtxChi2, NULL, -1, AliAODVertex::kPrimary);\r
-\r
-\r
-    \r
-  //\r
-  // LOOP OVER V0s, K0s, L, AL\r
-  //\r
-  \r
-  \r
-  for (Int_t iV0 = 0; iV0 < nv0s; iV0++) {\r
-    \r
-    // This is the begining of the V0 loop  \r
-    AliESDv0 *esdV0 = ESDevent->GetV0(iV0);\r
-    if (!esdV0) continue;\r
-    \r
-    //check onfly status\r
-    if(esdV0->GetOnFlyStatus()!=0)\r
-      continue;\r
-\r
-\r
-    // AliESDTrack (V0 Daughters)\r
-    UInt_t lKeyPos = (UInt_t)TMath::Abs(esdV0->GetPindex());\r
-    UInt_t lKeyNeg = (UInt_t)TMath::Abs(esdV0->GetNindex());\r
-    \r
-    AliESDtrack *pTrack = ESDevent->GetTrack(lKeyPos);\r
-    AliESDtrack *nTrack = ESDevent->GetTrack(lKeyNeg);\r
-    if (!pTrack || !nTrack) {\r
-      Printf("ERROR: Could not retreive one of the daughter track");\r
-      continue;\r
-    }\r
-    \r
-    // Remove like-sign\r
-    if (pTrack->GetSign() == nTrack->GetSign()) {\r
-      //cout<< "like sign, continue"<< endl;\r
-      continue;\r
-    } \r
-    \r
-    // Eta cut on decay products\r
-    if(TMath::Abs(pTrack->Eta()) > fEtaCut || TMath::Abs(nTrack->Eta()) > fEtaCut)\r
-      continue;\r
-    \r
-    \r
-    // Check if switch does anything!\r
-    Bool_t isSwitched = kFALSE;\r
-    if (pTrack->GetSign() < 0) { // switch\r
-      \r
-      isSwitched = kTRUE;\r
-      AliESDtrack* helpTrack = nTrack;\r
-      nTrack = pTrack;\r
-      pTrack = helpTrack;\r
-    }  \r
-    \r
-    //Double_t  lV0Position[3];\r
-    //esdV0->GetXYZ(lV0Position[0], lV0Position[1], lV0Position[2]);\r
-    \r
-\r
-    AliKFVertex primaryVtxKF( *myPrimaryVertex );\r
-    AliKFParticle::SetField(ESDevent->GetMagneticField());\r
-    \r
-    // Also implement switch here!!!!!!\r
-    AliKFParticle* negEKF  = 0; // e-\r
-    AliKFParticle* posEKF  = 0; // e+\r
-    AliKFParticle* negPiKF = 0; // pi -\r
-    AliKFParticle* posPiKF = 0; // pi +\r
-    AliKFParticle* posPKF  = 0; // p\r
-    AliKFParticle* negAPKF = 0; // p-bar\r
-    \r
-    if(!isSwitched) {\r
-      negEKF  = new AliKFParticle( *(esdV0->GetParamN()) , 11);\r
-      posEKF  = new AliKFParticle( *(esdV0->GetParamP()) ,-11);\r
-      negPiKF = new AliKFParticle( *(esdV0->GetParamN()) ,-211);\r
-      posPiKF = new AliKFParticle( *(esdV0->GetParamP()) , 211);\r
-      posPKF  = new AliKFParticle( *(esdV0->GetParamP()) , 2212);\r
-      negAPKF = new AliKFParticle( *(esdV0->GetParamN()) ,-2212);\r
-    } else { // switch + and - \r
-      negEKF  = new AliKFParticle( *(esdV0->GetParamP()) , 11);\r
-      posEKF  = new AliKFParticle( *(esdV0->GetParamN()) ,-11);\r
-      negPiKF = new AliKFParticle( *(esdV0->GetParamP()) ,-211);\r
-      posPiKF = new AliKFParticle( *(esdV0->GetParamN()) , 211);\r
-      posPKF  = new AliKFParticle( *(esdV0->GetParamN()) , 2212);\r
-      negAPKF = new AliKFParticle( *(esdV0->GetParamP()) ,-2212);\r
-    }\r
-    \r
-    AliKFParticle v0GKF;  // Gamma e.g. from pi0\r
-    v0GKF+=(*negEKF);\r
-    v0GKF+=(*posEKF);\r
-    v0GKF.SetProductionVertex(primaryVtxKF);\r
-    \r
-    AliKFParticle v0K0sKF; // K0 short\r
-    v0K0sKF+=(*negPiKF);\r
-    v0K0sKF+=(*posPiKF);\r
-    v0K0sKF.SetProductionVertex(primaryVtxKF);\r
-    \r
-    AliKFParticle v0LambdaKF; // Lambda\r
-    v0LambdaKF+=(*negPiKF);\r
-    v0LambdaKF+=(*posPKF);     \r
-    v0LambdaKF.SetProductionVertex(primaryVtxKF);\r
-    \r
-    AliKFParticle v0AntiLambdaKF; // Lambda-bar\r
-    v0AntiLambdaKF+=(*posPiKF);\r
-    v0AntiLambdaKF+=(*negAPKF);\r
-    v0AntiLambdaKF.SetProductionVertex(primaryVtxKF);\r
-    \r
-    Double_t dmassG     = v0GKF.GetMass();\r
-    Double_t dmassK     = v0K0sKF.GetMass()-0.498;\r
-    Double_t dmassL     = v0LambdaKF.GetMass()-1.116;\r
-    Double_t dmassAL    = v0AntiLambdaKF.GetMass()-1.116;\r
-\r
-\r
-    for( Int_t case_v0 = 0; case_v0 < 2; ++case_v0 ){\r
-\r
-\r
-      switch(case_v0){\r
-      case 0:{    \r
-       \r
-       Bool_t fillPos = kFALSE;\r
-       Bool_t fillNeg = kFALSE;\r
-       \r
-       if(dmassG < 0.1)\r
-         continue;\r
-       \r
-       if(dmassK>0.01 && dmassL>0.01 && dmassAL>0.01){\r
-         continue;\r
-       }\r
-       \r
-       if(dmassL<0.01){\r
-         fillPos = kTRUE;\r
-       }\r
-       if(dmassAL<0.01) {\r
-         if(fillPos)\r
-           continue;\r
-         fillNeg = kTRUE;\r
-       }\r
-       \r
-       if(dmassK<0.01) {\r
-         if(fillPos||fillNeg)\r
-           continue;\r
-         fillPos = kTRUE;\r
-         fillNeg = kTRUE;\r
-       }\r
-       \r
-       \r
-       for(Int_t j = 0; j < 2; j++) {\r
-         \r
-         AliESDtrack* track = 0;\r
-         \r
-         if(j==0) {\r
-           \r
-           if(fillNeg)\r
-             track = nTrack;\r
-           else\r
-             continue;\r
-         } else {\r
-           \r
-           if(fillPos)\r
-             track = pTrack;\r
-           else\r
-             continue;\r
-         }\r
-         \r
-         if(track->GetTPCsignalN()<=70)continue;\r
-         Double_t phi     = track->Phi();\r
-         \r
-         if(!PhiCut(track->Pt(), phi, track->Charge(), magf, cutLow, cutHigh))\r
-           continue;\r
-         \r
-         \r
-         //if(!PhiCut(pt, phi, charge, magf, cutLow, cutHigh, hPhi))\r
-         //    continue;\r
-         \r
-         Double_t eta  = track->Eta();\r
-         Double_t momentum = track->Pt();\r
-         Double_t dedx = track->GetTPCsignal();\r
-         \r
-         if(fillPos&&fillNeg){\r
-           \r
-           \r
-           if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){         \r
-             if(momentum<0.6&&momentum>0.4){\r
-               hMIPVsEtaV0s->Fill(eta,dedx);\r
-               pMIPVsEtaV0s->Fill(eta,dedx);\r
-             }\r
-           }\r
-           \r
-           \r
-         }\r
-         \r
-         for(Int_t nh = 0; nh < nHists; nh++) {\r
-           \r
-           \r
-           \r
-           if( eta < etaLow[nh]/10.0 || eta > etaHigh[nh]/10.0 )\r
-             continue;\r
-           \r
-           if(fillPos&&fillNeg){\r
-             \r
-             histPiV0[nh]->Fill(momentum, dedx);           \r
-             histpPiV0[nh]->Fill(momentum);\r
-\r
-           }\r
-           else{\r
-             \r
-             histPV0[nh]->Fill(momentum, dedx);\r
-             histpPV0[nh]->Fill(momentum);\r
-\r
-           }\r
-           \r
-         }\r
-                 \r
-       }//end loop over two tracks\r
-\r
-      };\r
-       break;\r
-\r
-      case 1:{//gammas    \r
-       \r
-       Bool_t fillPos = kFALSE;\r
-       Bool_t fillNeg = kFALSE;\r
-       \r
-\r
-\r
-       if(dmassK>0.01 && dmassL>0.01 && dmassAL>0.01) {\r
-         if(dmassG<0.01 && dmassG>0.0001) {\r
-           \r
-\r
-           if( TMath::Abs(nTrack->GetTPCsignal() - 85.0) < 5)\r
-             fillPos = kTRUE;\r
-           if( TMath::Abs(pTrack->GetTPCsignal() - 85.0) < 5)\r
-             fillNeg = kTRUE;\r
-           \r
-         } else {\r
-           continue;\r
-         }\r
-       }\r
-\r
-       //cout<<"fillPos="<<fillPos<<endl;\r
-\r
-       if(fillPos == kTRUE && fillNeg == kTRUE)      \r
-         continue;\r
-       \r
-       \r
-       AliESDtrack* track = 0;\r
-       if(fillNeg)\r
-         track = nTrack;\r
-       else if(fillPos)\r
-         track = pTrack;\r
-       else\r
-         continue;\r
-\r
-       Double_t dedx  = track->GetTPCsignal();\r
-       Double_t eta  = track->Eta();\r
-       Double_t phi  = track->Phi();\r
-       Double_t momentum = track->P();\r
-\r
-       if(track->GetTPCsignalN()<=70)continue;\r
-\r
-       if(!PhiCut(track->Pt(), phi, track->Charge(), magf, cutLow, cutHigh))\r
-         continue;\r
-       \r
-       for(Int_t nh = 0; nh < nHists; nh++) {\r
-      \r
-         if( eta < etaLow[nh]/10.0 || eta > etaHigh[nh]/10.0 )\r
-           continue;\r
-\r
-         histEV0[nh]->Fill(momentum, dedx);\r
-\r
-       }\r
-       \r
-      };\r
-       break;\r
-       \r
-       \r
-      }//end switch\r
-      \r
-    }//end loop over case V0\r
-\r
-    \r
-    // clean up loop over v0\r
-    \r
-    delete negPiKF;\r
-    delete posPiKF;\r
-    delete posPKF;\r
-    delete negAPKF;\r
-    \r
-    \r
-    \r
-  }\r
-  \r
-  \r
-  delete myPrimaryVertex;\r
-  \r
-  \r
-}\r
-//__________________________________________________________________________\r
-void AliAnalysisTaskQAHighPtDeDx::ProduceArrayV0AOD( AliAODEvent *AODevent ){\r
-  Int_t nv0s = AODevent->GetNumberOfV0s();\r
-  /*\r
-  if(nv0s<1){\r
-    return;\r
-    }*/\r
-  \r
-  AliAODVertex *myBestPrimaryVertex = AODevent->GetPrimaryVertex();\r
-  if (!myBestPrimaryVertex) return;\r
-  \r
-\r
-     \r
-  // ################################\r
-  // #### BEGINNING OF V0 CODE ######\r
-  // ################################\r
-  // This is the begining of the V0 loop  \r
-  for (Int_t iV0 = 0; iV0 < nv0s; iV0++) {\r
-    AliAODv0 *aodV0 = AODevent->GetV0(iV0);\r
-    if (!aodV0) continue;\r
-    \r
-    \r
-    //check onfly status\r
-    if(aodV0->GetOnFlyStatus()!=0)\r
-      continue;\r
-\r
-    // AliAODTrack (V0 Daughters)\r
-    AliAODVertex* vertex = aodV0->GetSecondaryVtx();\r
-    if (!vertex) {\r
-      Printf("ERROR: Could not retrieve vertex");\r
-      continue;\r
-    }\r
-    \r
-    AliAODTrack *pTrack = (AliAODTrack*)vertex->GetDaughter(0);\r
-    AliAODTrack *nTrack = (AliAODTrack*)vertex->GetDaughter(1);\r
-    if (!pTrack || !nTrack) {\r
-      Printf("ERROR: Could not retrieve one of the daughter track");\r
-      continue;\r
-    }\r
-    \r
-    // Remove like-sign\r
-    if (pTrack->Charge() == nTrack->Charge()) {\r
-      //cout<< "like sign, continue"<< endl;\r
-      continue;\r
-    } \r
-    \r
-    // Make sure charge ordering is ok\r
-    if (pTrack->Charge() < 0) {\r
-      AliAODTrack* helpTrack = pTrack;\r
-      pTrack = nTrack;\r
-      nTrack = helpTrack;\r
-    } \r
-    \r
-    // Eta cut on decay products\r
-    if(TMath::Abs(pTrack->Eta()) > fEtaCut || TMath::Abs(nTrack->Eta()) > fEtaCut)\r
-      continue;\r
-    \r
-    \r
-    Double_t dmassG  = aodV0->InvMass2Prongs(0,1,11,11);\r
-    Double_t dmassK  = aodV0->MassK0Short()-0.498;\r
-    Double_t dmassL  = aodV0->MassLambda()-1.116;\r
-    Double_t dmassAL = aodV0->MassAntiLambda()-1.116;\r
-    \r
-    for( Int_t case_v0 = 0; case_v0 < 2; ++case_v0 ){\r
-      \r
-      \r
-      switch(case_v0){\r
-      case 0:{   \r
-       Bool_t fillPos = kFALSE;\r
-       Bool_t fillNeg = kFALSE;\r
-       \r
-       \r
-       if(dmassG < 0.1)\r
-         continue;\r
-       \r
-       if(dmassK>0.01 && dmassL>0.01 && dmassAL>0.01){\r
-         continue;\r
-       }\r
-       \r
-       if(dmassL<0.01){\r
-         fillPos = kTRUE;\r
-       }\r
-       if(dmassAL<0.01) {\r
-         if(fillPos)\r
-           continue;\r
-         fillNeg = kTRUE;\r
-       }\r
-       \r
-       if(dmassK<0.01) {\r
-         if(fillPos||fillNeg)\r
-           continue;\r
-         fillPos = kTRUE;\r
-         fillNeg = kTRUE;\r
-       }\r
-       \r
-       \r
-       \r
-       for(Int_t j = 0; j < 2; j++) {\r
-         \r
-         AliAODTrack* track = 0;\r
-         \r
-         if(j==0) {\r
-           \r
-           if(fillNeg)\r
-             track = nTrack;\r
-           else\r
-             continue;\r
-         } else {\r
-           \r
-           if(fillPos)\r
-             track = pTrack;\r
-           else\r
-             continue;\r
-         }\r
-         \r
-         if(track->GetTPCsignalN()<=70)continue;\r
-         \r
-         Double_t phi     = track->Phi();\r
-         \r
-         if(!PhiCut(track->Pt(), phi, track->Charge(), magf, cutLow, cutHigh))\r
-           continue;\r
-         \r
-         \r
-         //if(!PhiCut(pt, phi, charge, magf, cutLow, cutHigh, hPhi))\r
-         //    continue;\r
-         \r
-         Double_t eta  = track->Eta();\r
-         Double_t momentum = track->Pt();\r
-         Double_t dedx = track->GetTPCsignal();\r
-         \r
-         if(fillPos&&fillNeg){\r
-           \r
-           \r
-           if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){         \r
-             if(momentum<0.6&&momentum>0.4){\r
-               hMIPVsEtaV0s->Fill(eta,dedx);\r
-               pMIPVsEtaV0s->Fill(eta,dedx);\r
-             }\r
-           }\r
-           \r
-           \r
-         }\r
-         \r
-         for(Int_t nh = 0; nh < nHists; nh++) {\r
-           \r
-           \r
-           \r
-           if( eta < etaLow[nh]/10.0 || eta > etaHigh[nh]/10.0 )\r
-             continue;\r
-           \r
-           if(fillPos&&fillNeg){\r
-             \r
-             histPiV0[nh]->Fill(momentum, dedx);           \r
-             histpPiV0[nh]->Fill(momentum);        \r
-\r
-           }\r
-           else{\r
-             \r
-             histPV0[nh]->Fill(momentum, dedx);\r
-             histpPV0[nh]->Fill(momentum);\r
-\r
-           }\r
-           \r
-         }\r
-         \r
-\r
-       }//end loop over two tracks\r
-      };\r
-       break;\r
-       \r
-      case 1:{//gammas    \r
-       \r
-       Bool_t fillPos = kFALSE;\r
-       Bool_t fillNeg = kFALSE;\r
-       \r
-       if(dmassK>0.01 && dmassL>0.01 && dmassAL>0.01) {\r
-         if(dmassG<0.01 && dmassG>0.0001) {\r
-           \r
-           if( TMath::Abs(nTrack->GetTPCsignal() - 85.0) < 5)\r
-             fillPos = kTRUE;\r
-           if( TMath::Abs(pTrack->GetTPCsignal() - 85.0) < 5)\r
-             fillNeg = kTRUE;\r
-           \r
-         } else {\r
-           continue;\r
-         }\r
-       }\r
-\r
-       \r
-       if(fillPos == kTRUE && fillNeg == kTRUE)      \r
-         continue;\r
-       \r
-       \r
-       AliAODTrack* track = 0;\r
-       if(fillNeg)\r
-         track = nTrack;\r
-       else if(fillPos)\r
-         track = pTrack;\r
-       else\r
-         continue;\r
-\r
-       Double_t dedx  = track->GetTPCsignal();\r
-       Double_t eta  = track->Eta();\r
-       Double_t phi  = track->Phi();\r
-       Double_t momentum = track->P();\r
-\r
-       if(track->GetTPCsignalN()<=70)continue;\r
-\r
-       if(!PhiCut(track->Pt(), phi, track->Charge(), magf, cutLow, cutHigh))\r
-         continue;\r
-       \r
-       for(Int_t nh = 0; nh < nHists; nh++) {\r
-      \r
-         if( eta < etaLow[nh]/10.0 || eta > etaHigh[nh]/10.0 )\r
-           continue;\r
-\r
-         histEV0[nh]->Fill(momentum, dedx);\r
-\r
-       }\r
-       \r
-      };\r
-       break;\r
-\r
-\r
-      }//end switch\r
-    }//end loop over V0s cases\r
-    \r
-  }//end loop over v0's\r
-  \r
-  \r
-  \r
-  \r
-}\r
-Bool_t AliAnalysisTaskQAHighPtDeDx::PhiCut(Double_t pt, Double_t phi, Double_t q, Float_t   mag, TF1* phiCutLow, TF1* phiCutHigh)\r
-{\r
-  if(pt < 2.0)\r
-    return kTRUE;\r
-  \r
-  //Double_t phi = track->Phi();\r
-  if(mag < 0)    // for negatve polarity field\r
-    phi = TMath::TwoPi() - phi;\r
-  if(q < 0) // for negatve charge\r
-    phi = TMath::TwoPi()-phi;\r
-  \r
-  phi += TMath::Pi()/18.0; // to center gap in the middle\r
-  phi = fmod(phi, TMath::Pi()/9.0);\r
-    \r
-  if(phi<phiCutHigh->Eval(pt) \r
-     && phi>phiCutLow->Eval(pt))\r
-  return kFALSE; // reject track\r
-\r
-  hPhi->Fill(pt, phi);\r
-\r
-  return kTRUE;\r
-}\r
+ /*************************************************************************
+* Copyright(c) 1998-2008, 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.                  * **************************************************************************/
+
+
+#include "AliAnalysisTaskQAHighPtDeDx.h"
+
+// ROOT includes
+#include <TList.h>
+#include <TTree.h>
+#include <TMath.h>
+#include <TH1.h>
+#include <TF1.h>
+#include <TProfile.h>
+#include <TParticle.h>
+#include <TFile.h>
+
+// AliRoot includes
+#include <AliAnalysisManager.h>
+#include <AliAnalysisFilter.h>
+#include <AliESDInputHandler.h>
+#include <AliESDEvent.h>
+#include <AliESDVertex.h>
+#include <AliLog.h>
+#include <AliExternalTrackParam.h>
+#include <AliESDtrackCuts.h>
+#include <AliESDVZERO.h>
+#include <AliAODVZERO.h>
+
+#include <AliMCEventHandler.h>
+#include <AliMCEvent.h>
+#include <AliStack.h>
+
+#include <TTreeStream.h>
+
+#include <AliHeader.h>
+#include <AliGenPythiaEventHeader.h>
+#include <AliGenDPMjetEventHeader.h>
+
+#include "AliCentrality.h" 
+#include <AliESDv0.h>
+#include <AliKFVertex.h>
+#include <AliAODVertex.h>
+
+#include <AliAODTrack.h> 
+#include <AliAODPid.h> 
+#include <AliAODMCHeader.h> 
+
+
+// STL includes
+#include <iostream>
+using namespace std;
+
+
+//
+// Responsible:
+// Antonio Ortiz (Lund)
+// Peter Christiansen (Lund)
+//
+
+
+
+
+
+
+
+
+const Double_t AliAnalysisTaskQAHighPtDeDx::fgkClight = 2.99792458e-2;
+Float_t magf = -1;
+TF1* cutLow  = new TF1("StandardPhiCutLow",  "0.1/x/x+pi/18.0-0.025", 0, 50);
+TF1* cutHigh = new TF1("StandardPhiCutHigh", "0.12/x+pi/18.0+0.035", 0, 50);
+Double_t DeDxMIPMin  = 30;
+Double_t DeDxMIPMax  = 65;
+const Int_t nHists = 9;
+Float_t centralityGlobal = -10;
+Int_t etaLow[nHists]  = {-8, -8, -6, -4, -2, 0, 2, 4, 6};
+Int_t etaHigh[nHists] = { 8, -6, -4, -2,  0, 2, 4, 6, 8};
+
+Int_t nDeltaPiBins   = 80;
+Double_t deltaPiLow  = 20;
+Double_t deltaPiHigh = 100;
+const Char_t *Pid[7]={"Ch","Pion","Kaon","Proton","Electron","Muon","Oher"};
+ClassImp(AliAnalysisTaskQAHighPtDeDx)
+//_____________________________________________________________________________
+//AliAnalysisTaskQAHighPtDeDx::AliAnalysisTaskQAHighPtDeDx(const char *name):
+AliAnalysisTaskQAHighPtDeDx::AliAnalysisTaskQAHighPtDeDx():
+  AliAnalysisTaskSE(),
+  fESD(0x0),
+  fAOD(0x0),
+  fMC(0x0),
+  fMCStack(0x0),
+  fMCArray(0x0),
+  fTrackFilterGolden(0x0),
+  fTrackFilterTPC(0x0),
+  fCentEst("V0M"),
+  fAnalysisType("ESD"),
+  fAnalysisMC(kFALSE),
+  fAnalysisPbPb(kFALSE),
+  ftrigBit(0x0),
+  fRandom(0x0),
+  fPileUpRej(kFALSE),
+  fVtxCut(10.0),  
+  fEtaCut(0.9),  
+  fMinCent(0.0),
+  fMaxCent(100.0),
+  fStoreMcIn(kFALSE),//
+  fMcProcessType(-999),
+  fTriggeredEventMB(-999),
+  fVtxStatus(-999),
+  fZvtx(-999),
+  fZvtxMC(-999),
+  fRun(-999),
+  fEventId(-999),
+  fListOfObjects(0), 
+  fEvents(0x0), fVtx(0x0), fVtxMC(0x0), fVtxBeforeCuts(0x0), fVtxAfterCuts(0x0),
+  fn1(0x0),
+  fcent(0x0),
+  hMIPVsEta(0x0),
+  pMIPVsEta(0x0),
+  hMIPVsEtaV0s(0x0),
+  pMIPVsEtaV0s(0x0),
+  hPlateauVsEta(0x0),
+  pPlateauVsEta(0x0),
+  hPhi(0x0)
+
+
+{
+  //default constructor
+}
+
+
+AliAnalysisTaskQAHighPtDeDx::AliAnalysisTaskQAHighPtDeDx(const char *name):
+  AliAnalysisTaskSE(name),
+  fESD(0x0),
+  fAOD(0x0),
+  fMC(0x0),
+  fMCStack(0x0),
+  fMCArray(0x0),
+  fTrackFilterGolden(0x0),
+  fTrackFilterTPC(0x0),
+  fCentEst("V0M"),
+  fAnalysisType("ESD"),
+  fAnalysisMC(kFALSE),
+  fAnalysisPbPb(kFALSE),
+  ftrigBit(0x0),
+  fRandom(0x0),
+  fPileUpRej(kFALSE),
+  fVtxCut(10.0),  
+  fEtaCut(0.9),  
+  fMinCent(0.0),
+  fMaxCent(100.0),
+  fStoreMcIn(kFALSE),//
+  fMcProcessType(-999),
+  fTriggeredEventMB(-999),
+  fVtxStatus(-999),
+  fZvtx(-999),
+  fZvtxMC(-999),
+  fRun(-999),
+  fEventId(-999),
+  fListOfObjects(0), 
+  fEvents(0x0), fVtx(0x0), fVtxMC(0x0), fVtxBeforeCuts(0x0), fVtxAfterCuts(0x0),
+  fn1(0x0),
+  fcent(0x0),
+  hMIPVsEta(0x0),
+  pMIPVsEta(0x0),
+  hMIPVsEtaV0s(0x0),
+  pMIPVsEtaV0s(0x0),
+  hPlateauVsEta(0x0),
+  pPlateauVsEta(0x0),
+  hPhi(0x0)
+
+
+{
+  // Default constructor (should not be used)
+  for(Int_t i=0;i<9;++i){
+    hMIPVsNch[i]=0;//TH2D, MIP vs Nch for different eta intervals
+    pMIPVsNch[i]=0;//TProfile, MIP vs Nch for different eta intervals
+    hMIPVsPhi[i]=0;//TH2D, MIP vs phi for different eta intervals
+    pMIPVsPhi[i]=0;//TProfile, MIP vs phi for different eta intervals
+    hPlateauVsPhi[i]=0;//TH2D, dE/dx vs Phi, electrons 0.4<p<0.6 GeV/c
+    pPlateauVsPhi[i]=0;//TProfile, dE/dx vs Phi, electrons 0.4<p<0.6 GeV/c
+    histPiV0[i]=0;//TH2D, dE/dx vs p, pi id by V0s
+    histpPiV0[i]=0;//TH1D, pi id by V0s
+    histPV0[i]=0;// TH2D, dE/dx vs p, p id by V0s
+    histpPV0[i]=0;// TH1D, p id by V0s
+    histAllCh[i]=0;//TH2D, dE/dx vs p for all charged particles
+    histPiTof[i]=0;//TH2D, dE/dx vs p for a "clean" sample of pions, beta>1
+    histpPiTof[i]=0;//TH1D, for a "clean" sample of pions, beta>1
+    histEV0[i]=0;
+
+    for(Int_t pid=0;pid<7;++pid){
+      hMcIn[pid][i]=0;
+      hMcOut[pid][i]=0;
+    }
+
+  }
+  DefineOutput(1, TList::Class());//esto es nuevo
+}
+
+
+
+
+AliAnalysisTaskQAHighPtDeDx::~AliAnalysisTaskQAHighPtDeDx() {
+  //
+  // Destructor
+  //
+
+}
+
+
+
+
+
+
+
+
+//______________________________________________________________________________
+void AliAnalysisTaskQAHighPtDeDx::UserCreateOutputObjects()
+{ 
+  // This method is called once per worker node
+  // Here we define the output: histograms and debug tree if requested 
+  // We also create the random generator here so it might get different seeds...
+  fRandom = new TRandom(0); // 0 means random seed
+
+
+  //OpenFile(1);
+  fListOfObjects = new TList();
+  fListOfObjects->SetOwner();
+  
+
+
+
+  //
+  // Histograms
+  //  
+  fEvents = new TH1I("fEvents","Number of analyzed events; Events; Counts", 3, 0, 3);
+  fListOfObjects->Add(fEvents);
+
+  fn1=new TH1F("fn1","fn1",11,-1,10);
+  fListOfObjects->Add(fn1);
+
+  fcent=new TH1F("fcent","fcent",104,-2,102);
+  fListOfObjects->Add(fcent);
+
+  fVtx = new TH1I("fVtx","Vtx info (0=no, 1=yes); Vtx; Counts", 2, -0.5, 1.5);
+  fListOfObjects->Add(fVtx);
+
+  fVtxBeforeCuts = new TH1F("fVtxBeforeCuts", "Vtx distribution (before cuts); Vtx z [cm]; Counts", 120, -30, 30);
+  fListOfObjects->Add(fVtxBeforeCuts);
+  
+  fVtxAfterCuts = new TH1F("fVtxAfterCuts", "Vtx distribution (before cuts); Vtx z [cm]; Counts", 120, -30, 30);
+  fListOfObjects->Add(fVtxAfterCuts);
+
+
+  const Int_t nPtBinsV0s = 25;
+  Double_t ptBinsV0s[nPtBinsV0s+1] = { 0.0 , 0.1 , 0.2 , 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.8 , 0.9 , 1.0 ,
+                                      1.2 , 1.4 , 1.6 , 1.8 , 2.0 , 2.5 , 3.0 , 3.5 , 4.0 , 5.0 , 7.0 ,
+                                      9.0 , 12.0, 15.0, 20.0 };
+  
+
+
+
+  const Char_t* ending[nHists] = {"", "86", "64", "42", "20", "02", "24", "46", "68"};
+  
+  const Char_t* LatexEta[nHists] = {
+    "|#eta|<0.8", "-0.8<#eta<-0.6", "-0.6<#eta<-0.4", "-0.4<#eta<-0.2", "-0.2<#eta<0", 
+    "0<#eta<0.2", "0.2<#eta<0.4", "0.4<#eta<0.6", "0.6<#eta<0.8" 
+  };
+  hPhi = new TH2D("histPhi", "pt; #phi'", nPtBinsV0s, ptBinsV0s, 90, -0.05, 0.4); 
+  //dE/dx vs phi, pions at the MIP
+  fListOfObjects->Add(hPhi);
+
+
+  
+
+  Int_t nPhiBins = 36;
+  
+  for(Int_t i = 0; i < nHists; i++) {
+    
+   
+    hMIPVsPhi[i]      = new TH2D(Form("hMIPVsPhi%s", ending[i]), Form("%s; #phi (rad); dE/dx MIP",LatexEta[i]), nPhiBins, 0, 2*TMath::Pi(), 
+                                DeDxMIPMax-DeDxMIPMin, DeDxMIPMin, DeDxMIPMax);
+    hMIPVsPhi[i]->Sumw2();
+    
+    pMIPVsPhi[i]     = new TProfile(Form("pMIPVsPhi%s", ending[i]), Form("%s; #phi (rad); dE/dx MIP",LatexEta[i]),  nPhiBins, 0, 2*TMath::Pi(),
+                                   DeDxMIPMin, DeDxMIPMax);
+    pMIPVsPhi[i]->SetMarkerStyle(20);
+    pMIPVsPhi[i]->SetMarkerColor(1);
+    pMIPVsPhi[i]->SetLineColor(1);
+    pMIPVsPhi[i]->Sumw2();
+
+    fListOfObjects->Add(hMIPVsPhi[i]);
+    fListOfObjects->Add(pMIPVsPhi[i]);
+
+    hPlateauVsPhi[i]  = new TH2D(Form("hPlateauVsPhi%s", ending[i]), Form("%s; #phi (rad); dE/dx Plateau",LatexEta[i]),  nPhiBins, 0, 2*TMath::Pi(),
+                                 95-DeDxMIPMax, DeDxMIPMax, 95);
+    hPlateauVsPhi[i]->Sumw2();
+    
+    pPlateauVsPhi[i] = new TProfile(Form("pPlateauVsPhi%s", ending[i]), Form("%s; #phi (rad); dE/dx Plateau",LatexEta[i]), nPhiBins, 0, 2*TMath::Pi(),
+                                    DeDxMIPMax, 95);
+    pPlateauVsPhi[i]->SetMarkerStyle(20);
+    pPlateauVsPhi[i]->SetMarkerColor(1);
+    pPlateauVsPhi[i]->SetLineColor(1);
+    pPlateauVsPhi[i]->Sumw2();
+
+    fListOfObjects->Add(hPlateauVsPhi[i]);
+    fListOfObjects->Add(pPlateauVsPhi[i]);
+
+
+    hMIPVsNch[i]      = new TH2D(Form("hMIPVsNch%s", ending[i]), Form("%s; TPC track mult. |#eta|<0.8; dE/dx MIP",LatexEta[i]), 400, 1, 2001, 
+                                 DeDxMIPMax-DeDxMIPMin, DeDxMIPMin, DeDxMIPMax);
+    hMIPVsNch[i]->Sumw2();
+    
+    pMIPVsNch[i] = new TProfile(Form("pMIPVsNch%s", ending[i]), Form("%s; TPC track mult. |#eta|<0.8; dE/dx MIP",LatexEta[i]), 400, 1, 2001, DeDxMIPMin, DeDxMIPMax);
+    pMIPVsNch[i]->SetMarkerStyle(20);
+    pMIPVsNch[i]->SetMarkerColor(1);
+    pMIPVsNch[i]->SetLineColor(1);
+    pMIPVsNch[i]->Sumw2();
+
+    fListOfObjects->Add(hMIPVsNch[i]);
+    fListOfObjects->Add(pMIPVsNch[i]);
+
+    //two dimmesional distributions dE/dx vs p for secondary pions
+    histPiV0[i]  = new TH2D(Form("histPiV0%s", ending[i]), "Pions id by V0", nPtBinsV0s, ptBinsV0s, nDeltaPiBins, deltaPiLow, deltaPiHigh);
+    histPiV0[i]->Sumw2();
+    fListOfObjects->Add(histPiV0[i]);
+
+    histpPiV0[i]  = new TH1D(Form("histPiV01D%s", ending[i]), "Pions id by V0; #it{p} (GeV/#it{c}); counts", 200, 0, 20);
+    histpPiV0[i]->Sumw2();
+    fListOfObjects->Add(histpPiV0[i]);
+
+    //two dimmesional distributions dE/dx vs p for secondary protons
+    histPV0[i]   = new TH2D(Form("histPV0%s", ending[i]), "Protons id by V0", nPtBinsV0s, ptBinsV0s, nDeltaPiBins, deltaPiLow, deltaPiHigh);
+    histPV0[i]->Sumw2();
+    fListOfObjects->Add(histPV0[i]);
+
+    histpPV0[i]  = new TH1D(Form("histPV01D%s", ending[i]), "Protons id by V0; #it{p} (GeV/#it{c}); counts", 200, 0, 20);
+    histpPV0[i]->Sumw2();
+    fListOfObjects->Add(histpPV0[i]);
+
+    //two dimmesional distributions dE/dx vs p for primary pions
+    histPiTof[i] = new TH2D(Form("histPiTof%s", ending[i]), "all charged", nPtBinsV0s, ptBinsV0s, nDeltaPiBins, deltaPiLow, deltaPiHigh);
+    histPiTof[i]->Sumw2();
+
+    histpPiTof[i]  = new TH1D(Form("histPiTof1D%s", ending[i]), "Protons id by V0; #it{p} (GeV/#it{c}); counts", 200, 0, 20);
+    histpPiTof[i]->Sumw2();
+    fListOfObjects->Add(histpPiTof[i]);
+
+
+    histAllCh[i] = new TH2D(Form("histAllCh%s", ending[i]), "Pions id by TOF", nPtBinsV0s, ptBinsV0s, nDeltaPiBins, deltaPiLow, deltaPiHigh);
+    histAllCh[i]->Sumw2();
+
+    fListOfObjects->Add(histPiTof[i]);
+    fListOfObjects->Add(histAllCh[i]);
+
+    histEV0[i]   = new TH2D(Form("histEV0%s", ending[i]), "Electrons id by V0", nPtBinsV0s, ptBinsV0s, nDeltaPiBins, deltaPiLow, deltaPiHigh);
+    histEV0[i]->Sumw2();
+    fListOfObjects->Add(histEV0[i]);
+
+
+
+  }
+
+
+  hMIPVsEta = new TH2D("hMIPVsEta","; #eta; dE/dx_{MIP, primary tracks}",16,-0.8,0.8,DeDxMIPMax-DeDxMIPMin, DeDxMIPMin, DeDxMIPMax);
+  pMIPVsEta = new TProfile("pMIPVsEta","; #eta; #LT dE/dx #GT_{MIP, primary tracks}",16,-0.8,0.8, DeDxMIPMin, DeDxMIPMax);
+  hMIPVsEtaV0s = new TH2D("hMIPVsEtaV0s","; #eta; dE/dx_{MIP, secondary tracks}",16,-0.8,0.8,DeDxMIPMax-DeDxMIPMin, DeDxMIPMin, DeDxMIPMax);
+  pMIPVsEtaV0s = new TProfile("pMIPVsEtaV0s","; #eta; #LT dE/dx #GT_{MIP, secondary tracks}",16,-0.8,0.8,DeDxMIPMin, DeDxMIPMax);
+  
+  hPlateauVsEta = new TH2D("hPlateauVsEta","; #eta; dE/dx_{Plateau, primary tracks}",16,-0.8,0.8,95-DeDxMIPMax, DeDxMIPMax, 95);
+  pPlateauVsEta = new TProfile("pPlateauVsEta","; #eta; #LT dE/dx #GT_{Plateau, primary tracks}",16,-0.8,0.8, DeDxMIPMax, 95);
+
+  fListOfObjects->Add(hMIPVsEta);
+  fListOfObjects->Add(pMIPVsEta);
+  fListOfObjects->Add(hMIPVsEtaV0s);
+  fListOfObjects->Add(pMIPVsEtaV0s);
+  fListOfObjects->Add(hPlateauVsEta);
+  fListOfObjects->Add(pPlateauVsEta);
+
+
+
+
+
+
+  if (fAnalysisMC) {    
+    for(Int_t i = 0; i < nHists; i++) {
+      for(Int_t pid = 0; pid < 7; pid++) {
+       
+       hMcIn[pid][i] = new TH1D(Form("hIn%s%s", Pid[pid],ending[i]), Form("MC in (pid %s)", Pid[pid]), 
+                                nPtBinsV0s, ptBinsV0s);
+       fListOfObjects->Add(hMcIn[pid][i]);
+       
+       hMcOut[pid][i] = new TH1D(Form("hMcOut%s%s", Pid[pid],ending[i]), Form("MC out (pid %s)", Pid[pid]), 
+                                 nPtBinsV0s, ptBinsV0s);
+       fListOfObjects->Add(hMcOut[pid][i]);
+       
+       
+      }
+    }
+
+    fVtxMC = new TH1F("fVtxMC","mc vtx", 120, -30, 30);
+    fListOfObjects->Add(fVtxMC);
+    
+  }
+  // Post output data.
+  PostData(1, fListOfObjects);
+}
+
+//______________________________________________________________________________
+void AliAnalysisTaskQAHighPtDeDx::UserExec(Option_t *) 
+{
+  // Main loop
+
+  //
+  // First we make sure that we have valid input(s)!
+  //
+
+
+
+  AliVEvent *event = InputEvent();
+  if (!event) {
+     Error("UserExec", "Could not retrieve event");
+     return;
+  }
+
+
+
+  if (fAnalysisType == "ESD"){
+    fESD = dynamic_cast<AliESDEvent*>(event);
+    if(!fESD){
+      Printf("%s:%d ESDEvent not found in Input Manager",(char*)__FILE__,__LINE__);
+      this->Dump();
+      return;
+    }    
+  } else {
+    fAOD = dynamic_cast<AliAODEvent*>(event);
+    if(!fAOD){
+      Printf("%s:%d AODEvent not found in Input Manager",(char*)__FILE__,__LINE__);
+      this->Dump();
+      return;
+    }    
+  }
+
+
+
+  if (fAnalysisMC) {
+
+    if (fAnalysisType == "ESD"){
+      fMC = dynamic_cast<AliMCEvent*>(MCEvent());
+      if(!fMC){
+       Printf("%s:%d MCEvent not found in Input Manager",(char*)__FILE__,__LINE__);
+       this->Dump();
+       return;
+      }    
+
+      fMCStack = fMC->Stack();
+      
+      if(!fMCStack){
+       Printf("%s:%d MCStack not found in Input Manager",(char*)__FILE__,__LINE__);
+       this->Dump();
+       return;
+      }    
+    } else { // AOD
+
+      fMC = dynamic_cast<AliMCEvent*>(MCEvent());
+      if(fMC)
+       fMC->Dump();
+
+      fMCArray = (TClonesArray*)fAOD->FindListObject("mcparticles");
+      if(!fMCArray){
+       Printf("%s:%d AOD MC array not found in Input Manager",(char*)__FILE__,__LINE__);
+       this->Dump();
+       return;
+      }    
+    }
+  }
+
+  
+  // Get trigger decision
+  fTriggeredEventMB = 0; //init
+  
+  fn1->Fill(0);
+  
+  if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
+     ->IsEventSelected() & ftrigBit ){
+    fTriggeredEventMB = 1;  //event triggered as minimum bias
+  }
+
+  // Get process type for MC
+  fMcProcessType = 0; // -1=invalid, 0=data, 1=ND, 2=SD, 3=DD
+
+  // real data that are not triggered we skip
+  if(!fAnalysisMC && !fTriggeredEventMB)
+    return; 
+  
+  fn1->Fill(1);
+
+
+  if (fAnalysisMC) {
+    
+
+
+    if (fAnalysisType == "ESD"){
+
+  
+
+      AliHeader* headerMC = fMC->Header();
+      if (headerMC) {
+       
+       AliGenEventHeader* genHeader = headerMC->GenEventHeader();
+       TArrayF vtxMC(3); // primary vertex  MC 
+       vtxMC[0]=9999; vtxMC[1]=9999;  vtxMC[2]=9999; //initialize with dummy
+       if (genHeader) {
+         genHeader->PrimaryVertex(vtxMC);
+       }
+       fZvtxMC = vtxMC[2];
+       
+       // PYTHIA:
+       AliGenPythiaEventHeader* pythiaGenHeader =
+         dynamic_cast<AliGenPythiaEventHeader*>(headerMC->GenEventHeader());
+       if (pythiaGenHeader) {  //works only for pythia
+         fMcProcessType =  GetPythiaEventProcessType(pythiaGenHeader->ProcessType());
+       }
+       // PHOJET:
+       AliGenDPMjetEventHeader* dpmJetGenHeader =
+         dynamic_cast<AliGenDPMjetEventHeader*>(headerMC->GenEventHeader());
+       if (dpmJetGenHeader) {
+         fMcProcessType = GetDPMjetEventProcessType(dpmJetGenHeader->ProcessType());
+       }
+      }
+    } else { // AOD
+      
+  
+
+      AliAODMCHeader* mcHeader = dynamic_cast<AliAODMCHeader*>(fAOD->FindListObject("mcHeader")); 
+
+
+      if(mcHeader) {
+       fZvtxMC = mcHeader->GetVtxZ();
+       
+
+
+       if(strstr(mcHeader->GetGeneratorName(), "Pythia")) {
+         fMcProcessType =  GetPythiaEventProcessType(mcHeader->GetEventType());
+       } else {
+         fMcProcessType =  GetDPMjetEventProcessType(mcHeader->GetEventType());
+       }
+      }
+    }
+
+
+  }
+  
+  
+
+  if (fAnalysisType == "ESD"){
+    
+    const AliESDVertex *vtxESD = fESD->GetPrimaryVertexTracks();
+    if(vtxESD->GetNContributors()<1) {
+      // SPD vertex
+      vtxESD = fESD->GetPrimaryVertexSPD();
+      /* quality checks on SPD-vertex */
+      TString vertexType = vtxESD->GetTitle();
+      if (vertexType.Contains("vertexer: Z") && (vtxESD->GetDispersion() > 0.04 || vtxESD->GetZRes() > 0.25))  
+       fZvtx  = -1599; //vertex = 0x0; //
+      else if (vtxESD->GetNContributors()<1) 
+       fZvtx  = -999; //vertex = 0x0; //
+      else
+       fZvtx = vtxESD->GetZ();
+    }  
+    else
+      fZvtx = vtxESD->GetZ();
+    
+  }
+  else // AOD
+    fZvtx = GetVertex(fAOD);
+    
+  fVtxBeforeCuts->Fill(fZvtx);
+  
+  //cut on the z position of vertex
+  if (TMath::Abs(fZvtx) > fVtxCut) {   
+    return;
+  }
+  fn1->Fill(2);
+  
+
+
+
+
+
+  Float_t centrality = -10;
+
+  // only analyze triggered events
+  if(fTriggeredEventMB) {
+    
+    if (fAnalysisType == "ESD"){
+      if(fAnalysisPbPb){
+       AliCentrality *centObject = fESD->GetCentrality();
+       centrality = centObject->GetCentralityPercentile(fCentEst);
+       centralityGlobal = centrality;
+       if((centrality>fMaxCent)||(centrality<fMinCent))return;
+      }
+      fcent->Fill(centrality);
+      fn1->Fill(3);
+      if(fAnalysisMC){
+       if(TMath::Abs(fZvtxMC)<fVtxCut){
+         ProcessMCTruthESD();
+         fVtxMC->Fill(fZvtxMC);
+       }
+      }
+      AnalyzeESD(fESD);
+    } else { // AOD
+      if(fAnalysisPbPb){
+       AliCentrality *centObject = fAOD->GetCentrality();
+       if(centObject){
+         centrality = centObject->GetCentralityPercentile(fCentEst); 
+       }
+       //cout<<"centrality="<<centrality<<endl;
+       if((centrality>fMaxCent)||(centrality<fMinCent))return;
+      }
+      fcent->Fill(centrality);
+      fn1->Fill(3);
+      if(fAnalysisMC){
+       if(TMath::Abs(fZvtxMC)<fVtxCut){
+
+         ProcessMCTruthAOD();
+         fVtxMC->Fill(fZvtxMC);
+       }
+      }
+      AnalyzeAOD(fAOD);
+    }
+  }
+
+  fVtxAfterCuts->Fill(fZvtx);
+
+  
+  
+
+  // Post output data.
+  PostData(1, fListOfObjects);
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskQAHighPtDeDx::AnalyzeESD(AliESDEvent* esdEvent)
+{
+  fRun  = esdEvent->GetRunNumber();
+  fEventId = 0;
+  if(esdEvent->GetHeader())
+    fEventId = GetEventIdAsLong(esdEvent->GetHeader());
+  
+  cout << "centrality=" << centralityGlobal << endl;
+
+
+  Bool_t isPileup = esdEvent->IsPileupFromSPD();
+  if(fPileUpRej)
+    if(isPileup)
+      return;
+  fn1->Fill(4);
+
+
+  //  Int_t     event     = esdEvent->GetEventNumberInFile();
+  //UInt_t    time      = esdEvent->GetTimeStamp();
+  //  ULong64_t trigger   = esdEvent->GetTriggerMask();
+  magf      = esdEvent->GetMagneticField();
+
+
+
+
+
+  if(fTriggeredEventMB) {// Only MC case can we have not triggered events
+    
+    // accepted event
+    fEvents->Fill(0);
+    
+    
+    //Change, 10/04/13. Now accept all events to do a correct normalization
+    //if(fVtxStatus!=1) return; // accepted vertex
+    //Int_t nESDTracks = esdEvent->GetNumberOfTracks();
+    
+    ProduceArrayTrksESD( esdEvent );//produce array with global track parameters
+    ProduceArrayV0ESD( esdEvent );//v0's
+
+    
+    fEvents->Fill(1);
+
+
+
+
+  } // end if triggered
+
+
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskQAHighPtDeDx::AnalyzeAOD(AliAODEvent* aodEvent)
+{
+  fRun  = aodEvent->GetRunNumber();
+  fEventId = 0;
+  if(aodEvent->GetHeader())
+    fEventId = GetEventIdAsLong(aodEvent->GetHeader());
+   
+  //UInt_t    time      = 0; // Missing AOD info? aodEvent->GetTimeStamp();
+  magf      = aodEvent->GetMagneticField();
+
+  //Int_t     trackmult = 0; // no pt cuts
+  //Int_t     nadded    = 0;
+
+  Bool_t isPileup = aodEvent->IsPileupFromSPD();
+  if(fPileUpRej)
+    if(isPileup)
+      return;
+  fn1->Fill(4);
+
+
+
+  if(fTriggeredEventMB) {// Only MC case can we have not triggered events
+    
+    // accepted event
+    fEvents->Fill(0);
+    
+    //if(fVtxStatus!=1) return; // accepted vertex
+    //Int_t nAODTracks = aodEvent->GetNumberOfTracks();  
+
+    ProduceArrayTrksAOD( aodEvent );
+    ProduceArrayV0AOD( aodEvent );
+
+    fEvents->Fill(1);
+
+
+
+  } // end if triggered
+
+}
+
+//_____________________________________________________________________________
+Float_t AliAnalysisTaskQAHighPtDeDx::GetVertex(const AliVEvent* event) const
+{
+  Float_t zvtx = -999;
+  
+  const AliVVertex* primaryVertex = event->GetPrimaryVertex(); 
+  
+  if(primaryVertex->GetNContributors()>0)
+    zvtx = primaryVertex->GetZ();
+
+  return zvtx;
+}
+
+//_____________________________________________________________________________
+Short_t AliAnalysisTaskQAHighPtDeDx::GetPidCode(Int_t pdgCode) const 
+{
+  // return our internal code for pions, kaons, and protons
+  
+  Short_t pidCode = 6;
+  
+  switch (TMath::Abs(pdgCode)) {
+  case 211:
+    pidCode = 1; // pion
+    break;
+  case 321:
+    pidCode = 2; // kaon
+    break;
+  case 2212:
+    pidCode = 3; // proton
+    break;
+  case 11:
+    pidCode = 4; // electron
+    break;
+  case 13:
+    pidCode = 5; // muon
+    break;
+  default:
+    pidCode = 6;  // something else?
+  };
+  
+  return pidCode;
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskQAHighPtDeDx::ProcessMCTruthESD() 
+{
+  // Fill the special MC histogram with the MC truth info
+  
+  const Int_t nTracksMC = fMCStack->GetNtrack();
+
+  for (Int_t iTracks = 0; iTracks < nTracksMC; iTracks++) {
+    
+    //Cuts
+    if(!(fMCStack->IsPhysicalPrimary(iTracks)))
+      continue;
+    
+    TParticle* trackMC = fMCStack->Particle(iTracks);
+    
+    TParticlePDG* pdgPart = trackMC ->GetPDG();
+    Double_t chargeMC = pdgPart->Charge();
+
+    if(chargeMC==0)
+      continue;
+    
+    if (TMath::Abs(trackMC->Eta()) > fEtaCut )
+      continue;
+
+    Double_t etaMC = trackMC->Eta();
+    Int_t pdgCode = trackMC->GetPdgCode();
+    Short_t pidCodeMC = 0;
+    pidCodeMC = GetPidCode(pdgCode);
+    
+    
+    for(Int_t nh = 0; nh < 9; nh++) {
+      
+      if( etaMC > etaHigh[nh]/10.0 || etaMC < etaLow[nh]/10.0 )
+       continue;
+      
+      hMcIn[0][nh]->Fill(trackMC->Pt());
+      hMcIn[pidCodeMC][nh]->Fill(trackMC->Pt());
+      
+      
+    }
+
+  }//MC track loop
+  
+  
+}
+
+//_____________________________________________________________________________
+void AliAnalysisTaskQAHighPtDeDx::ProcessMCTruthAOD() 
+{
+  // Fill the special MC histogram with the MC truth info
+  
+
+  const Int_t nTracksMC = fMCArray->GetEntriesFast();
+  
+  for (Int_t iTracks = 0; iTracks < nTracksMC; iTracks++) {
+    
+    AliAODMCParticle* trackMC = dynamic_cast<AliAODMCParticle*>(fMCArray->At(iTracks));
+
+    if(!trackMC){
+      AliError("Cannot get MC particle");
+      continue;
+    }   
+    
+    //Cuts
+    if(!(trackMC->IsPhysicalPrimary()))
+      continue;
+    
+   
+    Double_t chargeMC = trackMC->Charge();
+    if(chargeMC==0)
+      continue;
+
+    
+    if (TMath::Abs(trackMC->Eta()) > fEtaCut )
+      continue;
+    
+    Double_t etaMC = trackMC->Eta();
+    Int_t pdgCode = trackMC->GetPdgCode();
+    Short_t pidCodeMC = 0;
+    pidCodeMC = GetPidCode(pdgCode);
+    
+    //cout<<"pidcode="<<pidCodeMC<<endl;
+    for(Int_t nh = 0; nh < 9; nh++) {
+      
+      if( etaMC > etaHigh[nh]/10.0 || etaMC < etaLow[nh]/10.0 )
+       continue;
+      
+      hMcIn[0][nh]->Fill(trackMC->Pt());
+      hMcIn[pidCodeMC][nh]->Fill(trackMC->Pt());
+      
+      
+    }
+    
+  }//MC track loop
+  
+  
+}
+
+
+//_____________________________________________________________________________
+Short_t AliAnalysisTaskQAHighPtDeDx::GetPythiaEventProcessType(Int_t pythiaType) {
+  //
+  // Get the process type of the event.  PYTHIA
+  //
+  // source PWG0   dNdpt 
+
+  Short_t globalType = -1; //init
+      
+  if(pythiaType==92||pythiaType==93){
+    globalType = 2; //single diffractive
+  }
+  else if(pythiaType==94){
+    globalType = 3; //double diffractive
+  }
+  //else if(pythiaType != 91){ // also exclude elastic to be sure... CKB??
+  else {
+    globalType = 1;  //non diffractive
+  }
+  return globalType;
+}
+
+//_____________________________________________________________________________
+Short_t AliAnalysisTaskQAHighPtDeDx::GetDPMjetEventProcessType(Int_t dpmJetType) {
+  //
+  // get the process type of the event.  PHOJET
+  //
+  //source PWG0   dNdpt 
+  // can only read pythia headers, either directly or from cocktalil header
+  Short_t globalType = -1;
+  
+  if (dpmJetType == 1 || dpmJetType == 4) { // explicitly inelastic plus central diffraction
+    globalType = 1;
+  }
+  else if (dpmJetType==5 || dpmJetType==6) {
+    globalType = 2;
+  }
+  else if (dpmJetType==7) {
+    globalType = 3;
+  }
+  return globalType;
+}
+
+//_____________________________________________________________________________
+ULong64_t AliAnalysisTaskQAHighPtDeDx::GetEventIdAsLong(AliVHeader* header) const
+{
+  // To have a unique id for each event in a run!
+  // Modified from AliRawReader.h
+  return ((ULong64_t)header->GetBunchCrossNumber()+
+         (ULong64_t)header->GetOrbitNumber()*3564+
+         (ULong64_t)header->GetPeriodNumber()*16777215*3564);
+}
+
+
+//____________________________________________________________________
+TParticle* AliAnalysisTaskQAHighPtDeDx::FindPrimaryMother(AliStack* stack, Int_t label)
+{
+  //
+  // Finds the first mother among the primary particles of the particle identified by <label>,
+  // i.e. the primary that "caused" this particle
+  //
+  // Taken from AliPWG0Helper class
+  //
+
+  Int_t motherLabel = FindPrimaryMotherLabel(stack, label);
+  if (motherLabel < 0)
+    return 0;
+
+  return stack->Particle(motherLabel);
+}
+
+//____________________________________________________________________
+Int_t AliAnalysisTaskQAHighPtDeDx::FindPrimaryMotherLabel(AliStack* stack, Int_t label)
+{
+  //
+  // Finds the first mother among the primary particles of the particle identified by <label>,
+  // i.e. the primary that "caused" this particle
+  //
+  // returns its label
+  //
+  // Taken from AliPWG0Helper class
+  //
+  const Int_t nPrim  = stack->GetNprimary();
+  
+  while (label >= nPrim) {
+
+    //printf("Particle %d (pdg %d) is not a primary. Let's check its mother %d\n", label, mother->GetPdgCode(), mother->GetMother(0));
+
+    TParticle* particle = stack->Particle(label);
+    if (!particle) {
+      
+      AliDebugGeneral("FindPrimaryMotherLabel", AliLog::kError, Form("UNEXPECTED: particle with label %d not found in stack.", label));
+      return -1;
+    }
+    
+    // find mother
+    if (particle->GetMother(0) < 0) {
+
+      AliDebugGeneral("FindPrimaryMotherLabel", AliLog::kError, Form("UNEXPECTED: Could not find mother of secondary particle %d.", label));
+      return -1;
+    }
+    
+    label = particle->GetMother(0);
+  }
+  
+  return label;
+}
+
+//____________________________________________________________________
+AliAODMCParticle* AliAnalysisTaskQAHighPtDeDx::FindPrimaryMotherAOD(AliAODMCParticle* startParticle)
+{
+  //
+  // Finds the first mother among the primary particles of the particle identified by <label>,
+  // i.e. the primary that "caused" this particle
+  //
+  // Taken from AliPWG0Helper class
+  //
+
+  AliAODMCParticle* mcPart = startParticle;
+
+  while (mcPart)
+    {
+      
+      if(mcPart->IsPrimary())
+       return mcPart;
+      
+      Int_t mother = mcPart->GetMother();
+
+      mcPart = dynamic_cast<AliAODMCParticle*>(fMCArray->At(mother));
+    }
+
+  return 0;
+}
+
+
+//V0______________________________________
+//____________________________________________________________________
+TParticle* AliAnalysisTaskQAHighPtDeDx::FindPrimaryMotherV0(AliStack* stack, Int_t label)
+{
+  //
+  // Finds the first mother among the primary particles of the particle identified by <label>,
+  // i.e. the primary that "caused" this particle
+  //
+  // Taken from AliPWG0Helper class
+  //
+
+  Int_t nSteps = 0;
+
+  Int_t motherLabel = FindPrimaryMotherLabelV0(stack, label, nSteps);
+  if (motherLabel < 0)
+    return 0;
+
+  return stack->Particle(motherLabel);
+}
+
+//____________________________________________________________________
+Int_t AliAnalysisTaskQAHighPtDeDx::FindPrimaryMotherLabelV0(AliStack* stack, Int_t label, Int_t& nSteps)
+{
+  //
+  // Finds the first mother among the primary particles of the particle identified by <label>,
+  // i.e. the primary that "caused" this particle
+  //
+  // returns its label
+  //
+  // Taken from AliPWG0Helper class
+  //
+  nSteps = 0;
+  const Int_t nPrim  = stack->GetNprimary();
+  
+  while (label >= nPrim) {
+
+    //printf("Particle %d (pdg %d) is not a primary. Let's check its mother %d\n", label, mother->GetPdgCode(), mother->GetMother(0));
+
+    nSteps++; // 1 level down
+    
+    TParticle* particle = stack->Particle(label);
+    if (!particle) {
+      
+      AliDebugGeneral("FindPrimaryMotherLabelV0", AliLog::kError, Form("UNEXPECTED: particle with label %d not found in stack.", label));
+      return -1;
+    }
+    
+    // find mother
+    if (particle->GetMother(0) < 0) {
+
+      AliDebugGeneral("FindPrimaryMotherLabelV0", AliLog::kError, Form("UNEXPECTED: Could not find mother of secondary particle %d.", label));
+      return -1;
+    }
+    
+    label = particle->GetMother(0);
+  }
+  
+  return label;
+}
+
+//____________________________________________________________________
+AliAODMCParticle* AliAnalysisTaskQAHighPtDeDx::FindPrimaryMotherAODV0(AliAODMCParticle* startParticle, Int_t& nSteps)
+{
+  //
+  // Finds the first mother among the primary particles of the particle identified by <label>,
+  // i.e. the primary that "caused" this particle
+  //
+  // Taken from AliPWG0Helper class
+  //
+
+  nSteps = 0;
+
+  AliAODMCParticle* mcPart = startParticle;
+
+  while (mcPart)
+    {
+      
+      if(mcPart->IsPrimary())
+       return mcPart;
+      
+      Int_t mother = mcPart->GetMother();
+
+      mcPart = dynamic_cast<AliAODMCParticle*>(fMCArray->At(mother));
+      nSteps++; // 1 level down
+    }
+
+  return 0;
+}
+
+
+
+//__________________________________________________________________
+void AliAnalysisTaskQAHighPtDeDx::ProduceArrayTrksESD( AliESDEvent *ESDevent ){
+  
+  const Int_t nESDTracks = ESDevent->GetNumberOfTracks();
+  //Int_t trackmult=0;
+
+
+  Int_t multTPC = 0;
+  
+  //get multiplicity tpc only track cuts
+  for(Int_t iT = 0; iT < nESDTracks; iT++) {
+    
+    AliESDtrack* esdTrack = ESDevent->GetTrack(iT);
+    
+    
+    if(TMath::Abs(esdTrack->Eta()) > fEtaCut)
+      continue;
+    
+    //only golden track cuts
+    UInt_t selectDebug = 0;
+    if (fTrackFilterTPC) {
+      selectDebug = fTrackFilterTPC->IsSelected(esdTrack);
+      if (!selectDebug) {
+       //cout<<"this is not a golden track"<<endl;
+       continue;
+      }
+    }
+   
+    multTPC++;
+    
+  }
+
+
+
+  for(Int_t iT = 0; iT < nESDTracks; iT++) {
+    
+    AliESDtrack* esdTrack = ESDevent->GetTrack(iT);
+    
+      
+    if(TMath::Abs(esdTrack->Eta()) > fEtaCut)
+      continue;
+    
+    //only golden track cuts
+    UInt_t selectDebug = 0;
+    if (fTrackFilterGolden) {
+      selectDebug = fTrackFilterGolden->IsSelected(esdTrack);
+      if (!selectDebug) {
+       //cout<<"this is not a golden track"<<endl;
+       continue;
+      }
+    }
+    
+    
+    //Int_t sharedtpcclusters = esdTrack->GetTPCnclsS();
+    Short_t ncl     = esdTrack->GetTPCsignalN();
+
+
+    if(ncl<70)
+      continue;
+    Double_t eta  = esdTrack->Eta();
+    Double_t phi  = esdTrack->Phi();
+    Double_t momentum = esdTrack->P();
+    Float_t  dedx    = esdTrack->GetTPCsignal();
+
+    //cout<<"magf="<<magf<<endl;
+
+    if(!PhiCut(esdTrack->Pt(), phi, esdTrack->Charge(), magf, cutLow, cutHigh))
+      continue;
+
+       
+
+
+    //TOF
+    
+    Bool_t IsTOFout=kFALSE;
+    if ((esdTrack->GetStatus()&AliESDtrack::kTOFout)==0)
+      IsTOFout=kTRUE;
+    Float_t lengthtrack=esdTrack->GetIntegratedLength();
+    Float_t timeTOF=esdTrack->GetTOFsignal();
+    Double_t inttime[5]={0,0,0,0,0}; 
+    esdTrack->GetIntegratedTimes(inttime);// Returns the array with integrated times for each particle hypothesis
+    Float_t beta = -99;
+    if ( !IsTOFout ){
+      if ( ( lengthtrack != 0 ) && ( timeTOF != 0) )
+       beta = inttime[0] / timeTOF;
+    }
+
+    Short_t pidCode     = 0; 
+    
+    if(fAnalysisMC) {
+      
+      const Int_t label = TMath::Abs(esdTrack->GetLabel());
+      TParticle* mcTrack = fMCStack->Particle(label);      
+      if (mcTrack){
+       
+       Int_t pdgCode = mcTrack->GetPdgCode();
+       pidCode = GetPidCode(pdgCode);
+       
+      }
+      
+    }
+
+
+    if( momentum <= 0.6 && momentum >= 0.4  ){//only p:0.4-0.6 GeV, pion MIP
+      
+      if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){      
+       if(momentum<0.6&&momentum>0.4){
+         hMIPVsEta->Fill(eta,dedx);
+         pMIPVsEta->Fill(eta,dedx);
+       }
+      }
+      if( dedx > DeDxMIPMax+1 && dedx < 95 ){
+       if(TMath::Abs(beta-1)<0.1){
+         hPlateauVsEta->Fill(eta,dedx);
+         pPlateauVsEta->Fill(eta,dedx); 
+       }
+      }
+    }
+    
+    
+    for(Int_t nh = 0; nh < 9; nh++) {
+      
+      if( eta > etaHigh[nh]/10.0 || eta < etaLow[nh]/10.0 )
+       continue;
+      
+  
+      if(fAnalysisMC){
+       hMcOut[0][nh]->Fill(esdTrack->Pt());
+       hMcOut[pidCode][nh]->Fill(esdTrack->Pt());
+      }
+
+      histAllCh[nh]->Fill(momentum, dedx);
+      if(beta>1){
+       histPiTof[nh]->Fill(momentum, dedx);
+       histpPiTof[nh]->Fill(momentum);
+      }
+
+      if( momentum <= 0.6 && momentum >= 0.4  ){//only p:0.4-0.6 GeV, pion MIP
+       //Fill  pion MIP, before calibration
+       if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){     
+         hMIPVsPhi[nh]->Fill(phi,dedx);
+         pMIPVsPhi[nh]->Fill(phi,dedx);
+         
+         
+         hMIPVsNch[nh]->Fill(multTPC,dedx);
+         pMIPVsNch[nh]->Fill(multTPC,dedx);
+         
+       }
+       
+       //Fill electrons, before calibration
+       if( dedx > DeDxMIPMax+1 && dedx < 95 ){
+         if(TMath::Abs(beta-1)<0.1){
+           hPlateauVsPhi[nh]->Fill(phi,dedx);
+           pPlateauVsPhi[nh]->Fill(phi,dedx);
+         }
+       }
+
+      }
+
+
+    }//end loop over eta intervals
+
+    
+
+    
+    
+  }//end of track loop
+  
+  
+
+  
+}
+//__________________________________________________________________
+void AliAnalysisTaskQAHighPtDeDx::ProduceArrayTrksAOD( AliAODEvent *AODevent ){
+
+
+  Int_t nAODTracks = AODevent->GetNumberOfTracks();
+  Int_t multTPC = 0;
+  
+  //get multiplicity tpc only track cuts
+  for(Int_t iT = 0; iT < nAODTracks; iT++) {
+    
+    AliAODTrack* aodTrack = AODevent->GetTrack(iT);
+    
+    if(TMath::Abs(aodTrack->Eta()) > fEtaCut)
+      continue;
+    
+
+    if (fTrackFilterTPC) {
+      // TPC only cuts is bit 1
+      if(!aodTrack->TestFilterBit(1))
+       continue;
+    }
+   
+    multTPC++;
+    
+  }
+
+
+  for(Int_t iT = 0; iT < nAODTracks; iT++) {
+    
+    AliAODTrack* aodTrack = AODevent->GetTrack(iT);
+    
+    if (fTrackFilterGolden) {     
+      // "Global track RAA analysis QM2011 + Chi2ITS<36"; bit 1024
+      if(!aodTrack->TestFilterBit(1024))
+       continue;
+    }
+    
+    
+    if(TMath::Abs(aodTrack->Eta()) > fEtaCut)
+      continue;
+    
+    
+    Double_t eta  = aodTrack->Eta();
+    Double_t phi  = aodTrack->Phi();
+    Double_t momentum = aodTrack->P();
+    
+    if(!PhiCut(aodTrack->Pt(), phi, aodTrack->Charge(), magf, cutLow, cutHigh))
+      continue;
+    
+
+    
+    AliAODPid* aodPid = aodTrack->GetDetPid();
+    Short_t ncl     = -10;
+    Float_t dedx    = -10;
+
+    //TOF    
+    Float_t beta = -99;
+
+
+    if(aodPid) {
+      ncl     = aodPid->GetTPCsignalN();
+      dedx    = aodPid->GetTPCsignal();
+      //TOF
+      Bool_t IsTOFout=kFALSE;
+      Float_t lengthtrack=-999;//in aod we do not have that information, beta must be: beta=inttime/timeTOF 
+      Float_t timeTOF=-999;
+
+      if ((aodTrack->GetStatus()&AliESDtrack::kTOFout)==0)
+       IsTOFout=kTRUE;
+      
+      lengthtrack=-999;//in aod we do not have that information, beta must be: beta=inttime/timeTOF 
+      
+      timeTOF=aodPid->GetTOFsignal();
+      
+      Double_t inttime[5]={0,0,0,0,0}; 
+      aodPid->GetIntegratedTimes(inttime);// Returns the array with integrated times for each particle hypothesis
+
+      
+      if ( !IsTOFout ){
+       if ( ( lengthtrack != 0 ) && ( timeTOF != 0) )
+         beta = inttime[0] / timeTOF;
+      }
+      
+    }
+
+
+    if(ncl<70)
+      continue;
+
+
+    Short_t pidCode     = 0; 
+    
+    if(fAnalysisMC) {
+      
+      const Int_t label = TMath::Abs(aodTrack->GetLabel());
+      AliAODMCParticle* mcTrack = dynamic_cast<AliAODMCParticle*>(fMCArray->At(label));
+      
+      if (mcTrack){
+       
+       Int_t pdgCode = mcTrack->GetPdgCode();
+       pidCode = GetPidCode(pdgCode);
+       
+      }
+      
+    }
+
+
+
+
+    //if(momentum>0.6||momentum<0.4)//only p:0.4-0.6 GeV
+       //continue;
+    
+    //etaLow
+    //etaHigh
+    if( momentum <= 0.6 && momentum >= 0.4  ){//only p:0.4-0.6 GeV, pion MIP
+      if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){      
+       if(momentum<0.6&&momentum>0.4){
+         hMIPVsEta->Fill(eta,dedx);
+         pMIPVsEta->Fill(eta,dedx);
+       }
+      }
+      if( dedx > DeDxMIPMax+1 && dedx < 95 ){
+       if(TMath::Abs(beta-1)<0.1){
+         hPlateauVsEta->Fill(eta,dedx);
+         pPlateauVsEta->Fill(eta,dedx); 
+       }
+      }
+    }
+    
+    
+    for(Int_t nh = 0; nh < 9; nh++) {
+      
+      if( eta > etaHigh[nh]/10.0 || eta < etaLow[nh]/10.0 )
+       continue;
+      
+      
+      if(fAnalysisMC){
+       hMcOut[0][nh]->Fill(aodTrack->Pt());
+       hMcOut[pidCode][nh]->Fill(aodTrack->Pt());
+      }
+      
+      histAllCh[nh]->Fill(momentum, dedx);
+      if(beta>1){
+       histPiTof[nh]->Fill(momentum, dedx);
+       histpPiTof[nh]->Fill(momentum);
+      }
+
+      if( momentum <= 0.6 && momentum >= 0.4  ){//only p:0.4-0.6 GeV, pion MIP
+       //Fill  pion MIP, before calibration
+       if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){     
+         hMIPVsPhi[nh]->Fill(phi,dedx);
+         pMIPVsPhi[nh]->Fill(phi,dedx);
+         
+         
+         hMIPVsNch[nh]->Fill(multTPC,dedx);
+         pMIPVsNch[nh]->Fill(multTPC,dedx);
+         
+       }
+       
+       //Fill electrons, before calibration
+       if( dedx > DeDxMIPMax+1 && dedx < 95 ){
+         if(TMath::Abs(beta-1)<0.1){
+           hPlateauVsPhi[nh]->Fill(phi,dedx);
+           pPlateauVsPhi[nh]->Fill(phi,dedx);
+         }
+       }
+
+      }
+
+    }//end loop over eta intervals
+    
+    
+
+    
+    
+  }//end of track loop
+  
+  
+  
+  
+  
+}
+//__________________________________________________
+void AliAnalysisTaskQAHighPtDeDx::ProduceArrayV0ESD( AliESDEvent *ESDevent ){
+  Int_t nv0s = ESDevent->GetNumberOfV0s();
+  /*
+  if(nv0s<1){
+    return;
+    }*/
+  
+  const AliESDVertex *myBestPrimaryVertex = ESDevent->GetPrimaryVertex();
+  if (!myBestPrimaryVertex) return;
+  if (!(myBestPrimaryVertex->GetStatus())) return;
+  Double_t  lPrimaryVtxPosition[3];
+  myBestPrimaryVertex->GetXYZ(lPrimaryVtxPosition);
+  
+  Double_t  lPrimaryVtxCov[6];
+  myBestPrimaryVertex->GetCovMatrix(lPrimaryVtxCov);
+  Double_t  lPrimaryVtxChi2 = myBestPrimaryVertex->GetChi2toNDF();
+  
+  AliAODVertex* myPrimaryVertex = new AliAODVertex(lPrimaryVtxPosition, lPrimaryVtxCov, lPrimaryVtxChi2, NULL, -1, AliAODVertex::kPrimary);
+
+
+    
+  //
+  // LOOP OVER V0s, K0s, L, AL
+  //
+  
+  
+  for (Int_t iV0 = 0; iV0 < nv0s; iV0++) {
+    
+    // This is the begining of the V0 loop  
+    AliESDv0 *esdV0 = ESDevent->GetV0(iV0);
+    if (!esdV0) continue;
+    
+    //check onfly status
+    if(esdV0->GetOnFlyStatus()!=0)
+      continue;
+
+
+    // AliESDTrack (V0 Daughters)
+    UInt_t lKeyPos = (UInt_t)TMath::Abs(esdV0->GetPindex());
+    UInt_t lKeyNeg = (UInt_t)TMath::Abs(esdV0->GetNindex());
+    
+    AliESDtrack *pTrack = ESDevent->GetTrack(lKeyPos);
+    AliESDtrack *nTrack = ESDevent->GetTrack(lKeyNeg);
+    if (!pTrack || !nTrack) {
+      Printf("ERROR: Could not retreive one of the daughter track");
+      continue;
+    }
+    
+    // Remove like-sign
+    if (pTrack->GetSign() == nTrack->GetSign()) {
+      //cout<< "like sign, continue"<< endl;
+      continue;
+    } 
+    
+    // Eta cut on decay products
+    if(TMath::Abs(pTrack->Eta()) > fEtaCut || TMath::Abs(nTrack->Eta()) > fEtaCut)
+      continue;
+    
+    
+    // Check if switch does anything!
+    Bool_t isSwitched = kFALSE;
+    if (pTrack->GetSign() < 0) { // switch
+      
+      isSwitched = kTRUE;
+      AliESDtrack* helpTrack = nTrack;
+      nTrack = pTrack;
+      pTrack = helpTrack;
+    }  
+    
+    //Double_t  lV0Position[3];
+    //esdV0->GetXYZ(lV0Position[0], lV0Position[1], lV0Position[2]);
+    
+
+    AliKFVertex primaryVtxKF( *myPrimaryVertex );
+    AliKFParticle::SetField(ESDevent->GetMagneticField());
+    
+    // Also implement switch here!!!!!!
+    AliKFParticle* negEKF  = 0; // e-
+    AliKFParticle* posEKF  = 0; // e+
+    AliKFParticle* negPiKF = 0; // pi -
+    AliKFParticle* posPiKF = 0; // pi +
+    AliKFParticle* posPKF  = 0; // p
+    AliKFParticle* negAPKF = 0; // p-bar
+    
+    if(!isSwitched) {
+      negEKF  = new AliKFParticle( *(esdV0->GetParamN()) , 11);
+      posEKF  = new AliKFParticle( *(esdV0->GetParamP()) ,-11);
+      negPiKF = new AliKFParticle( *(esdV0->GetParamN()) ,-211);
+      posPiKF = new AliKFParticle( *(esdV0->GetParamP()) , 211);
+      posPKF  = new AliKFParticle( *(esdV0->GetParamP()) , 2212);
+      negAPKF = new AliKFParticle( *(esdV0->GetParamN()) ,-2212);
+    } else { // switch + and - 
+      negEKF  = new AliKFParticle( *(esdV0->GetParamP()) , 11);
+      posEKF  = new AliKFParticle( *(esdV0->GetParamN()) ,-11);
+      negPiKF = new AliKFParticle( *(esdV0->GetParamP()) ,-211);
+      posPiKF = new AliKFParticle( *(esdV0->GetParamN()) , 211);
+      posPKF  = new AliKFParticle( *(esdV0->GetParamN()) , 2212);
+      negAPKF = new AliKFParticle( *(esdV0->GetParamP()) ,-2212);
+    }
+    
+    AliKFParticle v0GKF;  // Gamma e.g. from pi0
+    v0GKF+=(*negEKF);
+    v0GKF+=(*posEKF);
+    v0GKF.SetProductionVertex(primaryVtxKF);
+    
+    AliKFParticle v0K0sKF; // K0 short
+    v0K0sKF+=(*negPiKF);
+    v0K0sKF+=(*posPiKF);
+    v0K0sKF.SetProductionVertex(primaryVtxKF);
+    
+    AliKFParticle v0LambdaKF; // Lambda
+    v0LambdaKF+=(*negPiKF);
+    v0LambdaKF+=(*posPKF);     
+    v0LambdaKF.SetProductionVertex(primaryVtxKF);
+    
+    AliKFParticle v0AntiLambdaKF; // Lambda-bar
+    v0AntiLambdaKF+=(*posPiKF);
+    v0AntiLambdaKF+=(*negAPKF);
+    v0AntiLambdaKF.SetProductionVertex(primaryVtxKF);
+    
+    Double_t dmassG     = v0GKF.GetMass();
+    Double_t dmassK     = v0K0sKF.GetMass()-0.498;
+    Double_t dmassL     = v0LambdaKF.GetMass()-1.116;
+    Double_t dmassAL    = v0AntiLambdaKF.GetMass()-1.116;
+
+
+    for( Int_t case_v0 = 0; case_v0 < 2; ++case_v0 ){
+
+
+      switch(case_v0){
+      case 0:{    
+       
+       Bool_t fillPos = kFALSE;
+       Bool_t fillNeg = kFALSE;
+       
+       if(dmassG < 0.1)
+         continue;
+       
+       if(dmassK>0.01 && dmassL>0.01 && dmassAL>0.01){
+         continue;
+       }
+       
+       if(dmassL<0.01){
+         fillPos = kTRUE;
+       }
+       if(dmassAL<0.01) {
+         if(fillPos)
+           continue;
+         fillNeg = kTRUE;
+       }
+       
+       if(dmassK<0.01) {
+         if(fillPos||fillNeg)
+           continue;
+         fillPos = kTRUE;
+         fillNeg = kTRUE;
+       }
+       
+       
+       for(Int_t j = 0; j < 2; j++) {
+         
+         AliESDtrack* track = 0;
+         
+         if(j==0) {
+           
+           if(fillNeg)
+             track = nTrack;
+           else
+             continue;
+         } else {
+           
+           if(fillPos)
+             track = pTrack;
+           else
+             continue;
+         }
+         
+         if(track->GetTPCsignalN()<=70)continue;
+         Double_t phi     = track->Phi();
+         
+         if(!PhiCut(track->Pt(), phi, track->Charge(), magf, cutLow, cutHigh))
+           continue;
+         
+         
+         //if(!PhiCut(pt, phi, charge, magf, cutLow, cutHigh, hPhi))
+         //    continue;
+         
+         Double_t eta  = track->Eta();
+         Double_t momentum = track->Pt();
+         Double_t dedx = track->GetTPCsignal();
+         
+         if(fillPos&&fillNeg){
+           
+           
+           if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){         
+             if(momentum<0.6&&momentum>0.4){
+               hMIPVsEtaV0s->Fill(eta,dedx);
+               pMIPVsEtaV0s->Fill(eta,dedx);
+             }
+           }
+           
+           
+         }
+         
+         for(Int_t nh = 0; nh < nHists; nh++) {
+           
+           
+           
+           if( eta < etaLow[nh]/10.0 || eta > etaHigh[nh]/10.0 )
+             continue;
+           
+           if(fillPos&&fillNeg){
+             
+             histPiV0[nh]->Fill(momentum, dedx);           
+             histpPiV0[nh]->Fill(momentum);
+
+           }
+           else{
+             
+             histPV0[nh]->Fill(momentum, dedx);
+             histpPV0[nh]->Fill(momentum);
+
+           }
+           
+         }
+                 
+       }//end loop over two tracks
+
+      };
+       break;
+
+      case 1:{//gammas    
+       
+       Bool_t fillPos = kFALSE;
+       Bool_t fillNeg = kFALSE;
+       
+
+
+       if(dmassK>0.01 && dmassL>0.01 && dmassAL>0.01) {
+         if(dmassG<0.01 && dmassG>0.0001) {
+           
+
+           if( TMath::Abs(nTrack->GetTPCsignal() - 85.0) < 5)
+             fillPos = kTRUE;
+           if( TMath::Abs(pTrack->GetTPCsignal() - 85.0) < 5)
+             fillNeg = kTRUE;
+           
+         } else {
+           continue;
+         }
+       }
+
+       //cout<<"fillPos="<<fillPos<<endl;
+
+       if(fillPos == kTRUE && fillNeg == kTRUE)      
+         continue;
+       
+       
+       AliESDtrack* track = 0;
+       if(fillNeg)
+         track = nTrack;
+       else if(fillPos)
+         track = pTrack;
+       else
+         continue;
+
+       Double_t dedx  = track->GetTPCsignal();
+       Double_t eta  = track->Eta();
+       Double_t phi  = track->Phi();
+       Double_t momentum = track->P();
+
+       if(track->GetTPCsignalN()<=70)continue;
+
+       if(!PhiCut(track->Pt(), phi, track->Charge(), magf, cutLow, cutHigh))
+         continue;
+       
+       for(Int_t nh = 0; nh < nHists; nh++) {
+      
+         if( eta < etaLow[nh]/10.0 || eta > etaHigh[nh]/10.0 )
+           continue;
+
+         histEV0[nh]->Fill(momentum, dedx);
+
+       }
+       
+      };
+       break;
+       
+       
+      }//end switch
+      
+    }//end loop over case V0
+
+    
+    // clean up loop over v0
+    
+    delete negPiKF;
+    delete posPiKF;
+    delete posPKF;
+    delete negAPKF;
+    
+    
+    
+  }
+  
+  
+  delete myPrimaryVertex;
+  
+  
+}
+//__________________________________________________________________________
+void AliAnalysisTaskQAHighPtDeDx::ProduceArrayV0AOD( AliAODEvent *AODevent ){
+  Int_t nv0s = AODevent->GetNumberOfV0s();
+  /*
+  if(nv0s<1){
+    return;
+    }*/
+  
+  AliAODVertex *myBestPrimaryVertex = AODevent->GetPrimaryVertex();
+  if (!myBestPrimaryVertex) return;
+  
+
+     
+  // ################################
+  // #### BEGINNING OF V0 CODE ######
+  // ################################
+  // This is the begining of the V0 loop  
+  for (Int_t iV0 = 0; iV0 < nv0s; iV0++) {
+    AliAODv0 *aodV0 = AODevent->GetV0(iV0);
+    if (!aodV0) continue;
+    
+    
+    //check onfly status
+    if(aodV0->GetOnFlyStatus()!=0)
+      continue;
+
+    // AliAODTrack (V0 Daughters)
+    AliAODVertex* vertex = aodV0->GetSecondaryVtx();
+    if (!vertex) {
+      Printf("ERROR: Could not retrieve vertex");
+      continue;
+    }
+    
+    AliAODTrack *pTrack = (AliAODTrack*)vertex->GetDaughter(0);
+    AliAODTrack *nTrack = (AliAODTrack*)vertex->GetDaughter(1);
+    if (!pTrack || !nTrack) {
+      Printf("ERROR: Could not retrieve one of the daughter track");
+      continue;
+    }
+    
+    // Remove like-sign
+    if (pTrack->Charge() == nTrack->Charge()) {
+      //cout<< "like sign, continue"<< endl;
+      continue;
+    } 
+    
+    // Make sure charge ordering is ok
+    if (pTrack->Charge() < 0) {
+      AliAODTrack* helpTrack = pTrack;
+      pTrack = nTrack;
+      nTrack = helpTrack;
+    } 
+    
+    // Eta cut on decay products
+    if(TMath::Abs(pTrack->Eta()) > fEtaCut || TMath::Abs(nTrack->Eta()) > fEtaCut)
+      continue;
+    
+    
+    Double_t dmassG  = aodV0->InvMass2Prongs(0,1,11,11);
+    Double_t dmassK  = aodV0->MassK0Short()-0.498;
+    Double_t dmassL  = aodV0->MassLambda()-1.116;
+    Double_t dmassAL = aodV0->MassAntiLambda()-1.116;
+    
+    for( Int_t case_v0 = 0; case_v0 < 2; ++case_v0 ){
+      
+      
+      switch(case_v0){
+      case 0:{   
+       Bool_t fillPos = kFALSE;
+       Bool_t fillNeg = kFALSE;
+       
+       
+       if(dmassG < 0.1)
+         continue;
+       
+       if(dmassK>0.01 && dmassL>0.01 && dmassAL>0.01){
+         continue;
+       }
+       
+       if(dmassL<0.01){
+         fillPos = kTRUE;
+       }
+       if(dmassAL<0.01) {
+         if(fillPos)
+           continue;
+         fillNeg = kTRUE;
+       }
+       
+       if(dmassK<0.01) {
+         if(fillPos||fillNeg)
+           continue;
+         fillPos = kTRUE;
+         fillNeg = kTRUE;
+       }
+       
+       
+       
+       for(Int_t j = 0; j < 2; j++) {
+         
+         AliAODTrack* track = 0;
+         
+         if(j==0) {
+           
+           if(fillNeg)
+             track = nTrack;
+           else
+             continue;
+         } else {
+           
+           if(fillPos)
+             track = pTrack;
+           else
+             continue;
+         }
+         
+         if(track->GetTPCsignalN()<=70)continue;
+         
+         Double_t phi     = track->Phi();
+         
+         if(!PhiCut(track->Pt(), phi, track->Charge(), magf, cutLow, cutHigh))
+           continue;
+         
+         
+         //if(!PhiCut(pt, phi, charge, magf, cutLow, cutHigh, hPhi))
+         //    continue;
+         
+         Double_t eta  = track->Eta();
+         Double_t momentum = track->Pt();
+         Double_t dedx = track->GetTPCsignal();
+         
+         if(fillPos&&fillNeg){
+           
+           
+           if( dedx < DeDxMIPMax && dedx > DeDxMIPMin ){         
+             if(momentum<0.6&&momentum>0.4){
+               hMIPVsEtaV0s->Fill(eta,dedx);
+               pMIPVsEtaV0s->Fill(eta,dedx);
+             }
+           }
+           
+           
+         }
+         
+         for(Int_t nh = 0; nh < nHists; nh++) {
+           
+           
+           
+           if( eta < etaLow[nh]/10.0 || eta > etaHigh[nh]/10.0 )
+             continue;
+           
+           if(fillPos&&fillNeg){
+             
+             histPiV0[nh]->Fill(momentum, dedx);           
+             histpPiV0[nh]->Fill(momentum);        
+
+           }
+           else{
+             
+             histPV0[nh]->Fill(momentum, dedx);
+             histpPV0[nh]->Fill(momentum);
+
+           }
+           
+         }
+         
+
+       }//end loop over two tracks
+      };
+       break;
+       
+      case 1:{//gammas    
+       
+       Bool_t fillPos = kFALSE;
+       Bool_t fillNeg = kFALSE;
+       
+       if(dmassK>0.01 && dmassL>0.01 && dmassAL>0.01) {
+         if(dmassG<0.01 && dmassG>0.0001) {
+           
+           if( TMath::Abs(nTrack->GetTPCsignal() - 85.0) < 5)
+             fillPos = kTRUE;
+           if( TMath::Abs(pTrack->GetTPCsignal() - 85.0) < 5)
+             fillNeg = kTRUE;
+           
+         } else {
+           continue;
+         }
+       }
+
+       
+       if(fillPos == kTRUE && fillNeg == kTRUE)      
+         continue;
+       
+       
+       AliAODTrack* track = 0;
+       if(fillNeg)
+         track = nTrack;
+       else if(fillPos)
+         track = pTrack;
+       else
+         continue;
+
+       Double_t dedx  = track->GetTPCsignal();
+       Double_t eta  = track->Eta();
+       Double_t phi  = track->Phi();
+       Double_t momentum = track->P();
+
+       if(track->GetTPCsignalN()<=70)continue;
+
+       if(!PhiCut(track->Pt(), phi, track->Charge(), magf, cutLow, cutHigh))
+         continue;
+       
+       for(Int_t nh = 0; nh < nHists; nh++) {
+      
+         if( eta < etaLow[nh]/10.0 || eta > etaHigh[nh]/10.0 )
+           continue;
+
+         histEV0[nh]->Fill(momentum, dedx);
+
+       }
+       
+      };
+       break;
+
+
+      }//end switch
+    }//end loop over V0s cases
+    
+  }//end loop over v0's
+  
+  
+  
+  
+}
+Bool_t AliAnalysisTaskQAHighPtDeDx::PhiCut(Double_t pt, Double_t phi, Double_t q, Float_t   mag, TF1* phiCutLow, TF1* phiCutHigh)
+{
+  if(pt < 2.0)
+    return kTRUE;
+  
+  //Double_t phi = track->Phi();
+  if(mag < 0)    // for negatve polarity field
+    phi = TMath::TwoPi() - phi;
+  if(q < 0) // for negatve charge
+    phi = TMath::TwoPi()-phi;
+  
+  phi += TMath::Pi()/18.0; // to center gap in the middle
+  phi = fmod(phi, TMath::Pi()/9.0);
+    
+  if(phi<phiCutHigh->Eval(pt) 
+     && phi>phiCutLow->Eval(pt))
+  return kFALSE; // reject track
+
+  hPhi->Fill(pt, phi);
+
+  return kTRUE;
+}