]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/EMCAL/AliAodTrackFilterTask.cxx
Renamed PWG/EMCAL/AliEmcalEsdTpcTrackTask.cxx -> PWG/EMCAL/AliEmcalEsdTrackFilterTask.cxx
[u/mrichter/AliRoot.git] / PWG / EMCAL / AliAodTrackFilterTask.cxx
CommitLineData
fb99243d
CL
1// $Id$
2//
3// Class to filter Aod tracks
4//
5// Author: C.Loizides
6
7#include <TClonesArray.h>
8#include <TRandom3.h>
9#include "AliAODEvent.h"
10#include "AliAODTrack.h"
11#include "AliAnalysisManager.h"
12#include "AliLog.h"
13#include "AliAodTrackFilterTask.h"
14
15ClassImp(AliAodTrackFilterTask)
16
17//________________________________________________________________________
18AliAodTrackFilterTask::AliAodTrackFilterTask() :
19 AliAnalysisTaskSE("AliAodTrackFilterTask"),
20 fTracksOutName("PicoTracks"),
21 fTracksInName("tracks"),
22 fMinTrackPt(0),
23 fMaxTrackPt(1000),
24 fMinTrackEta(-10),
25 fMaxTrackEta(10),
26 fMinTrackPhi(-10),
27 fMaxTrackPhi(10),
28 fTrackEfficiency(1),
29 fIncludeNoITS(kTRUE),
30 fUseNegativeLabels(kTRUE),
31 fIsMC(kFALSE),
32 fCutMaxFrShTPCClus(0.4),
33 fModifyTrack(kTRUE),
34 fTracksIn(0),
35 fTracksOut(0)
36{
37 // Constructor.
38
39 fAODfilterBits[0] = -1;
40 fAODfilterBits[1] = -1;
41}
42
43//________________________________________________________________________
44AliAodTrackFilterTask::AliAodTrackFilterTask(const char *name) :
45 AliAnalysisTaskSE(name),
46 fTracksOutName("PicoTracks"),
47 fTracksInName("tracks"),
48 fMinTrackPt(0),
49 fMaxTrackPt(1000),
50 fMinTrackEta(-10),
51 fMaxTrackEta(10),
52 fMinTrackPhi(-10),
53 fMaxTrackPhi(10),
54 fTrackEfficiency(1),
55 fIncludeNoITS(kTRUE),
56 fUseNegativeLabels(kTRUE),
57 fIsMC(kFALSE),
58 fCutMaxFrShTPCClus(0.4),
59 fModifyTrack(kTRUE),
60 fTracksIn(0),
61 fTracksOut(0)
62{
63 // Constructor.
64
65 fAODfilterBits[0] = -1;
66 fAODfilterBits[1] = -1;
67 fBranchNames = "AOD:tracks";
68}
69
70//________________________________________________________________________
71AliAodTrackFilterTask::~AliAodTrackFilterTask()
72{
73 // Destructor.
74}
75
76//________________________________________________________________________
77void AliAodTrackFilterTask::UserCreateOutputObjects()
78{
79 // Create my user objects.
80
81 fTracksOut = new TClonesArray("AliAODTrack");
82 fTracksOut->SetOwner(kFALSE);
83 fTracksOut->SetName(fTracksOutName);
84}
85
86//________________________________________________________________________
87void AliAodTrackFilterTask::UserExec(Option_t *)
88{
89 // Main loop, called for each event.
90
91 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
92 if (!am) {
93 AliError("Manager zero, returning");
94 return;
95 }
96
97 // retrieve tracks from input.
98 if (!fTracksIn) {
99 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
100 if (!fTracksIn) {
101 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
102 return;
103 }
104 if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
105 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data()));
106 return;
107 }
108 }
109
110 // add tracks to event if not yet there
111 fTracksOut->Delete();
112 if (!(InputEvent()->FindListObject(fTracksOutName))) {
113 InputEvent()->AddObject(fTracksOut);
114 }
115
116 // loop over tracks
117 const Int_t Ntracks = fTracksIn->GetEntriesFast();
118 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
119
120 AliAODTrack *track = static_cast<AliAODTrack*>(fTracksIn->At(iTracks));
121
122 if (!track)
123 continue;
124
125 if (track->Pt() > fMaxTrackPt || track->Pt() < fMinTrackPt)
126 continue;
127
128 if (track->Eta() < fMinTrackEta || track->Eta() > fMaxTrackEta ||
129 track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi)
130 continue;
131
132 Bool_t isEmc = kFALSE;
133 Int_t type = -1;
134
135 if (fAODfilterBits[0] < 0) {
136 if (track->IsHybridGlobalConstrainedGlobal())
137 type = 3;
138 else /*not a good track*/
139 continue;
140 } else {
141 if (track->TestFilterBit(fAODfilterBits[0])) {
142 type = 0;
143 } else if (track->TestFilterBit(fAODfilterBits[1])) {
144 if ((track->GetStatus()&AliVTrack::kITSrefit)==0) {
145 if (fIncludeNoITS)
146 type = 2;
147 else
148 continue;
149 } else {
150 type = 1;
151 }
152 }
153 else {/*not a good track*/
154 continue;
155 }
156 }
157 if (fCutMaxFrShTPCClus > 0) {
158 Double_t frac = Double_t(track->GetTPCnclsS()) / Double_t(track->GetTPCncls());
159 if (frac > fCutMaxFrShTPCClus)
160 continue;
161 }
162 if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 &&
163 track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() &&
164 track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad()) {
165 isEmc = kTRUE;
166 }
167
168 if (fTrackEfficiency < 1) {
169 Double_t r = gRandom->Rndm();
170 if (fTrackEfficiency < r)
171 continue;
172 }
173
174 Int_t label = 0;
175 if (fIsMC) {
176 if (fUseNegativeLabels)
177 label = track->GetLabel();
178 else
179 label = TMath::Abs(track->GetLabel());
180
181 if (label == 0)
182 AliDebug(2,Form("Track %d with label==0", iTracks));
183 }
184
185 AliAODTrack *newt = new ((*fTracksOut)[nacc]) AliAODTrack(*track);
186 if (fModifyTrack) {
187 newt->SetLabel(label);
188 newt->SetType((AliAODTrack::AODTrk_t)type);
189 if (isEmc)
190 newt->SetStatus(AliVTrack::kEMCALmatch);
191 else
192 newt->ResetStatus(AliVTrack::kEMCALmatch);
193 }
194 ++nacc;
195 }
196}