]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/hfe/AliAnalysisTaskHFEQA.cxx
Corrected end-of-line behavior
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliAnalysisTaskHFEQA.cxx
index 87205e00ee94767f4fbef556e592cfe45a919761..5b126dfc829adcb26bebda276eb5ec46f66dc475 100644 (file)
-/**************************************************************************\r
-* Copyright(c) 1998-1999, 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
-// QA task\r
-// \r
-// Authors:\r
-//   Raphaelle Bailhache <R.Bailhache@gsi.de>\r
-//\r
-#include "TROOT.h"\r
-#include "TChain.h"\r
-#include "TMath.h"\r
-#include <TString.h>\r
-#include <TBits.h>\r
-#include <TH1F.h>\r
-\r
-#include <TDirectory.h>\r
-#include <TTreeStream.h>\r
-\r
-#include "AliVEventHandler.h"\r
-#include "AliMCEventHandler.h"\r
-#include "AliAnalysisTaskSE.h"\r
-#include "AliAnalysisManager.h"\r
-\r
-#include "AliVEvent.h"\r
-#include "AliESDInputHandler.h"\r
-#include "AliMCEvent.h"\r
-#include "AliESD.h"\r
-#include "AliESDEvent.h"\r
-#include "AliPID.h"\r
-#include "AliPIDResponse.h"\r
-#include "AliESDUtils.h"\r
-#include "AliMCParticle.h"\r
-#include "AliAODMCParticle.h"\r
-#include "AliAODEvent.h"\r
-#include "AliAODVertex.h"\r
-#include "AliAODTrack.h"\r
-#include "AliVTrack.h"\r
-#include "AliESDtrack.h"\r
-#include "AliESDtrackCuts.h"\r
-#include "AliAODTrack.h"\r
-#include "AliStack.h"\r
-#include "AliMCEvent.h"\r
-\r
-#include "AliHFEcuts.h"\r
-#include "AliHFEpid.h"\r
-#include "AliHFEpidQAmanager.h"\r
-#include "AliHFEtools.h"\r
-\r
-#include "AliCentrality.h"\r
-#include "AliEventplane.h"\r
-#include "AliAnalysisTaskHFEQA.h"\r
-#include "AliAODMCHeader.h"\r
-\r
-\r
-ClassImp(AliAnalysisTaskHFEQA)\r
-\r
-//____________________________________________________________________\r
-AliAnalysisTaskHFEQA::AliAnalysisTaskHFEQA() :\r
-  AliAnalysisTaskSE(),\r
-  fListHist(0x0), \r
-  fAODAnalysis(kFALSE),\r
-  fAODMCHeader(NULL),\r
-  fAODArrayMCInfo(NULL),\r
-  fHFECuts(0),\r
-  fPIDTPConly(0),\r
-  fPIDTRDonly(0),\r
-  fPIDTOFTPC(0),\r
-  fPIDTPCTRD(0),\r
-  fPIDTPCEMCal(0),\r
-  fPIDqaTRDonly(0),\r
-  fPIDqaTOFTPC(0),\r
-  fPIDqaTPCTRD(0),\r
-  fPIDqaTPCEMCal(0),\r
-  fCentralityEstimator("V0M"),\r
-  fCollisionSystem(3),\r
-  fNbEvent(0),\r
-  fTPConly(0),\r
-  fTOFTPC(0),\r
-  fTPCTRD(0),\r
-  fTPCEMCal(0),\r
-  fTPConlydo(kFALSE),\r
-  fTRDonlydo(kFALSE),\r
-  fTOFTPCdo(kFALSE),\r
-  fTPCTRDdo(kFALSE),\r
-  fTPCEMCaldo(kFALSE)\r
-{\r
-  // Constructor\r
-   \r
-}\r
-//______________________________________________________________________________\r
-AliAnalysisTaskHFEQA:: AliAnalysisTaskHFEQA(const char *name) :\r
-  AliAnalysisTaskSE(name),\r
-  fListHist(0x0),\r
-  fAODAnalysis(kFALSE),\r
-  fAODMCHeader(NULL),\r
-  fAODArrayMCInfo(NULL),\r
-  fHFECuts(0),\r
-  fPIDTPConly(0),\r
-  fPIDTRDonly(0),\r
-  fPIDTOFTPC(0),\r
-  fPIDTPCTRD(0),\r
-  fPIDTPCEMCal(0),\r
-  fPIDqaTRDonly(0),\r
-  fPIDqaTOFTPC(0),\r
-  fPIDqaTPCTRD(0),\r
-  fPIDqaTPCEMCal(0),\r
-  fCentralityEstimator("V0M"),\r
-  fCollisionSystem(3),\r
-  fNbEvent(0),\r
-  fTPConly(0),\r
-  fTOFTPC(0),\r
-  fTPCTRD(0),\r
-  fTPCEMCal(0),\r
-  fTPConlydo(kFALSE),\r
-  fTRDonlydo(kFALSE),\r
-  fTOFTPCdo(kFALSE),\r
-  fTPCTRDdo(kFALSE),\r
-  fTPCEMCaldo(kFALSE)\r
-{\r
-  //\r
-  // named ctor\r
-  //\r
\r
-  fPIDTPConly = new AliHFEpid("hfePidTPConly");\r
-  fPIDTRDonly = new AliHFEpid("hfePidTRDonly");\r
-  fPIDTOFTPC = new AliHFEpid("hfePidTOFTPC");\r
-  fPIDTPCTRD = new AliHFEpid("hfePidTPCTRD");\r
-  fPIDTPCEMCal = new AliHFEpid("hfePidTPCEMCal");\r
-\r
-  fPIDqaTRDonly = new AliHFEpidQAmanager;\r
-  fPIDqaTOFTPC = new AliHFEpidQAmanager;\r
-  fPIDqaTPCTRD = new AliHFEpidQAmanager;\r
-  fPIDqaTPCEMCal = new AliHFEpidQAmanager;\r
-\r
-  SetPbPbAnalysis();\r
-\r
-  DefineInput(0,TChain::Class());\r
-  DefineOutput(1, TList::Class());\r
-    \r
-}\r
-//____________________________________________________________\r
-AliAnalysisTaskHFEQA::AliAnalysisTaskHFEQA(const AliAnalysisTaskHFEQA &ref):\r
-  AliAnalysisTaskSE(ref),\r
-  fListHist(NULL),\r
-  fAODAnalysis(ref.fAODAnalysis), \r
-  fAODMCHeader(ref.fAODMCHeader),\r
-  fAODArrayMCInfo(ref.fAODArrayMCInfo),\r
-  fHFECuts(NULL),\r
-  fPIDTPConly(0),\r
-  fPIDTRDonly(0),\r
-  fPIDTOFTPC(0),\r
-  fPIDTPCTRD(0),\r
-  fPIDTPCEMCal(0),\r
-  fPIDqaTRDonly(0),\r
-  fPIDqaTOFTPC(0),\r
-  fPIDqaTPCTRD(0),\r
-  fPIDqaTPCEMCal(0),\r
-  fCentralityEstimator(ref.fCentralityEstimator),\r
-  fCollisionSystem(ref.fCollisionSystem),\r
-  fNbEvent(ref.fNbEvent),\r
-  fTPConly(ref.fTPConly),\r
-  fTOFTPC(ref.fTOFTPC),\r
-  fTPCTRD(ref.fTPCTRD),\r
-  fTPCEMCal(ref.fTPCEMCal),\r
-  fTPConlydo(ref.fTPConlydo),\r
-  fTRDonlydo(ref.fTRDonlydo),\r
-  fTOFTPCdo(ref.fTOFTPCdo),\r
-  fTPCTRDdo(ref.fTPCTRDdo),\r
-  fTPCEMCaldo(ref.fTPCEMCaldo)\r
-{\r
-  //\r
-  // Copy Constructor\r
-  //\r
-\r
-  ref.Copy(*this);\r
-}\r
-\r
-//____________________________________________________________\r
-AliAnalysisTaskHFEQA &AliAnalysisTaskHFEQA::operator=(const AliAnalysisTaskHFEQA &ref){\r
-  //\r
-  // Assignment operator\r
-  //\r
-  if(this == &ref) \r
-    ref.Copy(*this);\r
-  return *this;\r
-}\r
-\r
-//____________________________________________________________\r
-void AliAnalysisTaskHFEQA::Copy(TObject &o) const {\r
-  // \r
-  // Copy into object o\r
-  //\r
-  AliAnalysisTaskHFEQA &target = dynamic_cast<AliAnalysisTaskHFEQA &>(o);\r
-  target.fListHist = fListHist;\r
-  target.fAODAnalysis = fAODAnalysis;\r
-  target.fAODMCHeader = fAODMCHeader;\r
-  target.fAODArrayMCInfo = fAODArrayMCInfo;\r
-  target.fHFECuts = fHFECuts;\r
-  target.fPIDTPConly = fPIDTPConly;\r
-  target.fPIDTRDonly = fPIDTRDonly;\r
-  target.fPIDTOFTPC = fPIDTOFTPC;\r
-  target.fPIDTPCTRD = fPIDTPCTRD;\r
-  target.fPIDTPCEMCal = fPIDTPCEMCal;\r
-  target.fPIDqaTRDonly = fPIDqaTRDonly;\r
-  target.fPIDqaTOFTPC = fPIDqaTOFTPC;\r
-  target.fPIDqaTPCTRD = fPIDqaTPCTRD;\r
-  target.fPIDqaTPCEMCal = fPIDqaTPCEMCal;\r
-  target.fCentralityEstimator = fCentralityEstimator;\r
-  target.fCollisionSystem = fCollisionSystem;\r
-  target.fNbEvent = fNbEvent;\r
-  target.fTPConly = fTPConly;\r
-  target.fTOFTPC = fTOFTPC;\r
-  target.fTPCTRD = fTPCTRD;\r
-  target.fTPCEMCal = fTPCEMCal;\r
-  target.fTPConlydo = fTPConlydo;\r
-  target.fTRDonlydo = fTRDonlydo;  \r
-  target.fTOFTPCdo = fTOFTPCdo;\r
-  target.fTPCTRDdo = fTPCTRDdo;\r
-  target.fTPCEMCaldo = fTPCEMCaldo;\r
-        \r
-\r
-}\r
-//____________________________________________________________\r
-AliAnalysisTaskHFEQA::~AliAnalysisTaskHFEQA(){\r
-  //\r
-  // Destructor\r
-  //\r
-  \r
-\r
-  if(fListHist) delete fListHist;\r
-  if(fHFECuts) delete fHFECuts;\r
-  if(fPIDTPConly) delete fPIDTPConly;\r
-  if(fPIDTRDonly) delete fPIDTRDonly;\r
-  if(fPIDTOFTPC) delete fPIDTOFTPC;\r
-  if(fPIDTPCTRD) delete fPIDTPCTRD;\r
-  if(fPIDTPCEMCal) delete fPIDTPCEMCal;\r
-\r
-   \r
-}\r
-//________________________________________________________________________\r
-void AliAnalysisTaskHFEQA::UserCreateOutputObjects()\r
-{\r
-\r
-  //********************\r
-  // Create histograms\r
-  //********************\r
-  AliDebug(2,"AliAnalysisTaskHFEQA: User create output objects");\r
-\r
-\r
-  // AOD or ESD\r
-  AliVEventHandler *inputHandler = dynamic_cast<AliVEventHandler *>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
-  if(!TString(inputHandler->IsA()->GetName()).CompareTo("AliAODInputHandler")){\r
-    SetAODAnalysis(kTRUE);\r
-    AliDebug(2,"Put AOD analysis on");\r
-  } else {\r
-    SetAODAnalysis(kFALSE);\r
-  }\r
-\r
-  AliDebug(2,"AliAnalysisTaskHFEQA: AOD ESD");\r
-\r
-  // HFE cuts\r
-\r
-  if(!fHFECuts){\r
-    fHFECuts = new AliHFEcuts;\r
-    fHFECuts->CreateStandardCuts();\r
-  }\r
-  fHFECuts->Initialize();\r
-  if(fAODAnalysis) {\r
-    fHFECuts->SetAOD();\r
-  }  \r
-\r
-  AliDebug(2,"AliAnalysisTaskHFEQA: HFE cuts");\r
-\r
-\r
-  // PIDTPConly HFE\r
-  if(!fPIDTPConly) {\r
-    fPIDTPConly =new AliHFEpid("hfePidTPConly");\r
-  }\r
-  if(!fPIDTPConly->GetNumberOfPIDdetectors()) fPIDTPConly->AddDetector("TPC", 0);\r
-  fPIDTPConly->InitializePID();\r
-  fPIDTPConly->SortDetectors();\r
-\r
-  // PIDTRDonly HFE\r
-  if(!fPIDTRDonly) {\r
-    fPIDTRDonly =new AliHFEpid("hfePidTRDonly");\r
-  }\r
-  if(!fPIDTRDonly->GetNumberOfPIDdetectors()) fPIDTRDonly->AddDetector("TRD", 0);\r
-  fPIDTRDonly->InitializePID();\r
-  fPIDqaTRDonly->Initialize(fPIDTRDonly);\r
-  fPIDTRDonly->SortDetectors();\r
-\r
-  // PIDTOFTPC HFE\r
-  if(!fPIDTOFTPC) {\r
-    fPIDTOFTPC =new AliHFEpid("hfePidTOFTPC");\r
-  }\r
-  if(!fPIDTOFTPC->GetNumberOfPIDdetectors()) {\r
-    fPIDTOFTPC->AddDetector("TOF", 0);\r
-    fPIDTOFTPC->AddDetector("TPC", 1);\r
-  }\r
-  fPIDTOFTPC->InitializePID();\r
-  fPIDqaTOFTPC->Initialize(fPIDTOFTPC);\r
-  fPIDTOFTPC->SortDetectors();\r
-\r
-\r
-  // PIDTPCTRD HFE\r
-  if(!fPIDTPCTRD) {\r
-    fPIDTPCTRD =new AliHFEpid("hfePidTPCTRD");\r
-  }\r
-  if(!fPIDTPCTRD->GetNumberOfPIDdetectors()) {\r
-    fPIDTPCTRD->AddDetector("TPC", 0);\r
-    fPIDTPCTRD->AddDetector("TRD", 1);\r
-  }\r
-  fPIDTPCTRD->InitializePID();\r
-  fPIDqaTPCTRD->Initialize(fPIDTPCTRD);\r
-  fPIDTPCTRD->SortDetectors();\r
-\r
-  // PIDTPCEMCal HFE\r
-  if(!fPIDTPCEMCal) {\r
-    fPIDTPCEMCal =new AliHFEpid("hfePidTPCEMCal");\r
-  }\r
-  if(!fPIDTPCEMCal->GetNumberOfPIDdetectors()) {\r
-    fPIDTPCEMCal->AddDetector("TPC", 0);\r
-    fPIDTPCEMCal->AddDetector("EMCal", 1);\r
-  }\r
-  fPIDTPCEMCal->InitializePID();\r
-  fPIDqaTPCEMCal->Initialize(fPIDTPCEMCal);\r
-  fPIDTPCEMCal->SortDetectors();\r
\r
-  // Histograms\r
-  fNbEvent = new TH1F("NbEvent", "",11,0,11);\r
-  fNbEvent->Sumw2();\r
-  Double_t ptbinning[36] = {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1., 1.1, 1.2, 1.3, 1.4, 1.5, 1.75, 2., 2.25, 2.5, 2.75, 3., 3.5, 4., 4.5, 5., 5.5, 6., 7., 8., 10., 12., 14., 16., 18., 20.};\r
-  fTPConly = new TH1F("TPCOnly", "",35,&ptbinning[0]);\r
-  fTPConly->Sumw2();\r
-  fTOFTPC = new TH1F("TOFTPC", "",35,&ptbinning[0]);\r
-  fTOFTPC->Sumw2();\r
-  fTPCTRD = new TH1F("TPCTRD", "",35,&ptbinning[0]);\r
-  fTPCTRD->Sumw2();\r
-  fTPCEMCal = new TH1F("TPCEMCal", "",35,&ptbinning[0]);\r
-  fTPCEMCal->Sumw2();\r
-\r
-\r
-  // List\r
-    \r
-  fListHist = new TList();\r
-  fListHist->SetOwner();\r
-\r
-  fListHist->Add(fPIDqaTRDonly->MakeList("HFEpidQATRDonly"));\r
-  fListHist->Add(fPIDqaTOFTPC->MakeList("HFEpidQATOFTPC"));\r
-  fListHist->Add(fPIDqaTPCTRD->MakeList("HFEpidQATPCTRD"));\r
-  fListHist->Add(fPIDqaTPCEMCal->MakeList("HFEpidQATPCEMCal"));\r
-\r
-  fListHist->Add(fNbEvent);\r
-  fListHist->Add(fTPConly);\r
-  fListHist->Add(fTOFTPC);\r
-  fListHist->Add(fTPCTRD);\r
-  fListHist->Add(fTPCEMCal);\r
-\r
-  AliDebug(2,"AliAnalysisTaskHFEQA: list");\r
-\r
-\r
-  fListHist->Print();\r
-\r
-  PostData(1, fListHist);\r
-\r
-  AliDebug(2,"AliAnalysisTaskHFEQA: post");\r
-\r
-\r
-}\r
-   \r
-//________________________________________________________________________\r
-void AliAnalysisTaskHFEQA::UserExec(Option_t */*option*/)\r
-{\r
-  //\r
-  // Loop over event\r
-  //\r
-   \r
-  Double_t binct = 11.5;\r
-\r
-  AliMCEvent *mcEvent = MCEvent();\r
\r
-\r
-  AliDebug(2,"MC info");\r
-  // MC info\r
-  Bool_t mcthere = kTRUE;\r
-  if(fAODAnalysis) {\r
-    AliAODEvent *aodE = dynamic_cast<AliAODEvent *>(fInputEvent);\r
-    if(!aodE){\r
-      AliError("No AOD Event");\r
-      return;\r
-    }\r
-    fAODMCHeader = dynamic_cast<AliAODMCHeader *>(fInputEvent->FindListObject(AliAODMCHeader::StdBranchName()));\r
-    if(!fAODMCHeader){ \r
-      mcthere = kFALSE;\r
-    }\r
-    fAODArrayMCInfo = dynamic_cast<TClonesArray *>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));\r
-    if(!fAODArrayMCInfo){ \r
-      mcthere = kFALSE;\r
-    }\r
-    else {\r
-      fHFECuts->SetMCEvent(aodE);\r
-    }\r
-  }\r
-  else {\r
-    AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler *>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());\r
-    if(!mcH){\r
-      mcthere=kFALSE;\r
-    }\r
-    if(mcEvent) fHFECuts->SetMCEvent(mcEvent);\r
-  }\r
-\r
-\r
-  ////////////////////////////////////\r
-  // Number of contributors\r
-  ///////////////////////////////////\r
-  AliDebug(2,"Number of contributors");\r
-  Int_t ncontribVtx = 0;\r
-  if(fAODAnalysis) {\r
-    AliAODEvent *fAOD = dynamic_cast<AliAODEvent *>(fInputEvent);\r
-    if(!fAOD){\r
-      AliError("AOD Event required for AOD Analysis");\r
-      return;\r
-    }  \r
-    AliAODVertex *priVtx = fAOD->GetPrimaryVertex();\r
-    if(priVtx){\r
-      ncontribVtx = priVtx->GetNContributors();\r
-    }\r
-  }\r
-  else {\r
-    AliESDEvent *fESD = dynamic_cast<AliESDEvent *>(fInputEvent);\r
-    if(!fESD){\r
-      AliError("ESD Event required for ESD Analysis");\r
-      return;\r
-    }\r
-    const AliESDVertex *priVtx = fESD->GetPrimaryVertexTracks();\r
-    if(priVtx){\r
-      ncontribVtx = priVtx->GetNContributors();\r
-    }\r
-  }\r
-  AliDebug(2,Form("Number of contributors %d",ncontribVtx));\r
-\r
-\r
-  /////////////////////////////////\r
-  // centrality\r
-  ////////////////////////////////\r
-\r
-  //printf("Centrality \n");\r
-  AliCentrality *centrality = fInputEvent->GetCentrality();\r
-  AliDebug(2,"Got the centrality");\r
-  Float_t cntr = 0.;\r
-  if(centrality && (! Ispp())) { \r
-    cntr = centrality->GetCentralityPercentile(fCentralityEstimator.Data());\r
-    if((0.0< cntr) && (cntr<5.0)) binct = 0.5;\r
-    if((5.0< cntr) && (cntr<10.0)) binct = 1.5;\r
-    if((10.0< cntr) && (cntr<20.0)) binct = 2.5;\r
-    if((20.0< cntr) && (cntr<30.0)) binct = 3.5;\r
-    if((30.0< cntr) && (cntr<40.0)) binct = 4.5;\r
-    if((40.0< cntr) && (cntr<50.0)) binct = 5.5;\r
-    if((50.0< cntr) && (cntr<60.0)) binct = 6.5;\r
-    if((60.0< cntr) && (cntr<70.0)) binct = 7.5;\r
-    if((70.0< cntr) && (cntr<80.0)) binct = 8.5;\r
-    if((80.0< cntr) && (cntr<90.0)) binct = 9.5;\r
-    if((90.0< cntr) && (cntr<100.0)) binct = 10.5;\r
-    if(binct > 11.0) return;\r
-  }\r
-  else binct = 0.5;\r
-  AliDebug(2,Form("Centrality %f with %s",binct,fCentralityEstimator.Data()));\r
\r
-  //////////////////////\r
-  // run number\r
-  //////////////////////\r
-\r
-  Int_t runnumber = fInputEvent->GetRunNumber();\r
-  AliDebug(2,Form("Run number %d",runnumber));\r
-   \r
-  if(!fPIDTPConly->IsInitialized()){\r
-    fPIDTPConly->InitializePID(runnumber);\r
-  }\r
-  if(!fPIDTRDonly->IsInitialized()){\r
-    fPIDTRDonly->InitializePID(runnumber);\r
-  }\r
-  if(!fPIDTOFTPC->IsInitialized()){\r
-    fPIDTOFTPC->InitializePID(runnumber);\r
-  }\r
-  if(!fPIDTPCTRD->IsInitialized()){\r
-    fPIDTPCTRD->InitializePID(runnumber);\r
-  }\r
-  if(!fPIDTPCEMCal->IsInitialized()){\r
-    fPIDTPCEMCal->InitializePID(runnumber);\r
-  }\r
-\r
-  //\r
-  fHFECuts->SetRecEvent(fInputEvent);\r
-  \r
-\r
-\r
-  //////////\r
-  // PID\r
-  //////////\r
-  AliDebug(2,"PID response");\r
-  AliPIDResponse *pidResponse = fInputHandler->GetPIDResponse();\r
-  if(!pidResponse){\r
-    AliDebug(2,"No PID response set");\r
-    return;\r
-  }\r
-  fPIDTPConly->SetPIDResponse(pidResponse);\r
-  fPIDTRDonly->SetPIDResponse(pidResponse);\r
-  fPIDTOFTPC->SetPIDResponse(pidResponse);\r
-  fPIDTPCTRD->SetPIDResponse(pidResponse);\r
-  fPIDTPCEMCal->SetPIDResponse(pidResponse);\r
-   \r
-  //////////////////\r
-  // Event cut\r
-  //////////////////\r
-  AliDebug(2,"Event cut");\r
-  if(!fHFECuts->CheckEventCuts("fEvRecCuts", fInputEvent)) {\r
-    AliDebug(2,"Does not pass the event cut");\r
-    PostData(1, fListHist);\r
-    return;\r
-  }\r
-  fNbEvent->Fill(binct);\r
-  \r
-  //////////////////////////\r
-  // Loop over track\r
-  //////////////////////////\r
-  Int_t nbtracks = fInputEvent->GetNumberOfTracks();\r
-  AliDebug(2,Form("Number of tracks %d",nbtracks));\r
-  for(Int_t k = 0; k < nbtracks; k++){\r
-      \r
-    AliVTrack *track = (AliVTrack *) fInputEvent->GetTrack(k);\r
-    if(!track) continue;\r
-    Double_t pt = track->Pt();     \r
-\r
-    AliDebug(2,"test 0\n");\r
-    \r
-    // RecKine: ITSTPC cuts  \r
-    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepRecKineITSTPC + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;\r
-    AliDebug(2,"test 1\n");\r
-\r
-    // RecPrim\r
-    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepRecPrim + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;\r
-    AliDebug(2,"test 2\n");\r
-\r
-    // HFEcuts: ITS layers cuts\r
-    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsITS + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;\r
-    AliDebug(2,"test 3\n");\r
-\r
-    // HFE cuts: TOF and mismatch flag\r
-    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsTOF + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;\r
-    AliDebug(2,"test 4\n");\r
-\r
-    // HFE cuts: TPC PID cleanup\r
-    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsTPC + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;\r
-    AliDebug(2,"test 5\n");\r
-\r
-    // HFEcuts: Nb of tracklets TRD0\r
-    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsTRD + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;\r
-    \r
-    AliDebug(2,"Survived");\r
-    \r
-\r
-    ////////////////////////\r
-    // Apply PID\r
-    ////////////////////////\r
-    AliHFEpidObject hfetrack;\r
-    if(!fAODAnalysis) hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);\r
-    else hfetrack.SetAnalysisType(AliHFEpidObject::kAODanalysis);\r
-    hfetrack.SetRecTrack(track);\r
-    hfetrack.SetCentrality((Int_t)binct);\r
-    hfetrack.SetMulitplicity(ncontribVtx); // for correction\r
-    if(IsPbPb()) hfetrack.SetPbPb();\r
-    else{\r
-      if(IspPb()) hfetrack.SetpPb();\r
-      else {\r
-       hfetrack.SetPP();\r
-       //printf("pp\n");\r
-      }\r
-    }\r
-    AliDebug(2,Form("centrality %f and %d",binct,hfetrack.GetCentrality()));\r
-   \r
-    //printf("test 7\n");\r
-\r
-    // Complete PID TPC alone\r
-    if(fTPConlydo) {\r
-      if(fPIDTPConly->IsSelected(&hfetrack,0x0,"recTrackCont",0x0)) {\r
-       fTPConly->Fill(pt);\r
-      }\r
-    }\r
-    AliDebug(2,"TPC only PID\n");\r
-       \r
-    // Complete PID TRD alone\r
-    if(fTRDonlydo) {\r
-      if(fPIDTRDonly->IsSelected(&hfetrack,0x0,"recTrackCont",fPIDqaTRDonly)) {\r
-       AliDebug(2,"Passed TRD only PID\n");\r
-      }\r
-    }\r
-    AliDebug(2,"TRD only PID\n");\r
-           \r
-    \r
-    // Complete PID TPC TOF \r
-    if(fTOFTPCdo) {\r
-      if(fPIDTOFTPC->IsSelected(&hfetrack,0x0,"recTrackCont",fPIDqaTOFTPC)) {\r
-       fTOFTPC->Fill(pt);\r
-      }\r
-    }\r
-    AliDebug(2,"TOF TPC PID\n");\r
-    \r
-    // Complete PID TPC TRD \r
-    if(fTPCTRDdo) {\r
-      if(fPIDTPCTRD->IsSelected(&hfetrack,0x0,"recTrackCont",fPIDqaTPCTRD)) {\r
-       fTPCTRD->Fill(pt);\r
-      }\r
-    }\r
-    AliDebug(2,"TPC TRD PID\n");\r
-\r
-\r
-    if(fTPCEMCaldo) {\r
-      if(!fAODAnalysis) {\r
-       // Complete PID TPC TRD \r
-       if(fPIDTPCEMCal->IsSelected(&hfetrack,0x0,"recTrackCont",fPIDqaTPCEMCal)) {\r
-         fTPCEMCal->Fill(pt);\r
-       }\r
-      }\r
-    }\r
-    AliDebug(2,"TPC EMCal PID\n");\r
-    \r
-    \r
-  }\r
-  \r
-  PostData(1, fListHist);\r
-  \r
-}\r
+/**************************************************************************
+* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+*                                                                        *
+* Author: The ALICE Off-line Project.                                    *
+* Contributors are mentioned in the code where appropriate.              *
+*                                                                        *
+* Permission to use, copy, modify and distribute this software and its   *
+* documentation strictly for non-commercial purposes is hereby granted   *
+* without fee, provided that the above copyright notice appears in all   *
+* copies and that both the copyright notice and this permission notice   *
+* appear in the supporting documentation. The authors make no claims     *
+* about the suitability of this software for any purpose. It is          *
+* provided "as is" without express or implied warranty.                  *
+**************************************************************************/
+//
+// QA task
+// 
+// Authors:
+//   Raphaelle Bailhache <R.Bailhache@gsi.de>
+//
+#include "TROOT.h"
+#include "TChain.h"
+#include "TMath.h"
+#include <TString.h>
+#include <TBits.h>
+#include <TH1F.h>
+
+#include <TDirectory.h>
+#include <TTreeStream.h>
+
+#include "AliVEventHandler.h"
+#include "AliMCEventHandler.h"
+#include "AliAnalysisTaskSE.h"
+#include "AliAnalysisManager.h"
+
+#include "AliVEvent.h"
+#include "AliESDInputHandler.h"
+#include "AliMCEvent.h"
+#include "AliESD.h"
+#include "AliESDEvent.h"
+#include "AliPID.h"
+#include "AliPIDResponse.h"
+#include "AliESDUtils.h"
+#include "AliMCParticle.h"
+#include "AliAODMCParticle.h"
+#include "AliAODEvent.h"
+#include "AliAODVertex.h"
+#include "AliAODTrack.h"
+#include "AliVTrack.h"
+#include "AliESDtrack.h"
+#include "AliESDtrackCuts.h"
+#include "AliAODTrack.h"
+#include "AliStack.h"
+#include "AliMCEvent.h"
+
+#include "AliHFEcuts.h"
+#include "AliHFEpid.h"
+#include "AliHFEpidQAmanager.h"
+#include "AliHFEtools.h"
+
+#include "AliCentrality.h"
+#include "AliEventplane.h"
+#include "AliAnalysisTaskHFEQA.h"
+#include "AliAODMCHeader.h"
+
+
+ClassImp(AliAnalysisTaskHFEQA)
+
+//____________________________________________________________________
+AliAnalysisTaskHFEQA::AliAnalysisTaskHFEQA() :
+  AliAnalysisTaskSE(),
+  fListHist(0x0), 
+  fAODAnalysis(kFALSE),
+  fAODMCHeader(NULL),
+  fAODArrayMCInfo(NULL),
+  fHFECuts(0),
+  fPIDTPConly(0),
+  fPIDTRDonly(0),
+  fPIDTOFTPC(0),
+  fPIDTPCTRD(0),
+  fPIDTPCEMCal(0),
+  fPIDqaTRDonly(0),
+  fPIDqaTOFTPC(0),
+  fPIDqaTPCTRD(0),
+  fPIDqaTPCEMCal(0),
+  fCentralityEstimator("V0M"),
+  fCollisionSystem(3),
+  fNbEvent(0),
+  fTPConly(0),
+  fTOFTPC(0),
+  fTPCTRD(0),
+  fTPCEMCal(0),
+  fTPConlydo(kFALSE),
+  fTRDonlydo(kFALSE),
+  fTOFTPCdo(kFALSE),
+  fTPCTRDdo(kFALSE),
+  fTPCEMCaldo(kFALSE)
+{
+  // Constructor
+   
+}
+//______________________________________________________________________________
+AliAnalysisTaskHFEQA:: AliAnalysisTaskHFEQA(const char *name) :
+  AliAnalysisTaskSE(name),
+  fListHist(0x0),
+  fAODAnalysis(kFALSE),
+  fAODMCHeader(NULL),
+  fAODArrayMCInfo(NULL),
+  fHFECuts(0),
+  fPIDTPConly(0),
+  fPIDTRDonly(0),
+  fPIDTOFTPC(0),
+  fPIDTPCTRD(0),
+  fPIDTPCEMCal(0),
+  fPIDqaTRDonly(0),
+  fPIDqaTOFTPC(0),
+  fPIDqaTPCTRD(0),
+  fPIDqaTPCEMCal(0),
+  fCentralityEstimator("V0M"),
+  fCollisionSystem(3),
+  fNbEvent(0),
+  fTPConly(0),
+  fTOFTPC(0),
+  fTPCTRD(0),
+  fTPCEMCal(0),
+  fTPConlydo(kFALSE),
+  fTRDonlydo(kFALSE),
+  fTOFTPCdo(kFALSE),
+  fTPCTRDdo(kFALSE),
+  fTPCEMCaldo(kFALSE)
+{
+  //
+  // named ctor
+  //
+  fPIDTPConly = new AliHFEpid("hfePidTPConly");
+  fPIDTRDonly = new AliHFEpid("hfePidTRDonly");
+  fPIDTOFTPC = new AliHFEpid("hfePidTOFTPC");
+  fPIDTPCTRD = new AliHFEpid("hfePidTPCTRD");
+  fPIDTPCEMCal = new AliHFEpid("hfePidTPCEMCal");
+
+  fPIDqaTRDonly = new AliHFEpidQAmanager;
+  fPIDqaTOFTPC = new AliHFEpidQAmanager;
+  fPIDqaTPCTRD = new AliHFEpidQAmanager;
+  fPIDqaTPCEMCal = new AliHFEpidQAmanager;
+
+  SetPbPbAnalysis();
+
+  DefineInput(0,TChain::Class());
+  DefineOutput(1, TList::Class());
+    
+}
+//____________________________________________________________
+AliAnalysisTaskHFEQA::AliAnalysisTaskHFEQA(const AliAnalysisTaskHFEQA &ref):
+  AliAnalysisTaskSE(ref),
+  fListHist(NULL),
+  fAODAnalysis(ref.fAODAnalysis), 
+  fAODMCHeader(ref.fAODMCHeader),
+  fAODArrayMCInfo(ref.fAODArrayMCInfo),
+  fHFECuts(NULL),
+  fPIDTPConly(0),
+  fPIDTRDonly(0),
+  fPIDTOFTPC(0),
+  fPIDTPCTRD(0),
+  fPIDTPCEMCal(0),
+  fPIDqaTRDonly(0),
+  fPIDqaTOFTPC(0),
+  fPIDqaTPCTRD(0),
+  fPIDqaTPCEMCal(0),
+  fCentralityEstimator(ref.fCentralityEstimator),
+  fCollisionSystem(ref.fCollisionSystem),
+  fNbEvent(ref.fNbEvent),
+  fTPConly(ref.fTPConly),
+  fTOFTPC(ref.fTOFTPC),
+  fTPCTRD(ref.fTPCTRD),
+  fTPCEMCal(ref.fTPCEMCal),
+  fTPConlydo(ref.fTPConlydo),
+  fTRDonlydo(ref.fTRDonlydo),
+  fTOFTPCdo(ref.fTOFTPCdo),
+  fTPCTRDdo(ref.fTPCTRDdo),
+  fTPCEMCaldo(ref.fTPCEMCaldo)
+{
+  //
+  // Copy Constructor
+  //
+
+  ref.Copy(*this);
+}
+
+//____________________________________________________________
+AliAnalysisTaskHFEQA &AliAnalysisTaskHFEQA::operator=(const AliAnalysisTaskHFEQA &ref){
+  //
+  // Assignment operator
+  //
+  if(this == &ref) 
+    ref.Copy(*this);
+  return *this;
+}
+
+//____________________________________________________________
+void AliAnalysisTaskHFEQA::Copy(TObject &o) const {
+  // 
+  // Copy into object o
+  //
+  AliAnalysisTaskHFEQA &target = dynamic_cast<AliAnalysisTaskHFEQA &>(o);
+  target.fListHist = fListHist;
+  target.fAODAnalysis = fAODAnalysis;
+  target.fAODMCHeader = fAODMCHeader;
+  target.fAODArrayMCInfo = fAODArrayMCInfo;
+  target.fHFECuts = fHFECuts;
+  target.fPIDTPConly = fPIDTPConly;
+  target.fPIDTRDonly = fPIDTRDonly;
+  target.fPIDTOFTPC = fPIDTOFTPC;
+  target.fPIDTPCTRD = fPIDTPCTRD;
+  target.fPIDTPCEMCal = fPIDTPCEMCal;
+  target.fPIDqaTRDonly = fPIDqaTRDonly;
+  target.fPIDqaTOFTPC = fPIDqaTOFTPC;
+  target.fPIDqaTPCTRD = fPIDqaTPCTRD;
+  target.fPIDqaTPCEMCal = fPIDqaTPCEMCal;
+  target.fCentralityEstimator = fCentralityEstimator;
+  target.fCollisionSystem = fCollisionSystem;
+  target.fNbEvent = fNbEvent;
+  target.fTPConly = fTPConly;
+  target.fTOFTPC = fTOFTPC;
+  target.fTPCTRD = fTPCTRD;
+  target.fTPCEMCal = fTPCEMCal;
+  target.fTPConlydo = fTPConlydo;
+  target.fTRDonlydo = fTRDonlydo;  
+  target.fTOFTPCdo = fTOFTPCdo;
+  target.fTPCTRDdo = fTPCTRDdo;
+  target.fTPCEMCaldo = fTPCEMCaldo;
+        
+
+}
+//____________________________________________________________
+AliAnalysisTaskHFEQA::~AliAnalysisTaskHFEQA(){
+  //
+  // Destructor
+  //
+  
+
+  if(fListHist) delete fListHist;
+  if(fHFECuts) delete fHFECuts;
+  if(fPIDTPConly) delete fPIDTPConly;
+  if(fPIDTRDonly) delete fPIDTRDonly;
+  if(fPIDTOFTPC) delete fPIDTOFTPC;
+  if(fPIDTPCTRD) delete fPIDTPCTRD;
+  if(fPIDTPCEMCal) delete fPIDTPCEMCal;
+
+   
+}
+//________________________________________________________________________
+void AliAnalysisTaskHFEQA::UserCreateOutputObjects()
+{
+
+  //********************
+  // Create histograms
+  //********************
+  AliDebug(2,"AliAnalysisTaskHFEQA: User create output objects");
+
+
+  // AOD or ESD
+  AliVEventHandler *inputHandler = dynamic_cast<AliVEventHandler *>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+  if(!TString(inputHandler->IsA()->GetName()).CompareTo("AliAODInputHandler")){
+    SetAODAnalysis(kTRUE);
+    AliDebug(2,"Put AOD analysis on");
+  } else {
+    SetAODAnalysis(kFALSE);
+  }
+
+  AliDebug(2,"AliAnalysisTaskHFEQA: AOD ESD");
+
+  // HFE cuts
+
+  if(!fHFECuts){
+    fHFECuts = new AliHFEcuts;
+    fHFECuts->CreateStandardCuts();
+  }
+  fHFECuts->Initialize();
+  if(fAODAnalysis) {
+    fHFECuts->SetAOD();
+  }  
+
+  AliDebug(2,"AliAnalysisTaskHFEQA: HFE cuts");
+
+
+  // PIDTPConly HFE
+  if(!fPIDTPConly) {
+    fPIDTPConly =new AliHFEpid("hfePidTPConly");
+  }
+  if(!fPIDTPConly->GetNumberOfPIDdetectors()) fPIDTPConly->AddDetector("TPC", 0);
+  fPIDTPConly->InitializePID();
+  fPIDTPConly->SortDetectors();
+
+  // PIDTRDonly HFE
+  if(!fPIDTRDonly) {
+    fPIDTRDonly =new AliHFEpid("hfePidTRDonly");
+  }
+  if(!fPIDTRDonly->GetNumberOfPIDdetectors()) fPIDTRDonly->AddDetector("TRD", 0);
+  fPIDTRDonly->InitializePID();
+  fPIDqaTRDonly->Initialize(fPIDTRDonly);
+  fPIDTRDonly->SortDetectors();
+
+  // PIDTOFTPC HFE
+  if(!fPIDTOFTPC) {
+    fPIDTOFTPC =new AliHFEpid("hfePidTOFTPC");
+  }
+  if(!fPIDTOFTPC->GetNumberOfPIDdetectors()) {
+    fPIDTOFTPC->AddDetector("TOF", 0);
+    fPIDTOFTPC->AddDetector("TPC", 1);
+  }
+  fPIDTOFTPC->InitializePID();
+  fPIDqaTOFTPC->Initialize(fPIDTOFTPC);
+  fPIDTOFTPC->SortDetectors();
+
+
+  // PIDTPCTRD HFE
+  if(!fPIDTPCTRD) {
+    fPIDTPCTRD =new AliHFEpid("hfePidTPCTRD");
+  }
+  if(!fPIDTPCTRD->GetNumberOfPIDdetectors()) {
+    fPIDTPCTRD->AddDetector("TPC", 0);
+    fPIDTPCTRD->AddDetector("TRD", 1);
+  }
+  fPIDTPCTRD->InitializePID();
+  fPIDqaTPCTRD->Initialize(fPIDTPCTRD);
+  fPIDTPCTRD->SortDetectors();
+
+  // PIDTPCEMCal HFE
+  if(!fPIDTPCEMCal) {
+    fPIDTPCEMCal =new AliHFEpid("hfePidTPCEMCal");
+  }
+  if(!fPIDTPCEMCal->GetNumberOfPIDdetectors()) {
+    fPIDTPCEMCal->AddDetector("TPC", 0);
+    fPIDTPCEMCal->AddDetector("EMCal", 1);
+  }
+  fPIDTPCEMCal->InitializePID();
+  fPIDqaTPCEMCal->Initialize(fPIDTPCEMCal);
+  fPIDTPCEMCal->SortDetectors();
+  // Histograms
+  fNbEvent = new TH1F("NbEvent", "",11,0,11);
+  fNbEvent->Sumw2();
+  Double_t ptbinning[36] = {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1., 1.1, 1.2, 1.3, 1.4, 1.5, 1.75, 2., 2.25, 2.5, 2.75, 3., 3.5, 4., 4.5, 5., 5.5, 6., 7., 8., 10., 12., 14., 16., 18., 20.};
+  fTPConly = new TH1F("TPCOnly", "",35,&ptbinning[0]);
+  fTPConly->Sumw2();
+  fTOFTPC = new TH1F("TOFTPC", "",35,&ptbinning[0]);
+  fTOFTPC->Sumw2();
+  fTPCTRD = new TH1F("TPCTRD", "",35,&ptbinning[0]);
+  fTPCTRD->Sumw2();
+  fTPCEMCal = new TH1F("TPCEMCal", "",35,&ptbinning[0]);
+  fTPCEMCal->Sumw2();
+
+
+  // List
+    
+  fListHist = new TList();
+  fListHist->SetOwner();
+
+  fListHist->Add(fPIDqaTRDonly->MakeList("HFEpidQATRDonly"));
+  fListHist->Add(fPIDqaTOFTPC->MakeList("HFEpidQATOFTPC"));
+  fListHist->Add(fPIDqaTPCTRD->MakeList("HFEpidQATPCTRD"));
+  fListHist->Add(fPIDqaTPCEMCal->MakeList("HFEpidQATPCEMCal"));
+
+  fListHist->Add(fNbEvent);
+  fListHist->Add(fTPConly);
+  fListHist->Add(fTOFTPC);
+  fListHist->Add(fTPCTRD);
+  fListHist->Add(fTPCEMCal);
+
+  AliDebug(2,"AliAnalysisTaskHFEQA: list");
+
+
+  fListHist->Print();
+
+  PostData(1, fListHist);
+
+  AliDebug(2,"AliAnalysisTaskHFEQA: post");
+
+
+}
+   
+//________________________________________________________________________
+void AliAnalysisTaskHFEQA::UserExec(Option_t */*option*/)
+{
+  //
+  // Loop over event
+  //
+   
+  Double_t binct = 11.5;
+
+  AliMCEvent *mcEvent = MCEvent();
+
+  AliDebug(2,"MC info");
+  // MC info
+  Bool_t mcthere = kTRUE;
+  if(fAODAnalysis) {
+    AliAODEvent *aodE = dynamic_cast<AliAODEvent *>(fInputEvent);
+    if(!aodE){
+      AliError("No AOD Event");
+      return;
+    }
+    fAODMCHeader = dynamic_cast<AliAODMCHeader *>(fInputEvent->FindListObject(AliAODMCHeader::StdBranchName()));
+    if(!fAODMCHeader){ 
+      mcthere = kFALSE;
+    }
+    fAODArrayMCInfo = dynamic_cast<TClonesArray *>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+    if(!fAODArrayMCInfo){ 
+      mcthere = kFALSE;
+    }
+    else {
+      fHFECuts->SetMCEvent(aodE);
+    }
+  }
+  else {
+    AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler *>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
+    if(!mcH){
+      mcthere=kFALSE;
+    }
+    if(mcEvent) fHFECuts->SetMCEvent(mcEvent);
+  }
+
+
+  ////////////////////////////////////
+  // Number of contributors
+  ///////////////////////////////////
+  AliDebug(2,"Number of contributors");
+  Int_t ncontribVtx = 0;
+  if(fAODAnalysis) {
+    AliAODEvent *fAOD = dynamic_cast<AliAODEvent *>(fInputEvent);
+    if(!fAOD){
+      AliError("AOD Event required for AOD Analysis");
+      return;
+    }  
+    AliAODVertex *priVtx = fAOD->GetPrimaryVertex();
+    if(priVtx){
+      ncontribVtx = priVtx->GetNContributors();
+    }
+  }
+  else {
+    AliESDEvent *fESD = dynamic_cast<AliESDEvent *>(fInputEvent);
+    if(!fESD){
+      AliError("ESD Event required for ESD Analysis");
+      return;
+    }
+    const AliESDVertex *priVtx = fESD->GetPrimaryVertexTracks();
+    if(priVtx){
+      ncontribVtx = priVtx->GetNContributors();
+    }
+  }
+  AliDebug(2,Form("Number of contributors %d",ncontribVtx));
+
+
+  /////////////////////////////////
+  // centrality
+  ////////////////////////////////
+
+  //printf("Centrality \n");
+  AliCentrality *centrality = fInputEvent->GetCentrality();
+  AliDebug(2,"Got the centrality");
+  Float_t cntr = 0.;
+  if(centrality && (! Ispp())) { 
+    cntr = centrality->GetCentralityPercentile(fCentralityEstimator.Data());
+    if((0.0< cntr) && (cntr<5.0)) binct = 0.5;
+    if((5.0< cntr) && (cntr<10.0)) binct = 1.5;
+    if((10.0< cntr) && (cntr<20.0)) binct = 2.5;
+    if((20.0< cntr) && (cntr<30.0)) binct = 3.5;
+    if((30.0< cntr) && (cntr<40.0)) binct = 4.5;
+    if((40.0< cntr) && (cntr<50.0)) binct = 5.5;
+    if((50.0< cntr) && (cntr<60.0)) binct = 6.5;
+    if((60.0< cntr) && (cntr<70.0)) binct = 7.5;
+    if((70.0< cntr) && (cntr<80.0)) binct = 8.5;
+    if((80.0< cntr) && (cntr<90.0)) binct = 9.5;
+    if((90.0< cntr) && (cntr<100.0)) binct = 10.5;
+    if(binct > 11.0) return;
+  }
+  else binct = 0.5;
+  AliDebug(2,Form("Centrality %f with %s",binct,fCentralityEstimator.Data()));
+  //////////////////////
+  // run number
+  //////////////////////
+
+  Int_t runnumber = fInputEvent->GetRunNumber();
+  AliDebug(2,Form("Run number %d",runnumber));
+   
+  if(!fPIDTPConly->IsInitialized()){
+    fPIDTPConly->InitializePID(runnumber);
+  }
+  if(!fPIDTRDonly->IsInitialized()){
+    fPIDTRDonly->InitializePID(runnumber);
+  }
+  if(!fPIDTOFTPC->IsInitialized()){
+    fPIDTOFTPC->InitializePID(runnumber);
+  }
+  if(!fPIDTPCTRD->IsInitialized()){
+    fPIDTPCTRD->InitializePID(runnumber);
+  }
+  if(!fPIDTPCEMCal->IsInitialized()){
+    fPIDTPCEMCal->InitializePID(runnumber);
+  }
+
+  //
+  fHFECuts->SetRecEvent(fInputEvent);
+  
+
+
+  //////////
+  // PID
+  //////////
+  AliDebug(2,"PID response");
+  AliPIDResponse *pidResponse = fInputHandler->GetPIDResponse();
+  if(!pidResponse){
+    AliDebug(2,"No PID response set");
+    return;
+  }
+  fPIDTPConly->SetPIDResponse(pidResponse);
+  fPIDTRDonly->SetPIDResponse(pidResponse);
+  fPIDTOFTPC->SetPIDResponse(pidResponse);
+  fPIDTPCTRD->SetPIDResponse(pidResponse);
+  fPIDTPCEMCal->SetPIDResponse(pidResponse);
+   
+  //////////////////
+  // Event cut
+  //////////////////
+  AliDebug(2,"Event cut");
+  if(!fHFECuts->CheckEventCuts("fEvRecCuts", fInputEvent)) {
+    AliDebug(2,"Does not pass the event cut");
+    PostData(1, fListHist);
+    return;
+  }
+  fNbEvent->Fill(binct);
+  
+  //////////////////////////
+  // Loop over track
+  //////////////////////////
+  Int_t nbtracks = fInputEvent->GetNumberOfTracks();
+  AliDebug(2,Form("Number of tracks %d",nbtracks));
+  for(Int_t k = 0; k < nbtracks; k++){
+      
+    AliVTrack *track = (AliVTrack *) fInputEvent->GetTrack(k);
+    if(!track) continue;
+    Double_t pt = track->Pt();     
+
+    AliDebug(2,"test 0\n");
+    
+    // RecKine: ITSTPC cuts  
+    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepRecKineITSTPC + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;
+    AliDebug(2,"test 1\n");
+
+    // RecPrim
+    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepRecPrim + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;
+    AliDebug(2,"test 2\n");
+
+    // HFEcuts: ITS layers cuts
+    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsITS + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;
+    AliDebug(2,"test 3\n");
+
+    // HFE cuts: TOF and mismatch flag
+    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsTOF + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;
+    AliDebug(2,"test 4\n");
+
+    // HFE cuts: TPC PID cleanup
+    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsTPC + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;
+    AliDebug(2,"test 5\n");
+
+    // HFEcuts: Nb of tracklets TRD0
+    if(!fHFECuts->CheckParticleCuts(AliHFEcuts::kStepHFEcutsTRD + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)) continue;
+    
+    AliDebug(2,"Survived");
+    
+
+    ////////////////////////
+    // Apply PID
+    ////////////////////////
+    AliHFEpidObject hfetrack;
+    if(!fAODAnalysis) hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
+    else hfetrack.SetAnalysisType(AliHFEpidObject::kAODanalysis);
+    hfetrack.SetRecTrack(track);
+    hfetrack.SetCentrality((Int_t)binct);
+    hfetrack.SetMulitplicity(ncontribVtx); // for correction
+    if(IsPbPb()) hfetrack.SetPbPb();
+    else{
+      if(IspPb()) hfetrack.SetpPb();
+      else {
+       hfetrack.SetPP();
+       //printf("pp\n");
+      }
+    }
+    AliDebug(2,Form("centrality %f and %d",binct,hfetrack.GetCentrality()));
+   
+    //printf("test 7\n");
+
+    // Complete PID TPC alone
+    if(fTPConlydo) {
+      if(fPIDTPConly->IsSelected(&hfetrack,0x0,"recTrackCont",0x0)) {
+       fTPConly->Fill(pt);
+      }
+    }
+    AliDebug(2,"TPC only PID\n");
+       
+    // Complete PID TRD alone
+    if(fTRDonlydo) {
+      if(fPIDTRDonly->IsSelected(&hfetrack,0x0,"recTrackCont",fPIDqaTRDonly)) {
+       AliDebug(2,"Passed TRD only PID\n");
+      }
+    }
+    AliDebug(2,"TRD only PID\n");
+           
+    
+    // Complete PID TPC TOF 
+    if(fTOFTPCdo) {
+      if(fPIDTOFTPC->IsSelected(&hfetrack,0x0,"recTrackCont",fPIDqaTOFTPC)) {
+       fTOFTPC->Fill(pt);
+      }
+    }
+    AliDebug(2,"TOF TPC PID\n");
+    
+    // Complete PID TPC TRD 
+    if(fTPCTRDdo) {
+      if(fPIDTPCTRD->IsSelected(&hfetrack,0x0,"recTrackCont",fPIDqaTPCTRD)) {
+       fTPCTRD->Fill(pt);
+      }
+    }
+    AliDebug(2,"TPC TRD PID\n");
+
+
+    if(fTPCEMCaldo) {
+      if(!fAODAnalysis) {
+       // Complete PID TPC TRD 
+       if(fPIDTPCEMCal->IsSelected(&hfetrack,0x0,"recTrackCont",fPIDqaTPCEMCal)) {
+         fTPCEMCal->Fill(pt);
+       }
+      }
+    }
+    AliDebug(2,"TPC EMCal PID\n");
+    
+    
+  }
+  
+  PostData(1, fListHist);
+  
+}