1 // $Id: AliEmcalAodTrackFilterTask.cxx | Fri Dec 6 10:29:20 2013 +0100 | Constantin Loizides $
3 // Class to filter Aod tracks
7 #include "AliEmcalAodTrackFilterTask.h"
8 #include <TClonesArray.h>
10 #include <AliAODEvent.h>
11 #include <AliAODTrack.h>
12 #include <AliAnalysisManager.h>
13 #include <AliEMCALRecoUtils.h>
16 ClassImp(AliEmcalAodTrackFilterTask)
18 //________________________________________________________________________
19 AliEmcalAodTrackFilterTask::AliEmcalAodTrackFilterTask() :
20 AliAnalysisTaskSE("AliEmcalAodTrackFilterTask"),
21 fTracksOutName("PicoTracks"),
22 fTracksInName("tracks"),
24 fCutMaxFrShTPCClus(0.4),
25 fUseNegativeLabels(kTRUE),
27 fDoPropagation(kFALSE),
34 fAODfilterBits[0] = -1;
35 fAODfilterBits[1] = -1;
38 //________________________________________________________________________
39 AliEmcalAodTrackFilterTask::AliEmcalAodTrackFilterTask(const char *name) :
40 AliAnalysisTaskSE(name),
41 fTracksOutName("PicoTracks"),
42 fTracksInName("tracks"),
44 fCutMaxFrShTPCClus(0.4),
45 fUseNegativeLabels(kTRUE),
47 fDoPropagation(kFALSE),
54 fAODfilterBits[0] = -1;
55 fAODfilterBits[1] = -1;
56 fBranchNames = "AOD:tracks";
59 //________________________________________________________________________
60 AliEmcalAodTrackFilterTask::~AliEmcalAodTrackFilterTask()
65 //________________________________________________________________________
66 void AliEmcalAodTrackFilterTask::UserCreateOutputObjects()
68 // Create my user objects.
70 fTracksOut = new TClonesArray("AliAODTrack");
71 fTracksOut->SetName(fTracksOutName);
74 //________________________________________________________________________
75 void AliEmcalAodTrackFilterTask::UserExec(Option_t *)
77 // Main loop, called for each event.
79 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
81 AliError("Manager zero, returning");
85 // retrieve tracks from input.
87 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
89 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
92 if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
93 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data()));
98 // add tracks to event if not yet there
100 if (!(InputEvent()->FindListObject(fTracksOutName))) {
101 InputEvent()->AddObject(fTracksOut);
105 const Int_t Ntracks = fTracksIn->GetEntriesFast();
106 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
108 AliAODTrack *track = static_cast<AliAODTrack*>(fTracksIn->At(iTracks));
113 if (fAODfilterBits[0] < 0) {
114 if (track->IsHybridGlobalConstrainedGlobal())
116 else /*not a good track*/
119 if (track->TestFilterBit(fAODfilterBits[0])) {
121 } else if (track->TestFilterBit(fAODfilterBits[1])) {
122 if ((track->GetStatus()&AliVTrack::kITSrefit)==0) {
131 else {/*not a good track*/
136 if (fCutMaxFrShTPCClus > 0) {
137 Double_t frac = Double_t(track->GetTPCnclsS()) / Double_t(track->GetTPCncls());
138 if (frac > fCutMaxFrShTPCClus)
142 AliAODTrack *newt = new ((*fTracksOut)[nacc]) AliAODTrack(*track);
144 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newt,fDist);
147 if (fUseNegativeLabels)
148 label = track->GetLabel();
150 label = TMath::Abs(track->GetLabel());
152 AliDebug(2,Form("Track %d with label==0", iTracks));
155 newt->SetBit(BIT(22),0);
156 newt->SetBit(BIT(23),0);
157 } else if (type==1) {
158 newt->SetBit(BIT(22),1);
159 newt->SetBit(BIT(23),0);
160 } else if (type==2) {
161 newt->SetBit(BIT(22),0);
162 newt->SetBit(BIT(23),1);
163 } else if (type==3) {
164 newt->SetBit(BIT(22),1);
165 newt->SetBit(BIT(23),1);