3 // Class to select tracks in MC events.
7 #include "AliEmcalMCTrackSelector.h"
9 #include <TClonesArray.h>
12 #include "AliAnalysisManager.h"
13 #include "AliVEvent.h"
14 #include "AliMCEvent.h"
15 #include "AliVParticle.h"
18 ClassImp(AliEmcalMCTrackSelector)
20 //________________________________________________________________________
21 AliEmcalMCTrackSelector::AliEmcalMCTrackSelector() :
22 AliAnalysisTaskSE("AliEmcalMCTrackSelector"),
23 fTracksOutName("PicoTracks"),
34 //________________________________________________________________________
35 AliEmcalMCTrackSelector::AliEmcalMCTrackSelector(const char *name) :
36 AliAnalysisTaskSE(name),
37 fTracksOutName("PicoTracks"),
48 //________________________________________________________________________
49 AliEmcalMCTrackSelector::~AliEmcalMCTrackSelector()
54 //________________________________________________________________________
55 void AliEmcalMCTrackSelector::UserCreateOutputObjects()
57 // Create my user objects.
59 fTracksOut = new TClonesArray("AliMCParticle");
60 fTracksOut->SetName(fTracksOutName);
62 fTracksMapName = fTracksOutName;
63 fTracksMapName += "_Map";
64 fTracksMap = new TH1I(fTracksMapName, fTracksMapName, 1000, 0, 1);
67 //________________________________________________________________________
68 void AliEmcalMCTrackSelector::UserExec(Option_t *)
70 // Main loop, called for each event.
72 AliMCEvent *mcevent = MCEvent();
73 AliVEvent *event = InputEvent();
76 AliError("Could not retrieve event! Returning");
81 AliError("Could not retrieve MC event! Returning");
86 // add tracks to event if not yet there
87 if (!(event->FindListObject(fTracksOutName)))
88 event->AddObject(fTracksOut);
90 if (!(event->FindListObject(fTracksMapName)))
91 event->AddObject(fTracksMap);
96 // clear container (normally a null operation as the event should clean it already)
99 const Int_t Ntracks = mcevent->GetNumberOfTracks();
100 new (fTracksMap) TH1I(fTracksMapName, fTracksMapName, Ntracks-2, 0, 1); // Ntracks - 2, we use also over- and uner-flow bins
103 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
105 fTracksMap->SetBinContent(iTracks, -1);
107 if (!mcevent->IsPhysicalPrimary(iTracks))
110 AliMCParticle* track = dynamic_cast<AliMCParticle*>(mcevent->GetTrack(iTracks));
115 if (TMath::Abs(track->Eta()) > 1)
118 Int_t pdgCode = track->PdgCode();
119 if (fRejectNK && (pdgCode == 130 || pdgCode == 2112)) continue;
121 if (fChargedMC && track->Charge() == 0) continue;
123 fTracksMap->SetBinContent(iTracks, nacc);
124 new ((*fTracksOut)[nacc]) AliMCParticle(track->Particle(), 0, track->Label());