3 // Class to make PicoTracks in AOD/ESD events.
5 // Author: S.Aiola, C.Loizides
7 #include <TClonesArray.h>
9 #include "AliAODEvent.h"
10 #include "AliAODTrack.h"
11 #include "AliAnalysisManager.h"
12 #include "AliESDtrack.h"
13 #include "AliESDtrackCuts.h"
14 #include "AliEmcalPicoTrackMaker.h"
16 #include "AliPicoTrack.h"
17 #include "AliVTrack.h"
18 #include "AliAODMCParticle.h"
19 #include "AliNamedArrayI.h"
21 ClassImp(AliEmcalPicoTrackMaker)
23 //________________________________________________________________________
24 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() :
25 AliAnalysisTaskSE("AliEmcalPicoTrackMaker"),
26 fTracksOutName("PicoTracks"),
27 fTracksInName("tracks"),
28 fMCParticlesName("mcparticles"),
45 fAODfilterBits[0] = -1;
46 fAODfilterBits[1] = -1;
49 //________________________________________________________________________
50 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) :
51 AliAnalysisTaskSE(name),
52 fTracksOutName("PicoTracks"),
53 fTracksInName("tracks"),
54 fMCParticlesName("mcparticles"),
71 fAODfilterBits[0] = -1;
72 fAODfilterBits[1] = -1;
73 fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
76 //________________________________________________________________________
77 AliEmcalPicoTrackMaker::~AliEmcalPicoTrackMaker()
82 //________________________________________________________________________
83 void AliEmcalPicoTrackMaker::UserCreateOutputObjects()
85 // Create my user objects.
88 //________________________________________________________________________
89 void AliEmcalPicoTrackMaker::UserExec(Option_t *)
91 // Main loop, called for each event.
94 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
96 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
99 if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
100 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data()));
104 fTracksOut = new TClonesArray("AliPicoTrack");
105 fTracksOut->SetName(fTracksOutName);
107 // add tracks to event if not yet there
108 if (InputEvent()->FindListObject(fTracksOutName)) {
109 AliFatal(Form("Object %s already present in the event!",fTracksOutName.Data()));
112 InputEvent()->AddObject(fTracksOut);
116 fMCParticles = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fMCParticlesName));
118 AliError(Form("Could not retrieve MC particles %s!", fMCParticlesName.Data()));
120 if (!fMCParticles->GetClass()->GetBaseClass("AliVParticle")) {
121 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fMCParticlesName.Data()));
125 TString mapName(fMCParticlesName);
127 fMCParticlesMap = dynamic_cast<AliNamedArrayI*>(InputEvent()->FindListObject(mapName));
133 fTracksOut->Delete();
136 const Int_t Ntracks = fTracksIn->GetEntriesFast();
137 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
139 AliVTrack *track = static_cast<AliVTrack*>(fTracksIn->At(iTracks));
144 if (track->Pt() > fMaxTrackPt || track->Pt() < fMinTrackPt)
147 if (track->Eta() < fMinTrackEta || track->Eta() > fMaxTrackEta ||
148 track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi)
151 if (fTrackEfficiency < 1) {
152 Double_t r = gRandom->Rndm();
153 if (fTrackEfficiency < r)
157 Bool_t isEmc = kFALSE;
158 if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 &&
159 track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() &&
160 track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad())
163 AliPicoTrack *picotrack = new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(),
168 AliPicoTrack::GetTrackType(track),
169 track->GetTrackEtaOnEMCal(),
170 track->GetTrackPhiOnEMCal(),
171 track->GetTrackPtOnEMCal(),
173 picotrack->SetTrack(track);
175 if (fCopyMCFlag && track->GetLabel() != 0) {
176 AliVParticle *mcpart = GetMCParticle(TMath::Abs(track->GetLabel()));
178 UInt_t mcFlag = mcpart->GetFlag();
179 picotrack->SetFlag(mcFlag);
180 Short_t genIndex = mcpart->GetGeneratorIndex();
181 picotrack->SetGeneratorIndex(genIndex);
189 //________________________________________________________________________
190 AliVParticle* AliEmcalPicoTrackMaker::GetMCParticle(Int_t label)
192 if (!fMCParticles) return 0;
194 if (fMCParticlesMap) index = fMCParticlesMap->At(label);
195 if (index < 0 || index >= fMCParticles->GetEntriesFast()) return 0;
196 AliVParticle *part = static_cast<AliVParticle*>(fMCParticles->At(index));