]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/EMCAL/AliEmcalPicoTrackMaker.cxx
Merge branch 'feature-movesplit'
[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"
eb556d0c 18#include "AliAODMCParticle.h"
893907a5 19#include "AliNamedArrayI.h"
680855e5 20
21ClassImp(AliEmcalPicoTrackMaker)
22
23//________________________________________________________________________
24AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker() :
25 AliAnalysisTaskSE("AliEmcalPicoTrackMaker"),
680855e5 26 fTracksOutName("PicoTracks"),
27 fTracksInName("tracks"),
eb556d0c 28 fMCParticlesName("mcparticles"),
9733b37f 29 fMinTrackPt(0),
11d18b51 30 fMaxTrackPt(1000),
d2343e15 31 fMinTrackEta(-10),
32 fMaxTrackEta(10),
9733b37f 33 fMinTrackPhi(-10),
34 fMaxTrackPhi(10),
11d18b51 35 fTrackEfficiency(1),
eb556d0c 36 fCopyMCFlag(kFALSE),
680855e5 37 fTracksIn(0),
eb556d0c 38 fTracksOut(0),
39 fMCParticles(0),
893907a5 40 fMCParticlesMap(0),
eb556d0c 41 fInit(kFALSE)
680855e5 42{
43 // Constructor.
ab292aef 44
1187666b 45 fAODfilterBits[0] = -1;
46 fAODfilterBits[1] = -1;
680855e5 47}
48
49//________________________________________________________________________
50AliEmcalPicoTrackMaker::AliEmcalPicoTrackMaker(const char *name) :
a070db7d 51 AliAnalysisTaskSE(name),
680855e5 52 fTracksOutName("PicoTracks"),
53 fTracksInName("tracks"),
eb556d0c 54 fMCParticlesName("mcparticles"),
9733b37f 55 fMinTrackPt(0),
11d18b51 56 fMaxTrackPt(1000),
d2343e15 57 fMinTrackEta(-10),
58 fMaxTrackEta(10),
9733b37f 59 fMinTrackPhi(-10),
60 fMaxTrackPhi(10),
11d18b51 61 fTrackEfficiency(1),
eb556d0c 62 fCopyMCFlag(kFALSE),
680855e5 63 fTracksIn(0),
eb556d0c 64 fTracksOut(0),
65 fMCParticles(0),
893907a5 66 fMCParticlesMap(0),
eb556d0c 67 fInit(kFALSE)
680855e5 68{
69 // Constructor.
70
1187666b 71 fAODfilterBits[0] = -1;
72 fAODfilterBits[1] = -1;
680855e5 73 fBranchNames = "ESD:AliESDHeader.,AliESDRun.,SPDVertex.,Tracks";
74}
75
76//________________________________________________________________________
77AliEmcalPicoTrackMaker::~AliEmcalPicoTrackMaker()
78{
a070db7d 79 // Destructor.
680855e5 80}
81
82//________________________________________________________________________
83void AliEmcalPicoTrackMaker::UserCreateOutputObjects()
84{
a070db7d 85 // Create my user objects.
680855e5 86}
87
88//________________________________________________________________________
89void AliEmcalPicoTrackMaker::UserExec(Option_t *)
90{
91 // Main loop, called for each event.
92
eb556d0c 93 if (!fInit) {
e44e8726 94 fTracksIn = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksInName));
95 if (!fTracksIn) {
96 AliError(Form("Could not retrieve tracks %s!", fTracksInName.Data()));
97 return;
98 }
99 if (!fTracksIn->GetClass()->GetBaseClass("AliVParticle")) {
100 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fTracksInName.Data()));
101 return;
102 }
eb556d0c 103
104 fTracksOut = new TClonesArray("AliPicoTrack");
105 fTracksOut->SetName(fTracksOutName);
106
107 // add tracks to event if not yet there
108 if (InputEvent()->FindListObject(fTracksOutName)) {
109 AliFatal(Form("Object %s already present in the event!",fTracksOutName.Data()));
110 }
111 else {
112 InputEvent()->AddObject(fTracksOut);
113 }
114
115 if (fCopyMCFlag) {
116 fMCParticles = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fMCParticlesName));
117 if (!fMCParticles) {
118 AliError(Form("Could not retrieve MC particles %s!", fMCParticlesName.Data()));
119 }
120 if (!fMCParticles->GetClass()->GetBaseClass("AliVParticle")) {
121 AliError(Form("%s: Collection %s does not contain AliVParticle objects!", GetName(), fMCParticlesName.Data()));
122 fMCParticles = 0;
123 }
893907a5 124
125 TString mapName(fMCParticlesName);
126 mapName += "_Map";
127 fMCParticlesMap = dynamic_cast<AliNamedArrayI*>(InputEvent()->FindListObject(mapName));
eb556d0c 128 }
129
130 fInit = kTRUE;
a070db7d 131 }
132
71c1dd76 133 fTracksOut->Delete();
c4a9715d 134
a070db7d 135 // loop over tracks
136 const Int_t Ntracks = fTracksIn->GetEntriesFast();
680855e5 137 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
85fbcc1d 138
e44e8726 139 AliVTrack *track = static_cast<AliVTrack*>(fTracksIn->At(iTracks));
85fbcc1d 140
a070db7d 141 if (!track)
680855e5 142 continue;
85fbcc1d 143
9733b37f 144 if (track->Pt() > fMaxTrackPt || track->Pt() < fMinTrackPt)
145 continue;
146
147 if (track->Eta() < fMinTrackEta || track->Eta() > fMaxTrackEta ||
148 track->Phi() < fMinTrackPhi || track->Phi() > fMaxTrackPhi)
85fbcc1d 149 continue;
11d18b51 150
11d18b51 151 if (fTrackEfficiency < 1) {
152 Double_t r = gRandom->Rndm();
153 if (fTrackEfficiency < r)
154 continue;
155 }
156
b3bef4aa 157 Bool_t isEmc = kFALSE;
158 if (TMath::Abs(track->GetTrackEtaOnEMCal()) < 0.75 &&
159 track->GetTrackPhiOnEMCal() > 70 * TMath::DegToRad() &&
160 track->GetTrackPhiOnEMCal() < 190 * TMath::DegToRad())
161 isEmc = kTRUE;
162
33a8056d 163 AliPicoTrack *picotrack = new ((*fTracksOut)[nacc]) AliPicoTrack(track->Pt(),
dac83212 164 track->Eta(),
165 track->Phi(),
166 track->Charge(),
167 track->GetLabel(),
168 AliPicoTrack::GetTrackType(track),
169 track->GetTrackEtaOnEMCal(),
170 track->GetTrackPhiOnEMCal(),
171 track->GetTrackPtOnEMCal(),
172 isEmc);
33a8056d 173 picotrack->SetTrack(track);
eb556d0c 174
175 if (fCopyMCFlag && track->GetLabel() != 0) {
176 AliVParticle *mcpart = GetMCParticle(TMath::Abs(track->GetLabel()));
177 if (mcpart) {
178 UInt_t mcFlag = mcpart->GetFlag();
179 picotrack->SetFlag(mcFlag);
180 Short_t genIndex = mcpart->GetGeneratorIndex();
181 picotrack->SetGeneratorIndex(genIndex);
182 }
183 }
184
680855e5 185 ++nacc;
186 }
187}
eb556d0c 188
189//________________________________________________________________________
190AliVParticle* AliEmcalPicoTrackMaker::GetMCParticle(Int_t label)
191{
192 if (!fMCParticles) return 0;
893907a5 193 Int_t index = label;
194 if (fMCParticlesMap) index = fMCParticlesMap->At(label);
195 if (index < 0 || index >= fMCParticles->GetEntriesFast()) return 0;
196 AliVParticle *part = static_cast<AliVParticle*>(fMCParticles->At(index));
eb556d0c 197 return part;
198}