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