2 // Class to filter Aod tracks
6 #include "AliEmcalAodTrackFilterTask.h"
7 #include <TClonesArray.h>
9 #include <AliAODEvent.h>
10 #include <AliAODTrack.h>
11 #include <AliAnalysisManager.h>
12 #include <AliEMCALRecoUtils.h>
15 ClassImp(AliEmcalAodTrackFilterTask)
17 //________________________________________________________________________
18 AliEmcalAodTrackFilterTask::AliEmcalAodTrackFilterTask() :
19 AliAnalysisTaskSE("AliEmcalAodTrackFilterTask"),
20 fTracksOutName("PicoTracks"),
21 fTracksInName("tracks"),
23 fCutMaxFrShTPCClus(0),
24 fUseNegativeLabels(kTRUE),
26 fDoPropagation(kFALSE),
28 fAttemptPropMatch(kFALSE),
36 fAODfilterBits[0] = -1;
37 fAODfilterBits[1] = -1;
40 //________________________________________________________________________
41 AliEmcalAodTrackFilterTask::AliEmcalAodTrackFilterTask(const char *name) :
42 AliAnalysisTaskSE(name),
43 fTracksOutName("PicoTracks"),
44 fTracksInName("tracks"),
46 fCutMaxFrShTPCClus(0),
47 fUseNegativeLabels(kTRUE),
49 fDoPropagation(kFALSE),
51 fAttemptPropMatch(kFALSE),
59 fAODfilterBits[0] = -1;
60 fAODfilterBits[1] = -1;
61 fBranchNames = "AOD:tracks";
64 //________________________________________________________________________
65 AliEmcalAodTrackFilterTask::~AliEmcalAodTrackFilterTask()
70 //________________________________________________________________________
71 void AliEmcalAodTrackFilterTask::UserCreateOutputObjects()
73 // Create my user objects.
75 fTracksOut = new TClonesArray("AliAODTrack");
76 fTracksOut->SetName(fTracksOutName);
79 //________________________________________________________________________
80 void AliEmcalAodTrackFilterTask::UserExec(Option_t *)
82 // Main loop, called for each event.
84 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
86 AliError("Manager zero, returning");
90 // retrieve tracks from input.
92 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
94 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
97 if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
98 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data()));
103 // add tracks to event if not yet there
104 fTracksOut->Delete();
105 if (!(InputEvent()->FindListObject(fTracksOutName))) {
106 InputEvent()->AddObject(fTracksOut);
110 const Int_t Ntracks = fTracksIn->GetEntriesFast();
111 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
113 AliAODTrack *track = static_cast<AliAODTrack*>(fTracksIn->At(iTracks));
118 if (fAODfilterBits[0] < 0) {
119 if (track->IsHybridGlobalConstrainedGlobal())
121 else /*not a good track*/
124 if (track->TestFilterBit(fAODfilterBits[0])) {
126 } else if (track->TestFilterBit(fAODfilterBits[1])) {
127 if ((track->GetStatus()&AliVTrack::kITSrefit)==0) {
136 else {/*not a good track*/
141 if (fCutMaxFrShTPCClus > 0) {
142 Double_t frac = Double_t(track->GetTPCnclsS()) / Double_t(track->GetTPCncls());
143 if (frac > fCutMaxFrShTPCClus) {
148 if (fTrackEfficiency) {
149 Double_t r = gRandom->Rndm();
150 if (fTrackEfficiency->Eval(track->Pt()) < r)
154 AliAODTrack *newt = new ((*fTracksOut)[nacc]) AliAODTrack(*track);
155 newt->SetUniqueID(0);
156 newt->ResetBit(TObject::kHasUUID);
157 newt->ResetBit(TObject::kIsReferenced);
159 Bool_t propthistrack = kFALSE;
161 propthistrack = kTRUE;
162 else if (!newt->IsExtrapolatedToEMCAL()) {
164 propthistrack = kTRUE;
165 else if (fAttemptPropMatch && newt->IsEMCAL())
166 propthistrack = kTRUE;
169 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newt,fDist);
173 if (fUseNegativeLabels)
174 label = track->GetLabel();
176 label = TMath::Abs(track->GetLabel());
178 AliDebug(2,Form("Track %d with label==0", iTracks));
180 newt->SetLabel(label);
182 newt->SetBit(BIT(22),0);
183 newt->SetBit(BIT(23),0);
184 } else if (type==1) {
185 newt->SetBit(BIT(22),1);
186 newt->SetBit(BIT(23),0);
187 } else if (type==2) {
188 newt->SetBit(BIT(22),0);
189 newt->SetBit(BIT(23),1);
190 } else if (type==3) {
191 newt->SetBit(BIT(22),1);
192 newt->SetBit(BIT(23),1);