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