]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/EMCALTasks/AliEmcalPicoTrackMaker.cxx
changes submitted by user saiola
[u/mrichter/AliRoot.git] / PWGGA / EMCALTasks / AliEmcalPicoTrackMaker.cxx
1 // $Id$
2 //
3 // Class to make PicoTracks in AOD/ESD events.
4 //
5 // Author: S.Aiola, C.Loizides
6
7 #include <TClonesArray.h>
8 #include "AliAODEvent.h"
9 #include "AliAODTrack.h"
10 #include "AliAnalysisManager.h"
11 #include "AliESDtrack.h"
12 #include "AliESDtrackCuts.h"
13 #include "AliLog.h"
14 #include "AliPicoTrack.h"
15 #include "AliVTrack.h"
16 #include "AliEmcalPicoTrackMaker.h"
17
18 ClassImp(AliEmcalPicoTrackMaker)
19
20 //________________________________________________________________________
21 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() : 
22   AliAnalysisTaskSE("AliEmcalPicoTrackMaker"),
23   fESDtrackCuts(0),
24   fTracksOutName("PicoTracks"),
25   fTracksInName("tracks"),
26   fMaxTrackPt(100),
27   fTracksIn(0),
28   fTracksOut(0)
29 {
30   // Constructor.
31
32   fAODfilterBits[0] = 0;
33   fAODfilterBits[1] = 0;
34 }
35
36 //________________________________________________________________________
37 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) : 
38   AliAnalysisTaskSE(name),
39   fESDtrackCuts(0),
40   fTracksOutName("PicoTracks"),
41   fTracksInName("tracks"),
42   fMaxTrackPt(100),
43   fTracksIn(0),
44   fTracksOut(0)
45 {
46   // Constructor.
47
48   fAODfilterBits[0] = 0;
49   fAODfilterBits[1] = 0;
50   fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
51 }
52
53 //________________________________________________________________________
54 AliEmcalPicoTrackMaker::~AliEmcalPicoTrackMaker()
55 {
56   // Destructor.
57 }
58
59 //________________________________________________________________________
60 void AliEmcalPicoTrackMaker::UserCreateOutputObjects()
61 {
62   // Create my user objects.
63
64   fTracksOut = new TClonesArray("AliPicoTrack");
65   fTracksOut->SetName(fTracksOutName);
66 }
67
68 //________________________________________________________________________
69 void AliEmcalPicoTrackMaker::UserExec(Option_t *) 
70 {
71   // Main loop, called for each event.
72
73   AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
74   if (!am) {
75     AliError("Manager zero, returning");
76     return;
77   }
78
79   // retrieve tracks from input.
80   if (!fTracksIn) { 
81     fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
82     if (!fTracksIn) {
83       AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data())); 
84       return;
85     }
86     if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
87       AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data())); 
88       return;
89     }
90   }
91
92   // add tracks to event if not yet there
93   if (!(InputEvent()->FindListObject(fTracksOutName))) {
94     InputEvent()->AddObject(fTracksOut);
95   }
96
97   // clear container (normally a null operation as the event should clean it already)
98   fTracksOut->Clear();
99
100   // test if we are in ESD or AOD mode
101   Bool_t esdMode = kTRUE;
102   if (dynamic_cast<AliAODEvent*>(InputEvent())!=0)
103     esdMode = kFALSE;
104  
105   // loop over tracks
106   const Int_t Ntracks = fTracksIn->GetEntriesFast();
107   for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
108
109     AliVTrack *track = static_cast<AliVTrack*>(fTracksIn->At(iTracks));
110
111     if (!track)
112       continue;
113
114     if (track->Pt() > fMaxTrackPt)
115       continue;
116     Bool_t isEmc = kFALSE;
117     Int_t label = -1;
118     if (esdMode) {
119       if (fESDtrackCuts) {
120         AliESDtrack *esdtrack = static_cast<AliESDtrack*>(track);
121         if (!fESDtrackCuts->AcceptTrack(esdtrack))
122           continue;
123       }
124       label = track->GetLabel();
125       isEmc = track->IsEMCAL();
126     } else {
127       AliAODTrack *aodtrack = static_cast<AliAODTrack*>(track);
128       if (aodtrack->TestFilterBit(fAODfilterBits[0]))
129         label = 0;
130       else if (aodtrack->TestFilterBit(fAODfilterBits[1]))
131         label = 3;
132       else /*not a good track*/
133         continue;
134
135       if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 && 
136           track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() && 
137           track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad())
138         isEmc = kTRUE;
139     }
140
141     
142     /*AliPicoTrack *picotrack =*/ new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(), 
143                                                                      track->Eta(), 
144                                                                      track->Phi(), 
145                                                                      track->Charge(), 
146                                                                      label, 
147                                                                      track->GetTrackEtaOnEMCal(), 
148                                                                      track->GetTrackPhiOnEMCal(), 
149                                                                      isEmc);
150     ++nacc;
151   }
152 }