3 // Class to make PicoTracks in AOD/ESD events.
5 // Author: S.Aiola, C.Loizides
7 #include <TClonesArray.h>
9 #include "AliAODEvent.h"
10 #include "AliAODTrack.h"
11 #include "AliAnalysisManager.h"
12 #include "AliESDtrack.h"
13 #include "AliESDtrackCuts.h"
14 #include "AliEmcalPicoTrackMaker.h"
16 #include "AliPicoTrack.h"
17 #include "AliVTrack.h"
19 ClassImp(AliEmcalPicoTrackMaker)
21 //________________________________________________________________________
22 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() :
23 AliAnalysisTaskSE("AliEmcalPicoTrackMaker"),
25 fTracksOutName("PicoTracks"),
26 fTracksInName("tracks"),
35 fUseNegativeLabels(kTRUE),
37 fCutMaxFractionSharedTPCClusters(0.4),
43 fAODfilterBits[0] = -1;
44 fAODfilterBits[1] = -1;
47 //________________________________________________________________________
48 AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) :
49 AliAnalysisTaskSE(name),
51 fTracksOutName("PicoTracks"),
52 fTracksInName("tracks"),
61 fUseNegativeLabels(kTRUE),
63 fCutMaxFractionSharedTPCClusters(0.4),
69 fAODfilterBits[0] = -1;
70 fAODfilterBits[1] = -1;
71 fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
74 //________________________________________________________________________
75 AliEmcalPicoTrackMaker::~AliEmcalPicoTrackMaker()
80 //________________________________________________________________________
81 void AliEmcalPicoTrackMaker::UserCreateOutputObjects()
83 // Create my user objects.
85 fTracksOut = new TClonesArray("AliPicoTrack");
86 fTracksOut->SetName(fTracksOutName);
89 //________________________________________________________________________
90 void AliEmcalPicoTrackMaker::UserExec(Option_t *)
92 // Main loop, called for each event.
94 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
96 AliError("Manager zero, returning");
100 // retrieve tracks from input.
102 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
104 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
107 if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
108 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data()));
113 // add tracks to event if not yet there
114 fTracksOut->Delete();
115 if (!(InputEvent()->FindListObject(fTracksOutName))) {
116 InputEvent()->AddObject(fTracksOut);
119 // test if we are in ESD or AOD mode
120 Bool_t esdMode = kTRUE;
121 if (dynamic_cast<AliAODEvent*>(InputEvent())!=0)
125 const Int_t Ntracks = fTracksIn->GetEntriesFast();
126 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
128 AliVTrack *track = static_cast<AliVTrack*>(fTracksIn->At(iTracks));
133 if (track->Pt() > fMaxTrackPt || track->Pt() < fMinTrackPt)
136 if (track->Eta() < fMinTrackEta || track->Eta() > fMaxTrackEta ||
137 track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi)
140 Bool_t isEmc = kFALSE;
143 AliESDtrack *esdtrack = static_cast<AliESDtrack*>(track);
144 if (fESDtrackCuts && !fESDtrackCuts->AcceptTrack(esdtrack))
146 type = esdtrack->GetTRDNchamberdEdx();
147 if (!fIncludeNoITS && (type==2))
149 if (TMath::Abs(esdtrack->GetTrackEtaOnEMCal()) < 0.75 &&
150 esdtrack->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() &&
151 esdtrack->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad())
153 // isEmc = track->IsEMCAL();
155 AliAODTrack *aodtrack = static_cast<AliAODTrack*>(track);
156 if (fAODfilterBits[0] < 0) {
157 if (aodtrack->IsHybridGlobalConstrainedGlobal())
159 else /*not a good track*/
162 if (aodtrack->TestFilterBit(fAODfilterBits[0])) {
164 } else if (aodtrack->TestFilterBit(fAODfilterBits[1])) {
165 if ((aodtrack->GetStatus()&AliESDtrack::kITSrefit)==0) {
174 else {/*not a good track*/
178 if (fCutMaxFractionSharedTPCClusters > 0) {
179 Double_t frac = Double_t(aodtrack->GetTPCnclsS()) / Double_t(aodtrack->GetTPCncls());
180 if (frac > fCutMaxFractionSharedTPCClusters)
183 if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 &&
184 track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() &&
185 track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad())
189 if (fTrackEfficiency < 1) {
190 Double_t r = gRandom->Rndm();
191 if (fTrackEfficiency < r)
197 if (fUseNegativeLabels)
198 label = track->GetLabel();
200 label = TMath::Abs(track->GetLabel());
203 AliDebug(2,Form("Track %d with label==0", iTracks));
206 /*AliPicoTrack *picotrack =*/ new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(),
212 track->GetTrackEtaOnEMCal(),
213 track->GetTrackPhiOnEMCal(),
214 track->GetTrackPtOnEMCal(),