-/**************************************************************************\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);
+
+}