3 // Class to make PicoTracks in AOD/ESD events.
5 // Author: S.Aiola, C.Loizides
7 #include <TClonesArray.h>
8 #include "AliAODEvent.h"
9 #include "AliAODTrack.h"
10 #include "AliAnalysisManager.h"
11 #include "AliESDtrack.h"
12 #include "AliESDtrackCuts.h"
14 #include "AliPicoTrack.h"
15 #include "AliVTrack.h"
16 #include "AliEmcalPicoTrackMaker.h"
18 ClassImp(AliEmcalPicoTrackMaker)
20 //________________________________________________________________________
21 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() :
22 AliAnalysisTaskSE("AliEmcalPicoTrackMaker"),
24 fTracksOutName("PicoTracks"),
25 fTracksInName("tracks"),
32 fAODfilterBits[0] = 0;
33 fAODfilterBits[1] = 0;
36 //________________________________________________________________________
37 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) :
38 AliAnalysisTaskSE(name),
40 fTracksOutName("PicoTracks"),
41 fTracksInName("tracks"),
48 fAODfilterBits[0] = 0;
49 fAODfilterBits[1] = 0;
50 fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
53 //________________________________________________________________________
54 AliEmcalPicoTrackMaker::~AliEmcalPicoTrackMaker()
59 //________________________________________________________________________
60 void AliEmcalPicoTrackMaker::UserCreateOutputObjects()
62 // Create my user objects.
64 fTracksOut = new TClonesArray("AliPicoTrack");
65 fTracksOut->SetName(fTracksOutName);
68 //________________________________________________________________________
69 void AliEmcalPicoTrackMaker::UserExec(Option_t *)
71 // Main loop, called for each event.
73 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
75 AliError("Manager zero, returning");
79 // retrieve tracks from input.
80 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
82 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
86 // add tracks to event if not yet there
87 if (!(InputEvent()->FindListObject(fTracksOutName))) {
88 InputEvent()->AddObject(fTracksOut);
91 // clear container (normally a null operation as the event should clean it already)
94 // test if we are in ESD or AOD mode
95 Bool_t esdMode = kTRUE;
96 if (dynamic_cast<AliAODEvent*>(InputEvent())!=0)
100 const Int_t Ntracks = fTracksIn->GetEntriesFast();
101 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
103 AliVTrack *track = dynamic_cast<AliVTrack*>(fTracksIn->At(iTracks));
108 if (track->Pt() > fMaxTrackPt)
110 Bool_t isEmc = kFALSE;
114 AliESDtrack *esdtrack = static_cast<AliESDtrack*>(track);
115 if (!fESDtrackCuts->AcceptTrack(esdtrack))
118 label = track->GetLabel();
119 isEmc = track->IsEMCAL();
121 AliAODTrack *aodtrack = static_cast<AliAODTrack*>(track);
122 if (aodtrack->TestFilterBit(fAODfilterBits[0]))
124 else if (aodtrack->TestFilterBit(fAODfilterBits[1]))
126 else /*not a good track*/
129 if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 &&
130 track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() &&
131 track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad())
136 /*AliPicoTrack *picotrack =*/ new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(),
141 track->GetTrackEtaOnEMCal(),
142 track->GetTrackPhiOnEMCal(),