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"
19 ClassImp(AliEmcalPicoTrackMaker)
21 //________________________________________________________________________
22 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() :
23 AliAnalysisTaskSE("AliEmcalPicoTrackMaker"),
24 fTracksOutName("PicoTracks"),
25 fTracksInName("tracks"),
38 fAODfilterBits[0] = -1;
39 fAODfilterBits[1] = -1;
42 //________________________________________________________________________
43 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) :
44 AliAnalysisTaskSE(name),
45 fTracksOutName("PicoTracks"),
46 fTracksInName("tracks"),
59 fAODfilterBits[0] = -1;
60 fAODfilterBits[1] = -1;
61 fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
64 //________________________________________________________________________
65 AliEmcalPicoTrackMaker::~AliEmcalPicoTrackMaker()
70 //________________________________________________________________________
71 void AliEmcalPicoTrackMaker::UserCreateOutputObjects()
73 // Create my user objects.
75 fTracksOut = new TClonesArray("AliPicoTrack");
76 fTracksOut->SetName(fTracksOutName);
79 //________________________________________________________________________
80 void AliEmcalPicoTrackMaker::UserExec(Option_t *)
82 // Main loop, called for each event.
84 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
86 AliError("Manager zero, returning");
90 // retrieve tracks from input.
92 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
94 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
97 if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
98 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data()));
103 // add tracks to event if not yet there
104 fTracksOut->Delete();
105 if (!(InputEvent()->FindListObject(fTracksOutName))) {
106 InputEvent()->AddObject(fTracksOut);
110 const Int_t Ntracks = fTracksIn->GetEntriesFast();
111 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
113 AliVTrack *track = static_cast<AliVTrack*>(fTracksIn->At(iTracks));
118 if (track->Pt() > fMaxTrackPt || track->Pt() < fMinTrackPt)
121 if (track->Eta() < fMinTrackEta || track->Eta() > fMaxTrackEta ||
122 track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi)
125 if (fTrackEfficiency < 1) {
126 Double_t r = gRandom->Rndm();
127 if (fTrackEfficiency < r)
131 Bool_t isEmc = kFALSE;
132 if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 &&
133 track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() &&
134 track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad())
137 AliPicoTrack *picotrack = new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(),
142 AliPicoTrack::GetTrackType(track),
143 track->GetTrackEtaOnEMCal(),
144 track->GetTrackPhiOnEMCal(),
145 track->GetTrackPtOnEMCal(),
147 picotrack->SetTrack(track);