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),
37 fAODfilterBits[0] = -1;
38 fAODfilterBits[1] = -1;
41 //________________________________________________________________________
42 AliEmcalAodTrackFilterTask::AliEmcalAodTrackFilterTask(const char *name) :
43 AliAnalysisTaskSE(name),
44 fTracksOutName("PicoTracks"),
45 fTracksInName("tracks"),
47 fCutMaxFrShTPCClus(0),
48 fUseNegativeLabels(kTRUE),
50 fDoPropagation(kFALSE),
52 fAttemptPropMatch(kFALSE),
60 fAODfilterBits[0] = -1;
61 fAODfilterBits[1] = -1;
62 fBranchNames = "AOD:tracks";
65 //________________________________________________________________________
66 AliEmcalAodTrackFilterTask::~AliEmcalAodTrackFilterTask()
71 //________________________________________________________________________
72 void AliEmcalAodTrackFilterTask::UserCreateOutputObjects()
74 // Create my user objects.
76 fTracksOut = new TClonesArray("AliAODTrack");
77 fTracksOut->SetName(fTracksOutName);
80 //________________________________________________________________________
81 void AliEmcalAodTrackFilterTask::UserExec(Option_t *)
83 // Main loop, called for each event.
85 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
87 AliError("Manager zero, returning");
91 // retrieve tracks from input.
93 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
95 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
98 if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
99 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data()));
104 // add tracks to event if not yet there
105 fTracksOut->Delete();
106 if (!(InputEvent()->FindListObject(fTracksOutName))) {
107 InputEvent()->AddObject(fTracksOut);
111 const Int_t Ntracks = fTracksIn->GetEntriesFast();
112 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
114 AliAODTrack *track = static_cast<AliAODTrack*>(fTracksIn->At(iTracks));
119 if (fAODfilterBits[0] < 0) {
120 if (track->IsHybridGlobalConstrainedGlobal())
122 else /*not a good track*/
125 if (track->TestFilterBit(fAODfilterBits[0])) {
127 } else if (track->TestFilterBit(fAODfilterBits[1])) {
128 if ((track->GetStatus()&AliVTrack::kITSrefit)==0) {
137 else {/*not a good track*/
142 if (fCutMaxFrShTPCClus > 0) {
143 Double_t frac = Double_t(track->GetTPCnclsS()) / Double_t(track->GetTPCncls());
144 if (frac > fCutMaxFrShTPCClus) {
149 if (fTrackEfficiency < 1) {
150 Double_t r = gRandom->Rndm();
151 if (fTrackEfficiency < r)
155 AliAODTrack *newt = new ((*fTracksOut)[nacc]) AliAODTrack(*track);
156 newt->SetUniqueID(0);
157 newt->ResetBit(TObject::kHasUUID);
158 newt->ResetBit(TObject::kIsReferenced);
160 Bool_t propthistrack = kFALSE;
162 propthistrack = kTRUE;
163 else if (!newt->IsExtrapolatedToEMCAL()) {
165 propthistrack = kTRUE;
166 else if (fAttemptPropMatch && !newt->IsEMCAL())
167 propthistrack = kTRUE;
170 AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(newt,fDist);
174 if (fUseNegativeLabels)
175 label = track->GetLabel();
177 label = TMath::Abs(track->GetLabel());
179 AliDebug(2,Form("Track %d with label==0", iTracks));
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);