3 // Class to select tracks in MC events.
7 #include "AliEmcalMCTrackSelector.h"
9 #include <TClonesArray.h>
11 #include "AliAnalysisManager.h"
12 #include "AliVEvent.h"
13 #include "AliMCEvent.h"
14 #include "AliVParticle.h"
17 ClassImp(AliEmcalMCTrackSelector)
19 //________________________________________________________________________
20 AliEmcalMCTrackSelector::AliEmcalMCTrackSelector() :
21 AliAnalysisTaskSE("AliEmcalMCTrackSelector"),
22 fTracksOutName("PicoTracks"),
30 //________________________________________________________________________
31 AliEmcalMCTrackSelector::AliEmcalMCTrackSelector(const char *name) :
32 AliAnalysisTaskSE(name),
33 fTracksOutName("PicoTracks"),
41 //________________________________________________________________________
42 AliEmcalMCTrackSelector::~AliEmcalMCTrackSelector()
47 //________________________________________________________________________
48 void AliEmcalMCTrackSelector::UserCreateOutputObjects()
50 // Create my user objects.
52 fTracksOut = new TClonesArray("AliMCParticle");
53 fTracksOut->SetName(fTracksOutName);
56 //________________________________________________________________________
57 void AliEmcalMCTrackSelector::UserExec(Option_t *)
59 // Main loop, called for each event.
61 AliMCEvent *mcevent = MCEvent();
62 AliVEvent *event = InputEvent();
65 AliError("Could not retrieve event! Returning");
70 AliError("Could not retrieve MC event! Returning");
74 // add tracks to event if not yet there
75 if (!(event->FindListObject(fTracksOutName))) {
76 event->AddObject(fTracksOut);
79 // clear container (normally a null operation as the event should clean it already)
83 const Int_t Ntracks = mcevent->GetNumberOfTracks();
84 for (Int_t iTracks = 0, nacc = 0; iTracks < Ntracks; ++iTracks) {
86 if (!mcevent->IsPhysicalPrimary(iTracks))
89 AliMCParticle* track = dynamic_cast<AliMCParticle*>(mcevent->GetTrack(iTracks));
94 if (TMath::Abs(track->Eta()) > 1)
97 Int_t pdgCode = track->PdgCode();
98 if (fRejectNK && (pdgCode == 130 || pdgCode == 2112)) continue;
100 if (fChargedMC && track->Charge() == 0) continue;
102 new ((*fTracksOut)[nacc]) AliMCParticle(track->Particle(), 0, track->Label());