]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/EMCAL/AliEmcalMCTrackSelector.cxx
Changes from Salvatore
[u/mrichter/AliRoot.git] / PWG / EMCAL / AliEmcalMCTrackSelector.cxx
CommitLineData
578adbef 1// $Id$
2//
3// Class to select tracks in MC events.
4//
5// Author: S. Aiola
6
7#include "AliEmcalMCTrackSelector.h"
8
9#include <TClonesArray.h>
10
5be3857d 11#include "AliNamedArrayI.h"
578adbef 12#include "AliAnalysisManager.h"
09230f47 13#include "AliVEventHandler.h"
578adbef 14#include "AliVEvent.h"
15#include "AliMCEvent.h"
16#include "AliVParticle.h"
09230f47 17#include "AliAODMCParticle.h"
18#include "AliMCParticle.h"
578adbef 19#include "AliLog.h"
20
21ClassImp(AliEmcalMCTrackSelector)
22
23//________________________________________________________________________
24AliEmcalMCTrackSelector::AliEmcalMCTrackSelector() :
25 AliAnalysisTaskSE("AliEmcalMCTrackSelector"),
26 fTracksOutName("PicoTracks"),
27 fRejectNK(kFALSE),
28 fChargedMC(kFALSE),
1f12855f 29 fInit(kFALSE),
30 fTracksMapName(""),
09230f47 31 fEsdMode(kFALSE),
32 fTracksIn(0),
1f12855f 33 fTracksOut(0),
34 fTracksMap(0)
578adbef 35{
36 // Constructor.
37}
38
39//________________________________________________________________________
40AliEmcalMCTrackSelector::AliEmcalMCTrackSelector(const char *name) :
41 AliAnalysisTaskSE(name),
42 fTracksOutName("PicoTracks"),
43 fRejectNK(kFALSE),
44 fChargedMC(kFALSE),
1f12855f 45 fInit(kFALSE),
46 fTracksMapName(""),
09230f47 47 fEsdMode(kFALSE),
48 fTracksIn(0),
1f12855f 49 fTracksOut(0),
50 fTracksMap(0)
578adbef 51{
52 // Constructor.
53}
54
55//________________________________________________________________________
56AliEmcalMCTrackSelector::~AliEmcalMCTrackSelector()
57{
58 // Destructor.
59}
60
61//________________________________________________________________________
62void AliEmcalMCTrackSelector::UserCreateOutputObjects()
63{
64 // Create my user objects.
65
09230f47 66 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
67 if (!mgr) {
68 AliFatal("No analysis manager!");
69 return;
70 }
71
72 AliVEventHandler *handler = mgr->GetInputEventHandler();
73 if (!handler) {
74 AliFatal("No input handler!");
75 return;
76 }
77
78 if (handler->InheritsFrom("AliESDInputHandler"))
79 fEsdMode = kTRUE;
80 else
81 fEsdMode = kFALSE;
82
83 if (fEsdMode)
84 fTracksOut = new TClonesArray("AliMCParticle");
85 else
86 fTracksOut = new TClonesArray("AliAODMCParticle");
578adbef 87 fTracksOut->SetName(fTracksOutName);
1f12855f 88
89 fTracksMapName = fTracksOutName;
90 fTracksMapName += "_Map";
5be3857d 91 fTracksMap = new AliNamedArrayI(fTracksMapName, 9999);
578adbef 92}
93
94//________________________________________________________________________
95void AliEmcalMCTrackSelector::UserExec(Option_t *)
96{
97 // Main loop, called for each event.
09230f47 98 if (!InputEvent()) {
578adbef 99 AliError("Could not retrieve event! Returning");
100 return;
101 }
102
09230f47 103 if (fEsdMode && !MCEvent()) {
578adbef 104 AliError("Could not retrieve MC event! Returning");
105 return;
106 }
107
1f12855f 108 if (!fInit) {
109 // add tracks to event if not yet there
09230f47 110 if (!(InputEvent()->FindListObject(fTracksOutName)))
111 InputEvent()->AddObject(fTracksOut);
112
113 if (!(InputEvent()->FindListObject(fTracksMapName)))
114 InputEvent()->AddObject(fTracksMap);
115
116 if (!fEsdMode) {
117 fTracksIn = static_cast<TClonesArray*>(InputEvent()->FindListObject(AliAODMCParticle::StdBranchName()));
118 if (!fTracksIn) {
119 AliError("Could not retrieve AOD MC particles! Returning");
120 return;
121 }
122 TClass *cl = fTracksIn->GetClass();
123 if (!cl->GetBaseClass("AliAODMCParticle")) {
124 AliError(Form("%s: Collection %s does not contain AliAODMCParticle!", GetName(), AliAODMCParticle::StdBranchName()));
125 fTracksIn = 0;
126 return;
127 }
128 }
1f12855f 129
130 fInit = kTRUE;
578adbef 131 }
132
133 // clear container (normally a null operation as the event should clean it already)
1f12855f 134 fTracksOut->Delete();
5be3857d 135 fTracksMap->Clear();
7f76e479 136
09230f47 137 const Int_t Ntracks = GetNumberOfTracks();
7f76e479 138
139 // loop over tracks
578adbef 140 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
141
5be3857d 142 fTracksMap->AddAt(-1, iTracks);
1f12855f 143
09230f47 144 AliVParticle* track = GetTrack(iTracks);
578adbef 145
146 if (!track)
147 continue;
148
149 if (TMath::Abs(track->Eta()) > 1)
150 continue;
151
152 Int_t pdgCode = track->PdgCode();
153 if (fRejectNK && (pdgCode == 130 || pdgCode == 2112)) continue;
154
155 if (fChargedMC && track->Charge() == 0) continue;
1f12855f 156
5be3857d 157 fTracksMap->AddAt(nacc, iTracks);
09230f47 158
159 AddTrack(track, nacc);
1f12855f 160
578adbef 161 ++nacc;
162 }
163}
09230f47 164
165//________________________________________________________________________
166Int_t AliEmcalMCTrackSelector::GetNumberOfTracks() const
167{
168 if (fEsdMode)
169 return MCEvent()->GetNumberOfTracks();
170 else
171 return fTracksIn->GetEntries();
172}
173
174//________________________________________________________________________
175AliVParticle* AliEmcalMCTrackSelector::GetTrack(Int_t i)
176{
177 if (fEsdMode) {
178 if (!MCEvent()->IsPhysicalPrimary(i))
179 return 0;
180
181 return MCEvent()->GetTrack(i);
182 }
183 else {
184 AliAODMCParticle *part = static_cast<AliAODMCParticle*>(fTracksIn->At(i));
185 if (!part->IsPhysicalPrimary())
186 return 0;
187
188 return part;
189 }
190}
191
192//________________________________________________________________________
193void AliEmcalMCTrackSelector::AddTrack(AliVParticle *track, Int_t nacc)
194{
195 if (fEsdMode) {
196 AliMCParticle *part = static_cast<AliMCParticle*>(track);
197 new ((*fTracksOut)[nacc]) AliMCParticle(part->Particle(), 0, part->Label());
198 }
199 else {
200 AliAODMCParticle *part = static_cast<AliAODMCParticle*>(track);
201 new ((*fTracksOut)[nacc]) AliAODMCParticle(*part);
202 }
203}