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),
25 fUseNegativeLabels(kTRUE),
27 fDoPropagation(kFALSE),
29 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),
58 fAODfilterBits[0] = -1;
59 fAODfilterBits[1] = -1;
60 fBranchNames = "AOD:tracks";
63 //________________________________________________________________________
64 AliEmcalAodTrackFilterTask::~AliEmcalAodTrackFilterTask()
69 //________________________________________________________________________
70 void AliEmcalAodTrackFilterTask::UserCreateOutputObjects()
72 // Create my user objects.
74 fTracksOut = new TClonesArray("AliAODTrack");
75 fTracksOut->SetName(fTracksOutName);
78 //________________________________________________________________________
79 void AliEmcalAodTrackFilterTask::UserExec(Option_t *)
81 // Main loop, called for each event.
83 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
85 AliError("Manager zero, returning");
89 // retrieve tracks from input.
91 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
93 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
96 if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
97 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data()));
102 // add tracks to event if not yet there
103 fTracksOut->Delete();
104 if (!(InputEvent()->FindListObject(fTracksOutName))) {
105 InputEvent()->AddObject(fTracksOut);
109 const Int_t Ntracks = fTracksIn->GetEntriesFast();
110 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
112 AliAODTrack *track = static_cast<AliAODTrack*>(fTracksIn->At(iTracks));
117 if (fAODfilterBits[0] < 0) {
118 if (track->IsHybridGlobalConstrainedGlobal())
120 else /*not a good track*/
123 if (track->TestFilterBit(fAODfilterBits[0])) {
125 } else if (track->TestFilterBit(fAODfilterBits[1])) {
126 if ((track->GetStatus()&AliVTrack::kITSrefit)==0) {
135 else {/*not a good track*/
140 if (fCutMaxFrShTPCClus > 0) {
141 Double_t frac = Double_t(track->GetTPCnclsS()) / Double_t(track->GetTPCncls());
142 if (frac > fCutMaxFrShTPCClus) {
147 AliAODTrack *newt = new ((*fTracksOut)[nacc]) AliAODTrack(*track);
148 Bool_t propthistrack = kFALSE;
150 propthistrack = kTRUE;
151 else if (!newt->IsExtrapolatedToEMCAL()) {
153 propthistrack = kTRUE;
154 else if (fAttemptPropMatch && !newt->IsEMCAL())
155 propthistrack = kTRUE;
158 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newt,fDist);
162 if (fUseNegativeLabels)
163 label = track->GetLabel();
165 label = TMath::Abs(track->GetLabel());
167 AliDebug(2,Form("Track %d with label==0", iTracks));
170 newt->SetBit(BIT(22),0);
171 newt->SetBit(BIT(23),0);
172 } else if (type==1) {
173 newt->SetBit(BIT(22),1);
174 newt->SetBit(BIT(23),0);
175 } else if (type==2) {
176 newt->SetBit(BIT(22),0);
177 newt->SetBit(BIT(23),1);
178 } else if (type==3) {
179 newt->SetBit(BIT(22),1);
180 newt->SetBit(BIT(23),1);