15 #include <TClonesArray.h>
21 #include "AliAnalysisUtils.h"
22 #include "AliAODMCParticle.h"
24 #include "AliGenPythiaEventHeader.h"
26 #include "AliMCEvent.h"
27 #include "AliMCParticle.h"
29 #include "AliVEvent.h"
30 #include "AliVParticle.h"
31 #include "AliVTrack.h"
32 #include "AliVVertex.h"
39 namespace EMCalTriggerPtAnalysis {
41 AliAnalysisTaskPtEfficiencyJets::AliAnalysisTaskPtEfficiencyJets() :
50 AliAnalysisTaskPtEfficiencyJets::AliAnalysisTaskPtEfficiencyJets(
const char *name) :
57 fAnalysisUtils =
new AliAnalysisUtils();
58 SetMakeGeneralHistograms(kTRUE);
61 AliAnalysisTaskPtEfficiencyJets::~AliAnalysisTaskPtEfficiencyJets() {
62 if(fAnalysisUtils)
delete fAnalysisUtils;
63 if(fTrackCuts)
delete fTrackCuts;
64 if(fTrackNtuple)
delete fTrackNtuple;
67 void AliAnalysisTaskPtEfficiencyJets::UserCreateOutputObjects() {
70 fTrackNtuple =
new TNtuple(
"tracktuple",
"track tuple",
"partpt:trackpt:jetpt:pthard:parteta:partphi:tracketa:trackphi:vertexz");
71 fOutput->Add(fTrackNtuple);
75 Bool_t AliAnalysisTaskPtEfficiencyJets::Run() {
77 if(!fAnalysisUtils->IsVertexSelected2013pA(fInputEvent))
return kFALSE;
78 const AliVVertex *primvertex = fInputEvent->GetPrimaryVertex();
81 AliGenPythiaEventHeader *evheader =
dynamic_cast<AliGenPythiaEventHeader *
>(fMCEvent->GenEventHeader());
82 if(evheader) pthard = evheader->GetPtHard();
85 if(!jcmc)
return kFALSE;
88 for(TIter partIter = TIter(particleArray).Begin(); partIter != TIter::End(); ++partIter){
89 AliVParticle *part =
static_cast<AliVParticle *
>(*partIter);
90 if(!SelectTrueParticle(part))
continue;
91 AliVTrack *reconstructed = FindAssociatedTrack(part);
103 Float_t data[] = {(
Float_t)TMath::Abs(part->Pt()), reconstructed ? static_cast<Float_t>(TMath::Abs(reconstructed->Pt())) : 0,
104 jet ?
static_cast<Float_t>(TMath::Abs(jet->
Pt())) : 0, pthard, (
Float_t)part->Eta(), (
Float_t)part->Phi(),
static_cast<Float_t>(reconstructed ? reconstructed->Eta() : -1000.),
105 static_cast<Float_t>(reconstructed ? reconstructed->Phi() : -1000.),
static_cast<Float_t>(primvertex ? primvertex->GetZ() : -1000.)
107 fTrackNtuple->Fill(data);
109 PostData(1, fOutput);
113 AliVTrack* AliAnalysisTaskPtEfficiencyJets::FindAssociatedTrack(AliVParticle* trueParticle) {
114 AliVTrack *result = NULL, *tmp = NULL;
115 for(
int itrk = 0; itrk < fInputEvent->GetNumberOfTracks(); itrk++){
116 AliVTrack *trk =
static_cast<AliVTrack *
>(fInputEvent->GetTrack(itrk));
117 if(TMath::Abs(trk->GetLabel()) != TMath::Abs(trueParticle->GetLabel()))
continue;
118 if(!fTrackCuts->IsTrackAccepted(trk))
continue;
127 for(
int ijet = 0; ijet < jets->
GetNJets(); ijet++){
137 bool AliAnalysisTaskPtEfficiencyJets::SelectTrueParticle(AliVParticle* part) {
138 if(part->IsA() == AliAODMCParticle::Class()){
139 AliAODMCParticle *aodpart =
static_cast<AliAODMCParticle *
>(part);
140 if(!aodpart->IsPhysicalPrimary())
return kFALSE;
141 if(!aodpart->Charge())
return kFALSE;
142 if(TMath::Abs(aodpart->Eta()) > 0.8)
return kFALSE;
143 if(TMath::Abs(aodpart->Pt()) < 5.)
return kFALSE;
146 AliMCParticle *esdpart =
static_cast<AliMCParticle *
>(part);
147 if(!fMCEvent->IsPhysicalPrimary(esdpart->GetLabel()))
return kFALSE;
148 if(!esdpart->Charge())
return kFALSE;
149 if(TMath::Abs(esdpart->Eta()) > 0.8)
return kFALSE;
150 if(TMath::Abs(esdpart->Pt()) < 5.)
return kFALSE;
AliParticleContainer * GetParticleContainer() const
Int_t ContainsTrack(AliVParticle *track, TClonesArray *tracks) const
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
void UserCreateOutputObjects()
ClassImp(EMCalTriggerPtAnalysis::AliAnalysisTaskPtEfficiencyJets) namespace EMCalTriggerPtAnalysis
Container for jet within the EMCAL jet framework.
TList * OpenFile(const char *fname)
AliEmcalJet * GetJet(Int_t i) const