]>
Commit | Line | Data |
---|---|---|
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 | 16 | ClassImp(AliEmcalAodTrackFilterTask) |
fb99243d CL |
17 | |
18 | //________________________________________________________________________ | |
fe75ca27 CL |
19 | AliEmcalAodTrackFilterTask::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 | 42 | AliEmcalAodTrackFilterTask::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 | 66 | AliEmcalAodTrackFilterTask::~AliEmcalAodTrackFilterTask() |
fb99243d CL |
67 | { |
68 | // Destructor. | |
69 | } | |
70 | ||
71 | //________________________________________________________________________ | |
fe75ca27 | 72 | void 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 | 81 | void 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 | } |