1 // $Id: AliEmcalAodTrackFilterTask.cxx | Fri Dec 6 10:29:20 2013 +0100 | Constantin Loizides $
3 // Class to filter Aod tracks
7 #include <TClonesArray.h>
9 #include <AliAODEvent.h>
10 #include <AliAODTrack.h>
11 #include <AliAnalysisManager.h>
13 #include <AliEMCALRecoUtils.h>
14 #include "AliEmcalAodTrackFilterTask.h"
16 ClassImp(AliEmcalAodTrackFilterTask)
18 //________________________________________________________________________
19 AliEmcalAodTrackFilterTask::AliEmcalAodTrackFilterTask() :
20 AliAnalysisTaskSE("AliEmcalAodTrackFilterTask"),
21 fTracksOutName("PicoTracks"),
22 fTracksInName("tracks"),
31 fUseNegativeLabels(kTRUE),
33 fCutMaxFrShTPCClus(0.4),
35 fDoPropagation(kFALSE),
42 fAODfilterBits[0] = -1;
43 fAODfilterBits[1] = -1;
46 //________________________________________________________________________
47 AliEmcalAodTrackFilterTask::AliEmcalAodTrackFilterTask(const char *name) :
48 AliAnalysisTaskSE(name),
49 fTracksOutName("PicoTracks"),
50 fTracksInName("tracks"),
59 fUseNegativeLabels(kTRUE),
61 fCutMaxFrShTPCClus(0.4),
63 fDoPropagation(kFALSE),
70 fAODfilterBits[0] = -1;
71 fAODfilterBits[1] = -1;
72 fBranchNames = "AOD:tracks";
75 //________________________________________________________________________
76 AliEmcalAodTrackFilterTask::~AliEmcalAodTrackFilterTask()
81 //________________________________________________________________________
82 void AliEmcalAodTrackFilterTask::UserCreateOutputObjects()
84 // Create my user objects.
86 fTracksOut = new TClonesArray("AliAODTrack");
87 fTracksOut->SetName(fTracksOutName);
90 //________________________________________________________________________
91 void AliEmcalAodTrackFilterTask::UserExec(Option_t *)
93 // Main loop, called for each event.
95 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
97 AliError("Manager zero, returning");
101 // retrieve tracks from input.
103 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
105 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
108 if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
109 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data()));
114 // add tracks to event if not yet there
115 fTracksOut->Delete();
116 if (!(InputEvent()->FindListObject(fTracksOutName))) {
117 InputEvent()->AddObject(fTracksOut);
121 const Int_t Ntracks = fTracksIn->GetEntriesFast();
122 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
124 AliAODTrack *track = static_cast<AliAODTrack*>(fTracksIn->At(iTracks));
129 if (track->Pt() > fMaxTrackPt || track->Pt() < fMinTrackPt)
132 if (track->Eta() < fMinTrackEta || track->Eta() > fMaxTrackEta ||
133 track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi)
136 Bool_t isEmc = kFALSE;
139 if (fAODfilterBits[0] < 0) {
140 if (track->IsHybridGlobalConstrainedGlobal())
142 else /*not a good track*/
145 if (track->TestFilterBit(fAODfilterBits[0])) {
147 } else if (track->TestFilterBit(fAODfilterBits[1])) {
148 if ((track->GetStatus()&AliVTrack::kITSrefit)==0) {
157 else {/*not a good track*/
162 if (fCutMaxFrShTPCClus > 0) {
163 Double_t frac = Double_t(track->GetTPCnclsS()) / Double_t(track->GetTPCncls());
164 if (frac > fCutMaxFrShTPCClus)
168 if (fTrackEfficiency < 1) {
169 Double_t r = gRandom->Rndm();
170 if (fTrackEfficiency < r)
176 if (fUseNegativeLabels)
177 label = track->GetLabel();
179 label = TMath::Abs(track->GetLabel());
182 AliDebug(2,Form("Track %d with label==0", iTracks));
185 AliAODTrack *newt = new ((*fTracksOut)[nacc]) AliAODTrack(*track);
187 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newt,fDist);
190 newt->SetLabel(label);
191 //newt->SetType((AliAODTrack::AODTrk_t)type);
193 // newt->SetStatus(AliVTrack::kEMCALmatch);
195 // newt->ResetStatus(AliVTrack::kEMCALmatch);