]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/EMCAL/AliEmcalPicoTrackMaker.cxx
Add track propagation (Marta)
[u/mrichter/AliRoot.git] / PWG / EMCAL / AliEmcalPicoTrackMaker.cxx
CommitLineData
980821ba 1// $Id$
680855e5 2//
3// Class to make PicoTracks in AOD/ESD events.
4//
cd231d42 5// Author: S.Aiola, C.Loizides
680855e5 6
7#include <TClonesArray.h>
11d18b51 8#include <TRandom3.h>
a070db7d 9#include "AliAODEvent.h"
680855e5 10#include "AliAODTrack.h"
a070db7d 11#include "AliAnalysisManager.h"
680855e5 12#include "AliESDtrack.h"
13#include "AliESDtrackCuts.h"
cc67ea22 14#include "AliEmcalPicoTrackMaker.h"
680855e5 15#include "AliLog.h"
a070db7d 16#include "AliPicoTrack.h"
17#include "AliVTrack.h"
680855e5 18
19ClassImp(AliEmcalPicoTrackMaker)
20
21//________________________________________________________________________
22AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() :
23 AliAnalysisTaskSE("AliEmcalPicoTrackMaker"),
24 fESDtrackCuts(0),
25 fTracksOutName("PicoTracks"),
26 fTracksInName("tracks"),
9733b37f 27 fMinTrackPt(0),
11d18b51 28 fMaxTrackPt(1000),
d2343e15 29 fMinTrackEta(-10),
30 fMaxTrackEta(10),
9733b37f 31 fMinTrackPhi(-10),
32 fMaxTrackPhi(10),
11d18b51 33 fTrackEfficiency(1),
bb99fbec 34 fIncludeNoITS(kTRUE),
86f2216c 35 fUseNegativeLabels(kTRUE),
7f76e479 36 fIsMC(kFALSE),
69d71b2d 37 fCutMaxFractionSharedTPCClusters(0.4),
680855e5 38 fTracksIn(0),
39 fTracksOut(0)
40{
41 // Constructor.
ab292aef 42
1187666b 43 fAODfilterBits[0] = -1;
44 fAODfilterBits[1] = -1;
680855e5 45}
46
47//________________________________________________________________________
48AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) :
a070db7d 49 AliAnalysisTaskSE(name),
680855e5 50 fESDtrackCuts(0),
51 fTracksOutName("PicoTracks"),
52 fTracksInName("tracks"),
9733b37f 53 fMinTrackPt(0),
11d18b51 54 fMaxTrackPt(1000),
d2343e15 55 fMinTrackEta(-10),
56 fMaxTrackEta(10),
9733b37f 57 fMinTrackPhi(-10),
58 fMaxTrackPhi(10),
11d18b51 59 fTrackEfficiency(1),
bb99fbec 60 fIncludeNoITS(kTRUE),
86f2216c 61 fUseNegativeLabels(kTRUE),
7f76e479 62 fIsMC(kFALSE),
69d71b2d 63 fCutMaxFractionSharedTPCClusters(0.4),
680855e5 64 fTracksIn(0),
65 fTracksOut(0)
66{
67 // Constructor.
68
1187666b 69 fAODfilterBits[0] = -1;
70 fAODfilterBits[1] = -1;
680855e5 71 fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
72}
73
74//________________________________________________________________________
75AliEmcalPicoTrackMaker::~AliEmcalPicoTrackMaker()
76{
a070db7d 77 // Destructor.
680855e5 78}
79
80//________________________________________________________________________
81void AliEmcalPicoTrackMaker::UserCreateOutputObjects()
82{
a070db7d 83 // Create my user objects.
680855e5 84
85 fTracksOut = new TClonesArray("AliPicoTrack");
86 fTracksOut->SetName(fTracksOutName);
87}
88
89//________________________________________________________________________
90void AliEmcalPicoTrackMaker::UserExec(Option_t *)
91{
92 // Main loop, called for each event.
93
94 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
95 if (!am) {
96 AliError("Manager zero, returning");
97 return;
98 }
99
a070db7d 100 // retrieve tracks from input.
e44e8726 101 if (!fTracksIn) {
102 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
103 if (!fTracksIn) {
104 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
105 return;
106 }
107 if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
108 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data()));
109 return;
110 }
a070db7d 111 }
112
113 // add tracks to event if not yet there
71c1dd76 114 fTracksOut->Delete();
c4a9715d 115 if (!(InputEvent()->FindListObject(fTracksOutName))) {
680855e5 116 InputEvent()->AddObject(fTracksOut);
c4a9715d 117 }
c4a9715d 118
a070db7d 119 // test if we are in ESD or AOD mode
120 Bool_t esdMode = kTRUE;
121 if (dynamic_cast<AliAODEvent*>(InputEvent())!=0)
122 esdMode = kFALSE;
123
124 // loop over tracks
125 const Int_t Ntracks = fTracksIn->GetEntriesFast();
680855e5 126 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
85fbcc1d 127
e44e8726 128 AliVTrack *track = static_cast<AliVTrack*>(fTracksIn->At(iTracks));
85fbcc1d 129
a070db7d 130 if (!track)
680855e5 131 continue;
85fbcc1d 132
9733b37f 133 if (track->Pt() > fMaxTrackPt || track->Pt() < fMinTrackPt)
134 continue;
135
136 if (track->Eta() < fMinTrackEta || track->Eta() > fMaxTrackEta ||
137 track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi)
85fbcc1d 138 continue;
11d18b51 139
376d84a3 140 Bool_t isEmc = kFALSE;
92c9ea30 141 Int_t type = -1;
a070db7d 142 if (esdMode) {
92c9ea30 143 AliESDtrack *esdtrack = static_cast<AliESDtrack*>(track);
144 if (fESDtrackCuts && !fESDtrackCuts->AcceptTrack(esdtrack))
145 continue;
146 type = esdtrack->GetTRDNchamberdEdx();
147 if (!fIncludeNoITS && (type==2))
bb99fbec 148 continue;
376d84a3 149 isEmc = track->IsEMCAL();
a070db7d 150 } else {
151 AliAODTrack *aodtrack = static_cast<AliAODTrack*>(track);
1187666b 152 if (fAODfilterBits[0] < 0) {
153 if (aodtrack->IsHybridGlobalConstrainedGlobal())
92c9ea30 154 type = 3;
1187666b 155 else /*not a good track*/
156 continue;
cc67ea22 157 } else {
bb99fbec 158 if (aodtrack->TestFilterBit(fAODfilterBits[0])) {
92c9ea30 159 type = 0;
cc67ea22 160 } else if (aodtrack->TestFilterBit(fAODfilterBits[1])) {
bb99fbec 161 if ((aodtrack->GetStatus()&AliESDtrack::kITSrefit)==0) {
162 if (fIncludeNoITS)
92c9ea30 163 type = 2;
bb99fbec 164 else
165 continue;
cc67ea22 166 } else {
92c9ea30 167 type = 1;
bb99fbec 168 }
169 }
170 else {/*not a good track*/
1187666b 171 continue;
bb99fbec 172 }
1187666b 173 }
69d71b2d 174 if (fCutMaxFractionSharedTPCClusters > 0) {
175 Double_t frac = Double_t(aodtrack->GetTPCnclsS()) / Double_t(aodtrack->GetTPCncls());
176 if (frac > fCutMaxFractionSharedTPCClusters)
177 continue;
178 }
376d84a3 179 if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 &&
3648548f 180 track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() &&
376d84a3 181 track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad())
182 isEmc = kTRUE;
680855e5 183 }
184
11d18b51 185 if (fTrackEfficiency < 1) {
186 Double_t r = gRandom->Rndm();
187 if (fTrackEfficiency < r)
188 continue;
189 }
190
7f76e479 191 Int_t label = 0;
6a20534a 192 if (fIsMC) {
86f2216c 193 if (fUseNegativeLabels)
6a20534a 194 label = track->GetLabel();
86f2216c 195 else
196 label = TMath::Abs(track->GetLabel());
197
3648548f 198 if (label == 0)
5be3857d 199 AliDebug(2,Form("Track %d with label==0", iTracks));
6a20534a 200 }
f660c2d6 201
5cb6a7e6 202 /*AliPicoTrack *picotrack =*/ new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(),
92c9ea30 203 track->Eta(),
204 track->Phi(),
205 track->Charge(),
f660c2d6 206 label,
92c9ea30 207 type,
208 track->GetTrackEtaOnEMCal(),
209 track->GetTrackPhiOnEMCal(),
56bd3193 210 track->GetTrackPtOnEMCal(),
92c9ea30 211 isEmc);
680855e5 212 ++nacc;
213 }
214}